From af493beb047981be5fea3383043879af1f03af5e Mon Sep 17 00:00:00 2001
From: Pete Birley <pete@port.direct>
Date: Mon, 12 Jun 2017 11:04:36 -0500
Subject: [PATCH] Keystone Bootstrapping

This PS adds a bootstrapping option to the Keystone Chart.

Partially implements: blueprint service-bootstrap

See: https://blueprints.launchpad.net/openstack-helm/+spec/service-bootstrap

Change-Id: I01432967d2ad71249e90d4beda3380125b210a7f
---
 keystone/templates/bin/_bootstrap.sh.tpl | 18 +++++++
 keystone/templates/configmap-bin.yaml    |  4 ++
 keystone/templates/job-bootstrap.yaml    | 63 ++++++++++++++++++++++++
 keystone/values.yaml                     | 18 +++++++
 4 files changed, 103 insertions(+)
 create mode 100644 keystone/templates/bin/_bootstrap.sh.tpl
 create mode 100644 keystone/templates/job-bootstrap.yaml

diff --git a/keystone/templates/bin/_bootstrap.sh.tpl b/keystone/templates/bin/_bootstrap.sh.tpl
new file mode 100644
index 0000000000..81a1391466
--- /dev/null
+++ b/keystone/templates/bin/_bootstrap.sh.tpl
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+# Copyright 2017 The Openstack-Helm Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -ex
+{{ .Values.bootstrap.script | default "echo 'Not Enabled'" }}
diff --git a/keystone/templates/configmap-bin.yaml b/keystone/templates/configmap-bin.yaml
index ccbd9c003b..f12e697224 100644
--- a/keystone/templates/configmap-bin.yaml
+++ b/keystone/templates/configmap-bin.yaml
@@ -17,6 +17,10 @@ kind: ConfigMap
 metadata:
   name: keystone-bin
 data:
+{{- if .Values.bootstrap.enabled }}
+  bootstrap.sh: |+
+{{ tuple "bin/_bootstrap.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }}
+{{- end }}
   rally-test.sh: |
 {{- include "helm-toolkit.scripts.rally_test" . | indent 4 }}
   db-init.py: |
diff --git a/keystone/templates/job-bootstrap.yaml b/keystone/templates/job-bootstrap.yaml
new file mode 100644
index 0000000000..d18d307d5e
--- /dev/null
+++ b/keystone/templates/job-bootstrap.yaml
@@ -0,0 +1,63 @@
+# Copyright 2017 The Openstack-Helm Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+{{- if .Values.bootstrap.enabled }}
+{{- $envAll := . }}
+{{- $ksAdminSecret := $envAll.Values.keystone.admin_secret | default "keystone-env-keystone-admin" }}
+{{- $dependencies := .Values.dependencies.bootstrap }}
+{{- $mounts_keystone_bootstrap := .Values.mounts.keystone_bootstrap.keystone_bootstrap }}
+{{- $mounts_keystone_bootstrap_init := .Values.mounts.keystone_bootstrap.init_container }}
+apiVersion: batch/v1
+kind: Job
+metadata:
+  name: keystone-bootstrap
+spec:
+  template:
+    spec:
+      restartPolicy: OnFailure
+      nodeSelector:
+        {{ .Values.labels.node_selector_key }}: {{ .Values.labels.node_selector_value }}
+      initContainers:
+{{ tuple $envAll $dependencies $mounts_keystone_bootstrap_init | include "helm-toolkit.snippets.kubernetes_entrypoint_init_container"  | indent 8 }}
+      containers:
+        - name: keystone-bootstrap
+          image: {{ .Values.images.bootstrap }}
+          imagePullPolicy: {{ .Values.images.pull_policy }}
+          {{- if .Values.resources.enabled }}
+          resources:
+            limits:
+              cpu: {{ .Values.resources.jobs.bootstrap.limits.cpu | quote }}
+              memory: {{ .Values.resources.jobs.bootstrap.limits.memory | quote }}
+            requests:
+              cpu: {{ .Values.resources.jobs.bootstrap.requests.cpu | quote }}
+              memory: {{ .Values.resources.jobs.bootstrap.requests.memory | quote }}
+          {{- end }}
+          env:
+{{- with $env := dict "ksUserSecret" $ksAdminSecret }}
+{{- include "helm-toolkit.snippets.keystone_openrc_env_vars" $env | indent 12 }}
+{{- end }}
+          command:
+            - /tmp/bootstrap.sh
+          volumeMounts:
+            - name: keystone-bin
+              mountPath: /tmp/bootstrap.sh
+              subPath: bootstrap.sh
+{{ if $mounts_keystone_bootstrap.volumeMounts }}{{ toYaml $mounts_keystone_bootstrap.volumeMounts | indent 10 }}{{ end }}
+      volumes:
+        - name: keystone-bin
+          configMap:
+            name: keystone-bin
+            defaultMode: 0555
+{{ if $mounts_keystone_bootstrap.volumes }}{{ toYaml $mounts_keystone_bootstrap.volumes | indent 6 }}{{ end }}
+{{- end }}
diff --git a/keystone/values.yaml b/keystone/values.yaml
index 78c196fffb..0ebfd33cfb 100644
--- a/keystone/values.yaml
+++ b/keystone/values.yaml
@@ -24,6 +24,7 @@ labels:
   node_selector_value: enabled
 
 images:
+  bootstrap: docker.io/kolla/ubuntu-source-keystone:3.0.3
   test: docker.io/kolla/ubuntu-binary-rally:4.0.0
   db_init: docker.io/kolla/ubuntu-source-keystone:3.0.3
   db_sync: docker.io/kolla/ubuntu-source-keystone:3.0.3
@@ -56,6 +57,10 @@ keystone:
   admin_user_domain: default
   admin_project_domain: default
 
+bootstrap:
+  enabled: false
+  script: null
+
 network:
   api:
     name: "keystone-api"
@@ -87,6 +92,9 @@ dependencies:
   tests:
     service:
     - keystone-api
+  bootstrap:
+    service:
+    - keystone-api
 
 resources:
   enabled: false
@@ -98,6 +106,13 @@ resources:
       memory: "128Mi"
       cpu: "500m"
   jobs:
+    bootstrap:
+      limits:
+        memory: "128Mi"
+        cpu: "500m"
+      requests:
+        memory: "128Mi"
+        cpu: "500m"
     db_sync:
       limits:
         memory: "128Mi"
@@ -133,6 +148,9 @@ mounts:
   keystone_tests:
     init_container: null
     keystone_tests:
+  keystone_bootstrap:
+    init_container: null
+    keystone_bootstrap:
 
 conf:
   rally_tests: