├── README.md ├── app-of-apps ├── apps │ ├── kustomization.yaml │ ├── pricelist-config.yaml │ ├── pricelist-database.yaml │ └── pricelist-frontend.yaml ├── manifests │ ├── pricelist-config │ │ ├── kustomization.yaml │ │ ├── pricelist-config-ns.yaml │ │ ├── pricelist-config-rb.yaml │ │ └── pricelist-config-sa.yaml │ └── pricelist-frontend │ │ ├── kustomization.yaml │ │ ├── pricelist-deploy.yaml │ │ ├── pricelist-ingress.yaml │ │ ├── pricelist-job.yaml │ │ └── pricelist-svc.yaml └── pricelist-app.yaml ├── applicationsets ├── cluster-generator │ ├── appset-all-clusters-bgd.yaml │ ├── appset-bgd.yaml │ ├── base │ │ ├── bgd-deployment.yaml │ │ ├── bgd-namespace.yaml │ │ ├── bgd-route.yaml │ │ ├── bgd-svc.yaml │ │ └── kustomization.yaml │ └── overlays │ │ └── dev │ │ ├── bgd-deployment.yaml │ │ └── kustomization.yaml ├── git-dir-generator │ ├── apps │ │ ├── pricelist-config │ │ │ ├── kustomization.yaml │ │ │ ├── pricelist-config-ns.yaml │ │ │ └── pricelist-config-rb.yaml │ │ ├── pricelist-db │ │ │ ├── Chart.yaml │ │ │ └── values.yaml │ │ └── pricelist-frontend │ │ │ ├── kustomization.yaml │ │ │ ├── pricelist-deploy.yaml │ │ │ ├── pricelist-job.yaml │ │ │ └── pricelist-svc.yaml │ └── appset-pricelist.yaml ├── git-generator │ ├── appset-bgd-yamlconfig.yaml │ ├── appset-bgd.yaml │ ├── base │ │ ├── bgd-deployment.yaml │ │ ├── bgd-namespace.yaml │ │ ├── bgd-route.yaml │ │ ├── bgd-svc.yaml │ │ └── kustomization.yaml │ ├── cluster-config │ │ ├── cluster-yaml │ │ │ └── config.yaml │ │ ├── cluster1 │ │ │ └── config.json │ │ ├── cluster2 │ │ │ └── config.json │ │ └── cluster3 │ │ │ └── config.json │ └── overlays │ │ ├── cluster-yaml │ │ ├── bgd-deployment.yaml │ │ └── kustomization.yaml │ │ ├── cluster1 │ │ ├── bgd-deployment.yaml │ │ └── kustomization.yaml │ │ ├── cluster2 │ │ ├── bgd-deployment.yaml │ │ └── kustomization.yaml │ │ └── cluster3 │ │ ├── bgd-deployment.yaml │ │ └── kustomization.yaml ├── list-generator │ ├── appset-bgd-0.1.yaml │ ├── appset-bgd-0.2-ocp.yaml │ ├── appset-bgd-0.2.yaml │ ├── v0.1 │ │ ├── base │ │ │ ├── bgd-deployment.yaml │ │ │ ├── bgd-namespace.yaml │ │ │ ├── bgd-route.yaml │ │ │ ├── bgd-svc.yaml │ │ │ └── kustomization.yaml │ │ └── overlays │ │ │ ├── cluster1 │ │ │ ├── bgd-deployment.yaml │ │ │ └── kustomization.yaml │ │ │ ├── cluster2 │ │ │ ├── bgd-deployment.yaml │ │ │ └── kustomization.yaml │ │ │ └── cluster3 │ │ │ ├── bgd-deployment.yaml │ │ │ └── kustomization.yaml │ └── v0.2 │ │ ├── k8s │ │ ├── base │ │ │ ├── bgd-deployment.yaml │ │ │ ├── bgd-ing.yaml │ │ │ ├── bgd-svc.yaml │ │ │ └── kustomization.yaml │ │ └── overlays │ │ │ ├── blue │ │ │ ├── bgd-deployment.yaml │ │ │ ├── bgd-ing.yaml │ │ │ ├── bgd-namespace.yaml │ │ │ └── kustomization.yaml │ │ │ └── green │ │ │ ├── bgd-deployment.yaml │ │ │ ├── bgd-ing.yaml │ │ │ ├── bgd-namespace.yaml │ │ │ └── kustomization.yaml │ │ └── ocp │ │ ├── base │ │ ├── bgd-deployment.yaml │ │ ├── bgd-route.yaml │ │ ├── bgd-svc.yaml │ │ └── kustomization.yaml │ │ └── overlays │ │ ├── blue │ │ ├── bgd-deployment.yaml │ │ ├── bgd-namespace.yaml │ │ ├── bgd-route.yaml │ │ └── kustomization.yaml │ │ └── green │ │ ├── bgd-deployment.yaml │ │ ├── bgd-namespace.yaml │ │ ├── bgd-route.yaml │ │ └── kustomization.yaml ├── matrix-generator │ └── appset-matrix.yaml └── progressivesync │ ├── apps │ ├── pricelist-config │ │ ├── kustomization.yaml │ │ ├── pricelist-config-job.yaml │ │ ├── pricelist-config-ns.yaml │ │ └── pricelist-config-rb.yaml │ ├── pricelist-db │ │ ├── Chart.yaml │ │ └── values.yaml │ └── pricelist-frontend │ │ ├── kustomization.yaml │ │ ├── pricelist-deploy.yaml │ │ ├── pricelist-job.yaml │ │ └── pricelist-svc.yaml │ └── rollingsync-appset.yaml ├── argo-events ├── README.md └── manifests │ ├── event-source.yaml │ └── sensor.yaml ├── argo-rollouts ├── README.md ├── bg │ ├── base │ │ ├── kustomization.yaml │ │ ├── rollout.yaml │ │ ├── service-active.yaml │ │ └── service-preview.yaml │ └── overlays │ │ ├── aks │ │ ├── ingress.yaml │ │ ├── kustomization.yaml │ │ └── namespace.yaml │ │ └── localhost │ │ ├── ingress.yaml │ │ ├── kustomization.yaml │ │ └── namespace.yaml ├── bluegreen-app-localhost.yaml ├── canary-app-localhost.yaml └── canary │ ├── base │ ├── kustomization.yaml │ ├── rollout.yaml │ ├── service-canary.yaml │ └── service-stable.yaml │ └── overlays │ └── localhost │ ├── ingress.yaml │ ├── kustomization.yaml │ └── namespace.yaml ├── argocd-operator └── openshift-gitops.yaml ├── bgd-bare ├── bgd-deployment.yaml ├── bgd-namespace.yaml ├── bgd-svc.yaml └── kustomization.yaml ├── bgd-k8s ├── base │ ├── bgd-deployment.yaml │ ├── bgd-namespace.yaml │ ├── bgd-svc.yaml │ └── kustomization.yaml └── overlays │ ├── kind │ ├── bgd-ingress.yaml │ └── kustomization.yaml │ └── mac │ ├── bgd-ingress.yaml │ └── kustomization.yaml ├── bgd ├── bgd-deployment.yaml ├── bgd-namespace.yaml ├── bgd-route.yaml └── bgd-svc.yaml ├── bgdk ├── base │ ├── bgd-deployment.yaml │ ├── bgd-namespace.yaml │ ├── bgd-route.yaml │ ├── bgd-svc.yaml │ └── kustomization.yaml └── overlays │ ├── blue │ ├── bgd-deployment.yaml │ ├── bgd-route.yaml │ └── kustomization.yaml │ ├── cluster1 │ ├── bgd-deployment.yaml │ ├── bgd-route.yaml │ └── kustomization.yaml │ ├── cluster2 │ ├── bgd-deployment.yaml │ ├── bgd-route.yaml │ └── kustomization.yaml │ └── green │ ├── bgd-deployment.yaml │ ├── bgd-route.yaml │ └── kustomization.yaml ├── cmp ├── README.md ├── manifests │ ├── 1.argocd-cm-update.yaml │ ├── 2.argocd-repo-server-patch.yaml │ └── 3.argocd-sample.app.yaml └── samplecm.yaml ├── gag ├── gallant │ └── deployments │ │ ├── app-project.yaml │ │ ├── gallant-example.yaml │ │ ├── gallant-ns.yaml │ │ ├── pricelist-app.yaml │ │ └── pricelist-ns.yaml └── goofus │ └── .gitkeep ├── gobg └── gobg.yaml ├── hack └── deployment.yaml ├── helm ├── argo-app │ └── quarkus-example.yaml ├── helm-deploy │ └── helm-app.yaml └── helmfile │ ├── demo │ └── helmfile.yaml │ └── example │ └── helmfile.yaml ├── hooks ├── dbbackup.yaml ├── kustomization.yaml ├── logrotate.yaml ├── postsync-job.yaml ├── presync-job.yaml ├── presync-sa.yaml ├── pricelist-wh-ss.yaml └── rb-for-sa.yaml ├── job ├── kustomization.yaml ├── test-job.yaml ├── test-sa-rbac.yaml └── test-sa.yaml ├── kustomize-and-helm ├── README.md ├── app │ ├── base │ │ ├── kustomization.yaml │ │ └── values.yaml │ └── overlays │ │ └── default │ │ ├── cm.yaml │ │ ├── kustomization.yaml │ │ └── ns.yaml └── knh-argocdapp.yaml ├── machineautoscaler ├── base │ ├── cluster-autoscaler.yaml │ ├── kustomization.yaml │ └── openshift-machine-api-ns.yaml └── overlays │ ├── cluster1 │ └── .gitkeep │ ├── cluster2 │ ├── kustomization.yaml │ ├── worker-us-east-1a.yaml │ ├── worker-us-east-1b.yaml │ └── worker-us-east-1c.yaml │ └── cluster3 │ ├── kustomization.yaml │ └── us-west-2a.yaml ├── machineconfigs ├── cli-job-master.yaml ├── cli-job-worker.yaml ├── cli-sa-rbac.yaml ├── cli-sa.yaml ├── kustomization.yaml └── mc-foo.yaml ├── machinesets ├── base │ ├── kustomization.yaml │ └── openshift-machine-api-ns.yaml └── overlays │ ├── cluster1 │ └── .gitkeep │ ├── cluster2 │ ├── cluster3-mj5nw-worker-us-west-2a.yaml │ ├── cluster3-mj5nw-worker-us-west-2b.yaml │ ├── cluster3-mj5nw-worker-us-west-2c.yaml │ └── kustomization.yaml │ └── cluster3 │ ├── cluster3-mj5nw-worker-us-west-2a.yaml │ ├── cluster3-mj5nw-worker-us-west-2b.yaml │ ├── cluster3-mj5nw-worker-us-west-2c.yaml │ └── kustomization.yaml ├── multi-source-argocd ├── external-helm-values.yaml ├── multi-source.yaml └── quarkus-values.yaml ├── poor-mans-syncwave ├── apps │ ├── bgd │ │ ├── bgd-cli-sa.yaml │ │ ├── bgd-deployment.yaml │ │ ├── bgd-namespace.yaml │ │ ├── bgd-presync-job.yaml │ │ ├── bgd-rbac.yaml │ │ ├── bgd-svc.yaml │ │ └── kustomization.yaml │ └── guestbook │ │ ├── guestbook-cli-sa.yaml │ │ ├── guestbook-frontend-deploy.yaml │ │ ├── guestbook-frontend-svc.yaml │ │ ├── guestbook-ns.yaml │ │ ├── guestbook-postsync-job.yaml │ │ ├── guestbook-rbac.yaml │ │ ├── guestbook-redis-mst-deploy.yaml │ │ ├── guestbook-redis-mst-svc.yaml │ │ ├── guestbook-redis-slv-deploy.yaml │ │ ├── guestbook-redis-slv-svc.yaml.yaml │ │ ├── guestbook-scc-auid.yaml │ │ └── kustomization.yaml └── appset.yaml ├── pricelist-bare ├── kustomization.yaml ├── pricelist-db-pvc.yaml ├── pricelist-db-svc.yaml ├── pricelist-db.yaml ├── pricelist-deploy.yaml ├── pricelist-job.yaml ├── pricelist-route.yaml └── pricelist-svc.yaml ├── pricelist-ingress ├── app │ ├── kustomization.yaml │ ├── pricelist-db-pvc.yaml │ ├── pricelist-db-svc.yaml │ ├── pricelist-db.yaml │ ├── pricelist-deploy.yaml │ ├── pricelist-ingress.yaml │ ├── pricelist-job.yaml │ ├── pricelist-namespace.yaml │ └── pricelist-svc.yaml └── pricelist-app.yaml ├── pricelist ├── kustomization.yaml ├── pricelist-db-pvc.yaml ├── pricelist-db-svc.yaml ├── pricelist-db.yaml ├── pricelist-deploy.yaml ├── pricelist-job.yaml ├── pricelist-namespace.yaml ├── pricelist-quota.yaml ├── pricelist-route.yaml └── pricelist-svc.yaml ├── quarkus-subchart ├── Chart.yaml └── values.yaml ├── secretlist ├── 1.pricelist-namespace.yaml ├── 2.pricelist-db.yaml ├── 3.pricelist-db-svc.yaml ├── 4.pricelist-deploy.yaml ├── 5.pricelist-svc.yaml ├── 6.pricelist-route.yaml ├── 7.pricelist-job.yaml └── pricelist-sealed.yaml ├── storageops ├── statefulapp.yaml ├── statefulapp │ ├── kustomization.yaml │ ├── pricelist-db-pv.yaml │ ├── pricelist-db-pvc.yaml │ ├── pricelist-db-sa-rb.yaml │ ├── pricelist-db-sa.yaml │ ├── pricelist-db-svc.yaml │ ├── pricelist-db.yaml │ ├── pricelist-deploy.yaml │ ├── pricelist-job.yaml │ ├── pricelist-namespace.yaml │ ├── pricelist-quota.yaml │ ├── pricelist-route.yaml │ └── pricelist-svc.yaml ├── storage-dymanic │ ├── pricelist-db-pvc.yaml │ ├── pricelist-db-svc.yaml │ ├── pricelist-db.yaml │ ├── pricelist-deploy.yaml │ ├── pricelist-job.yaml │ ├── pricelist-namespace.yaml │ ├── pricelist-quota.yaml │ ├── pricelist-route.yaml │ └── pricelist-svc.yaml └── storage │ ├── pricelist-db-pv.yaml │ ├── pricelist-db-pvc.yaml │ ├── pricelist-db-svc.yaml │ ├── pricelist-db.yaml │ ├── pricelist-deploy.yaml │ ├── pricelist-job.yaml │ ├── pricelist-namespace.yaml │ ├── pricelist-quota.yaml │ ├── pricelist-route.yaml │ └── pricelist-svc.yaml ├── v2.14 ├── applications │ └── simple-go.yaml ├── manifests │ ├── argocd-cmd-params-cm.yaml │ └── extra-cm.yaml └── notes.txt ├── weave-socks ├── base │ └── kustomization.yaml └── overlays │ └── default │ └── kustomization.yaml ├── welcome-k8s ├── base │ ├── kustomization.yaml │ ├── welcome-deployment.yaml │ └── welcome-service.yaml └── overlays │ ├── default │ └── kustomization.yaml │ └── withns │ ├── kustomization.yaml │ └── ns-welcome-app.yaml └── welcome-php ├── welcome-deployment.yaml ├── welcome-route.yaml └── welcome-service.yaml /README.md: -------------------------------------------------------------------------------- 1 | # GitOps Scratch Paper 2 | 3 | This is where I keep all the GitOps-y stuff I'm testing with. Nothing 4 | "official" about what's in here and things likely are broken. Use with 5 | caution. 6 | 7 | See this repo in all it's glory on [GitOps Guide to the Galaxy](https://red.ht/gitops). 8 | 9 | This repo assumes you're using Argo CD via OpenShift GitOps Operator. 10 | -------------------------------------------------------------------------------- /app-of-apps/apps/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - pricelist-config.yaml 5 | - pricelist-database.yaml 6 | - pricelist-frontend.yaml 7 | -------------------------------------------------------------------------------- /app-of-apps/apps/pricelist-config.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Application 3 | metadata: 4 | name: pricelist-config 5 | namespace: argocd 6 | annotations: 7 | argocd.argoproj.io/sync-wave: "0" 8 | spec: 9 | destination: 10 | namespace: pricelist 11 | server: https://kubernetes.default.svc 12 | project: default 13 | source: 14 | path: app-of-apps/manifests/pricelist-config 15 | repoURL: https://github.com/christianh814/gitops-examples 16 | targetRevision: main 17 | syncPolicy: 18 | automated: 19 | prune: true 20 | selfHeal: true 21 | -------------------------------------------------------------------------------- /app-of-apps/apps/pricelist-database.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Application 3 | metadata: 4 | name: pricelist-database 5 | namespace: argocd 6 | annotations: 7 | argocd.argoproj.io/sync-wave: "1" 8 | spec: 9 | destination: 10 | namespace: pricelist 11 | server: https://kubernetes.default.svc 12 | project: default 13 | source: 14 | helm: 15 | parameters: 16 | - name: architecture 17 | value: "replication" 18 | - name: serviceAccount.name 19 | value: "pricelist-db" 20 | - name: serviceAccount.create 21 | value: "false" 22 | - name: auth.database 23 | value: "pricelist" 24 | - name: auth.username 25 | value: "pricelist" 26 | - name: auth.password 27 | value: "pricelist" 28 | - name: secondary.replicaCount 29 | value: "2" 30 | chart: mysql 31 | repoURL: https://charts.bitnami.com/bitnami 32 | #targetRevision: 8.4.3 33 | targetRevision: 9.16.2 34 | syncPolicy: 35 | automated: 36 | prune: true 37 | selfHeal: true 38 | -------------------------------------------------------------------------------- /app-of-apps/apps/pricelist-frontend.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Application 3 | metadata: 4 | name: pricelist-frontend 5 | namespace: argocd 6 | annotations: 7 | argocd.argoproj.io/sync-wave: "2" 8 | spec: 9 | destination: 10 | namespace: pricelist 11 | server: https://kubernetes.default.svc 12 | project: default 13 | source: 14 | path: app-of-apps/manifests/pricelist-frontend 15 | repoURL: https://github.com/christianh814/gitops-examples 16 | targetRevision: main 17 | syncPolicy: 18 | automated: 19 | prune: true 20 | selfHeal: true 21 | -------------------------------------------------------------------------------- /app-of-apps/manifests/pricelist-config/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - pricelist-config-ns.yaml 5 | - pricelist-config-sa.yaml 6 | - pricelist-config-rb.yaml 7 | -------------------------------------------------------------------------------- /app-of-apps/manifests/pricelist-config/pricelist-config-ns.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | creationTimestamp: null 5 | name: pricelist 6 | annotations: 7 | argocd.argoproj.io/sync-wave: "0" 8 | spec: {} 9 | status: {} 10 | -------------------------------------------------------------------------------- /app-of-apps/manifests/pricelist-config/pricelist-config-rb.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: RoleBinding 3 | metadata: 4 | creationTimestamp: null 5 | name: system:openshift:scc:anyuid 6 | namespace: pricelist 7 | annotations: 8 | argocd.argoproj.io/sync-wave: "2" 9 | roleRef: 10 | apiGroup: rbac.authorization.k8s.io 11 | kind: ClusterRole 12 | name: system:openshift:scc:anyuid 13 | subjects: 14 | - kind: ServiceAccount 15 | name: pricelist-db 16 | namespace: pricelist 17 | -------------------------------------------------------------------------------- /app-of-apps/manifests/pricelist-config/pricelist-config-sa.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | creationTimestamp: null 5 | name: pricelist-db 6 | namespace: pricelist 7 | annotations: 8 | argocd.argoproj.io/sync-wave: "1" 9 | -------------------------------------------------------------------------------- /app-of-apps/manifests/pricelist-frontend/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - pricelist-deploy.yaml 5 | - pricelist-job.yaml 6 | - pricelist-svc.yaml 7 | - pricelist-ingress.yaml 8 | -------------------------------------------------------------------------------- /app-of-apps/manifests/pricelist-frontend/pricelist-deploy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: pricelist 7 | tier: frontend 8 | name: pricelist 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "1" 12 | spec: 13 | replicas: 1 14 | selector: 15 | matchLabels: 16 | app: pricelist 17 | tier: frontend 18 | strategy: {} 19 | template: 20 | metadata: 21 | creationTimestamp: null 22 | labels: 23 | app: pricelist 24 | tier: frontend 25 | spec: 26 | containers: 27 | - image: quay.io/redhatworkshops/pricelist:latest 28 | name: pricelist 29 | resources: 30 | requests: 31 | memory: "256Mi" 32 | cpu: "256m" 33 | limits: 34 | memory: "256Mi" 35 | cpu: "256m" 36 | env: 37 | - name: MYSQL_DATABASE 38 | value: pricelist 39 | - name: MYSQL_PASSWORD 40 | value: pricelist 41 | - name: MYSQL_USER 42 | value: pricelist 43 | - name: MYSQL_SERVICE_HOST 44 | value: pricelist-database-mysql-primary 45 | - name: MYSQL_SERVICE_PORT 46 | value: "3306" 47 | -------------------------------------------------------------------------------- /app-of-apps/manifests/pricelist-frontend/pricelist-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: pricelist-ingress 5 | namespace: pricelist 6 | spec: 7 | ingressClassName: nginx 8 | rules: 9 | - host: pricelist.7f000001.nip.io 10 | http: 11 | paths: 12 | - backend: 13 | service: 14 | name: pricelist 15 | port: 16 | number: 8080 17 | path: / 18 | pathType: Prefix 19 | -------------------------------------------------------------------------------- /app-of-apps/manifests/pricelist-frontend/pricelist-job.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: batch/v1 2 | kind: Job 3 | metadata: 4 | creationTimestamp: null 5 | name: pricelist-postdeploy 6 | namespace: pricelist 7 | annotations: 8 | argocd.argoproj.io/sync-wave: "3" 9 | spec: 10 | template: 11 | metadata: 12 | creationTimestamp: null 13 | spec: 14 | containers: 15 | - command: 16 | - /bin/bash 17 | - -c 18 | - | 19 | until [ $(curl -s -o /dev/null -w "%{http_code}" http://pricelist:8080/create_database.php) -eq 200 ]; do sleep 5; done 20 | curl -s http://pricelist:8080/create_database.php 21 | image: quay.io/redhatworkshops/pricelist:latest 22 | name: pricelist-postdeploy 23 | resources: 24 | requests: 25 | memory: "128Mi" 26 | cpu: "128m" 27 | limits: 28 | memory: "256Mi" 29 | cpu: "256m" 30 | restartPolicy: Never 31 | -------------------------------------------------------------------------------- /app-of-apps/manifests/pricelist-frontend/pricelist-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: pricelist 7 | tier: frontend 8 | name: pricelist 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "2" 12 | spec: 13 | ports: 14 | - port: 8080 15 | protocol: TCP 16 | targetPort: 8080 17 | selector: 18 | app: pricelist 19 | tier: frontend 20 | status: 21 | loadBalancer: {} 22 | -------------------------------------------------------------------------------- /app-of-apps/pricelist-app.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Application 3 | metadata: 4 | name: pricelist-app 5 | namespace: argocd 6 | spec: 7 | destination: 8 | namespace: argocd 9 | server: https://kubernetes.default.svc 10 | project: default 11 | source: 12 | path: app-of-apps/apps 13 | repoURL: https://github.com/christianh814/gitops-examples 14 | targetRevision: main 15 | syncPolicy: 16 | automated: 17 | prune: true 18 | selfHeal: true 19 | -------------------------------------------------------------------------------- /applicationsets/cluster-generator/appset-all-clusters-bgd.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: ApplicationSet 3 | metadata: 4 | name: bgd 5 | namespace: openshift-gitops 6 | spec: 7 | generators: 8 | - clusters: {} # targets all clusters 9 | template: 10 | metadata: 11 | name: '{{name}}-bgd' # the "name" is the name field in the secret 12 | spec: 13 | project: default 14 | syncPolicy: 15 | automated: 16 | prune: true 17 | selfHeal: true 18 | retry: 19 | limit: 5 20 | backoff: 21 | duration: 5s 22 | maxDuration: 3m0s 23 | factor: 2 24 | source: 25 | repoURL: https://github.com/christianh814/gitops-examples 26 | targetRevision: main 27 | path: applicationsets/cluster-generator/overlays/dev/ 28 | destination: 29 | server: '{{server}}' # "server" from the field in the secret 30 | namespace: bgd 31 | -------------------------------------------------------------------------------- /applicationsets/cluster-generator/appset-bgd.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: ApplicationSet 3 | metadata: 4 | name: bgd 5 | namespace: openshift-gitops 6 | spec: 7 | generators: 8 | - clusters: 9 | selector: 10 | matchLabels: 11 | bgd: dev # add this to the cluster secret. More info http://bit.ly/2ORvXhw 12 | template: 13 | metadata: 14 | name: '{{name}}-bgd' # the "name" is the name field in the secret 15 | spec: 16 | project: default 17 | syncPolicy: 18 | automated: 19 | prune: true 20 | selfHeal: true 21 | retry: 22 | limit: 5 23 | backoff: 24 | duration: 5s 25 | maxDuration: 3m0s 26 | factor: 2 27 | source: 28 | repoURL: https://github.com/christianh814/gitops-examples 29 | targetRevision: main 30 | path: applicationsets/cluster-generator/overlays/dev/ 31 | destination: 32 | server: '{{server}}' # "server" from the field in the secret 33 | namespace: bgd 34 | -------------------------------------------------------------------------------- /applicationsets/cluster-generator/base/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | creationTimestamp: null 6 | labels: 7 | app: bgd 8 | name: bgd 9 | spec: 10 | replicas: 1 11 | selector: 12 | matchLabels: 13 | app: bgd 14 | strategy: {} 15 | template: 16 | metadata: 17 | creationTimestamp: null 18 | labels: 19 | app: bgd 20 | spec: 21 | containers: 22 | - image: quay.io/redhatworkshops/bgd:latest 23 | name: bgd 24 | env: 25 | - name: COLOR 26 | value: "patch_this" 27 | resources: {} 28 | --- 29 | -------------------------------------------------------------------------------- /applicationsets/cluster-generator/base/bgd-namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: bgd 5 | -------------------------------------------------------------------------------- /applicationsets/cluster-generator/base/bgd-route.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: route.openshift.io/v1 2 | kind: Route 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: bgd 7 | name: bgd 8 | namespace: bgd 9 | spec: 10 | host: "" 11 | port: 12 | targetPort: 8080 13 | to: 14 | kind: Service 15 | name: bgd 16 | weight: 100 17 | status: 18 | ingress: 19 | - conditions: 20 | - status: "True" 21 | type: Admitted 22 | -------------------------------------------------------------------------------- /applicationsets/cluster-generator/base/bgd-svc.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | creationTimestamp: null 6 | labels: 7 | app: bgd 8 | name: bgd 9 | spec: 10 | ports: 11 | - port: 8080 12 | protocol: TCP 13 | targetPort: 8080 14 | selector: 15 | app: bgd 16 | --- 17 | -------------------------------------------------------------------------------- /applicationsets/cluster-generator/base/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - bgd-deployment.yaml 3 | - bgd-namespace.yaml 4 | - bgd-svc.yaml 5 | - bgd-route.yaml 6 | -------------------------------------------------------------------------------- /applicationsets/cluster-generator/overlays/dev/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/template/spec/containers/0/env/0/value 3 | value: yellow 4 | -------------------------------------------------------------------------------- /applicationsets/cluster-generator/overlays/dev/kustomization.yaml: -------------------------------------------------------------------------------- 1 | bases: 2 | - ../../base 3 | patchesJson6902: 4 | - target: 5 | version: v1 6 | group: apps 7 | kind: Deployment 8 | name: bgd 9 | path: bgd-deployment.yaml 10 | -------------------------------------------------------------------------------- /applicationsets/git-dir-generator/apps/pricelist-config/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - pricelist-config-ns.yaml 5 | - pricelist-config-rb.yaml 6 | -------------------------------------------------------------------------------- /applicationsets/git-dir-generator/apps/pricelist-config/pricelist-config-ns.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | creationTimestamp: null 5 | name: pricelist 6 | annotations: 7 | argocd.argoproj.io/sync-wave: "0" 8 | spec: {} 9 | status: {} 10 | -------------------------------------------------------------------------------- /applicationsets/git-dir-generator/apps/pricelist-config/pricelist-config-rb.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: RoleBinding 3 | metadata: 4 | creationTimestamp: null 5 | name: system:openshift:scc:anyuid 6 | namespace: pricelist 7 | annotations: 8 | argocd.argoproj.io/sync-wave: "2" 9 | roleRef: 10 | apiGroup: rbac.authorization.k8s.io 11 | kind: ClusterRole 12 | name: system:openshift:scc:anyuid 13 | subjects: 14 | - kind: ServiceAccount 15 | name: pricelist-db 16 | namespace: pricelist 17 | -------------------------------------------------------------------------------- /applicationsets/git-dir-generator/apps/pricelist-db/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: pricelist-database 3 | type: application 4 | version: 1.0.0 5 | appVersion: "1.0.0" 6 | dependencies: 7 | - name: mysql 8 | version: 9.2.0 9 | repository: https://charts.bitnami.com/bitnami 10 | -------------------------------------------------------------------------------- /applicationsets/git-dir-generator/apps/pricelist-db/values.yaml: -------------------------------------------------------------------------------- 1 | mysql: 2 | architecture: "replication" 3 | serviceAccount: 4 | name: "pricelist-db" 5 | auth: 6 | database: "pricelist" 7 | username: "pricelist" 8 | password: "pricelist" 9 | secondary: 10 | replicaCount: "2" 11 | -------------------------------------------------------------------------------- /applicationsets/git-dir-generator/apps/pricelist-frontend/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - pricelist-deploy.yaml 5 | - pricelist-job.yaml 6 | - pricelist-svc.yaml 7 | -------------------------------------------------------------------------------- /applicationsets/git-dir-generator/apps/pricelist-frontend/pricelist-deploy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: pricelist 7 | tier: frontend 8 | name: pricelist 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "1" 12 | spec: 13 | replicas: 1 14 | selector: 15 | matchLabels: 16 | app: pricelist 17 | tier: frontend 18 | strategy: {} 19 | template: 20 | metadata: 21 | creationTimestamp: null 22 | labels: 23 | app: pricelist 24 | tier: frontend 25 | spec: 26 | containers: 27 | - image: quay.io/redhatworkshops/pricelist:latest 28 | name: pricelist 29 | resources: 30 | requests: 31 | memory: "256Mi" 32 | cpu: "256m" 33 | limits: 34 | memory: "256Mi" 35 | cpu: "256m" 36 | env: 37 | - name: MYSQL_DATABASE 38 | value: pricelist 39 | - name: MYSQL_PASSWORD 40 | value: pricelist 41 | - name: MYSQL_USER 42 | value: pricelist 43 | - name: MYSQL_SERVICE_HOST 44 | value: pricelist-db-mysql-primary 45 | - name: MYSQL_SERVICE_PORT 46 | value: "3306" 47 | -------------------------------------------------------------------------------- /applicationsets/git-dir-generator/apps/pricelist-frontend/pricelist-job.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: batch/v1 2 | kind: Job 3 | metadata: 4 | creationTimestamp: null 5 | name: pricelist-postdeploy 6 | namespace: pricelist 7 | annotations: 8 | argocd.argoproj.io/sync-wave: "3" 9 | spec: 10 | template: 11 | metadata: 12 | creationTimestamp: null 13 | spec: 14 | containers: 15 | - command: 16 | - /bin/bash 17 | - -c 18 | - | 19 | until [ $(curl -s -o /dev/null -w "%{http_code}" http://pricelist:8080/create_database.php) -eq 200 ]; do sleep 5; done 20 | curl -s http://pricelist:8080/create_database.php 21 | image: quay.io/redhatworkshops/pricelist:latest 22 | name: pricelist-postdeploy 23 | resources: 24 | requests: 25 | memory: "128Mi" 26 | cpu: "128m" 27 | limits: 28 | memory: "256Mi" 29 | cpu: "256m" 30 | restartPolicy: Never 31 | -------------------------------------------------------------------------------- /applicationsets/git-dir-generator/apps/pricelist-frontend/pricelist-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: pricelist 7 | tier: frontend 8 | name: pricelist 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "2" 12 | spec: 13 | ports: 14 | - port: 8080 15 | protocol: TCP 16 | targetPort: 8080 17 | selector: 18 | app: pricelist 19 | tier: frontend 20 | status: 21 | loadBalancer: {} 22 | -------------------------------------------------------------------------------- /applicationsets/git-dir-generator/appset-pricelist.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: ApplicationSet 3 | metadata: 4 | name: pricelist 5 | namespace: argocd 6 | spec: 7 | generators: 8 | - git: 9 | repoURL: https://github.com/christianh814/gitops-examples 10 | revision: main 11 | directories: 12 | - path: applicationsets/git-dir-generator/apps/* 13 | template: 14 | metadata: 15 | name: '{{path.basename}}' 16 | spec: 17 | project: default 18 | source: 19 | repoURL: https://github.com/christianh814/gitops-examples 20 | targetRevision: main 21 | path: '{{path}}' 22 | destination: 23 | server: https://kubernetes.default.svc 24 | namespace: pricelist 25 | syncPolicy: 26 | automated: 27 | prune: true 28 | selfHeal: true 29 | retry: 30 | limit: 5 31 | backoff: 32 | duration: 5s 33 | maxDuration: 3m0s 34 | factor: 2 35 | -------------------------------------------------------------------------------- /applicationsets/git-generator/appset-bgd-yamlconfig.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: ApplicationSet 3 | metadata: 4 | name: bgd 5 | spec: 6 | generators: 7 | - git: 8 | repoURL: https://github.com/christianh814/gitops-examples 9 | revision: main 10 | files: 11 | - path: "applicationsets/git-generator/cluster-config/cluster-yaml/config.yaml" 12 | template: 13 | metadata: 14 | name: '{{cluster.name}}-bgd' 15 | spec: 16 | project: default 17 | syncPolicy: 18 | automated: 19 | prune: true 20 | selfHeal: true 21 | retry: 22 | limit: 5 23 | backoff: 24 | duration: 5s 25 | maxDuration: 3m0s 26 | factor: 2 27 | source: 28 | repoURL: https://github.com/christianh814/gitops-examples 29 | targetRevision: main 30 | path: 'applicationsets/git-generator/overlays/{{cluster.overlay}}' 31 | destination: 32 | name: '{{cluster.server}}' 33 | namespace: bgd 34 | -------------------------------------------------------------------------------- /applicationsets/git-generator/appset-bgd.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: ApplicationSet 3 | metadata: 4 | name: bgd 5 | namespace: openshift-gitops 6 | spec: 7 | generators: 8 | - git: 9 | repoURL: https://github.com/christianh814/gitops-examples 10 | revision: main 11 | files: 12 | - path: "applicationsets/git-generator/cluster-config/**/config.json" 13 | template: 14 | metadata: 15 | name: '{{cluster.name}}-bgd' 16 | spec: 17 | project: default 18 | syncPolicy: 19 | automated: 20 | prune: true 21 | selfHeal: true 22 | retry: 23 | limit: 5 24 | backoff: 25 | duration: 5s 26 | maxDuration: 3m0s 27 | factor: 2 28 | source: 29 | repoURL: https://github.com/christianh814/gitops-examples 30 | targetRevision: main 31 | path: applicationsets/git-generator/overlays/{{cluster.overlay}} 32 | destination: 33 | server: '{{cluster.server}}' 34 | namespace: bgd 35 | -------------------------------------------------------------------------------- /applicationsets/git-generator/base/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | creationTimestamp: null 6 | labels: 7 | app: bgd 8 | name: bgd 9 | spec: 10 | replicas: 1 11 | selector: 12 | matchLabels: 13 | app: bgd 14 | strategy: {} 15 | template: 16 | metadata: 17 | creationTimestamp: null 18 | labels: 19 | app: bgd 20 | spec: 21 | containers: 22 | - image: quay.io/redhatworkshops/bgd:latest 23 | name: bgd 24 | env: 25 | - name: COLOR 26 | value: "patch_this" 27 | resources: {} 28 | --- 29 | -------------------------------------------------------------------------------- /applicationsets/git-generator/base/bgd-namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: bgd 5 | -------------------------------------------------------------------------------- /applicationsets/git-generator/base/bgd-route.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: route.openshift.io/v1 2 | kind: Route 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: bgd 7 | name: bgd 8 | namespace: bgd 9 | spec: 10 | host: "" 11 | port: 12 | targetPort: 8080 13 | to: 14 | kind: Service 15 | name: bgd 16 | weight: 100 17 | status: 18 | ingress: 19 | - conditions: 20 | - status: "True" 21 | type: Admitted 22 | -------------------------------------------------------------------------------- /applicationsets/git-generator/base/bgd-svc.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | creationTimestamp: null 6 | labels: 7 | app: bgd 8 | name: bgd 9 | spec: 10 | ports: 11 | - port: 8080 12 | protocol: TCP 13 | targetPort: 8080 14 | selector: 15 | app: bgd 16 | --- 17 | -------------------------------------------------------------------------------- /applicationsets/git-generator/base/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - bgd-deployment.yaml 3 | - bgd-namespace.yaml 4 | - bgd-svc.yaml 5 | - bgd-route.yaml 6 | -------------------------------------------------------------------------------- /applicationsets/git-generator/cluster-config/cluster-yaml/config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | cluster: 3 | name: cluster-yaml 4 | server: in-cluster 5 | overlay: cluster-yaml 6 | -------------------------------------------------------------------------------- /applicationsets/git-generator/cluster-config/cluster1/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "cluster": { 3 | "name": "cluster1", 4 | "server": "https://api.cluster1.chx.osecloud.com:6443", 5 | "overlay": "cluster1" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /applicationsets/git-generator/cluster-config/cluster2/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "cluster": { 3 | "name": "cluster2", 4 | "server": "https://api.cluster2.chx.osecloud.com:6443", 5 | "overlay": "cluster2" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /applicationsets/git-generator/cluster-config/cluster3/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "cluster": { 3 | "name": "cluster3", 4 | "server": "https://api.cluster3.chx.osecloud.com:6443", 5 | "overlay": "cluster3" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /applicationsets/git-generator/overlays/cluster-yaml/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/template/spec/containers/0/env/0/value 3 | value: green 4 | -------------------------------------------------------------------------------- /applicationsets/git-generator/overlays/cluster-yaml/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../../base 3 | patches: 4 | - target: 5 | version: v1 6 | group: apps 7 | kind: Deployment 8 | name: bgd 9 | path: bgd-deployment.yaml 10 | -------------------------------------------------------------------------------- /applicationsets/git-generator/overlays/cluster1/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/template/spec/containers/0/env/0/value 3 | value: blue 4 | -------------------------------------------------------------------------------- /applicationsets/git-generator/overlays/cluster1/kustomization.yaml: -------------------------------------------------------------------------------- 1 | bases: 2 | - ../../base 3 | patchesJson6902: 4 | - target: 5 | version: v1 6 | group: apps 7 | kind: Deployment 8 | name: bgd 9 | path: bgd-deployment.yaml 10 | -------------------------------------------------------------------------------- /applicationsets/git-generator/overlays/cluster2/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/template/spec/containers/0/env/0/value 3 | value: green 4 | -------------------------------------------------------------------------------- /applicationsets/git-generator/overlays/cluster2/kustomization.yaml: -------------------------------------------------------------------------------- 1 | bases: 2 | - ../../base 3 | patchesJson6902: 4 | - target: 5 | version: v1 6 | group: apps 7 | kind: Deployment 8 | name: bgd 9 | path: bgd-deployment.yaml 10 | -------------------------------------------------------------------------------- /applicationsets/git-generator/overlays/cluster3/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/template/spec/containers/0/env/0/value 3 | value: yellow 4 | -------------------------------------------------------------------------------- /applicationsets/git-generator/overlays/cluster3/kustomization.yaml: -------------------------------------------------------------------------------- 1 | bases: 2 | - ../../base 3 | patchesJson6902: 4 | - target: 5 | version: v1 6 | group: apps 7 | kind: Deployment 8 | name: bgd 9 | path: bgd-deployment.yaml 10 | -------------------------------------------------------------------------------- /applicationsets/list-generator/appset-bgd-0.1.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: ApplicationSet 3 | metadata: 4 | name: bgd 5 | namespace: openshift-gitops 6 | spec: 7 | generators: 8 | - list: 9 | elements: 10 | - cluster: cluster1 11 | url: https://api.cluster1.chx.osecloud.com:6443 12 | - cluster: cluster2 13 | url: https://api.cluster2.chx.osecloud.com:6443 14 | - cluster: cluster3 15 | url: https://api.cluster3.chx.osecloud.com:6443 16 | template: 17 | metadata: 18 | name: '{{cluster}}-bgd' 19 | spec: 20 | project: default 21 | syncPolicy: 22 | automated: 23 | prune: true 24 | selfHeal: true 25 | retry: 26 | limit: 5 27 | backoff: 28 | duration: 5s 29 | maxDuration: 3m0s 30 | factor: 2 31 | source: 32 | repoURL: https://github.com/christianh814/gitops-examples 33 | targetRevision: main 34 | path: applicationsets/list-generator/v0.1/overlays/{{cluster}} 35 | destination: 36 | server: '{{url}}' 37 | namespace: bgd 38 | -------------------------------------------------------------------------------- /applicationsets/list-generator/appset-bgd-0.2-ocp.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: ApplicationSet 3 | metadata: 4 | name: bgd 5 | namespace: openshift-gitops 6 | spec: 7 | generators: 8 | - list: 9 | elements: 10 | # v0.2.0+ form - does not require cluster/URL keys (but are still supported) 11 | - overlay: blue 12 | gitRepo: https://github.com/christianh814/gitops-examples 13 | appPath: applicationsets/list-generator/v0.2/ocp/overlays 14 | appBranch: main 15 | - overlay: green 16 | gitRepo: https://gitlab.com/christianh814/test-applicationsets.git 17 | appPath: list-generator/ocp/overlays 18 | appBranch: main 19 | template: 20 | metadata: 21 | name: 'bgd-{{overlay}}' 22 | spec: 23 | project: default 24 | syncPolicy: 25 | automated: 26 | prune: true 27 | selfHeal: true 28 | retry: 29 | limit: 5 30 | backoff: 31 | duration: 5s 32 | maxDuration: 3m0s 33 | factor: 2 34 | source: 35 | repoURL: '{{gitRepo}}' 36 | targetRevision: '{{appBranch}}' 37 | path: '{{appPath}}/{{overlay}}' 38 | destination: 39 | server: https://kubernetes.default.svc 40 | namespace: 'bgd-{{overlay}}' 41 | -------------------------------------------------------------------------------- /applicationsets/list-generator/appset-bgd-0.2.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: ApplicationSet 3 | metadata: 4 | name: bgd 5 | #namespace: openshift-gitops 6 | namespace: argocd 7 | spec: 8 | generators: 9 | - list: 10 | elements: 11 | # v0.2.0+ form - does not require cluster/URL keys (but are still supported) 12 | - overlay: blue 13 | gitRepo: https://github.com/christianh814/gitops-examples 14 | appPath: applicationsets/list-generator/v0.2/k8s/overlays 15 | appBranch: main 16 | - overlay: green 17 | gitRepo: https://gitlab.com/christianh814/test-applicationsets.git 18 | appPath: list-generator/k8s/overlays 19 | appBranch: main 20 | template: 21 | metadata: 22 | name: 'bgd-{{overlay}}' 23 | spec: 24 | project: default 25 | syncPolicy: 26 | automated: 27 | prune: true 28 | selfHeal: true 29 | retry: 30 | limit: 5 31 | backoff: 32 | duration: 5s 33 | maxDuration: 3m0s 34 | factor: 2 35 | source: 36 | repoURL: '{{gitRepo}}' 37 | targetRevision: '{{appBranch}}' 38 | path: '{{appPath}}/{{overlay}}' 39 | destination: 40 | server: https://kubernetes.default.svc 41 | namespace: 'bgd-{{overlay}}' 42 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.1/base/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | creationTimestamp: null 6 | labels: 7 | app: bgd 8 | name: bgd 9 | spec: 10 | replicas: 1 11 | selector: 12 | matchLabels: 13 | app: bgd 14 | strategy: {} 15 | template: 16 | metadata: 17 | creationTimestamp: null 18 | labels: 19 | app: bgd 20 | spec: 21 | containers: 22 | - image: quay.io/redhatworkshops/bgd:latest 23 | name: bgd 24 | env: 25 | - name: COLOR 26 | value: "patch_this" 27 | resources: {} 28 | --- 29 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.1/base/bgd-namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: bgd 5 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.1/base/bgd-route.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: route.openshift.io/v1 2 | kind: Route 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: bgd 7 | name: bgd 8 | namespace: bgd 9 | spec: 10 | host: "" 11 | port: 12 | targetPort: 8080 13 | to: 14 | kind: Service 15 | name: bgd 16 | weight: 100 17 | status: 18 | ingress: 19 | - conditions: 20 | - status: "True" 21 | type: Admitted 22 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.1/base/bgd-svc.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | creationTimestamp: null 6 | labels: 7 | app: bgd 8 | name: bgd 9 | spec: 10 | ports: 11 | - port: 8080 12 | protocol: TCP 13 | targetPort: 8080 14 | selector: 15 | app: bgd 16 | --- 17 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.1/base/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - bgd-deployment.yaml 3 | - bgd-namespace.yaml 4 | - bgd-svc.yaml 5 | - bgd-route.yaml 6 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.1/overlays/cluster1/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/template/spec/containers/0/env/0/value 3 | value: blue 4 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.1/overlays/cluster1/kustomization.yaml: -------------------------------------------------------------------------------- 1 | bases: 2 | - ../../base 3 | patchesJson6902: 4 | - target: 5 | version: v1 6 | group: apps 7 | kind: Deployment 8 | name: bgd 9 | path: bgd-deployment.yaml 10 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.1/overlays/cluster2/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/template/spec/containers/0/env/0/value 3 | value: green 4 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.1/overlays/cluster2/kustomization.yaml: -------------------------------------------------------------------------------- 1 | bases: 2 | - ../../base 3 | patchesJson6902: 4 | - target: 5 | version: v1 6 | group: apps 7 | kind: Deployment 8 | name: bgd 9 | path: bgd-deployment.yaml 10 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.1/overlays/cluster3/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/template/spec/containers/0/env/0/value 3 | value: yellow 4 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.1/overlays/cluster3/kustomization.yaml: -------------------------------------------------------------------------------- 1 | bases: 2 | - ../../base 3 | patchesJson6902: 4 | - target: 5 | version: v1 6 | group: apps 7 | kind: Deployment 8 | name: bgd 9 | path: bgd-deployment.yaml 10 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/k8s/base/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | creationTimestamp: null 6 | labels: 7 | app: bgd 8 | name: bgd 9 | spec: 10 | replicas: 1 11 | selector: 12 | matchLabels: 13 | app: bgd 14 | strategy: {} 15 | template: 16 | metadata: 17 | creationTimestamp: null 18 | labels: 19 | app: bgd 20 | spec: 21 | containers: 22 | - image: quay.io/redhatworkshops/bgd:latest 23 | name: bgd 24 | env: 25 | - name: COLOR 26 | value: "blue" 27 | resources: {} 28 | --- 29 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/k8s/base/bgd-ing.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | annotations: 5 | ingress.kubernetes.io/force-ssl-redirect: "false" 6 | ingress.kubernetes.io/ssl-redirect: "false" 7 | name: bgd-ingress 8 | spec: 9 | ingressClassName: nginx 10 | rules: 11 | - host: bgd.7f000001.nip.io 12 | http: 13 | paths: 14 | - path: / 15 | pathType: Prefix 16 | backend: 17 | service: 18 | name: bgd 19 | port: 20 | number: 8080 21 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/k8s/base/bgd-svc.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | creationTimestamp: null 6 | labels: 7 | app: bgd 8 | name: bgd 9 | spec: 10 | ports: 11 | - port: 8080 12 | protocol: TCP 13 | targetPort: 8080 14 | selector: 15 | app: bgd 16 | --- 17 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/k8s/base/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - bgd-deployment.yaml 3 | - bgd-svc.yaml 4 | - bgd-ing.yaml 5 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/k8s/overlays/blue/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/template/spec/containers/0/env/0/value 3 | value: blue 4 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/k8s/overlays/blue/bgd-ing.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/rules/0/host 3 | value: bgd-blue.7f000001.nip.io 4 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/k8s/overlays/blue/bgd-namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: bgd-blue 5 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/k8s/overlays/blue/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | namespace: bgd-blue 5 | 6 | bases: 7 | - ../../base 8 | patchesJson6902: 9 | - target: 10 | version: v1 11 | group: apps 12 | kind: Deployment 13 | name: bgd 14 | path: bgd-deployment.yaml 15 | - target: 16 | version: v1 17 | group: networking.k8s.io 18 | kind: Ingress 19 | name: bgd-ingress 20 | path: bgd-ing.yaml 21 | resources: 22 | - bgd-namespace.yaml 23 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/k8s/overlays/green/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/template/spec/containers/0/env/0/value 3 | value: green 4 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/k8s/overlays/green/bgd-ing.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/rules/0/host 3 | value: bgd-green.7f000001.nip.io 4 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/k8s/overlays/green/bgd-namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: bgd-green 5 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/k8s/overlays/green/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | namespace: bgd-green 5 | 6 | bases: 7 | - ../../base 8 | patchesJson6902: 9 | - target: 10 | version: v1 11 | group: apps 12 | kind: Deployment 13 | name: bgd 14 | path: bgd-deployment.yaml 15 | - target: 16 | version: v1 17 | group: networking.k8s.io 18 | kind: Ingress 19 | name: bgd-ingress 20 | path: bgd-ing.yaml 21 | resources: 22 | - bgd-namespace.yaml 23 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/ocp/base/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | creationTimestamp: null 6 | labels: 7 | app: bgd 8 | name: bgd 9 | spec: 10 | replicas: 1 11 | selector: 12 | matchLabels: 13 | app: bgd 14 | strategy: {} 15 | template: 16 | metadata: 17 | creationTimestamp: null 18 | labels: 19 | app: bgd 20 | spec: 21 | containers: 22 | - image: quay.io/redhatworkshops/bgd:latest 23 | name: bgd 24 | env: 25 | - name: COLOR 26 | value: "blue" 27 | resources: {} 28 | --- 29 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/ocp/base/bgd-route.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: route.openshift.io/v1 2 | kind: Route 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: bgd 7 | name: bgd 8 | spec: 9 | host: "PATCH_ME" 10 | port: 11 | targetPort: 8080 12 | to: 13 | kind: Service 14 | name: bgd 15 | weight: 100 16 | status: 17 | ingress: 18 | - conditions: 19 | - status: "True" 20 | type: Admitted 21 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/ocp/base/bgd-svc.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | creationTimestamp: null 6 | labels: 7 | app: bgd 8 | name: bgd 9 | spec: 10 | ports: 11 | - port: 8080 12 | protocol: TCP 13 | targetPort: 8080 14 | selector: 15 | app: bgd 16 | --- 17 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/ocp/base/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - bgd-deployment.yaml 3 | - bgd-svc.yaml 4 | - bgd-route.yaml 5 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/ocp/overlays/blue/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/template/spec/containers/0/env/0/value 3 | value: blue 4 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/ocp/overlays/blue/bgd-namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: bgd-blue 5 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/ocp/overlays/blue/bgd-route.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/host 3 | value: "" 4 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/ocp/overlays/blue/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | namespace: bgd-blue 5 | 6 | bases: 7 | - ../../base 8 | patchesJson6902: 9 | - target: 10 | version: v1 11 | group: apps 12 | kind: Deployment 13 | name: bgd 14 | path: bgd-deployment.yaml 15 | - target: 16 | version: v1 17 | group: route.openshift.io 18 | kind: Route 19 | name: bgd 20 | path: bgd-route.yaml 21 | resources: 22 | - bgd-namespace.yaml 23 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/ocp/overlays/green/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/template/spec/containers/0/env/0/value 3 | value: green 4 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/ocp/overlays/green/bgd-namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: bgd-green 5 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/ocp/overlays/green/bgd-route.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/host 3 | value: "" 4 | -------------------------------------------------------------------------------- /applicationsets/list-generator/v0.2/ocp/overlays/green/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | namespace: bgd-green 5 | 6 | bases: 7 | - ../../base 8 | patchesJson6902: 9 | - target: 10 | version: v1 11 | group: apps 12 | kind: Deployment 13 | name: bgd 14 | path: bgd-deployment.yaml 15 | - target: 16 | version: v1 17 | group: route.openshift.io 18 | kind: Route 19 | name: bgd 20 | path: bgd-route.yaml 21 | resources: 22 | - bgd-namespace.yaml 23 | -------------------------------------------------------------------------------- /applicationsets/matrix-generator/appset-matrix.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: ApplicationSet 3 | metadata: 4 | name: pricelist-app 5 | namespace: argocd 6 | spec: 7 | generators: 8 | # matrix 'parent' generator 9 | - matrix: 10 | generators: 11 | # git generator, 'child' #1 12 | - git: 13 | repoURL: https://github.com/christianh814/gitops-examples 14 | revision: main 15 | directories: 16 | - path: applicationsets/git-dir-generator/apps/* 17 | # cluster generator, 'child' #2 18 | - clusters: 19 | selector: 20 | matchLabels: 21 | pricelist: deploy 22 | template: 23 | metadata: 24 | name: '{{name}}-{{path.basename}}' 25 | spec: 26 | project: default 27 | syncPolicy: 28 | automated: 29 | prune: true 30 | selfHeal: true 31 | retry: 32 | limit: 5 33 | backoff: 34 | duration: 5s 35 | maxDuration: 3m0s 36 | factor: 2 37 | source: 38 | repoURL: https://github.com/christianh814/gitops-examples 39 | targetRevision: main 40 | path: '{{path}}' 41 | destination: 42 | server: '{{server}}' 43 | namespace: pricelist 44 | -------------------------------------------------------------------------------- /applicationsets/progressivesync/apps/pricelist-config/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - pricelist-config-ns.yaml 5 | - pricelist-config-rb.yaml 6 | - pricelist-config-job.yaml 7 | -------------------------------------------------------------------------------- /applicationsets/progressivesync/apps/pricelist-config/pricelist-config-job.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: batch/v1 2 | kind: Job 3 | metadata: 4 | name: pricelist-config-hook 5 | namespace: pricelist 6 | annotations: 7 | argocd.argoproj.io/sync-wave: "3" 8 | argocd.argoproj.io/hook: PostSync 9 | argocd.argoproj.io/hook-delete-policy: HookSucceeded 10 | spec: 11 | template: 12 | spec: 13 | containers: 14 | - name: sleeper 15 | image: alpine:latest 16 | command: 17 | - "sleep" 18 | - "12" 19 | restartPolicy: Never 20 | backoffLimit: 2 21 | -------------------------------------------------------------------------------- /applicationsets/progressivesync/apps/pricelist-config/pricelist-config-ns.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: pricelist 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "0" 7 | -------------------------------------------------------------------------------- /applicationsets/progressivesync/apps/pricelist-config/pricelist-config-rb.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: RoleBinding 3 | metadata: 4 | name: system:openshift:scc:anyuid 5 | namespace: pricelist 6 | annotations: 7 | argocd.argoproj.io/sync-wave: "2" 8 | roleRef: 9 | apiGroup: rbac.authorization.k8s.io 10 | kind: ClusterRole 11 | name: system:openshift:scc:anyuid 12 | subjects: 13 | - kind: ServiceAccount 14 | name: pricelist-db 15 | namespace: pricelist 16 | -------------------------------------------------------------------------------- /applicationsets/progressivesync/apps/pricelist-db/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: pricelist-database 3 | type: application 4 | version: 1.0.0 5 | appVersion: "1.0.0" 6 | dependencies: 7 | - name: mysql 8 | version: 9.2.0 9 | repository: https://charts.bitnami.com/bitnami 10 | -------------------------------------------------------------------------------- /applicationsets/progressivesync/apps/pricelist-db/values.yaml: -------------------------------------------------------------------------------- 1 | mysql: 2 | architecture: "replication" 3 | serviceAccount: 4 | name: "pricelist-db" 5 | auth: 6 | database: "pricelist" 7 | username: "pricelist" 8 | password: "pricelist" 9 | secondary: 10 | replicaCount: "2" 11 | -------------------------------------------------------------------------------- /applicationsets/progressivesync/apps/pricelist-frontend/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - pricelist-deploy.yaml 5 | - pricelist-job.yaml 6 | - pricelist-svc.yaml 7 | -------------------------------------------------------------------------------- /applicationsets/progressivesync/apps/pricelist-frontend/pricelist-deploy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | labels: 5 | app: pricelist 6 | tier: frontend 7 | name: pricelist 8 | namespace: pricelist 9 | annotations: 10 | argocd.argoproj.io/sync-wave: "1" 11 | spec: 12 | replicas: 1 13 | selector: 14 | matchLabels: 15 | app: pricelist 16 | tier: frontend 17 | strategy: {} 18 | template: 19 | metadata: 20 | creationTimestamp: null 21 | labels: 22 | app: pricelist 23 | tier: frontend 24 | spec: 25 | containers: 26 | - image: quay.io/redhatworkshops/pricelist:latest 27 | name: pricelist 28 | resources: 29 | requests: 30 | memory: "256Mi" 31 | cpu: "256m" 32 | limits: 33 | memory: "256Mi" 34 | cpu: "256m" 35 | env: 36 | - name: MYSQL_DATABASE 37 | value: pricelist 38 | - name: MYSQL_PASSWORD 39 | value: pricelist 40 | - name: MYSQL_USER 41 | value: pricelist 42 | - name: MYSQL_SERVICE_HOST 43 | value: pricelist-db-mysql-primary 44 | - name: MYSQL_SERVICE_PORT 45 | value: "3306" 46 | -------------------------------------------------------------------------------- /applicationsets/progressivesync/apps/pricelist-frontend/pricelist-job.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: batch/v1 2 | kind: Job 3 | metadata: 4 | creationTimestamp: null 5 | name: pricelist-postdeploy 6 | namespace: pricelist 7 | annotations: 8 | argocd.argoproj.io/sync-wave: "3" 9 | spec: 10 | template: 11 | metadata: 12 | creationTimestamp: null 13 | spec: 14 | containers: 15 | - command: 16 | - /bin/bash 17 | - -c 18 | - | 19 | until [ $(curl -s -o /dev/null -w "%{http_code}" http://pricelist:8080/create_database.php) -eq 200 ]; do sleep 5; done 20 | curl -s http://pricelist:8080/create_database.php 21 | image: quay.io/redhatworkshops/pricelist:latest 22 | name: pricelist-postdeploy 23 | resources: 24 | requests: 25 | memory: "128Mi" 26 | cpu: "128m" 27 | limits: 28 | memory: "256Mi" 29 | cpu: "256m" 30 | restartPolicy: Never 31 | -------------------------------------------------------------------------------- /applicationsets/progressivesync/apps/pricelist-frontend/pricelist-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: pricelist 7 | tier: frontend 8 | name: pricelist 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "2" 12 | spec: 13 | ports: 14 | - port: 8080 15 | protocol: TCP 16 | targetPort: 8080 17 | selector: 18 | app: pricelist 19 | tier: frontend 20 | status: 21 | loadBalancer: {} 22 | -------------------------------------------------------------------------------- /applicationsets/progressivesync/rollingsync-appset.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: ApplicationSet 3 | metadata: 4 | name: pricelist 5 | namespace: argocd 6 | spec: 7 | generators: 8 | - list: 9 | elements: 10 | - srv: config 11 | path: applicationsets/progressivesync/apps/pricelist-config 12 | - srv: db 13 | path: applicationsets/progressivesync/apps/pricelist-db 14 | - srv: frontend 15 | path: applicationsets/progressivesync/apps/pricelist-frontend 16 | strategy: 17 | type: RollingSync 18 | rollingSync: 19 | steps: 20 | - matchExpressions: 21 | - key: pricelist-component # the "key" is based on the label (below as "pricelist-component: {{srv}}") 22 | operator: In 23 | values: 24 | - config 25 | #maxUpdate: 100% # if undefined, all applications matched are updated together (default is 100%) 26 | - matchExpressions: 27 | - key: pricelist-component 28 | operator: In 29 | values: 30 | - db 31 | #maxUpdate: 0 # if 0, no matched applications will be updated 32 | - matchExpressions: 33 | - key: pricelist-component 34 | operator: In 35 | values: 36 | - frontend 37 | #maxUpdate: 10% # all application matched are rollout no more than the percentage indicates 38 | template: 39 | metadata: 40 | name: 'pricelist-{{srv}}' 41 | labels: 42 | pricelist-component: '{{srv}}' 43 | spec: 44 | project: default 45 | syncPolicy: 46 | automated: 47 | prune: true 48 | selfHeal: true 49 | retry: 50 | limit: 5 51 | backoff: 52 | duration: 5s 53 | maxDuration: 3m0s 54 | factor: 2 55 | source: 56 | repoURL: https://github.com/christianh814/gitops-examples 57 | targetRevision: main 58 | path: '{{path}}' 59 | destination: 60 | server: https://kubernetes.default.svc 61 | namespace: pricelist 62 | -------------------------------------------------------------------------------- /argo-events/manifests/event-source.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: EventSource 3 | metadata: 4 | name: webhook 5 | spec: 6 | service: 7 | ports: 8 | - port: 12000 9 | targetPort: 12000 10 | webhook: 11 | hello-world: 12 | port: "12000" 13 | endpoint: /hello-world 14 | method: POST 15 | -------------------------------------------------------------------------------- /argo-events/manifests/sensor.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Sensor 3 | metadata: 4 | name: webhook 5 | spec: 6 | template: 7 | serviceAccountName: argo-events-sa 8 | dependencies: 9 | - name: payload 10 | eventSourceName: webhook 11 | eventName: hello-world 12 | triggers: 13 | - template: 14 | name: payload 15 | k8s: 16 | group: "" 17 | version: v1 18 | resource: pods 19 | operation: create 20 | source: 21 | resource: 22 | apiVersion: v1 23 | kind: Pod 24 | metadata: 25 | generateName: payload- 26 | labels: 27 | app: payload 28 | spec: 29 | containers: 30 | - name: hello 31 | image: alpine 32 | command: ["echo"] 33 | args: ["Payload received: ", "", "\n"] 34 | restartPolicy: Never 35 | parameters: 36 | - src: 37 | dependencyName: payload 38 | dataKey: body.message 39 | dest: spec.containers.0.args.1 40 | -------------------------------------------------------------------------------- /argo-rollouts/README.md: -------------------------------------------------------------------------------- 1 | Quick and dirty notes, will probably remove later 2 | 3 | List rollouts 4 | 5 | ```shell 6 | kubectl argo rollouts list rollouts --all-namespaces 7 | ``` 8 | 9 | 10 | # Bluegreen 11 | 12 | If I change the image in the [kustomization.yaml file patch](bg/overlays/localhost/kustomization.yaml#L21), and then sync; It'll pause until I run the promote command. 13 | 14 | ```shell 15 | kubectl argo rollouts get rollout gobg -n bluegreen 16 | kubectl argo rollouts -n bluegreen set image gobg gobg=christianh814/gobg:green 17 | kubectl argo rollouts get rollout gobg -n bluegreen 18 | kubectl argo rollouts promote -n bluegreen gobg 19 | kubectl argo rollouts get rollout gobg -n bluegreen 20 | ``` 21 | 22 | # Canary 23 | 24 | Initial Argo CD sync will "pause" (suspend) Argo CD syncing. The "promote" command is based on what I have defined in the [Rollout.yaml](canary/base/rollout.yaml#L32-L38) file and will go to the next stage (from 30, to 60, to 100). Final "promote" command will mark the App as healthy. 25 | 26 | ```shell 27 | kubectl argo rollouts get rollout rollouts-demo -n canary 28 | kubectl argo rollouts promote rollouts-demo -n canary 29 | ``` 30 | 31 | Outside of Argo CD, you could do 32 | 33 | ```shell 34 | kubectl argo rollouts -n canary set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow 35 | ``` 36 | -------------------------------------------------------------------------------- /argo-rollouts/bg/base/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - rollout.yaml 6 | - service-active.yaml 7 | - service-preview.yaml 8 | -------------------------------------------------------------------------------- /argo-rollouts/bg/base/rollout.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Rollout 3 | metadata: 4 | name: gobg 5 | spec: 6 | replicas: 2 7 | revisionHistoryLimit: 2 8 | selector: 9 | matchLabels: 10 | app: gobg 11 | template: 12 | metadata: 13 | labels: 14 | app: gobg 15 | spec: 16 | containers: 17 | - name: gobg 18 | image: christianh814/gobg:blue 19 | imagePullPolicy: IfNotPresent 20 | strategy: 21 | blueGreen: 22 | # activeService specifies the service to update with the new template hash at time of promotion. 23 | # This field is mandatory for the blueGreen update strategy. 24 | activeService: gobg-active 25 | # previewService specifies the service to update with the new template hash before promotion. 26 | # This allows the preview stack to be reachable without serving production traffic. 27 | # This field is optional. 28 | previewService: gobg-preview 29 | # autoPromotionEnabled disables automated promotion of the new stack by pausing the rollout 30 | # immediately before the promotion. If omitted, the default behavior is to promote the new 31 | # stack as soon as the ReplicaSet are completely ready/available. 32 | # Rollouts can be resumed using: `kubectl argo rollouts promote ROLLOUT` 33 | autoPromotionEnabled: false 34 | -------------------------------------------------------------------------------- /argo-rollouts/bg/base/service-active.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app: gobg 6 | name: gobg-active 7 | spec: 8 | ports: 9 | - port: 8080 10 | protocol: TCP 11 | targetPort: 8080 12 | selector: 13 | app: gobg 14 | -------------------------------------------------------------------------------- /argo-rollouts/bg/base/service-preview.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app: gobg 6 | name: gobg-preview 7 | spec: 8 | ports: 9 | - port: 8080 10 | protocol: TCP 11 | targetPort: 8080 12 | selector: 13 | app: gobg 14 | -------------------------------------------------------------------------------- /argo-rollouts/bg/overlays/aks/ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | annotations: 5 | cert-manager.io/cluster-issuer: letsencrypt-prod 6 | kubernetes.io/tls-acme: "true" 7 | ingress.kubernetes.io/ssl-redirect: "true" 8 | nginx.ingress.kubernetes.io/rewrite-target: / 9 | name: bluegreen-gobg-ingress 10 | spec: 11 | ingressClassName: nginx 12 | rules: 13 | - host: bg.aks.az.chx.cloud 14 | http: 15 | paths: 16 | - backend: 17 | service: 18 | name: gobg-active 19 | port: 20 | number: 8080 21 | path: / 22 | pathType: Prefix 23 | tls: 24 | - hosts: 25 | - bg.aks.az.chx.cloud 26 | secretName: bluegreen-ingress-tls 27 | -------------------------------------------------------------------------------- /argo-rollouts/bg/overlays/aks/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | namespace: bluegreen 4 | 5 | bases: 6 | - ../../base 7 | 8 | resources: 9 | - ingress.yaml 10 | - namespace.yaml 11 | 12 | patchesJson6902: 13 | - target: 14 | version: v1alpha1 15 | group: argoproj.io 16 | kind: Rollout 17 | name: gobg 18 | patch: |- 19 | - op: replace 20 | path: /spec/template/spec/containers/0/image 21 | value: christianh814/gobg:blue 22 | -------------------------------------------------------------------------------- /argo-rollouts/bg/overlays/aks/namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | creationTimestamp: null 5 | name: bluegreen 6 | spec: {} 7 | status: {} 8 | -------------------------------------------------------------------------------- /argo-rollouts/bg/overlays/localhost/ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | annotations: 5 | nginx.ingress.kubernetes.io/rewrite-target: / 6 | nginx.ingress.kubernetes.io/ssl-redirect: "false" 7 | name: bluegreen-gobg-ingress 8 | spec: 9 | ingressClassName: nginx 10 | rules: 11 | - host: bg.7f000001.nip.io 12 | http: 13 | paths: 14 | - backend: 15 | service: 16 | name: gobg-active 17 | port: 18 | number: 8080 19 | path: / 20 | pathType: Prefix 21 | - host: bg-preview.7f000001.nip.io 22 | http: 23 | paths: 24 | - backend: 25 | service: 26 | name: gobg-preview 27 | port: 28 | number: 8080 29 | path: / 30 | pathType: Prefix 31 | -------------------------------------------------------------------------------- /argo-rollouts/bg/overlays/localhost/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | namespace: bluegreen 4 | 5 | bases: 6 | - ../../base 7 | 8 | resources: 9 | - ingress.yaml 10 | - namespace.yaml 11 | 12 | patchesJson6902: 13 | - target: 14 | version: v1alpha1 15 | group: argoproj.io 16 | kind: Rollout 17 | name: gobg 18 | patch: |- 19 | - op: replace 20 | path: /spec/template/spec/containers/0/image 21 | value: christianh814/gobg:green 22 | -------------------------------------------------------------------------------- /argo-rollouts/bg/overlays/localhost/namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | creationTimestamp: null 5 | name: bluegreen 6 | spec: {} 7 | status: {} 8 | -------------------------------------------------------------------------------- /argo-rollouts/bluegreen-app-localhost.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Application 3 | metadata: 4 | name: bluegreen 5 | namespace: argocd 6 | spec: 7 | project: default 8 | source: 9 | path: argo-rollouts/bg/overlays/localhost 10 | repoURL: 'https://github.com/christianh814/gitops-examples' 11 | targetRevision: main 12 | destination: 13 | namespace: bluegreen 14 | server: 'https://kubernetes.default.svc' 15 | syncPolicy: 16 | automated: 17 | selfHeal: true 18 | prune: true 19 | syncOptions: 20 | - CreateNamespace=true 21 | retry: 22 | limit: 5 23 | backoff: 24 | duration: 5s 25 | maxDuration: 3m0s 26 | factor: 2 27 | -------------------------------------------------------------------------------- /argo-rollouts/canary-app-localhost.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Application 3 | metadata: 4 | name: canary 5 | namespace: argocd 6 | spec: 7 | project: default 8 | source: 9 | path: argo-rollouts/canary/overlays/localhost 10 | repoURL: 'https://github.com/christianh814/gitops-examples' 11 | targetRevision: main 12 | destination: 13 | namespace: canary 14 | server: 'https://kubernetes.default.svc' 15 | syncPolicy: 16 | automated: 17 | selfHeal: true 18 | prune: true 19 | syncOptions: 20 | - CreateNamespace=true 21 | retry: 22 | limit: 5 23 | backoff: 24 | duration: 5s 25 | maxDuration: 3m0s 26 | factor: 2 27 | -------------------------------------------------------------------------------- /argo-rollouts/canary/base/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - rollout.yaml 6 | - service-canary.yaml 7 | - service-stable.yaml 8 | -------------------------------------------------------------------------------- /argo-rollouts/canary/base/rollout.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Rollout 3 | metadata: 4 | name: rollouts-demo 5 | spec: 6 | replicas: 10 7 | revisionHistoryLimit: 1 8 | minReadySeconds: 5 9 | selector: 10 | matchLabels: 11 | app: rollouts-demo 12 | template: 13 | metadata: 14 | labels: 15 | app: rollouts-demo 16 | spec: 17 | containers: 18 | - name: rollouts-demo 19 | image: argoproj/rollouts-demo:blue 20 | imagePullPolicy: IfNotPresent 21 | ports: 22 | - name: http 23 | containerPort: 8080 24 | protocol: TCP 25 | strategy: 26 | canary: 27 | canaryService: rollouts-demo-canary 28 | stableService: rollouts-demo-stable 29 | trafficRouting: 30 | nginx: 31 | stableIngress: rollouts-demo-stable 32 | steps: # These are indefinate pauses, you can do 'pause: { duration: 10s }' for ten seconds to 10m for ten minutes 33 | - setWeight: 30 34 | - pause: {} 35 | - setWeight: 60 36 | - pause: {} 37 | - setWeight: 100 38 | - pause: {} 39 | -------------------------------------------------------------------------------- /argo-rollouts/canary/base/service-canary.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: rollouts-demo-canary 5 | spec: 6 | ports: 7 | - port: 80 8 | targetPort: http 9 | protocol: TCP 10 | name: http 11 | selector: 12 | app: rollouts-demo 13 | -------------------------------------------------------------------------------- /argo-rollouts/canary/base/service-stable.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: rollouts-demo-stable 5 | spec: 6 | ports: 7 | - port: 80 8 | targetPort: http 9 | protocol: TCP 10 | name: http 11 | selector: 12 | app: rollouts-demo 13 | -------------------------------------------------------------------------------- /argo-rollouts/canary/overlays/localhost/ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | annotations: 5 | nginx.ingress.kubernetes.io/rewrite-target: / 6 | nginx.ingress.kubernetes.io/ssl-redirect: "false" 7 | name: rollouts-demo-stable 8 | spec: 9 | ingressClassName: nginx 10 | rules: 11 | - host: rollouts-canary.7f000001.nip.io 12 | http: 13 | paths: 14 | - backend: 15 | service: 16 | name: rollouts-demo-stable 17 | port: 18 | number: 80 19 | path: / 20 | pathType: Prefix 21 | -------------------------------------------------------------------------------- /argo-rollouts/canary/overlays/localhost/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | namespace: canary 4 | 5 | bases: 6 | - ../../base 7 | 8 | resources: 9 | - ingress.yaml 10 | - namespace.yaml 11 | 12 | patchesJson6902: 13 | - target: 14 | version: v1alpha1 15 | group: argoproj.io 16 | kind: Rollout 17 | name: rollouts-demo 18 | patch: |- 19 | - op: replace 20 | path: /spec/template/spec/containers/0/image 21 | value: argoproj/rollouts-demo:yellow 22 | -------------------------------------------------------------------------------- /argo-rollouts/canary/overlays/localhost/namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | creationTimestamp: null 5 | name: canary 6 | spec: {} 7 | status: {} 8 | -------------------------------------------------------------------------------- /argocd-operator/openshift-gitops.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: ArgoCD 3 | metadata: 4 | name: openshift-gitops 5 | namespace: openshift-gitops 6 | spec: 7 | applicationSet: 8 | resources: 9 | limits: 10 | cpu: "2" 11 | memory: 1Gi 12 | requests: 13 | cpu: 250m 14 | memory: 512Mi 15 | controller: 16 | processors: {} 17 | resources: 18 | limits: 19 | cpu: "2" 20 | memory: 2Gi 21 | requests: 22 | cpu: 250m 23 | memory: 1Gi 24 | sharding: {} 25 | grafana: 26 | enabled: false 27 | ingress: 28 | enabled: false 29 | resources: 30 | limits: 31 | cpu: 500m 32 | memory: 256Mi 33 | requests: 34 | cpu: 250m 35 | memory: 128Mi 36 | route: 37 | enabled: false 38 | ha: 39 | enabled: false 40 | resources: 41 | limits: 42 | cpu: 500m 43 | memory: 256Mi 44 | requests: 45 | cpu: 250m 46 | memory: 128Mi 47 | initialSSHKnownHosts: {} 48 | notifications: 49 | enabled: true 50 | prometheus: 51 | enabled: false 52 | ingress: 53 | enabled: false 54 | route: 55 | enabled: false 56 | rbac: 57 | policy: | 58 | g, system:cluster-admins, role:admin 59 | g, cluster-admins, role:admin 60 | scopes: '[groups]' 61 | redis: 62 | resources: 63 | limits: 64 | cpu: 500m 65 | memory: 256Mi 66 | requests: 67 | cpu: 250m 68 | memory: 128Mi 69 | repo: 70 | resources: 71 | limits: 72 | cpu: "1" 73 | memory: 1Gi 74 | requests: 75 | cpu: 250m 76 | memory: 256Mi 77 | resourceCustomizations: | 78 | bitnami.com/SealedSecret: 79 | health.lua: | 80 | hs = {} 81 | hs.status = "Healthy" 82 | hs.message = "Controller doesnt report status" 83 | return hs 84 | route.openshift.io/Route: 85 | ignoreDifferences: | 86 | jsonPointers: 87 | - /spec/host 88 | resourceExclusions: | 89 | - apiGroups: 90 | - tekton.dev 91 | clusters: 92 | - '*' 93 | kinds: 94 | - TaskRun 95 | - PipelineRun 96 | server: 97 | autoscale: 98 | enabled: false 99 | grpc: 100 | ingress: 101 | enabled: false 102 | ingress: 103 | enabled: false 104 | insecure: true 105 | resources: 106 | limits: 107 | cpu: 500m 108 | memory: 256Mi 109 | requests: 110 | cpu: 125m 111 | memory: 128Mi 112 | route: 113 | enabled: true 114 | tls: 115 | insecureEdgeTerminationPolicy: Redirect 116 | termination: edge 117 | service: 118 | type: "" 119 | sso: 120 | dex: 121 | openShiftOAuth: true 122 | resources: 123 | limits: 124 | cpu: 500m 125 | memory: 256Mi 126 | requests: 127 | cpu: 250m 128 | memory: 128Mi 129 | provider: dex 130 | tls: 131 | ca: {} 132 | -------------------------------------------------------------------------------- /bgd-bare/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | creationTimestamp: null 6 | labels: 7 | app: bgd 8 | name: bgd 9 | spec: 10 | replicas: 1 11 | selector: 12 | matchLabels: 13 | app: bgd 14 | strategy: {} 15 | template: 16 | metadata: 17 | creationTimestamp: null 18 | labels: 19 | app: bgd 20 | spec: 21 | containers: 22 | - image: quay.io/redhatworkshops/bgd:latest 23 | name: bgd 24 | env: 25 | - name: COLOR 26 | value: "blue" 27 | resources: {} 28 | -------------------------------------------------------------------------------- /bgd-bare/bgd-namespace.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Namespace 4 | metadata: 5 | name: bgd 6 | -------------------------------------------------------------------------------- /bgd-bare/bgd-svc.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | creationTimestamp: null 6 | labels: 7 | app: bgd 8 | name: bgd 9 | spec: 10 | ports: 11 | - port: 8080 12 | protocol: TCP 13 | targetPort: 8080 14 | selector: 15 | app: bgd 16 | -------------------------------------------------------------------------------- /bgd-bare/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | namespace: bgd 4 | 5 | resources: 6 | - bgd-deployment.yaml 7 | - bgd-namespace.yaml 8 | - bgd-svc.yaml 9 | -------------------------------------------------------------------------------- /bgd-k8s/base/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | creationTimestamp: null 6 | labels: 7 | app: bgd 8 | name: bgd 9 | spec: 10 | replicas: 1 11 | selector: 12 | matchLabels: 13 | app: bgd 14 | strategy: {} 15 | template: 16 | metadata: 17 | creationTimestamp: null 18 | labels: 19 | app: bgd 20 | spec: 21 | containers: 22 | - image: quay.io/redhatworkshops/bgd:latest 23 | name: bgd 24 | env: 25 | - name: COLOR 26 | value: "blue" 27 | resources: {} 28 | --- 29 | -------------------------------------------------------------------------------- /bgd-k8s/base/bgd-namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: bgd 5 | -------------------------------------------------------------------------------- /bgd-k8s/base/bgd-svc.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | creationTimestamp: null 6 | labels: 7 | app: bgd 8 | name: bgd 9 | spec: 10 | ports: 11 | - port: 8080 12 | protocol: TCP 13 | targetPort: 8080 14 | selector: 15 | app: bgd 16 | --- 17 | -------------------------------------------------------------------------------- /bgd-k8s/base/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - bgd-deployment.yaml 3 | - bgd-namespace.yaml 4 | - bgd-svc.yaml 5 | -------------------------------------------------------------------------------- /bgd-k8s/overlays/kind/bgd-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | annotations: 5 | ingress.kubernetes.io/force-ssl-redirect: "false" 6 | ingress.kubernetes.io/ssl-redirect: "false" 7 | name: bgd-ingress 8 | namespace: bgd 9 | spec: 10 | ingressClassName: nginx 11 | rules: 12 | - host: bgd.c0a801fe.nip.io 13 | http: 14 | paths: 15 | - path: / 16 | pathType: Prefix 17 | backend: 18 | service: 19 | name: bgd 20 | port: 21 | number: 8080 22 | -------------------------------------------------------------------------------- /bgd-k8s/overlays/kind/kustomization.yaml: -------------------------------------------------------------------------------- 1 | bases: 2 | - ../../base 3 | resources: 4 | - bgd-ingress.yaml 5 | -------------------------------------------------------------------------------- /bgd-k8s/overlays/mac/bgd-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | annotations: 5 | ingress.kubernetes.io/force-ssl-redirect: "false" 6 | ingress.kubernetes.io/ssl-redirect: "false" 7 | kubernetes.io/ingress.class: "haproxy" 8 | name: bgd-ingress 9 | namespace: bgd 10 | spec: 11 | rules: 12 | - host: bgd.7f000001.nip.io 13 | http: 14 | paths: 15 | - path: / 16 | pathType: Prefix 17 | backend: 18 | service: 19 | name: bgd 20 | port: 21 | number: 8080 22 | -------------------------------------------------------------------------------- /bgd-k8s/overlays/mac/kustomization.yaml: -------------------------------------------------------------------------------- 1 | bases: 2 | - ../../base 3 | resources: 4 | - bgd-ingress.yaml 5 | -------------------------------------------------------------------------------- /bgd/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | creationTimestamp: null 6 | labels: 7 | app: bgd 8 | name: bgd 9 | spec: 10 | replicas: 1 11 | selector: 12 | matchLabels: 13 | app: bgd 14 | strategy: {} 15 | template: 16 | metadata: 17 | creationTimestamp: null 18 | labels: 19 | app: bgd 20 | spec: 21 | containers: 22 | - image: quay.io/redhatworkshops/bgd:latest 23 | name: bgd 24 | env: 25 | - name: COLOR 26 | value: "blue" 27 | resources: {} 28 | --- 29 | -------------------------------------------------------------------------------- /bgd/bgd-namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: bgd 5 | -------------------------------------------------------------------------------- /bgd/bgd-route.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: route.openshift.io/v1 2 | kind: Route 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: bgd 7 | name: bgd 8 | namespace: bgd 9 | spec: 10 | host: "" 11 | port: 12 | targetPort: 8080 13 | to: 14 | kind: Service 15 | name: bgd 16 | weight: 100 17 | status: {} 18 | -------------------------------------------------------------------------------- /bgd/bgd-svc.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | creationTimestamp: null 6 | labels: 7 | app: bgd 8 | name: bgd 9 | spec: 10 | ports: 11 | - port: 8080 12 | protocol: TCP 13 | targetPort: 8080 14 | selector: 15 | app: bgd 16 | --- 17 | -------------------------------------------------------------------------------- /bgdk/base/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | creationTimestamp: null 6 | labels: 7 | app: bgd 8 | name: bgd 9 | spec: 10 | replicas: 1 11 | selector: 12 | matchLabels: 13 | app: bgd 14 | strategy: {} 15 | template: 16 | metadata: 17 | creationTimestamp: null 18 | labels: 19 | app: bgd 20 | spec: 21 | containers: 22 | - image: quay.io/redhatworkshops/bgd:latest 23 | name: bgd 24 | env: 25 | - name: COLOR 26 | value: "blue" 27 | resources: {} 28 | --- 29 | -------------------------------------------------------------------------------- /bgdk/base/bgd-namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: bgd 5 | -------------------------------------------------------------------------------- /bgdk/base/bgd-route.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: route.openshift.io/v1 2 | kind: Route 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: bgd 7 | name: bgd 8 | namespace: bgd 9 | spec: 10 | host: "PATCH_ME" 11 | port: 12 | targetPort: 8080 13 | to: 14 | kind: Service 15 | name: bgd 16 | weight: 100 17 | status: 18 | ingress: 19 | - conditions: 20 | - status: "True" 21 | type: Admitted 22 | -------------------------------------------------------------------------------- /bgdk/base/bgd-svc.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | creationTimestamp: null 6 | labels: 7 | app: bgd 8 | name: bgd 9 | spec: 10 | ports: 11 | - port: 8080 12 | protocol: TCP 13 | targetPort: 8080 14 | selector: 15 | app: bgd 16 | --- 17 | -------------------------------------------------------------------------------- /bgdk/base/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - bgd-deployment.yaml 3 | - bgd-namespace.yaml 4 | - bgd-svc.yaml 5 | - bgd-route.yaml 6 | -------------------------------------------------------------------------------- /bgdk/overlays/blue/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/template/spec/containers/0/env/0/value 3 | value: blue 4 | -------------------------------------------------------------------------------- /bgdk/overlays/blue/bgd-route.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/host 3 | value: "" 4 | -------------------------------------------------------------------------------- /bgdk/overlays/blue/kustomization.yaml: -------------------------------------------------------------------------------- 1 | bases: 2 | - ../../base 3 | patchesJson6902: 4 | - target: 5 | version: v1 6 | group: apps 7 | kind: Deployment 8 | name: bgd 9 | path: bgd-deployment.yaml 10 | - target: 11 | version: v1 12 | group: route.openshift.io 13 | kind: Route 14 | name: bgd 15 | namespace: bgd 16 | path: bgd-route.yaml 17 | -------------------------------------------------------------------------------- /bgdk/overlays/cluster1/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/template/spec/containers/0/env/0/value 3 | value: blue 4 | -------------------------------------------------------------------------------- /bgdk/overlays/cluster1/bgd-route.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/host 3 | value: "" 4 | -------------------------------------------------------------------------------- /bgdk/overlays/cluster1/kustomization.yaml: -------------------------------------------------------------------------------- 1 | bases: 2 | - ../../base 3 | patchesJson6902: 4 | - target: 5 | version: v1 6 | group: apps 7 | kind: Deployment 8 | name: bgd 9 | path: bgd-deployment.yaml 10 | - target: 11 | version: v1 12 | group: route.openshift.io 13 | kind: Route 14 | name: bgd 15 | namespace: bgd 16 | path: bgd-route.yaml 17 | -------------------------------------------------------------------------------- /bgdk/overlays/cluster2/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/template/spec/containers/0/env/0/value 3 | value: green 4 | -------------------------------------------------------------------------------- /bgdk/overlays/cluster2/bgd-route.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/host 3 | value: "" 4 | -------------------------------------------------------------------------------- /bgdk/overlays/cluster2/kustomization.yaml: -------------------------------------------------------------------------------- 1 | bases: 2 | - ../../base 3 | patchesJson6902: 4 | - target: 5 | version: v1 6 | group: apps 7 | kind: Deployment 8 | name: bgd 9 | path: bgd-deployment.yaml 10 | - target: 11 | version: v1 12 | group: route.openshift.io 13 | kind: Route 14 | name: bgd 15 | namespace: bgd 16 | path: bgd-route.yaml 17 | -------------------------------------------------------------------------------- /bgdk/overlays/green/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/template/spec/containers/0/env/0/value 3 | value: green 4 | -------------------------------------------------------------------------------- /bgdk/overlays/green/bgd-route.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /spec/host 3 | value: "" 4 | -------------------------------------------------------------------------------- /bgdk/overlays/green/kustomization.yaml: -------------------------------------------------------------------------------- 1 | bases: 2 | - ../../base 3 | patchesJson6902: 4 | - target: 5 | version: v1 6 | group: apps 7 | kind: Deployment 8 | name: bgd 9 | path: bgd-deployment.yaml 10 | - target: 11 | version: v1 12 | group: route.openshift.io 13 | kind: Route 14 | name: bgd 15 | namespace: bgd 16 | path: bgd-route.yaml 17 | -------------------------------------------------------------------------------- /cmp/README.md: -------------------------------------------------------------------------------- 1 | # CMP Example 2 | 3 | Install the manifests in the order listed 4 | 5 | ```shell 6 | kubectl apply -f manifests/1.argocd-cm-update.yaml 7 | kubectl -n argocd patch deployments/argocd-repo-server --patch-file manifests/2.argocd-repo-server-patch.yaml 8 | kubectl apply -f manifests/3.argocd-sample.app.yaml 9 | ``` 10 | 11 | Verify 12 | 13 | ```shell 14 | kubectl get cm -n default 15 | ``` 16 | -------------------------------------------------------------------------------- /cmp/manifests/1.argocd-cm-update.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: cmp-plugin 5 | namespace: argocd 6 | data: 7 | plugin.yaml: | 8 | apiVersion: argoproj.io/v1alpha1 9 | kind: ConfigManagementPlugin 10 | metadata: 11 | name: cmp-plugin 12 | spec: 13 | version: v1.0 14 | init: 15 | command: [sh, -c, 'echo "Initializing..."'] 16 | generate: # "generate" must produce a valid Kubernetes object 17 | command: [sh, -c, 'echo "{\"kind\":\"ConfigMap\",\"apiVersion\":\"v1\",\"metadata\":{\"name\":\"$ARGOCD_APP_NAME\",\"namespace\":\"$ARGOCD_APP_NAMESPACE\"},\"data\":{\"ARGOCD_APP_REVISION\":\"$ARGOCD_APP_REVISION\",\"ARGOCD_APP_SOURCE_PATH\":\"$ARGOCD_APP_SOURCE_PATH\",\"ARGOCD_APP_SOURCE_REPO_URL\":\"$ARGOCD_APP_SOURCE_REPO_URL\",\"ARGOCD_APP_SOURCE_TARGET_REVISION\":\"$ARGOCD_APP_SOURCE_TARGET_REVISION\",\"KUBE_VERSION\":\"$KUBE_VERSION\",\"KUBE_API_VERSIONS\":\"$KUBE_API_VERSIONS\",\"ARGOCD_ENV_FOO\":\"$ARGOCD_ENV_FOO\"}}"'] 18 | discover: 19 | fileName: "./main.go" # This file should exist in the repo for the Application 20 | -------------------------------------------------------------------------------- /cmp/manifests/2.argocd-repo-server-patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: argocd-repo-server 5 | namespace: argocd 6 | spec: 7 | template: 8 | spec: 9 | containers: 10 | - name: cmp 11 | securityContext: 12 | runAsNonRoot: true 13 | runAsUser: 999 14 | image: alpine 15 | imagePullPolicy: IfNotPresent 16 | command: [/var/run/argocd/argocd-cmp-server] 17 | volumeMounts: 18 | - mountPath: /var/run/argocd 19 | name: var-files 20 | - mountPath: /home/argocd/cmp-server/plugins 21 | name: plugins 22 | - mountPath: /home/argocd/cmp-server/config/plugin.yaml 23 | subPath: plugin.yaml 24 | name: cmp-plugin 25 | - mountPath: /tmp 26 | name: cmp-tmp 27 | volumes: 28 | - name: cmp-plugin 29 | configMap: 30 | name: cmp-plugin 31 | - emptyDir: {} 32 | name: cmp-tmp 33 | -------------------------------------------------------------------------------- /cmp/manifests/3.argocd-sample.app.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Application 3 | metadata: 4 | name: plugin-demo 5 | namespace: argocd 6 | spec: 7 | destination: 8 | name: in-cluster 9 | namespace: default 10 | project: default 11 | source: 12 | path: ./ 13 | plugin: 14 | env: 15 | - name: FOO 16 | value: bar 17 | repoURL: https://github.com/christianh814/mta 18 | targetRevision: main 19 | syncPolicy: 20 | automated: 21 | prune: true 22 | selfHeal: true 23 | -------------------------------------------------------------------------------- /cmp/samplecm.yaml: -------------------------------------------------------------------------------- 1 | kind: ConfigMap 2 | apiVersion: v1 3 | metadata: 4 | name: $ARGOCD_APP_NAME 5 | namespace: $ARGOCD_APP_NAMESPACE 6 | data: 7 | ARGOCD_APP_REVISION: $ARGOCD_APP_REVISION 8 | ARGOCD_APP_SOURCE_PATH: $ARGOCD_APP_SOURCE_PATH 9 | ARGOCD_APP_SOURCE_REPO_URL: $ARGOCD_APP_SOURCE_REPO_URL 10 | ARGOCD_APP_SOURCE_TARGET_REVISION: $ARGOCD_APP_SOURCE_TARGET_REVISION 11 | KUBE_VERSION: $KUBE_VERSION 12 | KUBE_API_VERSIONS: $KUBE_API_VERSIONS 13 | ARGOCD_ENV_FOO: $ARGOCD_ENV_FOO 14 | -------------------------------------------------------------------------------- /gag/gallant/deployments/app-project.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: AppProject 3 | metadata: 4 | name: pricelist 5 | labels: 6 | argocd.argoproj.io/sync-wave: "3" 7 | spec: 8 | clusterResourceWhitelist: 9 | - group: '*' 10 | kind: '*' 11 | destinations: 12 | - namespace: '*' 13 | server: '*' 14 | sourceRepos: 15 | - '*' 16 | roles: 17 | - description: Developers get view and sync 18 | name: developer 19 | policies: 20 | - p, role:developer, applications, get, pricelist/*, allow 21 | - p, role:developer, applications, sync, pricelist/*, allow 22 | - p, role:developer, projects, get, pricelist, allow 23 | -------------------------------------------------------------------------------- /gag/gallant/deployments/gallant-example.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: argoproj.io/v1alpha1 3 | kind: Application 4 | metadata: 5 | name: quarkus-app 6 | namespace: openshift-gitops 7 | labels: 8 | argocd.argoproj.io/sync-wave: "2" 9 | spec: 10 | destination: 11 | namespace: gallant 12 | server: https://kubernetes.default.svc 13 | project: default 14 | source: 15 | helm: 16 | parameters: 17 | - name: build.enabled 18 | value: "false" 19 | - name: deploy.route.tls.enabled 20 | value: "true" 21 | - name: deploy.replicas 22 | value: "2" 23 | - name: image.name 24 | value: quay.io/ablock/gitops-helm-quarkus 25 | chart: quarkus 26 | repoURL: https://redhat-developer.github.io/redhat-helm-charts 27 | targetRevision: 0.0.3 28 | syncPolicy: 29 | automated: 30 | prune: true 31 | selfHeal: true 32 | syncOptions: 33 | - CreateNamespace=true 34 | -------------------------------------------------------------------------------- /gag/gallant/deployments/gallant-ns.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | labels: 5 | argocd.argoproj.io/managed-by: openshift-gitops 6 | argocd.argoproj.io/sync-wave: "1" 7 | name: gallant 8 | spec: {} 9 | status: {} 10 | -------------------------------------------------------------------------------- /gag/gallant/deployments/pricelist-app.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Application 3 | metadata: 4 | name: pricelist-app 5 | namespace: openshift-gitops 6 | labels: 7 | argocd.argoproj.io/sync-wave: "4" 8 | spec: 9 | destination: 10 | namespace: pricelist 11 | server: https://kubernetes.default.svc 12 | project: pricelist 13 | source: 14 | path: pricelist/ 15 | repoURL: https://github.com/christianh814/gitops-examples 16 | targetRevision: main 17 | syncPolicy: 18 | automated: 19 | prune: true 20 | selfHeal: true 21 | -------------------------------------------------------------------------------- /gag/gallant/deployments/pricelist-ns.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | labels: 5 | argocd.argoproj.io/managed-by: openshift-gitops 6 | argocd.argoproj.io/sync-wave: "1" 7 | name: pricelist 8 | spec: {} 9 | status: {} 10 | -------------------------------------------------------------------------------- /gag/goofus/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/christianh814/gitops-examples/54ec4b15b3127e47bdc65930c37a2d544686ed12/gag/goofus/.gitkeep -------------------------------------------------------------------------------- /gobg/gobg.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | creationTimestamp: null 5 | name: test 6 | spec: {} 7 | status: {} 8 | --- 9 | apiVersion: v1 10 | kind: Service 11 | metadata: 12 | labels: 13 | app: gobg 14 | name: gobg 15 | namespace: test 16 | spec: 17 | ports: 18 | - port: 8080 19 | protocol: TCP 20 | targetPort: 8080 21 | selector: 22 | app: gobg 23 | --- 24 | apiVersion: apps/v1 25 | kind: Deployment 26 | metadata: 27 | labels: 28 | app: gobg 29 | name: gobg 30 | namespace: test 31 | spec: 32 | replicas: 1 33 | selector: 34 | matchLabels: 35 | app: gobg 36 | strategy: {} 37 | template: 38 | metadata: 39 | labels: 40 | app: gobg 41 | spec: 42 | containers: 43 | - image: christianh814/gobg:latest 44 | name: gobg 45 | resources: {} -------------------------------------------------------------------------------- /hack/deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: myapp 7 | name: myapp 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: myapp 13 | strategy: {} 14 | template: 15 | metadata: 16 | creationTimestamp: null 17 | labels: 18 | app: myapp 19 | spec: 20 | containers: 21 | - image: nginx 22 | name: nginx 23 | resources: {} 24 | env: 25 | - name: DEMO_GREETING 26 | value: "Hello from the environment" 27 | - name: DEMO_FAREWELL 28 | value: "Such a sweet sorrow" 29 | -------------------------------------------------------------------------------- /helm/argo-app/quarkus-example.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: argoproj.io/v1alpha1 3 | kind: Application 4 | metadata: 5 | name: quarkus-app 6 | namespace: openshift-gitops 7 | spec: 8 | destination: 9 | namespace: demo 10 | server: https://kubernetes.default.svc 11 | project: default 12 | source: 13 | helm: 14 | parameters: 15 | - name: build.enabled 16 | value: "false" 17 | - name: deploy.route.tls.enabled 18 | value: "true" 19 | - name: image.name 20 | value: quay.io/ablock/gitops-helm-quarkus 21 | chart: quarkus 22 | repoURL: https://redhat-developer.github.io/redhat-helm-charts 23 | targetRevision: 0.0.3 24 | syncPolicy: 25 | automated: 26 | prune: true 27 | selfHeal: true 28 | syncOptions: 29 | - CreateNamespace=true 30 | -------------------------------------------------------------------------------- /helm/helm-deploy/helm-app.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Application 3 | metadata: 4 | name: helm-app 5 | namespace: argocd 6 | spec: 7 | destination: 8 | namespace: argocd 9 | server: https://kubernetes.default.svc 10 | project: default 11 | source: 12 | path: helm/argo-app 13 | repoURL: https://github.com/christianh814/gitops-examples 14 | targetRevision: main 15 | syncPolicy: 16 | automated: 17 | prune: true 18 | selfHeal: true 19 | -------------------------------------------------------------------------------- /helm/helmfile/demo/helmfile.yaml: -------------------------------------------------------------------------------- 1 | repositories: 2 | - name: akuity-demo 3 | url: https://akuity.github.io/demo-helm-charts/ 4 | 5 | releases: 6 | - name: jupiter 7 | chart: akuity-demo/simple-go 8 | set: 9 | - name: replicaCount 10 | value: 2 11 | - name: saturn 12 | chart: akuity-demo/gobg 13 | set: 14 | - name: color 15 | value: green 16 | -------------------------------------------------------------------------------- /helm/helmfile/example/helmfile.yaml: -------------------------------------------------------------------------------- 1 | repositories: 2 | - name: redhat-helm-charts 3 | url: https://redhat-developer.github.io/redhat-helm-charts 4 | - name: podinfo-helm-chart 5 | url: https://stefanprodan.github.io/podinfo 6 | 7 | releases: 8 | - name: sample 9 | namespace: demo 10 | forceNamespace: demo 11 | chart: redhat-helm-charts/quarkus 12 | set: 13 | - name: image.name 14 | value: quay.io/ablock/gitops-helm-quarkus 15 | - name: build.enabled 16 | value: false 17 | - name: deploy.route.enabled 18 | value: false 19 | - name: podinfo 20 | namespace: pi 21 | forceNamespace: pi 22 | chart: podinfo-helm-chart/podinfo 23 | set: 24 | - name: replicaCount 25 | value: 2 26 | -------------------------------------------------------------------------------- /hooks/dbbackup.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | run: db-backup 7 | name: db-backup 8 | namespace: pricelist 9 | annotations: 10 | argocd.argoproj.io/hook: PreSync 11 | argocd.argoproj.io/hook-delete-policy: HookSucceeded 12 | argocd.argoproj.io/sync-wave: "1" 13 | spec: 14 | containers: 15 | - command: 16 | - /bin/bash 17 | - -c 18 | - | 19 | /usr/local/bin/db-backup.sh 20 | image: quay.io/redhatworkshops/pricelist-maint:latest 21 | imagePullPolicy: IfNotPresent 22 | name: db-backup 23 | resources: 24 | limits: 25 | cpu: 32m 26 | memory: 32Mi 27 | requests: 28 | cpu: 16m 29 | memory: 16Mi 30 | dnsPolicy: ClusterFirst 31 | restartPolicy: Never 32 | -------------------------------------------------------------------------------- /hooks/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - presync-job.yaml 5 | - dbbackup.yaml 6 | - logrotate.yaml 7 | - postsync-job.yaml 8 | - github.com/christianh814/gitops-examples/pricelist 9 | - presync-sa.yaml 10 | - rb-for-sa.yaml 11 | - pricelist-wh-ss.yaml 12 | -------------------------------------------------------------------------------- /hooks/logrotate.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | run: logrotate 7 | name: logrotate 8 | namespace: pricelist 9 | annotations: 10 | argocd.argoproj.io/hook: PreSync 11 | argocd.argoproj.io/hook-delete-policy: HookSucceeded 12 | argocd.argoproj.io/sync-wave: "2" 13 | spec: 14 | containers: 15 | - command: 16 | - /bin/bash 17 | - -c 18 | - | 19 | /usr/local/bin/logrotate.sh 20 | image: quay.io/redhatworkshops/pricelist-maint:latest 21 | imagePullPolicy: IfNotPresent 22 | name: logrotate 23 | resources: 24 | limits: 25 | cpu: 32m 26 | memory: 32Mi 27 | requests: 28 | cpu: 16m 29 | memory: 16Mi 30 | dnsPolicy: ClusterFirst 31 | restartPolicy: Never 32 | -------------------------------------------------------------------------------- /hooks/postsync-job.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: batch/v1 2 | kind: Job 3 | metadata: 4 | creationTimestamp: null 5 | name: pricelist-postsync 6 | namespace: pricelist 7 | annotations: 8 | argocd.argoproj.io/hook: PostSync 9 | argocd.argoproj.io/hook-delete-policy: HookSucceeded 10 | argocd.argoproj.io/sync-wave: "0" 11 | spec: 12 | template: 13 | metadata: 14 | creationTimestamp: null 15 | spec: 16 | containers: 17 | - command: 18 | - /bin/bash 19 | - -c 20 | - | 21 | sleep 5 22 | id=$(uuidgen | awk -F'-' '{print $1}') 23 | curl -X POST --data-urlencode payload="{\"text\": \"Pricelist deployment ${id} was SUCCESSFUL.\"}" $(< /tmp/webhook/slackwebhook) 24 | image: quay.io/redhatworkshops/pricelist-maint:latest 25 | imagePullPolicy: IfNotPresent 26 | name: pricelist-postsync 27 | resources: 28 | requests: 29 | memory: "16Mi" 30 | cpu: "16m" 31 | limits: 32 | memory: "32Mi" 33 | cpu: "32m" 34 | volumeMounts: 35 | - name: slack 36 | mountPath: "/tmp/webhook" 37 | readOnly: true 38 | restartPolicy: Never 39 | volumes: 40 | - name: slack 41 | secret: 42 | secretName: slackwebhook 43 | -------------------------------------------------------------------------------- /hooks/presync-job.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: batch/v1 2 | kind: Job 3 | metadata: 4 | creationTimestamp: null 5 | name: pricelist-presync 6 | namespace: pricelist 7 | annotations: 8 | argocd.argoproj.io/hook: PreSync 9 | argocd.argoproj.io/hook-delete-policy: HookSucceeded 10 | argocd.argoproj.io/sync-wave: "0" 11 | spec: 12 | template: 13 | metadata: 14 | creationTimestamp: null 15 | spec: 16 | serviceAccountName: presyncjob-pricelist 17 | containers: 18 | - command: 19 | - /bin/bash 20 | - -c 21 | - | 22 | /usr/local/bin/maint-script.sh 23 | image: quay.io/redhatworkshops/pricelist-maint:latest 24 | imagePullPolicy: IfNotPresent 25 | name: pricelist-presync 26 | resources: 27 | requests: 28 | memory: "32Mi" 29 | cpu: "32m" 30 | limits: 31 | memory: "64Mi" 32 | cpu: "64m" 33 | restartPolicy: Never 34 | -------------------------------------------------------------------------------- /hooks/presync-sa.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | creationTimestamp: null 5 | name: presyncjob-pricelist 6 | namespace: pricelist 7 | annotations: 8 | argocd.argoproj.io/sync-wave: "1" 9 | -------------------------------------------------------------------------------- /hooks/pricelist-wh-ss.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: bitnami.com/v1alpha1 2 | kind: SealedSecret 3 | metadata: 4 | creationTimestamp: null 5 | name: slackwebhook 6 | namespace: pricelist 7 | annotations: 8 | argocd.argoproj.io/sync-wave: "7" 9 | spec: 10 | encryptedData: 11 | slackwebhook: AgAwuXvJmgpKnXBXuUctKC+gEh0DYv8jyU6GKyCbMdbNS5kE05UUSjNjlR412B0NrtxYDkn8Kqee9NTWCszJplOZmhusJ1pDgDfaHTJ96OZEbnmZ+7yuuKfrMy4oxVUJLBOxW/j+a7xWXTV+EjfSwfchqGYiEdWMU7l8v5/piD6ocuWJ7ug/o+17CMn/yMqvU/a3NfpnMIFArNvhOt95j6hD+ITsttaf6fjthukvjX+BJM2rA4cNGGJOdRl/r53SzSw1O8LpXVkSX/WLdVBbyqvCPMuOQnrMZHWHbsSglpbO6XRKbCwEMFe4DSoVwKm/aGj+mlo6HVllyN6a+FHxBZ/wyTPwUHohDpCGE+5ZHQwrZm2KYWhMNcOqlEqNeDetv/zfJnYlzTeXmdvKxMAHAbzTeHRB9jdzH0OAWCICZY9cYRcObVFQUvtbOvnhiPSsJZwxIs8/iZNm5FMH2rjtuaP+riTg7Ypicv+oQm/Eezl+v/lBKHlBEZNZYq8EM83hjgEjp2QLGMS3IlfRDurQORf9VZuOHyquJbdcBU5Pb/YMQeizinHCa0rkEsiRcnioayby+vAEtDlAmzsc1rnnhtaK6FElpqvpIjqbB7NrECIn6C5JTuqfkFhUsyBLbLFEt/cfw2UJR9maL+ALlvBc96hcYuEKiUsIAuIi8rULLxsbXgjfEJmPsJmRiW0z2WWuFhAQtJPdKI4juYW7mCNacxlMrUDE2tb4epNkeDMIZNnO8//MiyoB59nSLJLh076FBARyKUTIbSlAjP0kJ7U5nKBdVrCuW3jIsnEGSwrRdXPtbA== 12 | template: 13 | metadata: 14 | creationTimestamp: null 15 | name: slackwebhook 16 | namespace: pricelist 17 | 18 | -------------------------------------------------------------------------------- /hooks/rb-for-sa.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: RoleBinding 3 | metadata: 4 | creationTimestamp: null 5 | name: edit 6 | namespace: pricelist 7 | annotations: 8 | argocd.argoproj.io/sync-wave: "1" 9 | roleRef: 10 | apiGroup: rbac.authorization.k8s.io 11 | kind: ClusterRole 12 | name: edit 13 | subjects: 14 | - kind: ServiceAccount 15 | name: presyncjob-pricelist 16 | namespace: pricelist 17 | -------------------------------------------------------------------------------- /job/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | namespace: welcome-app 4 | 5 | resources: 6 | - ../welcome-k8s/overlays/default/ 7 | - test-job.yaml 8 | - test-sa-rbac.yaml 9 | - test-sa.yaml 10 | -------------------------------------------------------------------------------- /job/test-job.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: batch/v1 3 | kind: Job 4 | metadata: 5 | annotations: 6 | argocd.argoproj.io/hook: Sync 7 | # argocd.argoproj.io/hook: PostSync 8 | # argocd.argoproj.io/hook-delete-policy: HookSucceeded 9 | name: pod-executer 10 | spec: 11 | ttlSecondsAfterFinished: 30 12 | template: 13 | spec: 14 | containers: 15 | - image: quay.io/openshift/origin-cli:4.10 16 | command: 17 | - /bin/bash 18 | - -c 19 | - | 20 | export HOME=/tmp/ 21 | echo "" 22 | echo "Running Kubectl exec" 23 | echo "--------------------" 24 | echo "" 25 | kubectl exec -n welcome-app -i $(kubectl get pods -n welcome-app -l app=welcome-php -o name) -- hostname 26 | sleep $SLEEP 27 | imagePullPolicy: Always 28 | name: pod-execute-pod 29 | env: 30 | - name: SLEEP 31 | value: "10" 32 | dnsPolicy: ClusterFirst 33 | restartPolicy: OnFailure 34 | serviceAccountName: pod-exec-sa 35 | terminationGracePeriodSeconds: 30 36 | -------------------------------------------------------------------------------- /job/test-sa-rbac.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: rbac.authorization.k8s.io/v1 3 | kind: ClusterRole 4 | metadata: 5 | name: pod-exec-role 6 | rules: 7 | - apiGroups: 8 | - "" 9 | resources: 10 | - pods 11 | - pods/exec 12 | verbs: 13 | - get 14 | - list 15 | - apiGroups: 16 | - "" 17 | resources: 18 | - pods/exec 19 | verbs: 20 | - get 21 | - list 22 | - create 23 | --- 24 | apiVersion: rbac.authorization.k8s.io/v1 25 | kind: RoleBinding 26 | metadata: 27 | creationTimestamp: null 28 | name: pod-exec 29 | namespace: welcome-app 30 | roleRef: 31 | apiGroup: rbac.authorization.k8s.io 32 | kind: ClusterRole 33 | name: pod-exec-role 34 | subjects: 35 | - kind: ServiceAccount 36 | name: pod-exec-sa 37 | namespace: welcome-app 38 | -------------------------------------------------------------------------------- /job/test-sa.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | creationTimestamp: null 5 | name: pod-exec-sa 6 | namespace: welcome-app 7 | -------------------------------------------------------------------------------- /kustomize-and-helm/README.md: -------------------------------------------------------------------------------- 1 | # Kustomize and Helm 2 | 3 | In order to do this you must add `--enable-helm` to the `kustomzie` command in Argo CD. You do this by modifying the Argo CD Config Map and adding it to the `kustomizeBuildOptions` configuration. 4 | 5 | * [Argo CD](https://argo-cd.readthedocs.io/en/stable/user-guide/kustomize/#kustomizing-helm-charts) 6 | * [Argo CD Operator (i.e. OpenShift GitOps)](https://argocd-operator.readthedocs.io/en/latest/reference/argocd/#kustomize-build-options-example) 7 | 8 | If you're install Argo CD using a Helm Chart, use this in your `values.yaml` file: 9 | 10 | ```yaml 11 | configs: 12 | cm: 13 | kustomize.buildOptions: "--enable-helm" 14 | ``` 15 | 16 | # Using this repo 17 | 18 | Added the [knh-argocdapp.yaml](knh-argocdapp.yaml) file as an example/for convenience. 19 | -------------------------------------------------------------------------------- /kustomize-and-helm/app/base/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | helmCharts: 5 | - name: quarkus 6 | version: 0.0.3 7 | repo: https://redhat-developer.github.io/redhat-helm-charts 8 | valuesFile: values.yaml 9 | releaseName: quarkus-app 10 | ## IF needed 11 | #includeCRDs: true 12 | -------------------------------------------------------------------------------- /kustomize-and-helm/app/base/values.yaml: -------------------------------------------------------------------------------- 1 | build: 2 | enabled: false 3 | deploy: 4 | route: 5 | enabled: false 6 | image: 7 | name: quay.io/ablock/gitops-helm-quarkus 8 | -------------------------------------------------------------------------------- /kustomize-and-helm/app/overlays/default/cm.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: demo-cm 5 | data: 6 | enablefun: "true" 7 | -------------------------------------------------------------------------------- /kustomize-and-helm/app/overlays/default/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | namespace: demo 5 | 6 | bases: 7 | - ../../base/ 8 | 9 | resources: 10 | - ns.yaml 11 | - cm.yaml 12 | 13 | patchesJson6902: 14 | - target: 15 | group: apps 16 | version: v1 17 | kind: Deployment 18 | name: quarkus-app 19 | patch: | 20 | - op: replace 21 | path: /spec/replicas 22 | value: 3 23 | -------------------------------------------------------------------------------- /kustomize-and-helm/app/overlays/default/ns.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | creationTimestamp: null 5 | name: demo 6 | -------------------------------------------------------------------------------- /kustomize-and-helm/knh-argocdapp.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Application 3 | metadata: 4 | name: quarkus-app 5 | namespace: argocd 6 | spec: 7 | project: default 8 | source: 9 | path: kustomize-and-helm/app/overlays/default 10 | repoURL: https://github.com/christianh814/gitops-examples 11 | targetRevision: main 12 | destination: 13 | namespace: demo 14 | server: https://kubernetes.default.svc 15 | syncPolicy: 16 | automated: 17 | prune: true 18 | selfHeal: true 19 | syncOptions: 20 | - CreateNamespace=true 21 | retry: 22 | limit: 5 23 | backoff: 24 | duration: 5s 25 | maxDuration: 3m0s 26 | factor: 2 27 | -------------------------------------------------------------------------------- /machineautoscaler/base/cluster-autoscaler.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: "autoscaling.openshift.io/v1" 2 | kind: "ClusterAutoscaler" 3 | metadata: 4 | name: "default" 5 | spec: 6 | resourceLimits: 7 | maxNodesTotal: 9 8 | scaleDown: 9 | enabled: true 10 | delayAfterAdd: 1m 11 | delayAfterDelete: 1m 12 | delayAfterFailure: 30s 13 | unneededTime: 10s 14 | -------------------------------------------------------------------------------- /machineautoscaler/base/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - openshift-machine-api-ns.yaml 5 | - cluster-autoscaler.yaml 6 | -------------------------------------------------------------------------------- /machineautoscaler/base/openshift-machine-api-ns.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | creationTimestamp: null 5 | name: openshift-machine-api 6 | -------------------------------------------------------------------------------- /machineautoscaler/overlays/cluster1/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/christianh814/gitops-examples/54ec4b15b3127e47bdc65930c37a2d544686ed12/machineautoscaler/overlays/cluster1/.gitkeep -------------------------------------------------------------------------------- /machineautoscaler/overlays/cluster2/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - ../../base 5 | - worker-us-east-1a.yaml 6 | - worker-us-east-1b.yaml 7 | - worker-us-east-1c.yaml 8 | -------------------------------------------------------------------------------- /machineautoscaler/overlays/cluster2/worker-us-east-1a.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: "autoscaling.openshift.io/v1beta1" 2 | kind: "MachineAutoscaler" 3 | metadata: 4 | name: "worker-us-east-1a" 5 | namespace: "openshift-machine-api" 6 | spec: 7 | minReplicas: 1 8 | maxReplicas: 3 9 | scaleTargetRef: 10 | apiVersion: machine.openshift.io/v1beta1 11 | kind: MachineSet 12 | name: cluster2-ngdf7-worker-us-east-1a 13 | -------------------------------------------------------------------------------- /machineautoscaler/overlays/cluster2/worker-us-east-1b.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: "autoscaling.openshift.io/v1beta1" 2 | kind: "MachineAutoscaler" 3 | metadata: 4 | name: "worker-us-east-1b" 5 | namespace: "openshift-machine-api" 6 | spec: 7 | minReplicas: 1 8 | maxReplicas: 3 9 | scaleTargetRef: 10 | apiVersion: machine.openshift.io/v1beta1 11 | kind: MachineSet 12 | name: cluster2-ngdf7-worker-us-east-1b 13 | -------------------------------------------------------------------------------- /machineautoscaler/overlays/cluster2/worker-us-east-1c.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: "autoscaling.openshift.io/v1beta1" 2 | kind: "MachineAutoscaler" 3 | metadata: 4 | name: "worker-us-east-1c" 5 | namespace: "openshift-machine-api" 6 | spec: 7 | minReplicas: 1 8 | maxReplicas: 3 9 | scaleTargetRef: 10 | apiVersion: machine.openshift.io/v1beta1 11 | kind: MachineSet 12 | name: cluster2-ngdf7-worker-us-east-1c 13 | -------------------------------------------------------------------------------- /machineautoscaler/overlays/cluster3/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - ../../base 5 | - us-west-2a.yaml 6 | -------------------------------------------------------------------------------- /machineautoscaler/overlays/cluster3/us-west-2a.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: "autoscaling.openshift.io/v1beta1" 2 | kind: "MachineAutoscaler" 3 | metadata: 4 | name: "worker-us-west-2a" 5 | namespace: "openshift-machine-api" 6 | spec: 7 | minReplicas: 1 8 | maxReplicas: 3 9 | scaleTargetRef: 10 | apiVersion: machine.openshift.io/v1beta1 11 | kind: MachineSet 12 | name: cluster3-mj5nw-worker-us-west-2a 13 | -------------------------------------------------------------------------------- /machineconfigs/cli-job-master.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: batch/v1 3 | kind: Job 4 | metadata: 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "2" 7 | argocd.argoproj.io/hook: PostSync 8 | argocd.argoproj.io/hook-delete-policy: HookSucceeded 9 | name: mcp-master-wait-job 10 | namespace: argocd 11 | spec: 12 | template: 13 | spec: 14 | containers: 15 | - image: quay.io/openshift/origin-cli:4.11 16 | command: 17 | - /bin/bash 18 | - -c 19 | - | 20 | export HOME=/tmp/mcp 21 | echo "" 22 | echo -n "Waiting for the MCP $MCP to converge." 23 | sleep $SLEEP 24 | ## Could also use `kubectl` 25 | until oc wait --for condition=updated --timeout=60s mcp $MCP 26 | do 27 | echo -n "...still waiting for $MCP to converge" 28 | sleep $SLEEP 29 | done 30 | echo "DONE" 31 | imagePullPolicy: Always 32 | name: mcp-master-wait-job 33 | env: 34 | - name: SLEEP 35 | value: "5" 36 | - name: MCP 37 | value: master 38 | dnsPolicy: ClusterFirst 39 | restartPolicy: OnFailure 40 | serviceAccountName: cli-job-sa 41 | terminationGracePeriodSeconds: 30 42 | -------------------------------------------------------------------------------- /machineconfigs/cli-job-worker.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: batch/v1 3 | kind: Job 4 | metadata: 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "3" 7 | argocd.argoproj.io/hook: PostSync 8 | argocd.argoproj.io/hook-delete-policy: HookSucceeded 9 | name: mcp-worker-wait-job 10 | namespace: argocd 11 | spec: 12 | template: 13 | spec: 14 | containers: 15 | - image: quay.io/openshift/origin-cli:4.11 16 | command: 17 | - /bin/bash 18 | - -c 19 | - | 20 | export HOME=/tmp/mcp 21 | echo "" 22 | echo -n "Waiting for the MCP $MCP to converge." 23 | sleep $SLEEP 24 | ## Cloud also use `kubectl` 25 | until oc wait --for condition=updated --timeout=60s mcp $MCP 26 | do 27 | echo -n "...still waiting for $MCP to converge" 28 | sleep $SLEEP 29 | done 30 | echo "DONE" 31 | imagePullPolicy: Always 32 | name: mcp-worker-wait-job 33 | env: 34 | - name: SLEEP 35 | value: "5" 36 | - name: MCP 37 | value: worker 38 | dnsPolicy: ClusterFirst 39 | restartPolicy: OnFailure 40 | serviceAccountName: cli-job-sa 41 | terminationGracePeriodSeconds: 30 42 | -------------------------------------------------------------------------------- /machineconfigs/cli-sa-rbac.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRole 3 | metadata: 4 | name: cli-job-sa-role 5 | rules: 6 | - apiGroups: 7 | - apiextensions.k8s.io 8 | - machineconfiguration.openshift.io 9 | resources: 10 | - customresourcedefinitions 11 | - machineconfigpools 12 | verbs: 13 | - get 14 | - list 15 | --- 16 | apiVersion: rbac.authorization.k8s.io/v1 17 | kind: ClusterRoleBinding 18 | metadata: 19 | name: cli-job-sa-rolebinding 20 | roleRef: 21 | apiGroup: rbac.authorization.k8s.io 22 | kind: ClusterRole 23 | name: cli-job-sa-role 24 | subjects: 25 | - kind: ServiceAccount 26 | name: cli-job-sa 27 | namespace: argocd 28 | -------------------------------------------------------------------------------- /machineconfigs/cli-sa.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | annotations: {} 5 | name: cli-job-sa 6 | namespace: argocd 7 | -------------------------------------------------------------------------------- /machineconfigs/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - mc-foo.yaml 5 | - cli-sa.yaml 6 | - cli-sa-rbac.yaml 7 | - cli-job-master.yaml 8 | - cli-job-worker.yaml 9 | -------------------------------------------------------------------------------- /machineconfigs/mc-foo.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: machineconfiguration.openshift.io/v1 2 | kind: MachineConfig 3 | metadata: 4 | labels: 5 | machineconfiguration.openshift.io/role: worker 6 | name: 98-worker-foo 7 | spec: 8 | config: 9 | ignition: 10 | config: {} 11 | security: 12 | tls: {} 13 | timeouts: {} 14 | version: 3.1.0 15 | networkd: {} 16 | passwd: {} 17 | storage: 18 | files: 19 | - path: "/etc/foo/foo.conf" 20 | filesystem: root 21 | mode: 420 22 | overwrite: true 23 | contents: 24 | source: data:;base64,R2l0T3BzIGlzIGZ1biwgYW5kIGV4Y2l0aW5nIQo= 25 | - path: "/etc/foo/foo-other.conf" 26 | filesystem: root 27 | mode: 420 28 | overwrite: true 29 | contents: 30 | source: data:;base64,T3BlblNoaWZ0IGlzIHRoZSBiZXN0Cg== 31 | -------------------------------------------------------------------------------- /machinesets/base/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - openshift-machine-api-ns.yaml 5 | -------------------------------------------------------------------------------- /machinesets/base/openshift-machine-api-ns.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | creationTimestamp: null 5 | name: openshift-machine-api 6 | -------------------------------------------------------------------------------- /machinesets/overlays/cluster1/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/christianh814/gitops-examples/54ec4b15b3127e47bdc65930c37a2d544686ed12/machinesets/overlays/cluster1/.gitkeep -------------------------------------------------------------------------------- /machinesets/overlays/cluster2/cluster3-mj5nw-worker-us-west-2a.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: machine.openshift.io/v1beta1 2 | kind: MachineSet 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | machine.openshift.io/cluster-api-cluster: cluster3-mj5nw 7 | name: cluster3-mj5nw-worker-us-west-2a 8 | namespace: openshift-machine-api 9 | spec: 10 | replicas: 1 11 | selector: 12 | matchLabels: 13 | machine.openshift.io/cluster-api-cluster: cluster3-mj5nw 14 | machine.openshift.io/cluster-api-machineset: cluster3-mj5nw-worker-us-west-2a 15 | template: 16 | metadata: 17 | labels: 18 | machine.openshift.io/cluster-api-cluster: cluster3-mj5nw 19 | machine.openshift.io/cluster-api-machine-role: worker 20 | machine.openshift.io/cluster-api-machine-type: worker 21 | machine.openshift.io/cluster-api-machineset: cluster3-mj5nw-worker-us-west-2a 22 | spec: 23 | metadata: {} 24 | providerSpec: 25 | value: 26 | ami: 27 | id: ami-0dd9008abadc519f1 28 | apiVersion: awsproviderconfig.openshift.io/v1beta1 29 | blockDevices: 30 | - ebs: 31 | encrypted: true 32 | iops: 0 33 | kmsKey: 34 | arn: "" 35 | volumeSize: 120 36 | volumeType: gp2 37 | credentialsSecret: 38 | name: aws-cloud-credentials 39 | deviceIndex: 0 40 | iamInstanceProfile: 41 | id: cluster3-mj5nw-worker-profile 42 | instanceType: m5.large 43 | kind: AWSMachineProviderConfig 44 | metadata: 45 | creationTimestamp: null 46 | placement: 47 | availabilityZone: us-west-2a 48 | region: us-west-2 49 | securityGroups: 50 | - filters: 51 | - name: tag:Name 52 | values: 53 | - cluster3-mj5nw-worker-sg 54 | subnet: 55 | filters: 56 | - name: tag:Name 57 | values: 58 | - cluster3-mj5nw-private-us-west-2a 59 | tags: 60 | - name: kubernetes.io/cluster/cluster3-mj5nw 61 | value: owned 62 | userDataSecret: 63 | name: worker-user-data 64 | -------------------------------------------------------------------------------- /machinesets/overlays/cluster2/cluster3-mj5nw-worker-us-west-2b.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: machine.openshift.io/v1beta1 2 | kind: MachineSet 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | machine.openshift.io/cluster-api-cluster: cluster3-mj5nw 7 | name: cluster3-mj5nw-worker-us-west-2b 8 | namespace: openshift-machine-api 9 | spec: 10 | replicas: 1 11 | selector: 12 | matchLabels: 13 | machine.openshift.io/cluster-api-cluster: cluster3-mj5nw 14 | machine.openshift.io/cluster-api-machineset: cluster3-mj5nw-worker-us-west-2b 15 | template: 16 | metadata: 17 | labels: 18 | machine.openshift.io/cluster-api-cluster: cluster3-mj5nw 19 | machine.openshift.io/cluster-api-machine-role: worker 20 | machine.openshift.io/cluster-api-machine-type: worker 21 | machine.openshift.io/cluster-api-machineset: cluster3-mj5nw-worker-us-west-2b 22 | spec: 23 | metadata: {} 24 | providerSpec: 25 | value: 26 | ami: 27 | id: ami-0dd9008abadc519f1 28 | apiVersion: awsproviderconfig.openshift.io/v1beta1 29 | blockDevices: 30 | - ebs: 31 | encrypted: true 32 | iops: 0 33 | kmsKey: 34 | arn: "" 35 | volumeSize: 120 36 | volumeType: gp2 37 | credentialsSecret: 38 | name: aws-cloud-credentials 39 | deviceIndex: 0 40 | iamInstanceProfile: 41 | id: cluster3-mj5nw-worker-profile 42 | instanceType: m5.large 43 | kind: AWSMachineProviderConfig 44 | metadata: 45 | creationTimestamp: null 46 | placement: 47 | availabilityZone: us-west-2b 48 | region: us-west-2 49 | securityGroups: 50 | - filters: 51 | - name: tag:Name 52 | values: 53 | - cluster3-mj5nw-worker-sg 54 | subnet: 55 | filters: 56 | - name: tag:Name 57 | values: 58 | - cluster3-mj5nw-private-us-west-2b 59 | tags: 60 | - name: kubernetes.io/cluster/cluster3-mj5nw 61 | value: owned 62 | userDataSecret: 63 | name: worker-user-data 64 | -------------------------------------------------------------------------------- /machinesets/overlays/cluster2/cluster3-mj5nw-worker-us-west-2c.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: machine.openshift.io/v1beta1 2 | kind: MachineSet 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | machine.openshift.io/cluster-api-cluster: cluster3-mj5nw 7 | name: cluster3-mj5nw-worker-us-west-2c 8 | namespace: openshift-machine-api 9 | spec: 10 | replicas: 1 11 | selector: 12 | matchLabels: 13 | machine.openshift.io/cluster-api-cluster: cluster3-mj5nw 14 | machine.openshift.io/cluster-api-machineset: cluster3-mj5nw-worker-us-west-2c 15 | template: 16 | metadata: 17 | labels: 18 | machine.openshift.io/cluster-api-cluster: cluster3-mj5nw 19 | machine.openshift.io/cluster-api-machine-role: worker 20 | machine.openshift.io/cluster-api-machine-type: worker 21 | machine.openshift.io/cluster-api-machineset: cluster3-mj5nw-worker-us-west-2c 22 | spec: 23 | metadata: {} 24 | providerSpec: 25 | value: 26 | ami: 27 | id: ami-0dd9008abadc519f1 28 | apiVersion: awsproviderconfig.openshift.io/v1beta1 29 | blockDevices: 30 | - ebs: 31 | encrypted: true 32 | iops: 0 33 | kmsKey: 34 | arn: "" 35 | volumeSize: 120 36 | volumeType: gp2 37 | credentialsSecret: 38 | name: aws-cloud-credentials 39 | deviceIndex: 0 40 | iamInstanceProfile: 41 | id: cluster3-mj5nw-worker-profile 42 | instanceType: m5.large 43 | kind: AWSMachineProviderConfig 44 | metadata: 45 | creationTimestamp: null 46 | placement: 47 | availabilityZone: us-west-2c 48 | region: us-west-2 49 | securityGroups: 50 | - filters: 51 | - name: tag:Name 52 | values: 53 | - cluster3-mj5nw-worker-sg 54 | subnet: 55 | filters: 56 | - name: tag:Name 57 | values: 58 | - cluster3-mj5nw-private-us-west-2c 59 | tags: 60 | - name: kubernetes.io/cluster/cluster3-mj5nw 61 | value: owned 62 | userDataSecret: 63 | name: worker-user-data 64 | -------------------------------------------------------------------------------- /machinesets/overlays/cluster2/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - ../../base 5 | - cluster3-mj5nw-worker-us-west-2a.yaml 6 | - cluster3-mj5nw-worker-us-west-2b.yaml 7 | - cluster3-mj5nw-worker-us-west-2c.yaml 8 | -------------------------------------------------------------------------------- /machinesets/overlays/cluster3/cluster3-mj5nw-worker-us-west-2a.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: machine.openshift.io/v1beta1 2 | kind: MachineSet 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | machine.openshift.io/cluster-api-cluster: cluster3-mj5nw 7 | name: cluster3-mj5nw-worker-us-west-2a 8 | namespace: openshift-machine-api 9 | spec: 10 | replicas: 1 11 | selector: 12 | matchLabels: 13 | machine.openshift.io/cluster-api-cluster: cluster3-mj5nw 14 | machine.openshift.io/cluster-api-machineset: cluster3-mj5nw-worker-us-west-2a 15 | template: 16 | metadata: 17 | labels: 18 | machine.openshift.io/cluster-api-cluster: cluster3-mj5nw 19 | machine.openshift.io/cluster-api-machine-role: worker 20 | machine.openshift.io/cluster-api-machine-type: worker 21 | machine.openshift.io/cluster-api-machineset: cluster3-mj5nw-worker-us-west-2a 22 | spec: 23 | metadata: {} 24 | providerSpec: 25 | value: 26 | ami: 27 | id: ami-0dd9008abadc519f1 28 | apiVersion: awsproviderconfig.openshift.io/v1beta1 29 | blockDevices: 30 | - ebs: 31 | encrypted: true 32 | iops: 0 33 | kmsKey: 34 | arn: "" 35 | volumeSize: 120 36 | volumeType: gp2 37 | credentialsSecret: 38 | name: aws-cloud-credentials 39 | deviceIndex: 0 40 | iamInstanceProfile: 41 | id: cluster3-mj5nw-worker-profile 42 | instanceType: m5.large 43 | kind: AWSMachineProviderConfig 44 | metadata: 45 | creationTimestamp: null 46 | placement: 47 | availabilityZone: us-west-2a 48 | region: us-west-2 49 | securityGroups: 50 | - filters: 51 | - name: tag:Name 52 | values: 53 | - cluster3-mj5nw-worker-sg 54 | subnet: 55 | filters: 56 | - name: tag:Name 57 | values: 58 | - cluster3-mj5nw-private-us-west-2a 59 | tags: 60 | - name: kubernetes.io/cluster/cluster3-mj5nw 61 | value: owned 62 | userDataSecret: 63 | name: worker-user-data 64 | -------------------------------------------------------------------------------- /machinesets/overlays/cluster3/cluster3-mj5nw-worker-us-west-2b.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: machine.openshift.io/v1beta1 2 | kind: MachineSet 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | machine.openshift.io/cluster-api-cluster: cluster3-mj5nw 7 | name: cluster3-mj5nw-worker-us-west-2b 8 | namespace: openshift-machine-api 9 | spec: 10 | replicas: 1 11 | selector: 12 | matchLabels: 13 | machine.openshift.io/cluster-api-cluster: cluster3-mj5nw 14 | machine.openshift.io/cluster-api-machineset: cluster3-mj5nw-worker-us-west-2b 15 | template: 16 | metadata: 17 | labels: 18 | machine.openshift.io/cluster-api-cluster: cluster3-mj5nw 19 | machine.openshift.io/cluster-api-machine-role: worker 20 | machine.openshift.io/cluster-api-machine-type: worker 21 | machine.openshift.io/cluster-api-machineset: cluster3-mj5nw-worker-us-west-2b 22 | spec: 23 | metadata: {} 24 | providerSpec: 25 | value: 26 | ami: 27 | id: ami-0dd9008abadc519f1 28 | apiVersion: awsproviderconfig.openshift.io/v1beta1 29 | blockDevices: 30 | - ebs: 31 | encrypted: true 32 | iops: 0 33 | kmsKey: 34 | arn: "" 35 | volumeSize: 120 36 | volumeType: gp2 37 | credentialsSecret: 38 | name: aws-cloud-credentials 39 | deviceIndex: 0 40 | iamInstanceProfile: 41 | id: cluster3-mj5nw-worker-profile 42 | instanceType: m5.large 43 | kind: AWSMachineProviderConfig 44 | metadata: 45 | creationTimestamp: null 46 | placement: 47 | availabilityZone: us-west-2b 48 | region: us-west-2 49 | securityGroups: 50 | - filters: 51 | - name: tag:Name 52 | values: 53 | - cluster3-mj5nw-worker-sg 54 | subnet: 55 | filters: 56 | - name: tag:Name 57 | values: 58 | - cluster3-mj5nw-private-us-west-2b 59 | tags: 60 | - name: kubernetes.io/cluster/cluster3-mj5nw 61 | value: owned 62 | userDataSecret: 63 | name: worker-user-data 64 | -------------------------------------------------------------------------------- /machinesets/overlays/cluster3/cluster3-mj5nw-worker-us-west-2c.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: machine.openshift.io/v1beta1 2 | kind: MachineSet 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | machine.openshift.io/cluster-api-cluster: cluster3-mj5nw 7 | name: cluster3-mj5nw-worker-us-west-2c 8 | namespace: openshift-machine-api 9 | spec: 10 | replicas: 1 11 | selector: 12 | matchLabels: 13 | machine.openshift.io/cluster-api-cluster: cluster3-mj5nw 14 | machine.openshift.io/cluster-api-machineset: cluster3-mj5nw-worker-us-west-2c 15 | template: 16 | metadata: 17 | labels: 18 | machine.openshift.io/cluster-api-cluster: cluster3-mj5nw 19 | machine.openshift.io/cluster-api-machine-role: worker 20 | machine.openshift.io/cluster-api-machine-type: worker 21 | machine.openshift.io/cluster-api-machineset: cluster3-mj5nw-worker-us-west-2c 22 | spec: 23 | metadata: {} 24 | providerSpec: 25 | value: 26 | ami: 27 | id: ami-0dd9008abadc519f1 28 | apiVersion: awsproviderconfig.openshift.io/v1beta1 29 | blockDevices: 30 | - ebs: 31 | encrypted: true 32 | iops: 0 33 | kmsKey: 34 | arn: "" 35 | volumeSize: 120 36 | volumeType: gp2 37 | credentialsSecret: 38 | name: aws-cloud-credentials 39 | deviceIndex: 0 40 | iamInstanceProfile: 41 | id: cluster3-mj5nw-worker-profile 42 | instanceType: m5.large 43 | kind: AWSMachineProviderConfig 44 | metadata: 45 | creationTimestamp: null 46 | placement: 47 | availabilityZone: us-west-2c 48 | region: us-west-2 49 | securityGroups: 50 | - filters: 51 | - name: tag:Name 52 | values: 53 | - cluster3-mj5nw-worker-sg 54 | subnet: 55 | filters: 56 | - name: tag:Name 57 | values: 58 | - cluster3-mj5nw-private-us-west-2c 59 | tags: 60 | - name: kubernetes.io/cluster/cluster3-mj5nw 61 | value: owned 62 | userDataSecret: 63 | name: worker-user-data 64 | -------------------------------------------------------------------------------- /machinesets/overlays/cluster3/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - ../../base 5 | - cluster3-mj5nw-worker-us-west-2a.yaml 6 | - cluster3-mj5nw-worker-us-west-2b.yaml 7 | - cluster3-mj5nw-worker-us-west-2c.yaml 8 | -------------------------------------------------------------------------------- /multi-source-argocd/external-helm-values.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Application 3 | metadata: 4 | name: quarkus 5 | namespace: argocd 6 | spec: 7 | project: default 8 | sources: 9 | - repoURL: https://redhat-developer.github.io/redhat-helm-charts 10 | chart: quarkus 11 | targetRevision: "0.0.3" 12 | helm: 13 | valueFiles: 14 | - $values/multi-source-argocd/quarkus-values.yaml 15 | - repoURL: https://github.com/christianh814/gitops-examples 16 | targetRevision: main 17 | ref: values 18 | destination: 19 | server: https://kubernetes.default.svc 20 | namespace: javademo 21 | syncPolicy: 22 | automated: 23 | prune: true 24 | selfHeal: true 25 | syncOptions: 26 | - CreateNamespace=true 27 | retry: 28 | limit: 5 29 | backoff: 30 | duration: 5s 31 | maxDuration: 3m0s 32 | factor: 2 33 | -------------------------------------------------------------------------------- /multi-source-argocd/multi-source.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Application 3 | metadata: 4 | name: pricelist 5 | namespace: argocd 6 | spec: 7 | project: default 8 | # Note it's "sources" vs "source" 9 | sources: 10 | - repoURL: https://github.com/christianh814/gitops-examples 11 | path: applicationsets/rollingsync/apps/pricelist-config 12 | targetRevision: main 13 | - chart: mysql 14 | repoURL: https://charts.bitnami.com/bitnami 15 | targetRevision: 9.2.0 16 | helm: 17 | releaseName: pricelist-db 18 | parameters: 19 | - name: architecture 20 | value: "replication" 21 | - name: serviceAccount.name 22 | value: "pricelist-db" 23 | - name: auth.database 24 | value: "pricelist" 25 | - name: auth.username 26 | value: "pricelist" 27 | - name: auth.password 28 | value: "pricelist" 29 | - name: secondary.replicaCount 30 | value: "2" 31 | - repoURL: https://github.com/christianh814/gitops-examples 32 | path: applicationsets/rollingsync/apps/pricelist-frontend 33 | targetRevision: main 34 | destination: 35 | server: https://kubernetes.default.svc 36 | ##namespace: default 37 | namespace: pricelist 38 | syncPolicy: 39 | automated: 40 | prune: true 41 | selfHeal: true 42 | retry: 43 | limit: 5 44 | backoff: 45 | duration: 5s 46 | factor: 2 47 | maxDuration: 5m 48 | -------------------------------------------------------------------------------- /multi-source-argocd/quarkus-values.yaml: -------------------------------------------------------------------------------- 1 | image: 2 | name: quay.io/ablock/gitops-helm-quarkus 3 | build: 4 | enabled: false 5 | deploy: 6 | route: 7 | enabled: false 8 | -------------------------------------------------------------------------------- /poor-mans-syncwave/apps/bgd/bgd-cli-sa.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | annotations: 5 | argocd.argoproj.io/sync-wave: "0" 6 | argocd.argoproj.io/hook: PreSync 7 | name: cli-job-sa-bgd 8 | namespace: bgd 9 | -------------------------------------------------------------------------------- /poor-mans-syncwave/apps/bgd/bgd-deployment.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "2" 7 | creationTimestamp: null 8 | labels: 9 | app: bgd 10 | name: bgd 11 | spec: 12 | replicas: 1 13 | selector: 14 | matchLabels: 15 | app: bgd 16 | strategy: {} 17 | template: 18 | metadata: 19 | creationTimestamp: null 20 | labels: 21 | app: bgd 22 | spec: 23 | containers: 24 | - image: quay.io/redhatworkshops/bgd:latest 25 | name: bgd 26 | env: 27 | - name: COLOR 28 | value: "blue" 29 | resources: {} 30 | --- 31 | -------------------------------------------------------------------------------- /poor-mans-syncwave/apps/bgd/bgd-namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | annotations: 5 | argocd.argoproj.io/sync-wave: "0" 6 | name: bgd 7 | -------------------------------------------------------------------------------- /poor-mans-syncwave/apps/bgd/bgd-presync-job.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: batch/v1 2 | kind: Job 3 | metadata: 4 | annotations: 5 | argocd.argoproj.io/hook: PreSync 6 | name: bgd-cli-wait 7 | spec: 8 | template: 9 | spec: 10 | containers: 11 | - image: quay.io/openshift/origin-cli:4.11 12 | command: 13 | - /bin/bash 14 | - -c 15 | - | 16 | export HOME=/tmp/cli 17 | echo "" 18 | echo -n "Waiting for deployment" 19 | sleep $SLEEP 20 | ## Cloud also use `kubectl` 21 | until oc wait --for condition=complete --timeout=30m jobs/guestbook-cli-wait -n guestbook 2>&1 >/dev/null 22 | do 23 | echo -n "." 24 | sleep $SLEEP 25 | done 26 | echo -n -e "DONE\n" 27 | imagePullPolicy: Always 28 | name: oc-wait-container 29 | env: 30 | - name: SLEEP 31 | value: "15" 32 | dnsPolicy: ClusterFirst 33 | restartPolicy: OnFailure 34 | serviceAccountName: cli-job-sa-bgd 35 | terminationGracePeriodSeconds: 90 36 | -------------------------------------------------------------------------------- /poor-mans-syncwave/apps/bgd/bgd-rbac.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRole 3 | metadata: 4 | annotations: 5 | argocd.argoproj.io/sync-wave: "0" 6 | argocd.argoproj.io/hook: PreSync 7 | name: cli-job-sa-role-bgd 8 | rules: 9 | - apiGroups: 10 | - batch 11 | resources: 12 | - jobs 13 | verbs: 14 | - get 15 | - list 16 | - watch 17 | --- 18 | apiVersion: rbac.authorization.k8s.io/v1 19 | kind: ClusterRoleBinding 20 | metadata: 21 | name: cli-job-sa-rolebinding-bgd 22 | annotations: 23 | argocd.argoproj.io/sync-wave: "0" 24 | argocd.argoproj.io/hook: PreSync 25 | roleRef: 26 | apiGroup: rbac.authorization.k8s.io 27 | kind: ClusterRole 28 | name: cli-job-sa-role-bgd 29 | subjects: 30 | - kind: ServiceAccount 31 | name: cli-job-sa-bgd 32 | namespace: bgd 33 | -------------------------------------------------------------------------------- /poor-mans-syncwave/apps/bgd/bgd-svc.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "1" 7 | creationTimestamp: null 8 | labels: 9 | app: bgd 10 | name: bgd 11 | spec: 12 | ports: 13 | - port: 8080 14 | protocol: TCP 15 | targetPort: 8080 16 | selector: 17 | app: bgd 18 | --- 19 | -------------------------------------------------------------------------------- /poor-mans-syncwave/apps/bgd/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | namespace: bgd 4 | resources: 5 | - bgd-namespace.yaml 6 | - bgd-cli-sa.yaml 7 | - bgd-deployment.yaml 8 | - bgd-presync-job.yaml 9 | - bgd-rbac.yaml 10 | - bgd-svc.yaml 11 | -------------------------------------------------------------------------------- /poor-mans-syncwave/apps/guestbook/guestbook-cli-sa.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | annotations: 5 | argocd.argoproj.io/sync-wave: "0" 6 | name: cli-job-sa 7 | namespace: guestbook 8 | -------------------------------------------------------------------------------- /poor-mans-syncwave/apps/guestbook/guestbook-frontend-deploy.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | name: frontend 6 | annotations: 7 | argocd.argoproj.io/sync-wave: "2" 8 | spec: 9 | selector: 10 | matchLabels: 11 | app: guestbook 12 | tier: frontend 13 | replicas: 3 14 | template: 15 | metadata: 16 | labels: 17 | app: guestbook 18 | tier: frontend 19 | spec: 20 | containers: 21 | - name: php-redis 22 | image: gcr.io/google-samples/gb-frontend:v4 23 | resources: 24 | requests: 25 | cpu: 100m 26 | memory: 100Mi 27 | env: 28 | - name: GET_HOSTS_FROM 29 | value: dns 30 | ports: 31 | - containerPort: 80 32 | -------------------------------------------------------------------------------- /poor-mans-syncwave/apps/guestbook/guestbook-frontend-svc.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "2" 7 | name: frontend 8 | labels: 9 | app: guestbook 10 | tier: frontend 11 | spec: 12 | type: ClusterIP 13 | ports: 14 | - port: 8080 15 | selector: 16 | app: guestbook 17 | tier: frontend 18 | -------------------------------------------------------------------------------- /poor-mans-syncwave/apps/guestbook/guestbook-ns.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | annotations: 5 | argocd.argoproj.io/sync-wave: "0" 6 | name: guestbook 7 | spec: {} 8 | status: {} 9 | -------------------------------------------------------------------------------- /poor-mans-syncwave/apps/guestbook/guestbook-postsync-job.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: batch/v1 2 | kind: Job 3 | metadata: 4 | annotations: 5 | argocd.argoproj.io/hook: PostSync 6 | name: guestbook-cli-wait 7 | spec: 8 | template: 9 | spec: 10 | containers: 11 | - image: quay.io/openshift/origin-cli:4.11 12 | command: 13 | - /bin/bash 14 | - -c 15 | - | 16 | export HOME=/tmp/cli 17 | echo "" 18 | echo -n "Waiting for deployment" 19 | sleep $SLEEP 20 | ## Could also use `kubectl` 21 | until oc rollout status deployment/frontend --timeout=30m -n guestbook 2>&1 >/dev/null 22 | do 23 | echo -n "." 24 | sleep $SLEEP 25 | done 26 | echo -n -e "DONE\n" 27 | imagePullPolicy: Always 28 | name: oc-wait-container 29 | env: 30 | - name: SLEEP 31 | value: "15" 32 | dnsPolicy: ClusterFirst 33 | restartPolicy: OnFailure 34 | serviceAccountName: cli-job-sa 35 | terminationGracePeriodSeconds: 90 36 | -------------------------------------------------------------------------------- /poor-mans-syncwave/apps/guestbook/guestbook-rbac.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRole 3 | metadata: 4 | annotations: 5 | argocd.argoproj.io/sync-wave: "0" 6 | name: cli-job-sa-role 7 | rules: 8 | - apiGroups: 9 | - apps 10 | resources: 11 | - deployments 12 | verbs: 13 | - get 14 | - list 15 | - watch 16 | --- 17 | apiVersion: rbac.authorization.k8s.io/v1 18 | kind: ClusterRoleBinding 19 | metadata: 20 | name: cli-job-sa-rolebinding 21 | annotations: 22 | argocd.argoproj.io/sync-wave: "0" 23 | roleRef: 24 | apiGroup: rbac.authorization.k8s.io 25 | kind: ClusterRole 26 | name: cli-job-sa-role 27 | subjects: 28 | - kind: ServiceAccount 29 | name: cli-job-sa 30 | namespace: guestbook 31 | -------------------------------------------------------------------------------- /poor-mans-syncwave/apps/guestbook/guestbook-redis-mst-deploy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1 2 | kind: Deployment 3 | metadata: 4 | name: redis-master 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "0" 7 | spec: 8 | selector: 9 | matchLabels: 10 | app: redis 11 | role: master 12 | tier: backend 13 | replicas: 1 14 | template: 15 | metadata: 16 | labels: 17 | app: redis 18 | role: master 19 | tier: backend 20 | spec: 21 | containers: 22 | - name: master 23 | image: k8s.gcr.io/redis:e2e # or just image: redis 24 | resources: 25 | requests: 26 | cpu: 100m 27 | memory: 100Mi 28 | ports: 29 | - containerPort: 6379 30 | -------------------------------------------------------------------------------- /poor-mans-syncwave/apps/guestbook/guestbook-redis-mst-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | annotations: 5 | argocd.argoproj.io/sync-wave: "0" 6 | name: redis-master 7 | labels: 8 | app: redis 9 | tier: backend 10 | role: master 11 | spec: 12 | ports: 13 | - port: 6379 14 | targetPort: 6379 15 | selector: 16 | app: redis 17 | tier: backend 18 | role: master 19 | -------------------------------------------------------------------------------- /poor-mans-syncwave/apps/guestbook/guestbook-redis-slv-deploy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1 2 | kind: Deployment 3 | metadata: 4 | name: redis-slave 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "1" 7 | spec: 8 | selector: 9 | matchLabels: 10 | app: redis 11 | role: slave 12 | tier: backend 13 | replicas: 2 14 | template: 15 | metadata: 16 | labels: 17 | app: redis 18 | role: slave 19 | tier: backend 20 | spec: 21 | containers: 22 | - name: slave 23 | image: gcr.io/google_samples/gb-redisslave:v1 24 | resources: 25 | requests: 26 | cpu: 100m 27 | memory: 100Mi 28 | env: 29 | - name: GET_HOSTS_FROM 30 | value: dns 31 | # If your cluster config does not include a dns service, then to 32 | # instead access an environment variable to find the master 33 | # service's host, comment out the 'value: dns' line above, and 34 | # uncomment the line below: 35 | # value: env 36 | ports: 37 | - containerPort: 6379 38 | -------------------------------------------------------------------------------- /poor-mans-syncwave/apps/guestbook/guestbook-redis-slv-svc.yaml.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | annotations: 5 | argocd.argoproj.io/sync-wave: "1" 6 | name: redis-slave 7 | labels: 8 | app: redis 9 | tier: backend 10 | role: slave 11 | spec: 12 | ports: 13 | - port: 6379 14 | selector: 15 | app: redis 16 | tier: backend 17 | role: slave 18 | -------------------------------------------------------------------------------- /poor-mans-syncwave/apps/guestbook/guestbook-scc-auid.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: RoleBinding 3 | metadata: 4 | annotations: 5 | argocd.argoproj.io/sync-wave: "0" 6 | name: system:openshift:scc:anyuid 7 | namespace: guestbook 8 | roleRef: 9 | apiGroup: rbac.authorization.k8s.io 10 | kind: ClusterRole 11 | name: system:openshift:scc:anyuid 12 | subjects: 13 | - kind: ServiceAccount 14 | name: default 15 | namespace: guestbook 16 | 17 | -------------------------------------------------------------------------------- /poor-mans-syncwave/apps/guestbook/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | namespace: guestbook 4 | resources: 5 | - guestbook-ns.yaml 6 | - guestbook-cli-sa.yaml 7 | - guestbook-frontend-deploy.yaml 8 | - guestbook-frontend-svc.yaml 9 | - guestbook-postsync-job.yaml 10 | - guestbook-rbac.yaml 11 | - guestbook-redis-mst-deploy.yaml 12 | - guestbook-redis-mst-svc.yaml 13 | - guestbook-redis-slv-deploy.yaml 14 | - guestbook-redis-slv-svc.yaml.yaml 15 | - guestbook-scc-auid.yaml 16 | -------------------------------------------------------------------------------- /poor-mans-syncwave/appset.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: ApplicationSet 3 | metadata: 4 | name: poor-mans-sw 5 | namespace: openshift-gitops 6 | spec: 7 | generators: 8 | - git: 9 | repoURL: https://github.com/christianh814/gitops-examples 10 | revision: main 11 | directories: 12 | - path: poor-mans-syncwave/apps/* 13 | template: 14 | metadata: 15 | name: '{{path.basename}}' 16 | spec: 17 | project: default 18 | syncPolicy: 19 | automated: 20 | prune: true 21 | selfHeal: true 22 | retry: 23 | limit: 15 24 | backoff: 25 | duration: 15s 26 | factor: 2 27 | maxDuration: 5m 28 | source: 29 | repoURL: https://github.com/christianh814/gitops-examples 30 | targetRevision: main 31 | path: '{{path}}' 32 | destination: 33 | server: https://kubernetes.default.svc 34 | -------------------------------------------------------------------------------- /pricelist-bare/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - pricelist-db-pvc.yaml 5 | - pricelist-db-svc.yaml 6 | - pricelist-db.yaml 7 | - pricelist-deploy.yaml 8 | - pricelist-job.yaml 9 | - pricelist-route.yaml 10 | - pricelist-svc.yaml 11 | -------------------------------------------------------------------------------- /pricelist-bare/pricelist-db-pvc.yaml: -------------------------------------------------------------------------------- 1 | kind: PersistentVolumeClaim 2 | apiVersion: v1 3 | metadata: 4 | name: pricelist-db-pvc 5 | namespace: pricelist 6 | annotations: 7 | argocd.argoproj.io/sync-wave: "2" 8 | spec: 9 | accessModes: 10 | - ReadWriteOnce 11 | resources: 12 | requests: 13 | storage: 1Gi 14 | -------------------------------------------------------------------------------- /pricelist-bare/pricelist-db-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: mysql 7 | tier: database 8 | name: mysql 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "4" 12 | spec: 13 | ports: 14 | - port: 3306 15 | protocol: TCP 16 | targetPort: 3306 17 | selector: 18 | app: mysql 19 | tier: database 20 | status: 21 | loadBalancer: {} 22 | -------------------------------------------------------------------------------- /pricelist-bare/pricelist-db.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: mysql 7 | tier: database 8 | name: mysql 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "2" 12 | spec: 13 | replicas: 1 14 | selector: 15 | matchLabels: 16 | app: mysql 17 | tier: database 18 | strategy: {} 19 | template: 20 | metadata: 21 | creationTimestamp: null 22 | labels: 23 | app: mysql 24 | tier: database 25 | spec: 26 | containers: 27 | - image: registry.access.redhat.com/rhscl/mysql-56-rhel7:latest 28 | name: mysql 29 | env: 30 | - name: MYSQL_DATABASE 31 | value: pricelist 32 | - name: MYSQL_PASSWORD 33 | value: pricelist 34 | - name: MYSQL_USER 35 | value: pricelist 36 | volumeMounts: 37 | - mountPath: /var/lib/mysql/data 38 | name: mysql-db 39 | volumes: 40 | - name: mysql-db 41 | persistentVolumeClaim: 42 | claimName: pricelist-db-pvc 43 | -------------------------------------------------------------------------------- /pricelist-bare/pricelist-deploy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: pricelist 7 | tier: frontend 8 | name: pricelist 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "5" 12 | spec: 13 | replicas: 1 14 | selector: 15 | matchLabels: 16 | app: pricelist 17 | tier: frontend 18 | strategy: {} 19 | template: 20 | metadata: 21 | creationTimestamp: null 22 | labels: 23 | app: pricelist 24 | tier: frontend 25 | spec: 26 | containers: 27 | - image: quay.io/redhatworkshops/pricelist:latest 28 | name: pricelist 29 | env: 30 | - name: MYSQL_DATABASE 31 | value: pricelist 32 | - name: MYSQL_PASSWORD 33 | value: pricelist 34 | - name: MYSQL_USER 35 | value: pricelist 36 | - name: MYSQL_SERVICE_HOST 37 | value: mysql 38 | - name: MYSQL_SERVICE_PORT 39 | value: "3306" 40 | -------------------------------------------------------------------------------- /pricelist-bare/pricelist-job.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: batch/v1 2 | kind: Job 3 | metadata: 4 | creationTimestamp: null 5 | name: pricelist-postdeploy 6 | namespace: pricelist 7 | annotations: 8 | argocd.argoproj.io/sync-wave: "7" 9 | spec: 10 | template: 11 | metadata: 12 | creationTimestamp: null 13 | spec: 14 | containers: 15 | - command: 16 | - /bin/bash 17 | - -c 18 | - | 19 | until [ $(curl -s -o /dev/null -w "%{http_code}" http://pricelist:8080/create_database.php) -eq 200 ]; do sleep 5; done 20 | curl -s http://pricelist:8080/create_database.php 21 | image: quay.io/redhatworkshops/pricelist:latest 22 | name: pricelist-postdeploy 23 | restartPolicy: Never 24 | -------------------------------------------------------------------------------- /pricelist-bare/pricelist-route.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: route.openshift.io/v1 2 | kind: Route 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: pricelist 7 | tier: frontend 8 | name: pricelist-route 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "8" 12 | spec: 13 | host: "" 14 | port: 15 | targetPort: 8080 16 | to: 17 | kind: Service 18 | name: pricelist 19 | weight: 100 20 | status: 21 | ingress: 22 | - conditions: 23 | - status: "True" 24 | type: Admitted 25 | -------------------------------------------------------------------------------- /pricelist-bare/pricelist-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: pricelist 7 | tier: frontend 8 | name: pricelist 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "6" 12 | spec: 13 | ports: 14 | - port: 8080 15 | protocol: TCP 16 | targetPort: 8080 17 | selector: 18 | app: pricelist 19 | tier: frontend 20 | status: 21 | loadBalancer: {} 22 | -------------------------------------------------------------------------------- /pricelist-ingress/app/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | namespace: pricelist 4 | 5 | resources: 6 | - pricelist-db-pvc.yaml 7 | - pricelist-db-svc.yaml 8 | - pricelist-db.yaml 9 | - pricelist-deploy.yaml 10 | - pricelist-ingress.yaml 11 | - pricelist-job.yaml 12 | - pricelist-namespace.yaml 13 | - pricelist-svc.yaml 14 | -------------------------------------------------------------------------------- /pricelist-ingress/app/pricelist-db-pvc.yaml: -------------------------------------------------------------------------------- 1 | kind: PersistentVolumeClaim 2 | apiVersion: v1 3 | metadata: 4 | name: pricelist-db-pvc 5 | namespace: pricelist 6 | annotations: 7 | argocd.argoproj.io/sync-wave: "2" 8 | spec: 9 | accessModes: 10 | - ReadWriteOnce 11 | resources: 12 | requests: 13 | storage: 1Gi 14 | -------------------------------------------------------------------------------- /pricelist-ingress/app/pricelist-db-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: mysql 7 | tier: database 8 | name: mysql 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "4" 12 | spec: 13 | ports: 14 | - port: 3306 15 | protocol: TCP 16 | targetPort: 3306 17 | selector: 18 | app: mysql 19 | tier: database 20 | status: 21 | loadBalancer: {} 22 | -------------------------------------------------------------------------------- /pricelist-ingress/app/pricelist-db.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: mysql 7 | tier: database 8 | name: mysql 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "2" 12 | spec: 13 | replicas: 1 14 | selector: 15 | matchLabels: 16 | app: mysql 17 | tier: database 18 | strategy: {} 19 | template: 20 | metadata: 21 | creationTimestamp: null 22 | labels: 23 | app: mysql 24 | tier: database 25 | spec: 26 | containers: 27 | - image: registry.access.redhat.com/rhscl/mysql-56-rhel7:latest 28 | name: mysql 29 | env: 30 | - name: MYSQL_DATABASE 31 | value: pricelist 32 | - name: MYSQL_PASSWORD 33 | value: pricelist 34 | - name: MYSQL_USER 35 | value: pricelist 36 | resources: {} 37 | volumeMounts: 38 | - mountPath: /var/lib/mysql/data 39 | name: mysql-db 40 | volumes: 41 | - name: mysql-db 42 | persistentVolumeClaim: 43 | claimName: pricelist-db-pvc 44 | -------------------------------------------------------------------------------- /pricelist-ingress/app/pricelist-deploy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: pricelist 7 | tier: frontend 8 | name: pricelist 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "5" 12 | spec: 13 | replicas: 1 14 | selector: 15 | matchLabels: 16 | app: pricelist 17 | tier: frontend 18 | strategy: {} 19 | template: 20 | metadata: 21 | creationTimestamp: null 22 | labels: 23 | app: pricelist 24 | tier: frontend 25 | spec: 26 | containers: 27 | - image: quay.io/redhatworkshops/pricelist:latest 28 | name: pricelist 29 | resources: {} 30 | env: 31 | - name: MYSQL_DATABASE 32 | value: pricelist 33 | - name: MYSQL_PASSWORD 34 | value: pricelist 35 | - name: MYSQL_USER 36 | value: pricelist 37 | - name: MYSQL_SERVICE_HOST 38 | value: mysql 39 | - name: MYSQL_SERVICE_PORT 40 | value: "3306" 41 | -------------------------------------------------------------------------------- /pricelist-ingress/app/pricelist-ingress.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: networking.k8s.io/v1 3 | kind: Ingress 4 | metadata: 5 | annotations: 6 | ingress.kubernetes.io/ssl-redirect: "false" 7 | ingress.kubernetes.io/rewrite-target: / 8 | kubernetes.io/ingress.class: haproxy 9 | name: pricelist-ingress 10 | namespace: pricelist 11 | spec: 12 | rules: 13 | - host: pricelist.127.0.0.1.nip.io 14 | http: 15 | paths: 16 | - path: / 17 | pathType: Prefix 18 | backend: 19 | service: 20 | name: pricelist 21 | port: 22 | number: 8080 23 | -------------------------------------------------------------------------------- /pricelist-ingress/app/pricelist-job.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: batch/v1 2 | kind: Job 3 | metadata: 4 | creationTimestamp: null 5 | name: pricelist-postdeploy 6 | namespace: pricelist 7 | annotations: 8 | argocd.argoproj.io/sync-wave: "7" 9 | spec: 10 | template: 11 | metadata: 12 | creationTimestamp: null 13 | spec: 14 | containers: 15 | - command: 16 | - /bin/bash 17 | - -c 18 | - | 19 | until [ $(curl -s -o /dev/null -w "%{http_code}" http://pricelist:8080/create_database.php) -eq 200 ]; do sleep 5; done 20 | curl -s http://pricelist:8080/create_database.php 21 | image: quay.io/redhatworkshops/pricelist:latest 22 | name: pricelist-postdeploy 23 | resources: {} 24 | restartPolicy: Never 25 | -------------------------------------------------------------------------------- /pricelist-ingress/app/pricelist-namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: pricelist 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "0" 7 | -------------------------------------------------------------------------------- /pricelist-ingress/app/pricelist-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: pricelist 7 | tier: frontend 8 | name: pricelist 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "6" 12 | spec: 13 | ports: 14 | - port: 8080 15 | protocol: TCP 16 | targetPort: 8080 17 | selector: 18 | app: pricelist 19 | tier: frontend 20 | status: 21 | loadBalancer: {} 22 | -------------------------------------------------------------------------------- /pricelist-ingress/pricelist-app.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Application 3 | metadata: 4 | name: pricelist 5 | namespace: argocd 6 | spec: 7 | destination: 8 | namespace: pricelist 9 | server: https://kubernetes.default.svc 10 | project: default 11 | source: 12 | path: pricelist-ingress/app 13 | repoURL: https://github.com/christianh814/gitops-examples 14 | targetRevision: main 15 | syncPolicy: 16 | automated: 17 | prune: true 18 | selfHeal: true 19 | retry: 20 | backoff: 21 | duration: 5s 22 | factor: 2 23 | maxDuration: 3m0s 24 | limit: 5 25 | syncOptions: 26 | - CreateNamespace=true 27 | -------------------------------------------------------------------------------- /pricelist/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - pricelist-db-pvc.yaml 5 | - pricelist-db-svc.yaml 6 | - pricelist-db.yaml 7 | - pricelist-deploy.yaml 8 | - pricelist-job.yaml 9 | - pricelist-namespace.yaml 10 | - pricelist-quota.yaml 11 | - pricelist-route.yaml 12 | - pricelist-svc.yaml 13 | -------------------------------------------------------------------------------- /pricelist/pricelist-db-pvc.yaml: -------------------------------------------------------------------------------- 1 | kind: PersistentVolumeClaim 2 | apiVersion: v1 3 | metadata: 4 | name: pricelist-db-pvc 5 | namespace: pricelist 6 | annotations: 7 | argocd.argoproj.io/sync-wave: "2" 8 | spec: 9 | accessModes: 10 | - ReadWriteOnce 11 | resources: 12 | requests: 13 | storage: 1Gi 14 | -------------------------------------------------------------------------------- /pricelist/pricelist-db-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: mysql 7 | tier: database 8 | name: mysql 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "4" 12 | spec: 13 | ports: 14 | - port: 3306 15 | protocol: TCP 16 | targetPort: 3306 17 | selector: 18 | app: mysql 19 | tier: database 20 | status: 21 | loadBalancer: {} 22 | -------------------------------------------------------------------------------- /pricelist/pricelist-db.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: mysql 7 | tier: database 8 | name: mysql 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "2" 12 | spec: 13 | replicas: 1 14 | selector: 15 | matchLabels: 16 | app: mysql 17 | tier: database 18 | strategy: {} 19 | template: 20 | metadata: 21 | creationTimestamp: null 22 | labels: 23 | app: mysql 24 | tier: database 25 | spec: 26 | containers: 27 | - image: registry.access.redhat.com/rhscl/mysql-56-rhel7:latest 28 | name: mysql 29 | env: 30 | - name: MYSQL_DATABASE 31 | value: pricelist 32 | - name: MYSQL_PASSWORD 33 | value: pricelist 34 | - name: MYSQL_USER 35 | value: pricelist 36 | resources: 37 | requests: 38 | memory: "512Mi" 39 | cpu: "512m" 40 | limits: 41 | memory: "1Gi" 42 | cpu: "1" 43 | volumeMounts: 44 | - mountPath: /var/lib/mysql/data 45 | name: mysql-db 46 | volumes: 47 | - name: mysql-db 48 | persistentVolumeClaim: 49 | claimName: pricelist-db-pvc 50 | -------------------------------------------------------------------------------- /pricelist/pricelist-deploy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: pricelist 7 | tier: frontend 8 | name: pricelist 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "5" 12 | spec: 13 | replicas: 1 14 | selector: 15 | matchLabels: 16 | app: pricelist 17 | tier: frontend 18 | strategy: {} 19 | template: 20 | metadata: 21 | creationTimestamp: null 22 | labels: 23 | app: pricelist 24 | tier: frontend 25 | spec: 26 | containers: 27 | - image: quay.io/redhatworkshops/pricelist:latest 28 | name: pricelist 29 | resources: 30 | requests: 31 | memory: "256Mi" 32 | cpu: "256m" 33 | limits: 34 | memory: "256Mi" 35 | cpu: "256m" 36 | env: 37 | - name: MYSQL_DATABASE 38 | value: pricelist 39 | - name: MYSQL_PASSWORD 40 | value: pricelist 41 | - name: MYSQL_USER 42 | value: pricelist 43 | - name: MYSQL_SERVICE_HOST 44 | value: mysql 45 | - name: MYSQL_SERVICE_PORT 46 | value: "3306" 47 | -------------------------------------------------------------------------------- /pricelist/pricelist-job.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: batch/v1 2 | kind: Job 3 | metadata: 4 | creationTimestamp: null 5 | name: pricelist-postdeploy 6 | namespace: pricelist 7 | annotations: 8 | argocd.argoproj.io/sync-wave: "7" 9 | spec: 10 | template: 11 | metadata: 12 | creationTimestamp: null 13 | spec: 14 | containers: 15 | - command: 16 | - /bin/bash 17 | - -c 18 | - | 19 | until [ $(curl -s -o /dev/null -w "%{http_code}" http://pricelist:8080/create_database.php) -eq 200 ]; do sleep 5; done 20 | curl -s http://pricelist:8080/create_database.php 21 | image: quay.io/redhatworkshops/pricelist:latest 22 | name: pricelist-postdeploy 23 | resources: 24 | requests: 25 | memory: "128Mi" 26 | cpu: "128m" 27 | limits: 28 | memory: "256Mi" 29 | cpu: "256m" 30 | restartPolicy: Never 31 | -------------------------------------------------------------------------------- /pricelist/pricelist-namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: pricelist 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "0" 7 | -------------------------------------------------------------------------------- /pricelist/pricelist-quota.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ResourceQuota 3 | metadata: 4 | name: pricelist-quota 5 | namespace: pricelist 6 | annotations: 7 | argocd.argoproj.io/sync-wave: "1" 8 | spec: 9 | hard: 10 | pods: '10' 11 | requests.cpu: '2' 12 | requests.memory: 2Gi 13 | limits.cpu: '4' 14 | limits.memory: 4Gi 15 | -------------------------------------------------------------------------------- /pricelist/pricelist-route.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: route.openshift.io/v1 2 | kind: Route 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: pricelist 7 | tier: frontend 8 | name: pricelist-route 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "8" 12 | spec: 13 | host: "" 14 | port: 15 | targetPort: 8080 16 | to: 17 | kind: Service 18 | name: pricelist 19 | weight: 100 20 | status: 21 | ingress: 22 | - conditions: 23 | - status: "True" 24 | type: Admitted 25 | -------------------------------------------------------------------------------- /pricelist/pricelist-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: pricelist 7 | tier: frontend 8 | name: pricelist 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "6" 12 | spec: 13 | ports: 14 | - port: 8080 15 | protocol: TCP 16 | targetPort: 8080 17 | selector: 18 | app: pricelist 19 | tier: frontend 20 | status: 21 | loadBalancer: {} 22 | -------------------------------------------------------------------------------- /quarkus-subchart/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: quarkus-subchart 3 | type: application 4 | version: 1.0.0 5 | appVersion: "1.0.0" 6 | dependencies: 7 | - name: quarkus 8 | version: 0.0.3 9 | repository: https://redhat-developer.github.io/redhat-helm-charts 10 | -------------------------------------------------------------------------------- /quarkus-subchart/values.yaml: -------------------------------------------------------------------------------- 1 | quarkus: 2 | build: 3 | enabled: false 4 | deploy: 5 | route: 6 | tls: 7 | enabled: true 8 | replicas: 1 9 | image: 10 | name: quay.io/ablock/gitops-helm-quarkus 11 | -------------------------------------------------------------------------------- /secretlist/1.pricelist-namespace.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Namespace 4 | metadata: 5 | name: pricelist 6 | annotations: 7 | argocd.argoproj.io/sync-wave: "0" 8 | ... 9 | -------------------------------------------------------------------------------- /secretlist/2.pricelist-db.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "1" 7 | creationTimestamp: null 8 | labels: 9 | app: mysql 10 | tier: database 11 | name: mysql 12 | namespace: pricelist 13 | spec: 14 | replicas: 1 15 | selector: 16 | matchLabels: 17 | app: mysql 18 | tier: database 19 | strategy: {} 20 | template: 21 | metadata: 22 | creationTimestamp: null 23 | labels: 24 | app: mysql 25 | tier: database 26 | spec: 27 | containers: 28 | - image: registry.access.redhat.com/rhscl/mysql-56-rhel7:latest 29 | name: mysql 30 | env: 31 | - name: MYSQL_DATABASE 32 | value: pricelist 33 | - name: MYSQL_PASSWORD 34 | value: pricelist 35 | - name: MYSQL_USER 36 | value: pricelist 37 | resources: {} 38 | volumeMounts: 39 | - mountPath: /var/lib/mysql/data 40 | name: mysql-db 41 | volumes: 42 | - name: mysql-db 43 | emptyDir: {} 44 | ... 45 | -------------------------------------------------------------------------------- /secretlist/3.pricelist-db-svc.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "2" 7 | creationTimestamp: null 8 | labels: 9 | app: mysql 10 | tier: database 11 | name: mysql 12 | namespace: pricelist 13 | spec: 14 | ports: 15 | - port: 3306 16 | protocol: TCP 17 | targetPort: 3306 18 | selector: 19 | app: mysql 20 | tier: database 21 | status: 22 | loadBalancer: {} 23 | ... 24 | -------------------------------------------------------------------------------- /secretlist/4.pricelist-deploy.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "3" 7 | creationTimestamp: null 8 | labels: 9 | app: pricelist 10 | tier: frontend 11 | name: pricelist 12 | namespace: pricelist 13 | spec: 14 | replicas: 2 15 | selector: 16 | matchLabels: 17 | app: pricelist 18 | tier: frontend 19 | strategy: {} 20 | template: 21 | metadata: 22 | creationTimestamp: null 23 | labels: 24 | app: pricelist 25 | tier: frontend 26 | spec: 27 | containers: 28 | - image: quay.io/redhatworkshops/pricelist:latest 29 | name: pricelist 30 | resources: {} 31 | env: 32 | - name: MYSQL_DATABASE 33 | valueFrom: 34 | secretKeyRef: 35 | name: pricelist-secret 36 | key: mysqldb 37 | - name: MYSQL_PASSWORD 38 | valueFrom: 39 | secretKeyRef: 40 | name: pricelist-secret 41 | key: mysqlpass 42 | - name: MYSQL_USER 43 | valueFrom: 44 | secretKeyRef: 45 | name: pricelist-secret 46 | key: mysqluser 47 | - name: MYSQL_SERVICE_HOST 48 | valueFrom: 49 | secretKeyRef: 50 | name: pricelist-secret 51 | key: mysqlhost 52 | - name: MYSQL_SERVICE_PORT 53 | valueFrom: 54 | secretKeyRef: 55 | name: pricelist-secret 56 | key: mysqlport 57 | ... 58 | -------------------------------------------------------------------------------- /secretlist/5.pricelist-svc.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "4" 7 | creationTimestamp: null 8 | labels: 9 | app: pricelist 10 | tier: frontend 11 | name: pricelist 12 | namespace: pricelist 13 | spec: 14 | ports: 15 | - port: 8080 16 | protocol: TCP 17 | targetPort: 8080 18 | selector: 19 | app: pricelist 20 | tier: frontend 21 | status: 22 | loadBalancer: {} 23 | ... 24 | -------------------------------------------------------------------------------- /secretlist/6.pricelist-route.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: route.openshift.io/v1 3 | kind: Route 4 | metadata: 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "5" 7 | creationTimestamp: null 8 | labels: 9 | app: pricelist 10 | tier: frontend 11 | name: pricelist-route 12 | namespace: pricelist 13 | spec: 14 | host: "" 15 | port: 16 | targetPort: 8080 17 | to: 18 | kind: Service 19 | name: pricelist 20 | weight: 100 21 | status: 22 | ingress: 23 | - conditions: 24 | - status: "True" 25 | type: Admitted 26 | ... 27 | -------------------------------------------------------------------------------- /secretlist/7.pricelist-job.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: batch/v1 3 | kind: Job 4 | metadata: 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "6" 7 | creationTimestamp: null 8 | name: pricelist-postdeploy 9 | namespace: pricelist 10 | spec: 11 | template: 12 | metadata: 13 | creationTimestamp: null 14 | spec: 15 | containers: 16 | - command: 17 | - /bin/bash 18 | - -c 19 | - | 20 | until [ $(curl -s -o /dev/null -w "%{http_code}" http://pricelist:8080/create_database.php) -eq 200 ]; do sleep 5; done 21 | curl -s http://pricelist:8080/create_database.php 22 | image: quay.io/redhatworkshops/pricelist:latest 23 | name: pricelist-postdeploy 24 | resources: {} 25 | restartPolicy: Never 26 | ... 27 | -------------------------------------------------------------------------------- /secretlist/pricelist-sealed.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: bitnami.com/v1alpha1 2 | kind: SealedSecret 3 | metadata: 4 | annotations: 5 | argocd.argoproj.io/sync-wave: "7" 6 | creationTimestamp: null 7 | name: pricelist-secret 8 | namespace: pricelist 9 | spec: 10 | encryptedData: 11 | mysqldb: AgAuqywSmqrUOW978L/zRZUvHwgprREld4QxD3+dPt5DzzoSMrgdDYBl1eKTfi+dmWKNJSVhRifDNRVrGX8qNxw1SBbmk4S7YIgP3jdFUwgnIFZjsEN2ORwspWjbLW+drz4PAouaTLc0Fw6yu8Ql8xA8LswNN/loCfzpNptwUHa/nFvdD9oQXapBUDNBptRxdo9PyPTImFL8WAR/iAH4+GdhLNPmFrxpSYv/1bMu3diw56zdJwzP8xPtqKFPfG2T7DLNArHYQI0awOp/8+wTV2+yS+5leraHpUnEZehXeyLYrcyh4JfwFzUPyJ0N0omUJ/FFxAwK3eBgVDoH44SWP0xnyYGuiBOfJB0b2pDje4wSIkdV5y59dbOl9zl2pPY1Q6cP+g2HMX+Oxe/589mWco/RPZ1lGmign+yLjQll/YuX8G1g1zSJDc7SurbyuRhmVxUqQ60hMUz6EaXO+O7GRsKbT3dzAmMYflHGCuJ5xvsqrnQ84aqvHSUZFKciiOYMzNHp7lTAWHTSipzLjURDJJ/E0JiJNwPPC62motpQJK1LZszj0K+eaQS4jnomqxjQshQnoOoZgLJt/ds+QmXgFtCHz1udxyFbODwZDs2FtdSZNKZzJIBlji3HeIGQADEe/+VEeVOGU89ImB3YLowXehAuPu7MG/WdJyR0pV7xMfp3CRL3G5SMXG2PBU3iyvl9o4g/fxb2gFy/nbY= 12 | mysqlhost: AgCHTzuDTxPjLJ/DyTOdPm69QaTC5cFjZAyYXaVAgmiUVAhLvCl6y2VR20pt2EMX7SBQUYdSbcjoD0yH1JS68ECVJmbpSpna8zW5oLATWO+DD16gpQKHOn56k3RTYwkeDrg7Tm5cTwUX0ELlaknD1jOVzKeYE4M6bLhh9hs9e/xm3k39PnPKqSzlKsg4E+LWGA8N3yD/8T67dMomSRTqm++eoatfto6tmNbAnot3ipBbCCHj4pYw3ao+kM9/pyhMaEjVO+1gKriiXAHldqmN+WkV+2g/izMFzS8Y+PdjE52I5QgR76cywGAFKy3gWOtNUoUGvFD0ElVXrz10KyGJTxcawQRQheoKmNcB5lUjOpLumoeidgG68e0eKwU7nO00BRKtyq3trfAfYy3E+5ezaQ5dd6Mj/Ct+BcyMv1K4neTWbrIG7kH13L30kRZNQzARhVh00NlMTReYVreGGOCvZh9rZ2klDkP5EutOmM7QLT3uaG5q4chziS7q8ghmHUO00E+2zfSk86dUwEcO9CnM7zqcKhRCimp5ivwLKxrdYZVBjovmcpt8ut1d+FyxgM192gZWAwldRyNa4a/UfV0ZbATK+picvWFDwsJ9xJ/RyjjVCzwdPKZcmZSBHLMfR42xlw+e4F1yz474NuvkK8g7w9Pau2cEIIIoNc/Y3MtJ0fO8nd1JnbJ1nhkIp9ma8Anz60iosEgHEw== 13 | mysqlpass: AgCTvsAw2i5xLZVJvYC9bwwyAw0P0OTpVBfb5ZvIzndZGgsy5UbmGKjYZvm+J5ge41zUgOGErZniTd8aqhyS229N/rXe7cHGIP2CzLBuq3QvjdsnUb2XK8mIRnH00vUdignj1fxjUWuQ3V7s2BhD0jXPa8sd/LxyfLoxeSWJAygKlm9f0nHUUS27jxOu5anMpoAA0q4xamcM77Gk+NmsKMp5cffd9JK/BHBtxSwKMmjs/LB23Yyle8AL5smH8lqc2kMWh2qd2o+v/FzSdTSuTSaZefOQ0/fsJ60bIAGqs9KBDPg6Tqmmyg5iPBuZTg6ZL82yDiir2r/3S7lIpklOKzoDetWC5zzY285sfUiGDTgd6N3CFoE8jHaq4y2rDvTEY+vLT+HYoDjwVs2k4vE0Plk5ZJ+t6+Z8d0CPdbe7fEnNbld4u1DSq+WHNpD3bbDNbZ7jbTxxCwG5DNnZ/Ih7IzCQX6lRzWsLopXExV42t3MTJo6fXllcPvq0KiQCVN5hgpcbsgYU5tyJ0YL1zBSX0ZyLij34GSsebY1khDXxNDfAtS+IsJDXV5oTxazkHGdtz+Em1S/pSOVXK68hoMX59yPp3dYlF/Wgj035+EVXC9wES30//Jgcf6fzsloFdLpuduQDN/rqwV1AHHpviZeNODw3iQ25p0gDCcDVOb79SgHHODrcihMxyPCF5420OOPKpu/rYxlBpsiwURo= 14 | mysqlport: AgBDeHgNabG5ImYzI/UkL5hRFCjdJOJcpeqinzFVYB22cwUxMHN3j0mEz4hJGpxgTmCwVtI86EKibQIPTCiPo7SO4iHM+VYNJu3l+8GHIHlKuO2OeJD4cazSZ9rZNpWIhek+GpZXYTLaokPExyHylwAywxRh/ZuuwLXF2NIjkCY+tQCbajqUQX1Zlob1Id6Ap+1F1g9vK/XlDsagcq2GUVAOhuJVtfycqaE0fBSEqh8fqr7j0Mxeprh7TwcrT1Y1VgDKP7EdEmIfCvEFv3uD9Z2cL0Ds8k7Bg8621sLYv40LAi9huFlOOAOEyAo08sL1L7kMTbRVEa9blkgI2Gk/Lt42kNk49OYIvGlDAOd2zGwT5hxBL5geOk0WQ2NtpBUoVv+nUkNZR/ymVXrNP8Gu9HLMTAPK7oVCCqWFfrJ+7+bQSkkbkhlPHEUeEU3/IVz4SAe9y5rd5RBPzVHRg6t2ZBlCap1Fc2xJrJKLUxaRND8NWml4v/uXW8eEr01/BUaRD8cX7R2kujJaS8audN5UXqSjEXKGWU7TirprDhPg/YZN0BHH6cn5EGesm+F2s5Z2EzZupHdlWy4gEvSa7XBhbzd8PqdMNXCl14qTC1YRjrVjhrP1Ox0gXS6nXUwXJeLA57GFKZL8EBxlIotQN/MK86p2ruVZtr6fseoPqUHBRV4yyQOjjw8eLrFchAv/ou5EvkF35h5h 15 | mysqluser: AgCD0dyImLhFhgFy1KlaSxy4n5oLkvcNTTqVIsdnaIOBy9TQyzSE9kCEtdL6c1iBTH0IKaG02phWY0U8irmvFhB5rQ/uWu9AjhBBmLQ79+txkA2eN47L2f3RP3S/fhRS5FlvC8n23EPAcaOiSQhrlp86RnC2EnL5363BhBCGD+Dg/UnlFKyqxsv4VpYT7X8ySQOtUlvDB5FzDeRaQODAO1/SkGlHq+5R6cxWoR7ppL+Drd1j+rGc6c5Yzmi+C9xUf3Fj8mXfPulblivf3TU61XeVTFeS3B4DzniJAKkmjO0PjIw4KgpM/aRpLqjlwRlUhla50JmfUWc9GflmPffPkxJgR0h7DTUkDNci12+W0rFTDib0mDjGarTFSh+iaB7BQdk7rPrMf28kAPRsazGqXpS0Sw0zFL7IzhF2et0DjbfVA/aN6W5E5SaAXngOs8pKcqYNlbyjpnTysSLLhtb0fBoTDviR+JO365qnNcVjRJw3krkSpKOPltoaQBS4G0Usn7qnpNtiXMbzTAOemYZDctY2oOEmvnG9se+EquHt+f0yjh2WmwJXS4f/1xxz3bNVba33kCeQBd9e+snrZ7+GngiiiFMmtLs4y5EAbyuOy4mABimxRJ/evNnk+KPMHWijx5gXQtR4tJt7f63CJlojgwIY7cAMmTiTPvE0DVr3K+8QVc64CpF6B57BJlKap5+KiKgah2XnRjaSgMY= 16 | template: 17 | metadata: 18 | creationTimestamp: null 19 | name: pricelist-secret 20 | namespace: pricelist 21 | 22 | -------------------------------------------------------------------------------- /storageops/statefulapp.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Application 3 | metadata: 4 | name: pricelist 5 | namespace: openshift-gitops 6 | spec: 7 | destination: 8 | namespace: pricelist 9 | server: https://kubernetes.default.svc 10 | project: default 11 | source: 12 | repoURL: https://github.com/christianh814/gitops-examples/ 13 | path: storageops/statefulapp 14 | targetRevision: main 15 | syncPolicy: 16 | automated: 17 | prune: false 18 | selfHeal: false 19 | retry: 20 | limit: 15 21 | backoff: 22 | duration: 15s 23 | factor: 2 24 | maxDuration: 5m 25 | -------------------------------------------------------------------------------- /storageops/statefulapp/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - pricelist-namespace.yaml 3 | - pricelist-quota.yaml 4 | - pricelist-db-sa-rb.yaml 5 | - pricelist-db-sa.yaml 6 | - pricelist-db-pv.yaml 7 | - pricelist-db-pvc.yaml 8 | - pricelist-db.yaml 9 | - pricelist-db-svc.yaml 10 | - pricelist-deploy.yaml 11 | - pricelist-svc.yaml 12 | - pricelist-job.yaml 13 | - pricelist-route.yaml 14 | -------------------------------------------------------------------------------- /storageops/statefulapp/pricelist-db-pv.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolume 3 | metadata: 4 | name: pricelist-db-pv 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "1" 7 | labels: 8 | pricelist-storage: "yes" 9 | spec: 10 | storageClassName: "" 11 | capacity: 12 | storage: 1Gi 13 | volumeMode: Filesystem 14 | accessModes: 15 | - ReadWriteOnce 16 | persistentVolumeReclaimPolicy: Retain 17 | claimRef: 18 | name: pricelist-db-pvc 19 | namespace: pricelist 20 | csi: 21 | driver: ebs.csi.aws.com 22 | # volumeId from: aws ec2 create-volume --region=us-east-1 --availability-zone=us-east-1a --size=1 --volume-type=gp2 23 | volumeHandle: vol-000aaabbbccddee99 24 | fsType: xfs 25 | nodeAffinity: 26 | required: 27 | nodeSelectorTerms: 28 | - matchExpressions: 29 | - key: topology.ebs.csi.aws.com/zone 30 | operator: In 31 | values: 32 | - us-east-1a 33 | -------------------------------------------------------------------------------- /storageops/statefulapp/pricelist-db-pvc.yaml: -------------------------------------------------------------------------------- 1 | kind: PersistentVolumeClaim 2 | apiVersion: v1 3 | metadata: 4 | name: pricelist-db-pvc 5 | namespace: pricelist 6 | labels: 7 | pricelist-storage: "yes" 8 | annotations: 9 | argocd.argoproj.io/sync-wave: "2" 10 | spec: 11 | storageClassName: "" 12 | volumeName: pricelist-db-pv 13 | accessModes: 14 | - ReadWriteOnce 15 | resources: 16 | requests: 17 | storage: 1Gi 18 | selector: 19 | matchLabels: 20 | pricelist-storage: "yes" 21 | -------------------------------------------------------------------------------- /storageops/statefulapp/pricelist-db-sa-rb.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: RoleBinding 3 | metadata: 4 | name: system:openshift:scc:nonroot 5 | namespace: pricelist 6 | annotations: 7 | argocd.argoproj.io/sync-wave: "1" 8 | roleRef: 9 | apiGroup: rbac.authorization.k8s.io 10 | kind: ClusterRole 11 | name: system:openshift:scc:nonroot 12 | subjects: 13 | - kind: ServiceAccount 14 | name: pricelist-db-sa 15 | namespace: pricelist 16 | -------------------------------------------------------------------------------- /storageops/statefulapp/pricelist-db-sa.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | name: pricelist-db-sa 5 | namespace: pricelist 6 | annotations: 7 | argocd.argoproj.io/sync-wave: "1" 8 | -------------------------------------------------------------------------------- /storageops/statefulapp/pricelist-db-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: mysql 7 | tier: database 8 | name: mysql 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "4" 12 | spec: 13 | ports: 14 | - port: 3306 15 | protocol: TCP 16 | targetPort: 3306 17 | selector: 18 | app: mysql 19 | tier: database 20 | status: 21 | loadBalancer: {} 22 | -------------------------------------------------------------------------------- /storageops/statefulapp/pricelist-db.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: mysql 7 | tier: database 8 | name: mysql 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "3" 12 | spec: 13 | replicas: 1 14 | selector: 15 | matchLabels: 16 | app: mysql 17 | tier: database 18 | strategy: {} 19 | template: 20 | metadata: 21 | creationTimestamp: null 22 | labels: 23 | app: mysql 24 | tier: database 25 | spec: 26 | affinity: 27 | nodeAffinity: 28 | requiredDuringSchedulingIgnoredDuringExecution: 29 | nodeSelectorTerms: 30 | - matchExpressions: 31 | - key: topology.ebs.csi.aws.com/zone 32 | operator: In 33 | values: 34 | - us-east-1a 35 | serviceAccountName: pricelist-db-sa 36 | securityContext: 37 | supplementalGroups: [65534] 38 | containers: 39 | - name: mysql 40 | image: registry.access.redhat.com/rhscl/mysql-56-rhel7:latest 41 | env: 42 | - name: MYSQL_DATABASE 43 | value: pricelist 44 | - name: MYSQL_PASSWORD 45 | value: pricelist 46 | - name: MYSQL_USER 47 | value: pricelist 48 | resources: 49 | requests: 50 | memory: "512Mi" 51 | cpu: "512m" 52 | limits: 53 | memory: "1Gi" 54 | cpu: "1" 55 | volumeMounts: 56 | - mountPath: /var/lib/mysql/data 57 | name: mysql-db 58 | volumes: 59 | - name: mysql-db 60 | persistentVolumeClaim: 61 | claimName: pricelist-db-pvc 62 | -------------------------------------------------------------------------------- /storageops/statefulapp/pricelist-deploy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: pricelist 7 | tier: frontend 8 | name: pricelist 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "5" 12 | spec: 13 | replicas: 1 14 | selector: 15 | matchLabels: 16 | app: pricelist 17 | tier: frontend 18 | strategy: {} 19 | template: 20 | metadata: 21 | creationTimestamp: null 22 | labels: 23 | app: pricelist 24 | tier: frontend 25 | spec: 26 | containers: 27 | - image: quay.io/redhatworkshops/pricelist:latest 28 | name: pricelist 29 | resources: 30 | requests: 31 | memory: "512Mi" 32 | cpu: "512m" 33 | limits: 34 | memory: "1Gi" 35 | cpu: "1" 36 | env: 37 | - name: MYSQL_DATABASE 38 | value: pricelist 39 | - name: MYSQL_PASSWORD 40 | value: pricelist 41 | - name: MYSQL_USER 42 | value: pricelist 43 | - name: MYSQL_SERVICE_HOST 44 | value: mysql 45 | - name: MYSQL_SERVICE_PORT 46 | value: "3306" 47 | -------------------------------------------------------------------------------- /storageops/statefulapp/pricelist-job.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: batch/v1 2 | kind: Job 3 | metadata: 4 | creationTimestamp: null 5 | name: pricelist-postdeploy 6 | namespace: pricelist 7 | annotations: 8 | argocd.argoproj.io/sync-wave: "7" 9 | spec: 10 | template: 11 | metadata: 12 | creationTimestamp: null 13 | spec: 14 | containers: 15 | - command: 16 | - /bin/bash 17 | - -c 18 | - | 19 | until [ $(curl -s -o /dev/null -w "%{http_code}" http://pricelist:8080/create_database.php) -eq 200 ]; do sleep 5; done 20 | curl -s http://pricelist:8080/create_database.php 21 | image: quay.io/redhatworkshops/pricelist:latest 22 | name: pricelist-postdeploy 23 | resources: 24 | requests: 25 | memory: "256Mi" 26 | cpu: "256m" 27 | limits: 28 | memory: "1Gi" 29 | cpu: "1" 30 | restartPolicy: Never 31 | -------------------------------------------------------------------------------- /storageops/statefulapp/pricelist-namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: pricelist 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "0" 7 | -------------------------------------------------------------------------------- /storageops/statefulapp/pricelist-quota.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ResourceQuota 3 | metadata: 4 | name: pricelist-quota 5 | namespace: pricelist 6 | annotations: 7 | argocd.argoproj.io/sync-wave: "1" 8 | spec: 9 | hard: 10 | pods: '10' 11 | requests.cpu: '2' 12 | requests.memory: 2Gi 13 | limits.cpu: '4' 14 | limits.memory: 4Gi 15 | -------------------------------------------------------------------------------- /storageops/statefulapp/pricelist-route.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: route.openshift.io/v1 2 | kind: Route 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: pricelist 7 | app.kubernetes.io/instance: pricelist 8 | tier: frontend 9 | annotations: 10 | argocd.argoproj.io/sync-wave: "8" 11 | name: pricelist 12 | namespace: pricelist 13 | spec: 14 | host: "" 15 | port: 16 | targetPort: 8080 17 | to: 18 | kind: Service 19 | name: pricelist 20 | weight: 100 21 | -------------------------------------------------------------------------------- /storageops/statefulapp/pricelist-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: pricelist 7 | tier: frontend 8 | name: pricelist 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "6" 12 | spec: 13 | ports: 14 | - port: 8080 15 | protocol: TCP 16 | targetPort: 8080 17 | selector: 18 | app: pricelist 19 | tier: frontend 20 | status: 21 | loadBalancer: {} 22 | -------------------------------------------------------------------------------- /storageops/storage-dymanic/pricelist-db-pvc.yaml: -------------------------------------------------------------------------------- 1 | kind: PersistentVolumeClaim 2 | apiVersion: v1 3 | metadata: 4 | name: pricelist-db-pvc 5 | namespace: pricelist 6 | annotations: 7 | argocd.argoproj.io/sync-wave: "2" 8 | spec: 9 | accessModes: 10 | - ReadWriteOnce 11 | resources: 12 | requests: 13 | storage: 1Gi -------------------------------------------------------------------------------- /storageops/storage-dymanic/pricelist-db-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: mysql 7 | tier: database 8 | name: mysql 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "4" 12 | spec: 13 | ports: 14 | - port: 3306 15 | protocol: TCP 16 | targetPort: 3306 17 | selector: 18 | app: mysql 19 | tier: database 20 | status: 21 | loadBalancer: {} 22 | -------------------------------------------------------------------------------- /storageops/storage-dymanic/pricelist-db.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: mysql 7 | tier: database 8 | name: mysql 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "3" 12 | spec: 13 | replicas: 1 14 | selector: 15 | matchLabels: 16 | app: mysql 17 | tier: database 18 | strategy: {} 19 | template: 20 | metadata: 21 | creationTimestamp: null 22 | labels: 23 | app: mysql 24 | tier: database 25 | spec: 26 | containers: 27 | - image: registry.access.redhat.com/rhscl/mysql-56-rhel7:latest 28 | name: mysql 29 | env: 30 | - name: MYSQL_DATABASE 31 | value: pricelist 32 | - name: MYSQL_PASSWORD 33 | value: pricelist 34 | - name: MYSQL_USER 35 | value: pricelist 36 | resources: 37 | requests: 38 | memory: "512Mi" 39 | cpu: "512m" 40 | limits: 41 | memory: "1Gi" 42 | cpu: "1" 43 | volumeMounts: 44 | - mountPath: /var/lib/mysql/data 45 | name: mysql-db 46 | volumes: 47 | - name: mysql-db 48 | persistentVolumeClaim: 49 | claimName: pricelist-db-pvc 50 | -------------------------------------------------------------------------------- /storageops/storage-dymanic/pricelist-deploy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: pricelist 7 | tier: frontend 8 | name: pricelist 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "5" 12 | spec: 13 | replicas: 1 14 | selector: 15 | matchLabels: 16 | app: pricelist 17 | tier: frontend 18 | strategy: {} 19 | template: 20 | metadata: 21 | creationTimestamp: null 22 | labels: 23 | app: pricelist 24 | tier: frontend 25 | spec: 26 | containers: 27 | - image: quay.io/redhatworkshops/pricelist:latest 28 | name: pricelist 29 | resources: 30 | requests: 31 | memory: "512Mi" 32 | cpu: "512m" 33 | limits: 34 | memory: "1Gi" 35 | cpu: "1" 36 | env: 37 | - name: MYSQL_DATABASE 38 | value: pricelist 39 | - name: MYSQL_PASSWORD 40 | value: pricelist 41 | - name: MYSQL_USER 42 | value: pricelist 43 | - name: MYSQL_SERVICE_HOST 44 | value: mysql 45 | - name: MYSQL_SERVICE_PORT 46 | value: "3306" 47 | -------------------------------------------------------------------------------- /storageops/storage-dymanic/pricelist-job.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: batch/v1 2 | kind: Job 3 | metadata: 4 | creationTimestamp: null 5 | name: pricelist-postdeploy 6 | namespace: pricelist 7 | annotations: 8 | argocd.argoproj.io/sync-wave: "7" 9 | spec: 10 | template: 11 | metadata: 12 | creationTimestamp: null 13 | spec: 14 | containers: 15 | - command: 16 | - /bin/bash 17 | - -c 18 | - | 19 | until [ $(curl -s -o /dev/null -w "%{http_code}" http://pricelist:8080/create_database.php) -eq 200 ]; do sleep 5; done 20 | curl -s http://pricelist:8080/create_database.php 21 | image: quay.io/redhatworkshops/pricelist:latest 22 | name: pricelist-postdeploy 23 | resources: 24 | requests: 25 | memory: "256Mi" 26 | cpu: "256m" 27 | limits: 28 | memory: "1Gi" 29 | cpu: "1" 30 | restartPolicy: Never 31 | -------------------------------------------------------------------------------- /storageops/storage-dymanic/pricelist-namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: pricelist 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "0" 7 | -------------------------------------------------------------------------------- /storageops/storage-dymanic/pricelist-quota.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ResourceQuota 3 | metadata: 4 | name: pricelist-quota 5 | namespace: pricelist 6 | annotations: 7 | argocd.argoproj.io/sync-wave: "1" 8 | spec: 9 | hard: 10 | pods: '10' 11 | requests.cpu: '2' 12 | requests.memory: 2Gi 13 | limits.cpu: '4' 14 | limits.memory: 4Gi -------------------------------------------------------------------------------- /storageops/storage-dymanic/pricelist-route.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: route.openshift.io/v1 2 | kind: Route 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: pricelist 7 | tier: frontend 8 | name: pricelist-route 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "8" 12 | spec: 13 | host: "" 14 | port: 15 | targetPort: 8080 16 | to: 17 | kind: Service 18 | name: pricelist 19 | weight: 100 20 | status: 21 | ingress: 22 | - conditions: 23 | - status: "True" 24 | type: Admitted 25 | -------------------------------------------------------------------------------- /storageops/storage-dymanic/pricelist-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: pricelist 7 | tier: frontend 8 | name: pricelist 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "6" 12 | spec: 13 | ports: 14 | - port: 8080 15 | protocol: TCP 16 | targetPort: 8080 17 | selector: 18 | app: pricelist 19 | tier: frontend 20 | status: 21 | loadBalancer: {} 22 | -------------------------------------------------------------------------------- /storageops/storage/pricelist-db-pv.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolume 3 | metadata: 4 | name: pricelist-db-pv 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "1" 7 | labels: 8 | pricelist-storage: "yes" 9 | spec: 10 | storageClassName: "" 11 | capacity: 12 | storage: 1Gi 13 | volumeMode: Filesystem 14 | accessModes: 15 | - ReadWriteMany 16 | persistentVolumeReclaimPolicy: Retain 17 | claimRef: 18 | name: pricelist-db-pvc 19 | namespace: pricelist 20 | nfs: 21 | path: /openshift/openshift4/pricelist-db-pv 22 | server: 192.168.1.100 23 | -------------------------------------------------------------------------------- /storageops/storage/pricelist-db-pvc.yaml: -------------------------------------------------------------------------------- 1 | kind: PersistentVolumeClaim 2 | apiVersion: v1 3 | metadata: 4 | name: pricelist-db-pvc 5 | namespace: pricelist 6 | labels: 7 | pricelist-storage: "yes" 8 | annotations: 9 | argocd.argoproj.io/sync-wave: "2" 10 | spec: 11 | storageClassName: "" 12 | volumeName: pricelist-db-pv 13 | accessModes: 14 | - ReadWriteMany 15 | resources: 16 | requests: 17 | storage: 1Gi 18 | selector: 19 | matchLabels: 20 | pricelist-storage: "yes" 21 | -------------------------------------------------------------------------------- /storageops/storage/pricelist-db-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: mysql 7 | tier: database 8 | name: mysql 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "4" 12 | spec: 13 | ports: 14 | - port: 3306 15 | protocol: TCP 16 | targetPort: 3306 17 | selector: 18 | app: mysql 19 | tier: database 20 | status: 21 | loadBalancer: {} 22 | -------------------------------------------------------------------------------- /storageops/storage/pricelist-db.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: mysql 7 | tier: database 8 | name: mysql 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "3" 12 | spec: 13 | replicas: 1 14 | selector: 15 | matchLabels: 16 | app: mysql 17 | tier: database 18 | strategy: {} 19 | template: 20 | metadata: 21 | creationTimestamp: null 22 | labels: 23 | app: mysql 24 | tier: database 25 | spec: 26 | securityContext: 27 | supplementalGroups: [5555] 28 | containers: 29 | - image: registry.access.redhat.com/rhscl/mysql-56-rhel7:latest 30 | name: mysql 31 | env: 32 | - name: MYSQL_DATABASE 33 | value: pricelist 34 | - name: MYSQL_PASSWORD 35 | value: pricelist 36 | - name: MYSQL_USER 37 | value: pricelist 38 | resources: 39 | requests: 40 | memory: "512Mi" 41 | cpu: "512m" 42 | limits: 43 | memory: "1Gi" 44 | cpu: "1" 45 | volumeMounts: 46 | - mountPath: /var/lib/mysql/data 47 | name: mysql-db 48 | volumes: 49 | - name: mysql-db 50 | persistentVolumeClaim: 51 | claimName: pricelist-db-pvc 52 | -------------------------------------------------------------------------------- /storageops/storage/pricelist-deploy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: pricelist 7 | tier: frontend 8 | name: pricelist 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "5" 12 | spec: 13 | replicas: 1 14 | selector: 15 | matchLabels: 16 | app: pricelist 17 | tier: frontend 18 | strategy: {} 19 | template: 20 | metadata: 21 | creationTimestamp: null 22 | labels: 23 | app: pricelist 24 | tier: frontend 25 | spec: 26 | containers: 27 | - image: quay.io/redhatworkshops/pricelist:latest 28 | name: pricelist 29 | resources: 30 | requests: 31 | memory: "512Mi" 32 | cpu: "512m" 33 | limits: 34 | memory: "1Gi" 35 | cpu: "1" 36 | env: 37 | - name: MYSQL_DATABASE 38 | value: pricelist 39 | - name: MYSQL_PASSWORD 40 | value: pricelist 41 | - name: MYSQL_USER 42 | value: pricelist 43 | - name: MYSQL_SERVICE_HOST 44 | value: mysql 45 | - name: MYSQL_SERVICE_PORT 46 | value: "3306" 47 | -------------------------------------------------------------------------------- /storageops/storage/pricelist-job.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: batch/v1 2 | kind: Job 3 | metadata: 4 | creationTimestamp: null 5 | name: pricelist-postdeploy 6 | namespace: pricelist 7 | annotations: 8 | argocd.argoproj.io/sync-wave: "7" 9 | spec: 10 | template: 11 | metadata: 12 | creationTimestamp: null 13 | spec: 14 | containers: 15 | - command: 16 | - /bin/bash 17 | - -c 18 | - | 19 | until [ $(curl -s -o /dev/null -w "%{http_code}" http://pricelist:8080/create_database.php) -eq 200 ]; do sleep 5; done 20 | curl -s http://pricelist:8080/create_database.php 21 | image: quay.io/redhatworkshops/pricelist:latest 22 | name: pricelist-postdeploy 23 | resources: 24 | requests: 25 | memory: "256Mi" 26 | cpu: "256m" 27 | limits: 28 | memory: "1Gi" 29 | cpu: "1" 30 | restartPolicy: Never 31 | -------------------------------------------------------------------------------- /storageops/storage/pricelist-namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: pricelist 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "0" 7 | -------------------------------------------------------------------------------- /storageops/storage/pricelist-quota.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ResourceQuota 3 | metadata: 4 | name: pricelist-quota 5 | namespace: pricelist 6 | annotations: 7 | argocd.argoproj.io/sync-wave: "1" 8 | spec: 9 | hard: 10 | pods: '10' 11 | requests.cpu: '2' 12 | requests.memory: 2Gi 13 | limits.cpu: '4' 14 | limits.memory: 4Gi 15 | -------------------------------------------------------------------------------- /storageops/storage/pricelist-route.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: route.openshift.io/v1 2 | kind: Route 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: pricelist 7 | tier: frontend 8 | name: pricelist-route 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "8" 12 | spec: 13 | host: "" 14 | port: 15 | targetPort: 8080 16 | to: 17 | kind: Service 18 | name: pricelist 19 | weight: 100 20 | status: 21 | ingress: 22 | - conditions: 23 | - status: "True" 24 | type: Admitted 25 | -------------------------------------------------------------------------------- /storageops/storage/pricelist-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: pricelist 7 | tier: frontend 8 | name: pricelist 9 | namespace: pricelist 10 | annotations: 11 | argocd.argoproj.io/sync-wave: "6" 12 | spec: 13 | ports: 14 | - port: 8080 15 | protocol: TCP 16 | targetPort: 8080 17 | selector: 18 | app: pricelist 19 | tier: frontend 20 | status: 21 | loadBalancer: {} 22 | -------------------------------------------------------------------------------- /v2.14/applications/simple-go.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Application 3 | metadata: 4 | name: simplego 5 | namespace: argocd 6 | finalizers: 7 | - resources-finalizer.argocd.argoproj.io 8 | spec: 9 | project: default 10 | source: 11 | repoURL: https://github.com/christianh814/simple-go 12 | targetRevision: main 13 | path: deploy/overlays/default 14 | destination: 15 | namespace: test 16 | name: in-cluster 17 | syncPolicy: 18 | automated: 19 | prune: true 20 | selfHeal: false 21 | syncOptions: 22 | - CreateNamespace=true 23 | -------------------------------------------------------------------------------- /v2.14/manifests/argocd-cmd-params-cm.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: argocd-cmd-params-cm 5 | namespace: argocd 6 | data: 7 | controller.sync.timeout.seconds: 180 8 | -------------------------------------------------------------------------------- /v2.14/manifests/extra-cm.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: foo 5 | namespace: test 6 | labels: 7 | app.kubernetes.io/instance: simplego 8 | data: 9 | foo: bar 10 | -------------------------------------------------------------------------------- /v2.14/notes.txt: -------------------------------------------------------------------------------- 1 | kubectl annotate cm -n test foo argocd.argoproj.io/sync-options=Prune=confirm 2 | 3 | kubectl annotate cm -n test foo argocd.argoproj.io/sync-options=Delete=confirm 4 | 5 | kubectl annotate cm -n test foo \ 6 | argocd.argoproj.io/sync-options=Delete=confirm,Prune=confirm 7 | -------------------------------------------------------------------------------- /weave-socks/base/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - https://raw.githubusercontent.com/microservices-demo/microservices-demo/master/deploy/kubernetes/complete-demo.yaml 6 | -------------------------------------------------------------------------------- /weave-socks/overlays/default/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | bases: 5 | - ../../base/ 6 | -------------------------------------------------------------------------------- /welcome-k8s/base/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - welcome-deployment.yaml 6 | - welcome-service.yaml 7 | -------------------------------------------------------------------------------- /welcome-k8s/base/welcome-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | labels: 5 | app: welcome-php 6 | name: welcome-php 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: welcome-php 12 | strategy: {} 13 | template: 14 | metadata: 15 | labels: 16 | app: welcome-php 17 | spec: 18 | containers: 19 | - image: quay.io/redhatworkshops/welcome-php:latest 20 | name: welcome-php 21 | resources: {} 22 | -------------------------------------------------------------------------------- /welcome-k8s/base/welcome-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app: welcome-php 6 | name: welcome-php 7 | spec: 8 | ports: 9 | - port: 8080 10 | protocol: TCP 11 | targetPort: 8080 12 | selector: 13 | app: welcome-php 14 | status: 15 | loadBalancer: {} 16 | -------------------------------------------------------------------------------- /welcome-k8s/overlays/default/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | bases: 5 | - ../../base 6 | -------------------------------------------------------------------------------- /welcome-k8s/overlays/withns/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | namespace: welcome-app 4 | 5 | bases: 6 | - ../../base 7 | 8 | resources: 9 | - ns-welcome-app.yaml 10 | -------------------------------------------------------------------------------- /welcome-k8s/overlays/withns/ns-welcome-app.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | creationTimestamp: null 5 | name: welcome-app 6 | spec: {} 7 | status: {} 8 | -------------------------------------------------------------------------------- /welcome-php/welcome-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | labels: 5 | app: welcome-php 6 | name: welcome-php 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: welcome-php 12 | strategy: {} 13 | template: 14 | metadata: 15 | labels: 16 | app: welcome-php 17 | spec: 18 | containers: 19 | - image: quay.io/redhatworkshops/welcome-php:latest 20 | name: welcome-php 21 | resources: {} 22 | -------------------------------------------------------------------------------- /welcome-php/welcome-route.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: route.openshift.io/v1 2 | kind: Route 3 | metadata: 4 | labels: 5 | app: welcome-php 6 | name: welcome-php 7 | spec: 8 | port: 9 | targetPort: 8080 10 | to: 11 | kind: Service 12 | name: welcome-php 13 | weight: 100 14 | -------------------------------------------------------------------------------- /welcome-php/welcome-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app: welcome-php 6 | name: welcome-php 7 | spec: 8 | ports: 9 | - port: 8080 10 | protocol: TCP 11 | targetPort: 8080 12 | selector: 13 | app: welcome-php 14 | status: 15 | loadBalancer: {} 16 | --------------------------------------------------------------------------------