diff --git a/k8s/deployment_template.jsonnet b/k8s/deployment_template.jsonnet new file mode 100644 index 0000000000000000000000000000000000000000..61f35ba591f8eb4ce2498ca910d4ae34af43e47a --- /dev/null +++ b/k8s/deployment_template.jsonnet @@ -0,0 +1,237 @@ +function (slug) { + + local namespace = slug + "-rego-dev", + local domain = slug + ".dev.lca2019.org", + local tls_certname = slug + "-dev-lca2019-org", + local tls_secret = tls_certname + "-tls", + + "apiVersion": "v1", + "items": [ + { + "apiVersion": "v1", + "kind": "Namespace", + "metadata": { + "name": namespace, + "namespace": "", + }, + "spec": { + "finalizers": [ + "kubernetes" + ] + } + }, + { + "apiVersion": "certmanager.k8s.io/v1alpha1", + "kind": "Certificate", + "metadata": { + "name": tls_certname, + "namespace": namespace + }, + "spec": { + "acme": { + "config": [ + { + "domains": [ + domain + ], + "http01": { + "ingress": "", + "ingressClass": "nginx" + } + } + ] + }, + "commonName": domain, + "issuerRef": { + "kind": "ClusterIssuer", + "name": "letsencrypt-prod" + }, + "secretName": tls_secret + } + }, + { + "apiVersion": "extensions/v1beta1", + "kind": "Ingress", + "metadata": { + "name": "symposion-app-ingress", + "namespace": namespace + }, + "spec": { + "backend": { + "serviceName": "symposion-app", + "servicePort": 80 + }, + "rules": [ + { + "host": domain, + "http": { + "paths": [ + { + "backend": { + "serviceName": "symposion-app", + "servicePort": 8000 + }, + "path": "/" + } + ] + } + } + ], + "tls": [ + { + "hosts": [ + domain + ], + "secretName": tls_secret + } + ] + }, + "status": { + "loadBalancer": { + "ingress": [ + { + "ip": "127.0.0.1" + } + ] + } + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "labels": { + "app": "symposion-app" + }, + "name": "symposion-app", + "namespace": namespace + }, + "spec": { + "ports": [ + { + "port": 8000, + "protocol": "TCP", + "targetPort": 8000 + } + ], + "selector": { + "app": "symposion-app" + }, + "sessionAffinity": "None", + "type": "ClusterIP" + }, + "status": { + "loadBalancer": {} + } + }, + { + "apiVersion": "extensions/v1beta1", + "kind": "Deployment", + "metadata": { + "labels": { + "app": "symposion-app" + }, + "name": "symposion-app", + "namespace": namespace + }, + "spec": { + "replicas": 1, + "revisionHistoryLimit": 1, + "selector": { + "matchLabels": { + "app": "symposion-app" + } + }, + "strategy": { + "rollingUpdate": { + "maxSurge": 1, + "maxUnavailable": 1 + }, + "type": "RollingUpdate" + }, + "template": { + "metadata": { + "labels": { + "app": "symposion-app" + } + }, + "spec": { + "containers": [ + { + "env": [ + { + "name": "SYMPOSION_APP_DEBUG", + "value": "1" + }, + { + "name": "DJANGO_SECRET_KEY", + "value": "paGhahQuain5ohYoh0moorai" + }, + { + "name": "DATABASE_URL", + "value": "sqlite:////tmp/symposion.sqlite" + }, + { + "name": "GCS_BUCKET", + "value": "CEA51A5-A613-4AEF-A9FB-D0A57D77C13B" + }, + { + "name": "GOOGLE_APPLICATION_CREDENTIALS", + "value": "/dev/null" + }, + { + "name": "STRIPE_PUBLIC_KEY", + "value": "5CEA51A5-A613-4AEF-A9FB-D0A57D77C13B" + }, + { + "name": "STRIPE_SECRET_KEY", + "value": "5CEA51A5-A613-4AEF-A9FB-D0A57D77C13B" + }, + ], + "image": "asia.gcr.io/linuxconfsydney/symposion_app_2019_dev:" + slug, + "imagePullPolicy": "Always", + "livenessProbe": { + "failureThreshold": 3, + "httpGet": { + "path": "/admin/login/", + "port": 8000, + "scheme": "HTTP" + }, + "initialDelaySeconds": 120, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 2 + }, + "name": "symposion-app", + "ports": [ + { + "containerPort": 8000, + "protocol": "TCP" + } + ], + "resources": {}, + "terminationMessagePath": "/dev/termination-log", + "terminationMessagePolicy": "File" + } + ], + "dnsPolicy": "ClusterFirst", + "restartPolicy": "Always", + "schedulerName": "default-scheduler", + "securityContext": {}, + "terminationGracePeriodSeconds": 30, + "volumes": [ + { + "hostPath": { + "path": "/etc/ssl/certs", + "type": "" + }, + "name": "ssl-certs" + } + ] + } + } + } + } + ], + "kind": "List" +}