|
@@ -0,0 +1,131 @@
|
|
|
+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"
|
|
|
+ }
|
|
|
+ ]
|
|
|
+}
|
|
|
+]
|