From 13aeea5e0dbfae1bfa56704f087260c7720cedad Mon Sep 17 00:00:00 2001 From: Diogo Guerra Date: Tue, 10 Sep 2019 16:25:59 +0200 Subject: [PATCH] Add cern_metachart_enabled to magnum labels * Add magnum labels cern_metachart_enabled and cern_metachart_version to control CERN's magnum meta-chart installation * Add eosxd and kubemonkey enabled magnum labels to enable/disable respective subchart installation --- doc/source/user/index.rst | 14 +++ .../fragments/write-heat-params-master.yaml | 4 + .../kubernetes/helm/cern-meta-chart.sh | 105 ++++++++++++++++++ .../drivers/heat/k8s_fedora_template_def.py | 2 + .../templates/kubecluster.yaml | 24 ++++ .../templates/kubemaster.yaml | 18 +++ .../unit/drivers/test_template_definition.py | 24 ++++ 7 files changed, 191 insertions(+) create mode 100644 magnum/drivers/common/templates/kubernetes/helm/cern-meta-chart.sh diff --git a/doc/source/user/index.rst b/doc/source/user/index.rst index 8f823ac1c..afdac3216 100644 --- a/doc/source/user/index.rst +++ b/doc/source/user/index.rst @@ -309,6 +309,11 @@ the table are linked to more details elsewhere in the user guide. +---------------------------------------+--------------------+---------------+ | `prometheus_operator_chart_tag`_ | see below | see below | +---------------------------------------+--------------------+---------------+ +| `cern_metachart_enabled`_ | - true | false | +| | - false | | ++---------------------------------------+--------------------+---------------+ +| `cern_metachart_version`_ | see below | see below | ++---------------------------------------+--------------------+---------------+ | `swarm_strategy`_ | - spread | spread | | | - binpack | | | | - random | | @@ -1281,6 +1286,15 @@ _`prometheus_operator_chart_tag` on the prometheus-operator-config ConfigMap currently defined. You must certify that the versions are compatible. +_`cern_metachart_enabled` + This flag controls the installation of the CERN meta-chart for magnum. + Enabling this will install the curated meta-chart responsible for managing + all the internal components in use by the Institution. The version of the + chart to use can be defined under `cern_metachart_enabled`_ + +_`cern_metachart_version` + This label allows users to select a specific CERN meta-chart version. + _`tiller_enabled` If set to true, tiller will be deployed in the kube-system namespace. Defaults to false. diff --git a/magnum/drivers/common/templates/kubernetes/fragments/write-heat-params-master.yaml b/magnum/drivers/common/templates/kubernetes/fragments/write-heat-params-master.yaml index eb44f9238..254a61a2d 100644 --- a/magnum/drivers/common/templates/kubernetes/fragments/write-heat-params-master.yaml +++ b/magnum/drivers/common/templates/kubernetes/fragments/write-heat-params-master.yaml @@ -39,6 +39,10 @@ write_files: MAGNUM_URL="$MAGNUM_URL" MONITORING_ENABLED="$MONITORING_ENABLED" PROMETHEUS_OPERATOR_CHART_TAG="$PROMETHEUS_OPERATOR_CHART_TAG" + CERN_METACHART_ENABLED="$CERN_METACHART_ENABLED" + CERN_METACHART_VERSION="$CERN_METACHART_VERSION" + EOSXD_ENABLED="$EOSXD_ENABLED" + KUBEMONKEY_ENABLED="$KUBEMONKEY_ENABLED" VOLUME_DRIVER="$VOLUME_DRIVER" REGION_NAME="$REGION_NAME" HTTP_PROXY="$HTTP_PROXY" diff --git a/magnum/drivers/common/templates/kubernetes/helm/cern-meta-chart.sh b/magnum/drivers/common/templates/kubernetes/helm/cern-meta-chart.sh new file mode 100644 index 000000000..6f653f548 --- /dev/null +++ b/magnum/drivers/common/templates/kubernetes/helm/cern-meta-chart.sh @@ -0,0 +1,105 @@ +#!/bin/bash + +. /etc/sysconfig/heat-params + +set -ex + +step="cern-meta-chart" +printf "Starting to run ${step}\n" + +### Configuration +############################################################################### +CHART_NAME="cern-meta-chart" +CHART_VERSION=${CERN_METACHART_VERSION} + +if [ "$(echo ${CERN_METACHART_ENABLED} | tr '[:upper:]' '[:lower:]')" = "true" ]; then + +HELM_MODULE_CONFIG_FILE="/srv/magnum/kubernetes/helm/${CHART_NAME}.yaml" +HELM_PROVIDER_METACHART_PATH="/srv/magnum/kubernetes/helm/releases" +[ -f ${HELM_MODULE_CONFIG_FILE} ] || { + echo "Writing File: ${HELM_MODULE_CONFIG_FILE}" + mkdir -p $(dirname ${HELM_MODULE_CONFIG_FILE}) + cat << EOF > ${HELM_MODULE_CONFIG_FILE} +--- +kind: ConfigMap +apiVersion: v1 +metadata: + name: ${CHART_NAME}-config + namespace: magnum-tiller + labels: + app: helm +data: + install-${CHART_NAME}.sh: | + #!/bin/bash + set -e + set -x + mkdir -p \${HELM_HOME} + cp /etc/helm/* \${HELM_HOME} + + # HACK - Force wait because of bug https://github.com/helm/helm/issues/5170 + until helm init --client-only --wait + do + sleep 5s + done + helm repo add cern http://charts.cern.ch/cern + helm repo update + + # Provider Metachart + mkdir -p ${HELM_PROVIDER_METACHART_PATH} + git clone --branch ${CHART_VERSION} --depth 1 --single-branch https://gitlab.cern.ch/helm/releases/magnum "${HELM_PROVIDER_METACHART_PATH}/magnum" + helm dependencies update "${HELM_PROVIDER_METACHART_PATH}/magnum" + + if [[ \$(helm history ${CHART_NAME} | grep ${CHART_NAME}) ]]; then + echo "${CHART_NAME} already installed on server. Continue..." + exit 0 + else + helm install "${HELM_PROVIDER_METACHART_PATH}/magnum" --namespace cern-system --name ${CHART_NAME} --version v${CHART_VERSION} --values "${HELM_PROVIDER_METACHART_PATH}/magnum/values.yaml" \\ + $(echo --set eosxd.enabled=$EOSXD_ENABLED | grep -E -i -w 'true|false') \\ + $(echo --set kubemonkey.enabled=$KUBEMONKEY_ENABLED | grep -E -i -w 'true|false') \\ + $(echo "") + fi + +--- + +apiVersion: batch/v1 +kind: Job +metadata: + name: install-${CHART_NAME}-job + namespace: magnum-tiller +spec: + backoffLimit: 5 + template: + spec: + serviceAccountName: tiller + containers: + - name: config-helm + image: ${CONTAINER_INFRA_PREFIX:-docker.io/openstackmagnum/}helm-client:dev + command: + - bash + args: + - /opt/magnum/install-${CHART_NAME}.sh + env: + - name: HELM_HOME + value: /helm_home + - name: TILLER_NAMESPACE + value: magnum-tiller + - name: HELM_TLS_ENABLE + value: "true" + volumeMounts: + - name: install-${CHART_NAME}-config + mountPath: /opt/magnum/ + - mountPath: /etc/helm + name: helm-client-certs + restartPolicy: Never + volumes: + - name: install-${CHART_NAME}-config + configMap: + name: ${CHART_NAME}-config + - name: helm-client-certs + secret: + secretName: helm-client-secret +EOF +} +fi + +printf "Finished running ${step}\n" diff --git a/magnum/drivers/heat/k8s_fedora_template_def.py b/magnum/drivers/heat/k8s_fedora_template_def.py index d738651fb..1b6d3661c 100644 --- a/magnum/drivers/heat/k8s_fedora_template_def.py +++ b/magnum/drivers/heat/k8s_fedora_template_def.py @@ -117,6 +117,8 @@ class K8sFedoraTemplateDefinition(k8s_template_def.K8sTemplateDefinition): 'keystone_auth_enabled', 'k8s_keystone_auth_tag', 'monitoring_enabled', 'prometheus_operator_chart_tag', + 'cern_metachart_enabled', 'cern_metachart_version', + 'eosxd_enabled', 'kubemonkey_enabled', 'tiller_enabled', 'tiller_tag', 'tiller_namespace', diff --git a/magnum/drivers/k8s_fedora_atomic_v1/templates/kubecluster.yaml b/magnum/drivers/k8s_fedora_atomic_v1/templates/kubecluster.yaml index e8caf189c..a8c7d3f88 100644 --- a/magnum/drivers/k8s_fedora_atomic_v1/templates/kubecluster.yaml +++ b/magnum/drivers/k8s_fedora_atomic_v1/templates/kubecluster.yaml @@ -592,6 +592,24 @@ parameters: description: The stable/prometheus-operator chart version to use. default: 5.12.3 + cern_metachart_enabled: + type: boolean + description: Enable or disable CERN meta-chart setup. + default: false + + cern_metachart_version: + type: string + description: The CERN meta-chart version to use. + default: 0.1.0 + + eosxd_enabled: + type: boolean + description: Enable or disable CERN eosxd subchart. + + kubemonkey_enabled: + type: boolean + description: Enable or disable CERN kubemonkey subchart. + project_id: type: string description: > @@ -823,6 +841,10 @@ resources: k8s_keystone_auth_tag: {get_param: k8s_keystone_auth_tag} monitoring_enabled: {get_param: monitoring_enabled} prometheus_operator_chart_tag: {get_param: prometheus_operator_chart_tag} + cern_metachart_enabled: {get_param: cern_metachart_enabled} + cern_metachart_version: {get_param: cern_metachart_version} + eosxd_enabled: {get_param: eosxd_enabled} + kubemonkey_enabled: {get_param: kubemonkey_enabled} project_id: {get_param: project_id} cern_tag: {get_param: cern_tag} cern_enabled: {get_param: cern_enabled} @@ -902,6 +924,8 @@ resources: params: "${ADMIN_PASSWD}": {get_param: grafana_admin_passwd} - get_file: ../../common/templates/kubernetes/helm/ingress-nginx.sh + # CERN + - get_file: ../../common/templates/kubernetes/helm/cern-meta-chart.sh - get_file: ../../common/templates/kubernetes/fragments/install-helm-modules.sh kube_cluster_deploy: diff --git a/magnum/drivers/k8s_fedora_atomic_v1/templates/kubemaster.yaml b/magnum/drivers/k8s_fedora_atomic_v1/templates/kubemaster.yaml index 432e9ff99..4e9eab8fb 100644 --- a/magnum/drivers/k8s_fedora_atomic_v1/templates/kubemaster.yaml +++ b/magnum/drivers/k8s_fedora_atomic_v1/templates/kubemaster.yaml @@ -523,6 +523,24 @@ parameters: description: The stable/prometheus-operator chart version to use. default: 5.12.3 + cern_metachart_enabled: + type: boolean + description: Enable or disable CERN meta-chart setup. + default: false + + cern_metachart_version: + type: string + description: The CERN meta-chart version to use. + default: 0.1.0 + + eosxd_enabled: + type: boolean + description: Enable or disable CERN eosxd subchart. + + kubemonkey_enabled: + type: boolean + description: Enable or disable CERN kubemonkey subchart. + project_id: type: string description: > diff --git a/magnum/tests/unit/drivers/test_template_definition.py b/magnum/tests/unit/drivers/test_template_definition.py index 4cd2dbf3f..e8ab27457 100644 --- a/magnum/tests/unit/drivers/test_template_definition.py +++ b/magnum/tests/unit/drivers/test_template_definition.py @@ -492,6 +492,14 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase): 'monitoring_enabled') prometheus_operator_chart_tag = mock_cluster.labels.get( 'prometheus_operator_chart_tag') + cern_metachart_enabled = mock_cluster.labels.get( + 'cern_metachart_enabled') + cern_metachart_version = mock_cluster.labels.get( + 'cern_metachart_version') + eosxd_enabled = mock_cluster.labels.get( + 'eosxd_enabled') + kubemonkey_enabled = mock_cluster.labels.get( + 'kubemonkey_enabled') project_id = mock_cluster.project_id tiller_enabled = mock_cluster.labels.get( 'tiller_enabled') @@ -570,6 +578,10 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase): 'k8s_keystone_auth_tag': k8s_keystone_auth_tag, 'monitoring_enabled': monitoring_enabled, 'prometheus_operator_chart_tag': prometheus_operator_chart_tag, + 'cern_metachart_enabled': cern_metachart_enabled, + 'cern_metachart_version': cern_metachart_version, + 'eosxd_enabled': eosxd_enabled, + 'kubemonkey_enabled': kubemonkey_enabled, 'project_id': project_id, 'external_network': external_network_id, 'tiller_enabled': tiller_enabled, @@ -890,6 +902,14 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase): 'monitoring_enabled') prometheus_operator_chart_tag = mock_cluster.labels.get( 'prometheus_operator_chart_tag') + cern_metachart_enabled = mock_cluster.labels.get( + 'cern_metachart_enabled') + cern_metachart_version = mock_cluster.labels.get( + 'cern_metachart_version') + eosxd_enabled = mock_cluster.labels.get( + 'eosxd_enabled') + kubemonkey_enabled = mock_cluster.labels.get( + 'kubemonkey_enabled') project_id = mock_cluster.project_id tiller_enabled = mock_cluster.labels.get( 'tiller_enabled') @@ -970,6 +990,10 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase): 'k8s_keystone_auth_tag': k8s_keystone_auth_tag, 'monitoring_enabled': monitoring_enabled, 'prometheus_operator_chart_tag': prometheus_operator_chart_tag, + 'cern_metachart_enabled': cern_metachart_enabled, + 'cern_metachart_version': cern_metachart_version, + 'eosxd_enabled': eosxd_enabled, + 'kubemonkey_enabled': kubemonkey_enabled, 'project_id': project_id, 'external_network': external_network_id, 'tiller_enabled': tiller_enabled, -- GitLab