local bgGuestbook = std.extVar("__ksonnet/components")["bg-guestbook"]; local bgGuestbookSvc = bgGuestbook[0]; local bgGuestbookDeploy = bgGuestbook[1]; [ { "apiVersion": "v1", "kind": "Pod", "metadata": { "generateName": "blue-green-", "annotations": { "argocd.argoproj.io/hook": "Sync", "deploy-manifest": std.manifestJson(bgGuestbookDeploy), "svc-manifest": std.manifestJson(bgGuestbookSvc), }, }, "spec": { "serviceAccountName": "blue-green-sa", "restartPolicy": "Never", "containers": [ { "name": "blue-green", "image": "argoproj/argoexec:latest", "command": ["bash", "-c"], "args": [" curl -L -o /usr/local/bin/kubectl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x /usr/local/bin/kubectl && curl -sSL -o /usr/local/bin/blue-green.sh https://raw.githubusercontent.com/argoproj/argocd-example-apps/master/blue-green-deploy/blue-green.sh && chmod +x /usr/local/bin/blue-green.sh && blue-green.sh "], "env": [ { "name": "DEPLOY_MANIFEST", "valueFrom": { "fieldRef": { "fieldPath": "metadata.annotations['deploy-manifest']" } } }, { "name": "SERVICE_MANIFEST", "valueFrom": { "fieldRef": { "fieldPath": "metadata.annotations['svc-manifest']" } } }, // NOTE: app.kubernetes.io/instance will get injected into the hook object { "name": "APPNAME", "valueFrom": { "fieldRef": { "fieldPath": "metadata.labels['app.kubernetes.io/instance']" } } } ] } ], } }, // RBAC to allow the blue-green pod privileges to manipulate deployments and services { "apiVersion": "v1", "kind": "ServiceAccount", "metadata": { "name": "blue-green-sa" } }, { "apiVersion": "rbac.authorization.k8s.io/v1", "kind": "Role", "metadata": { "name": "blue-green-role" }, "rules": [ { "apiGroups": [ "apps", "extensions" ], "resources": [ "deployments", ], "verbs": [ "list", "get", "create", "update", "patch", "delete", ] }, { "apiGroups": [ "" ], "resources": [ "services" ], "verbs": [ "list", "get", "create", "update", "patch", "delete", ] } ] }, { "apiVersion": "rbac.authorization.k8s.io/v1", "kind": "RoleBinding", "metadata": { "name": "blue-green-rolebinding" }, "roleRef": { "apiGroup": "rbac.authorization.k8s.io", "kind": "Role", "name": "blue-green-role" }, "subjects": [ { "kind": "ServiceAccount", "name": "blue-green-sa" } ] } ]