diff --git a/nova/templates/bin/_bootstrap.sh.tpl b/nova/templates/bin/_bootstrap.sh.tpl new file mode 100644 index 0000000000..0d31fb312d --- /dev/null +++ b/nova/templates/bin/_bootstrap.sh.tpl @@ -0,0 +1,33 @@ +#!/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 +export HOME=/tmp + +{{ if .Values.bootstrap.enabled }} + +{{ range .Values.bootstrap.flavors }} +openstack flavor show {{ .name }} || \ + openstack flavor create {{ .name }} \ + --id {{ .id }} \ + --ram {{ .ram }} \ + --disk {{ .disk }} \ + --vcpus {{ .vcpus }} +{{ end }} + +{{ end }} + +exit 0 diff --git a/nova/templates/configmap-bin.yaml b/nova/templates/configmap-bin.yaml index 8235102a19..c7a305c912 100644 --- a/nova/templates/configmap-bin.yaml +++ b/nova/templates/configmap-bin.yaml @@ -29,3 +29,5 @@ data: {{ tuple "bin/_init.sh.tpl" . | include "helm-toolkit.template" | indent 4 }} libvirt.sh: | {{ tuple "bin/_libvirt.sh.tpl" . | include "helm-toolkit.template" | indent 4 }} + bootstrap.sh: | +{{ tuple "bin/_bootstrap.sh.tpl" . | include "helm-toolkit.template" | indent 4 }} diff --git a/nova/templates/job-bootstrap.yaml b/nova/templates/job-bootstrap.yaml new file mode 100644 index 0000000000..64b1dae3cf --- /dev/null +++ b/nova/templates/job-bootstrap.yaml @@ -0,0 +1,66 @@ +# 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. + +{{- $envAll := . }} +{{- $ksAdminSecret := $envAll.Values.keystone.admin_secret | default "nova-env-keystone-admin" }} +{{- $dependencies := .Values.dependencies.bootstrap }} +apiVersion: batch/v1 +kind: Job +metadata: + name: nova-bootstrap +spec: + template: + metadata: + annotations: + pod.beta.kubernetes.io/init-containers: '[ +{{ tuple $envAll $dependencies | include "helm-toolkit.kubernetes_entrypoint_init_container" | indent 10 }} + ]' + spec: + restartPolicy: OnFailure + nodeSelector: + {{ .Values.labels.control_node_selector_key }}: {{ .Values.labels.control_node_selector_value }} + containers: + - name: nova-bootstrap + image: {{ .Values.images.bootstrap }} + imagePullPolicy: {{ .Values.images.pull_policy }} + {{- if .Values.resources.enabled }} + resources: + requests: + memory: {{ .Values.resources.bootstrap.requests.memory | quote }} + cpu: {{ .Values.resources.bootstrap.requests.cpu | quote }} + limits: + memory: {{ .Values.resources.bootstrap.limits.memory | quote }} + cpu: {{ .Values.resources.bootstrap.limits.cpu | quote }} + {{- end }} + command: + - bash + - /tmp/bootstrap.sh + env: +{{- with $env := dict "ksUserSecret" $ksAdminSecret }} +{{- include "helm-toolkit.keystone_openrc_env_vars" $env | indent 12 }} +{{- end }} + volumeMounts: + - name: novaconf + mountPath: /etc/nova/nova.conf + subPath: nova.conf + - name: nova-bin + mountPath: /tmp/bootstrap.sh + subPath: bootstrap.sh + volumes: + - name: novaconf + configMap: + name: nova-etc + - name: nova-bin + configMap: + name: nova-bin diff --git a/nova/values.yaml b/nova/values.yaml index 808ef434cb..b66e7ce73e 100644 --- a/nova/values.yaml +++ b/nova/values.yaml @@ -39,6 +39,7 @@ images: consoleauth: quay.io/stackanetes/stackanetes-nova-consoleauth:newton compute: quay.io/stackanetes/stackanetes-nova-compute:newton libvirt: quay.io/stackanetes/stackanetes-nova-libvirt:newton + bootstrap: quay.io/stackanetes/stackanetes-nova-api:newton dep_check: quay.io/stackanetes/kubernetes-entrypoint:v0.1.1 pull_policy: "IfNotPresent" @@ -49,6 +50,16 @@ upgrades: max_unavailable: 1 max_surge: 3 +bootstrap: + enabled: true + flavors: + m1_tiny: + name: "m1.tiny" + id: "auto" + ram: 512 + disk: 20 + vcpus: 1 + network: ip_address: "0.0.0.0" # TODO(DTadrzak): move external IPs to common, this variable should be shared with @@ -149,6 +160,10 @@ dependencies: - nova-db-init service: - mariadb + bootstrap: + service: + - keystone-api + - nova-api ks_user: service: - keystone-api @@ -303,3 +318,10 @@ resources: limits: memory: "1024Mi" cpu: "2000m" + bootstrap: + requests: + memory: "124Mi" + cpu: "100m" + limits: + memory: "1024Mi" + cpu: "2000m"