diff --git a/.github/workflows/cd-prod.yaml b/.github/workflows/cd-prod.yaml new file mode 100644 index 0000000..4f3e00c --- /dev/null +++ b/.github/workflows/cd-prod.yaml @@ -0,0 +1,36 @@ +name: CD prod + +on: + push: + branches: [ "master"] + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GHCR_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: . + platforms: linux/amd64 + file: ./Dockerfile + push: true + tags: ghcr.io/shapeblock/operator:${{ github.sha }} + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/Dockerfile.kubectl b/Dockerfile.kubectl deleted file mode 100644 index 9169af1..0000000 --- a/Dockerfile.kubectl +++ /dev/null @@ -1,25 +0,0 @@ -FROM bitnami/kubectl:1.21 - -RUN wget -qO /opt/bitnami/kubectl/bin/jq https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 && chmod +x /opt/bitnami/kubectl/bin/jq -RUN wget -qO /opt/bitnami/kubectl/bin/yj https://github.com/sclevine/yj/releases/download/v5.0.0/yj-linux && chmod +x /opt/bitnami/kubectl/bin/yj -RUN wget https://get.helm.sh/helm-v3.5.4-linux-amd64.tar.gz -qO - | tar xz --strip-components=1 -C /opt/bitnami/kubectl/bin && chmod +x /opt/bitnami/kubectl/bin/helm && mkdir -p /opt/bitnami/helm/{config,cache} - - -RUN mkdir /opt/bitnami/project - -COPY install-deps.sh /opt/bitnami/project/ - -ENV HELM_CONFIG_HOME=/opt/bitnami/helm/config -ENV HELM_CACHE_HOME=/opt/bitnami/helm/cache -ENV HELM_DRIVER=configmap - -RUN helm repo add bitnami https://charts.bitnami.com/bitnami -RUN helm repo add twuni https://helm.twun.io -RUN helm repo add jetstack https://charts.jetstack.io -RUN helm repo add fluxcd https://charts.fluxcd.io -RUN helm repo add raphael https://raphaelmonrouzeau.github.io/charts/repository/ - -RUN helm repo update -WORKDIR /opt/bitnami/project -ENTRYPOINT [] -CMD [] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d2dd0d3 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/build-kctl.sh b/build-kctl.sh deleted file mode 100755 index 483a06a..0000000 --- a/build-kctl.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -x -version="0.0.9" -docker build --file Dockerfile.kubectl -t shapeblock/sb-operator-init:${version} . -docker push shapeblock/sb-operator-init:${version} diff --git a/cert-issuer.yml b/cert-issuer.yml deleted file mode 100644 index f10bcbc..0000000 --- a/cert-issuer.yml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cert-manager.io/v1 -kind: ClusterIssuer -metadata: - name: letsencrypt-prod -spec: - acme: - email: - server: https://acme-v02.api.letsencrypt.org/directory - privateKeySecretRef: - name: letsencrypt-secret-prod - solvers: - - http01: - ingress: - class: nginx diff --git a/helmrelease.yaml b/helmrelease.yaml deleted file mode 100644 index 0995f13..0000000 --- a/helmrelease.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: helm.fluxcd.io/v1 -kind: HelmRelease -metadata: - name: "{name}" - labels: - shapeblock.com/app-uuid: "{app_uuid}" -spec: - chart: - name: "{chart_name}" - repository: "{chart_repo}" - version: "{chart_version}" diff --git a/install-deps.sh b/install-deps.sh deleted file mode 100755 index ce30983..0000000 --- a/install-deps.sh +++ /dev/null @@ -1,128 +0,0 @@ -#!/bin/bash -x - -# TODO -# 1. Send status after every step to SB. - optional -# 2. Move DNS to SB. - done -# 3. Have temp files for everything. - optional -# 4. Move this entire op to a python script. - optional - -if [ -n "$INSTALLED" ]; then - exit 0 -fi - -# Flux helm operator -kubectl create namespace flux --dry-run=client -o yaml | kubectl apply -f - -kubectl apply -f https://raw.githubusercontent.com/fluxcd/helm-operator/v${FLUX_HELM_OPERATOR_VERSION}/deploy/crds.yaml -helm upgrade -i helm-operator fluxcd/helm-operator --version="${FLUX_HELM_OPERATOR_VERSION}" --set helm.versions=v3 --set rbac.create=true -n flux --wait - -# nginx ingress -kubectl create namespace nginx-ingress --dry-run=client -o yaml | kubectl apply -f - -helm upgrade --install nginx-ingress bitnami/nginx-ingress-controller --version="${NGINX_INGRESS_VERSION}" -n nginx-ingress --wait - -# both these steps should be ideally moved to cloud. -# set sb cloud A record - -ingress_ip=$(kubectl get svc nginx-ingress-nginx-ingress-controller -n nginx-ingress -o yaml | yj | jq -r '.status.loadBalancer.ingress[0].ip') - -curl --header "Content-Type: application/json" --request POST --data "$ingress_ip" $SB_URL/clusters/$CLUSTER_ID/ingress-info - -# cert manager -kubectl create namespace cert-manager --dry-run=client -o yaml | kubectl apply -f - -helm upgrade --install cert-manager jetstack/cert-manager --version="${CERT_MANAGER_VERSION}" --set installCRDs=true -n cert-manager --wait - -# cert issuer -cat > cert-issuer.yml << EOF -apiVersion: cert-manager.io/v1 -kind: ClusterIssuer -metadata: - name: letsencrypt-prod -spec: - acme: - email: $LETSENCRYPT_EMAIL - server: https://acme-v02.api.letsencrypt.org/directory - privateKeySecretRef: - name: letsencrypt-secret-prod - solvers: - - http01: - ingress: - class: nginx -EOF -kubectl apply -f cert-issuer.yml - -# kpack -kubectl apply -f https://github.com/pivotal/kpack/releases/download/v${KPACK_VERSION}/release-${KPACK_VERSION}.yaml - -# cluster stack -cat > stack.yml < store.yml < /tmp/nfs-values.yml << EOF -persistence: - enabled: true - size: $NFS_SIZE -EOF - -helm upgrade --install nfs-server raphael/nfs-server-provisioner --version="${NFS_VERSION}" --values=/tmp/nfs-values.yml -n default --wait - -# registry -cat > /tmp/registry-values.yml << EOF -persistence: - enabled: true - size: $REGISTRY_SIZE -ingress: - enabled: true - hosts: - - $REGISTRY_URL - tls: - - secretName: registry-tls - hosts: - - $REGISTRY_URL - annotations: - kubernetes.io/ingress.class: nginx - cert-manager.io/cluster-issuer: letsencrypt-prod - nginx.ingress.kubernetes.io/proxy-body-size: 0 -secrets: - htpasswd: | - $REGISTRY_USERNAME:$REGISTRY_PASSWORD -EOF -helm upgrade --install docker-registry twuni/docker-registry --version="${CONTAINER_REGISTRY_VERSION}" --values=/tmp/registry-values.yml -n default --wait - -# add registry creds -cat > /tmp/dockerconfig.json << EOF -{ - "auths": { - "$REGISTRY_URL": { - "auth": "$REGISTRY_CREDENTIALS" - } - } -} -EOF -kubectl get secret registry-creds -n default || kubectl create secret generic registry-creds --from-file=.dockerconfigjson=/tmp/dockerconfig.json --type=kubernetes.io/dockerconfigjson -n default diff --git a/samples/application-sample.yaml b/samples/application-sample.yaml deleted file mode 100644 index 2970981..0000000 --- a/samples/application-sample.yaml +++ /dev/null @@ -1,63 +0,0 @@ -apiVersion: dev.shapeblock.com/v1alpha1 -kind: Application -metadata: - name: d9-01 - namespace: drupal-9 -spec: - # Add fields here - tag: registry.little-bird-ae3c.shapeblock.cloud/drupal-9/d9-01 - git: - repo: https://github.com/badri/d9-buildpack.git - ref: 9122062360428660f565920dad54f02e47e16446 - chart: - repo: https://shapeblock.github.io - name: drupal - version: "0.4.1" - values: | - autoscaling: - enabled: false - backup: - enabled: false - clusterDomain: little-bird-ae3c.shapeblock.cloud - docroot: web - elasticsearch: - enabled: false - imagePullSecrets: - - name: registry-creds - mailhog: - enabled: false - mariadb: - db: - name: drupal - password: drupal - user: drupal - master: - persistence: - size: 2G - volumePermissions: - enabled: true - memcached: - enabled: false - mounts: - public-files: - csiDriverName: null - enabled: true - mountPath: sites/default/files - storage: 1G - storageClassName: nfs - nginx: - basicauth: - enabled: false - image: bitnami/nginx:1.19 - php: - image: registry.little-bird-ae3c.shapeblock.cloud/drupal-9/d9-01 - referenceData: - enabled: false - replicas: 1 - shell: - enabled: false - ssl: - enabled: true - varnish: - enabled: false - diff --git a/samples/helm.yaml b/samples/helm.yaml deleted file mode 100644 index 9be47ea..0000000 --- a/samples/helm.yaml +++ /dev/null @@ -1,58 +0,0 @@ -apiVersion: helm.fluxcd.io/v1 -kind: HelmRelease -metadata: - name: d9-01 - namespace: drupal-9 -spec: - chart: - name: drupal - repository: https://shapeblock.github.io - values: - autoscaling: - enabled: false - backup: - enabled: false - clusterDomain: little-bird-ae3c.shapeblock.cloud - docroot: web - elasticsearch: - enabled: false - imagePullSecrets: - - name: registry-creds - mailhog: - enabled: false - mariadb: - db: - name: drupal - password: drupal - user: drupal - master: - persistence: - size: 2G - volumePermissions: - enabled: true - memcached: - enabled: false - mounts: - public-files: - csiDriverName: null - enabled: true - mountPath: sites/default/files - storage: 1G - storageClassName: nfs - nginx: - basicauth: - enabled: false - image: bitnami/nginx:1.19 - php: - image: registry.little-bird-ae3c.shapeblock.cloud/drupal-9/d9-01:b2.20210920.042236 - referenceData: - enabled: false - replicas: 1 - shell: - enabled: false - ssl: - enabled: true - varnish: - enabled: false - version: 0.4.1 - diff --git a/samples/kubectl-pod.yaml b/samples/kubectl-pod.yaml deleted file mode 100644 index 27a5122..0000000 --- a/samples/kubectl-pod.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: kubectl -spec: - serviceAccountName: sb-admin - containers: - - name: kubectl-container - image: shapeblock/kubectl - command: ["kubectl", "get", "pods"] - restartPolicy: OnFailure \ No newline at end of file diff --git a/samples/project-sample.yaml b/samples/project-sample.yaml deleted file mode 100644 index dca36b5..0000000 --- a/samples/project-sample.yaml +++ /dev/null @@ -1,36 +0,0 @@ ---- -apiVersion: dev.shapeblock.com/v1alpha1 -kind: Project -metadata: - name: drupal-9 -spec: - name: Drupal 9 - description: Testing Drupal 9 webapp. ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: drupal-9 - namespace: drupal-9 -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: admin -subjects: -- kind: ServiceAccount - name: drupal-9 - namespace: drupal-9 ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: drupal-9-kpack - namespace: drupal-9 -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: kpack-controller-admin -subjects: -- kind: ServiceAccount - name: drupal-9 - namespace: drupal-9 diff --git a/shapeblock-0.0.9.yaml b/shapeblock-0.0.9.yaml deleted file mode 100644 index b92a7b8..0000000 --- a/shapeblock-0.0.9.yaml +++ /dev/null @@ -1,219 +0,0 @@ ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - name: applications.dev.shapeblock.com -spec: - group: dev.shapeblock.com - names: - kind: Application - listKind: ApplicationList - plural: applications - singular: application - scope: Namespaced - versions: - - name: v1alpha1 - schema: - openAPIV3Schema: - description: Application is the Schema for the applications API - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: ApplicationSpec defines the desired state of Application - properties: - buildConfig: - properties: - clusterStack: - type: string - clusterStore: - type: string - type: object - chart: - properties: - name: - type: string - repo: - type: string - values: - type: string - version: - type: string - type: object - git: - properties: - ref: - type: string - repo: - type: string - type: object - serviceAccount: - type: string - tag: - type: string - type: object - status: - description: ApplicationStatus defines the observed state of Application - properties: - deployed: - description: 'INSERT ADDITIONAL STATUS FIELD - define observed state - of cluster Important: Run "make" to regenerate code after modifying - this file' - type: boolean - image: - type: string - ref: - type: string - type: object - type: object - served: true - storage: true - subresources: - status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - name: projects.dev.shapeblock.com -spec: - group: dev.shapeblock.com - names: - kind: Project - listKind: ProjectList - plural: projects - singular: project - scope: Cluster - versions: - - name: v1alpha1 - schema: - openAPIV3Schema: - type: object - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - properties: - name: - type: string - description: The human readable name of the project. - description: - type: string - description: What this project is about. - type: object - served: true - storage: true - subresources: - status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: sb-admin - namespace: default ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: sb-admin -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: cluster-admin -subjects: -- kind: ServiceAccount - name: sb-admin - namespace: default ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: sb-operator -spec: - replicas: 1 - strategy: - type: Recreate - selector: - matchLabels: - application: sb-operator - template: - metadata: - labels: - application: sb-operator - spec: - serviceAccountName: sb-admin - initContainers: - - name: kubectl-container - image: shapeblock/sb-operator-init:0.0.9 - command: ["bash","/opt/bitnami/project/install-deps.sh"] - imagePullPolicy: Always - env: - - name: FLUX_HELM_OPERATOR_VERSION - value: "1.4.0" - - name: NGINX_INGRESS_VERSION - value: "7.6.19" - - name: CLUSTER_NAME - value: "little-bird-ae3c" - - name: CERT_MANAGER_VERSION - value: "v1.5.2" - - name: KPACK_VERSION - value: "0.3.1" - - name: NFS_VERSION - value: "1.3.0" - - name: CONTAINER_REGISTRY_VERSION - value: "1.13.0" - - name: NFS_SIZE - value: "10Gi" - - name: REGISTRY_SIZE - value: "10Gi" - - name: REGISTRY_URL - value: "registry.little-bird-ae3c.shapeblock.cloud" - - name: REGISTRY_PASSWORD - value: "$2a$12$Y/sjbRybogEU6zZlgDgW2OnHrcTJbX8EK41x2RV0tLN.EIcIsdvRi" - - name: REGISTRY_USERNAME - value: "little-bird-ae3c-admin" - - name: REGISTRY_CREDENTIALS - value: "bGl0dGxlLWJpcmQtYWUzYy1hZG1pbjplQj9ydEs+akBpTGRfVSs1R3k5PTw8UDUyRzM=" - - name: LETSENCRYPT_EMAIL - value: lakshmi@lakshminp.com - - name: ITERATION - value: "32" - - name: SB_URL - value: "http://localhost:8000" - - name: CLUSTER_ID - value: "" - containers: - - name: sb-operator - image: shapeblock/sb-operator:0.0.9 - imagePullPolicy: Always