From 82254b99e11ed8065439b3f8731b42bccf8e63bf Mon Sep 17 00:00:00 2001 From: Craig Anderson Date: Thu, 30 Nov 2017 22:52:32 +0000 Subject: [PATCH] Refactor with helm-toolkit template functions Change-Id: I32e59d6e9bb1833f2d143f545a06ed0c29092934 --- README.md | 2 +- divingbell/templates/bin/_ethtool.sh.tpl | 8 +- divingbell/templates/bin/_mounts.sh.tpl | 8 +- divingbell/templates/bin/_shcommon.tpl | 2 +- divingbell/templates/bin/_sysctl.sh.tpl | 8 +- divingbell/templates/configmap-ethtool.yaml | 30 +++ divingbell/templates/configmap-mounts.yaml | 30 +++ divingbell/templates/configmap-sysctl.yaml | 30 +++ divingbell/templates/daemonset-ethtool.yaml | 65 +++++ divingbell/templates/daemonset-mounts.yaml | 65 +++++ divingbell/templates/daemonset-sysctl.yaml | 65 +++++ divingbell/templates/daemonsets.yaml | 256 -------------------- divingbell/tools/gate/test.sh | 107 ++++---- 13 files changed, 350 insertions(+), 326 deletions(-) create mode 100644 divingbell/templates/configmap-ethtool.yaml create mode 100644 divingbell/templates/configmap-mounts.yaml create mode 100644 divingbell/templates/configmap-sysctl.yaml create mode 100644 divingbell/templates/daemonset-ethtool.yaml create mode 100644 divingbell/templates/daemonset-mounts.yaml create mode 100644 divingbell/templates/daemonset-sysctl.yaml delete mode 100644 divingbell/templates/daemonsets.yaml diff --git a/README.md b/README.md index eee4c40..6316ef7 100644 --- a/README.md +++ b/README.md @@ -128,7 +128,7 @@ conf: net.ipv6.conf.all.forwarding: 1 fs.file-max: 9999 overrides: - divingbell-sysctl: + divingbell_sysctl: labels: - label: key: compute_type diff --git a/divingbell/templates/bin/_ethtool.sh.tpl b/divingbell/templates/bin/_ethtool.sh.tpl index b661743..5bc6e41 100644 --- a/divingbell/templates/bin/_ethtool.sh.tpl +++ b/divingbell/templates/bin/_ethtool.sh.tpl @@ -18,7 +18,7 @@ set -e -cat <<'EOF' > {{ .chroot_mnt_path | quote }}/tmp/ethtool_host.sh +cat <<'EOF' > {{ .Values.conf.chroot_mnt_path | quote }}/tmp/ethtool_host.sh {{ include "divingbell.shcommon" . }} old_ethtool_path='/var/divingbell/ethtool' @@ -150,7 +150,7 @@ WantedBy=multi-user.target" curr_ethtool="${curr_ethtool}${systemd_name}"$'\n' } -{{- range $iface, $unused := .ethtool }} +{{- range $iface, $unused := .Values.conf.ethtool }} {{- range $ethtool_key, $ethtool_val := . }} device={{ $iface | quote }} \ user_key={{ $ethtool_key | quote }} \ @@ -211,8 +211,8 @@ fi exit 0 EOF -chmod 755 {{ .chroot_mnt_path | quote }}/tmp/ethtool_host.sh -chroot {{ .chroot_mnt_path | quote }} /tmp/ethtool_host.sh +chmod 755 {{ .Values.conf.chroot_mnt_path | quote }}/tmp/ethtool_host.sh +chroot {{ .Values.conf.chroot_mnt_path | quote }} /tmp/ethtool_host.sh sleep 1 echo 'INFO Putting the daemon to sleep.' diff --git a/divingbell/templates/bin/_mounts.sh.tpl b/divingbell/templates/bin/_mounts.sh.tpl index ec14ff3..f48083e 100644 --- a/divingbell/templates/bin/_mounts.sh.tpl +++ b/divingbell/templates/bin/_mounts.sh.tpl @@ -18,7 +18,7 @@ set -e -cat <<'EOF' > {{ .chroot_mnt_path | quote }}/tmp/mounts_host.sh +cat <<'EOF' > {{ .Values.conf.chroot_mnt_path | quote }}/tmp/mounts_host.sh {{ include "divingbell.shcommon" . }} old_mounts_path='/var/divingbell/mounts' @@ -105,7 +105,7 @@ WantedBy=local-fs.target" curr_mounts="${curr_mounts}${systemd_name}"$'\n' } -{{- range .mounts }} +{{- range .Values.conf.mounts }} {{- range $key, $value := . }} {{ $key }}={{ $value | quote }} \ {{- end }} @@ -141,8 +141,8 @@ fi exit 0 EOF -chmod 755 {{ .chroot_mnt_path | quote }}/tmp/mounts_host.sh -chroot {{ .chroot_mnt_path | quote }} /tmp/mounts_host.sh +chmod 755 {{ .Values.conf.chroot_mnt_path | quote }}/tmp/mounts_host.sh +chroot {{ .Values.conf.chroot_mnt_path | quote }} /tmp/mounts_host.sh sleep 1 echo 'INFO Putting the daemon to sleep.' diff --git a/divingbell/templates/bin/_shcommon.tpl b/divingbell/templates/bin/_shcommon.tpl index 6310f53..36a1380 100644 --- a/divingbell/templates/bin/_shcommon.tpl +++ b/divingbell/templates/bin/_shcommon.tpl @@ -5,7 +5,7 @@ set -o errtrace set -o pipefail declare -Ax __log_types=( -{{- if .log_colors }} +{{- if .Values.conf.log_colors }} [ERROR]='fd=2, color=\e[01;31m' [TRACE]='fd=2, color=\e[01;31m' [WARN]='fd=1, color=\e[01;93m' diff --git a/divingbell/templates/bin/_sysctl.sh.tpl b/divingbell/templates/bin/_sysctl.sh.tpl index 3da3521..16e3866 100644 --- a/divingbell/templates/bin/_sysctl.sh.tpl +++ b/divingbell/templates/bin/_sysctl.sh.tpl @@ -18,7 +18,7 @@ set -e -cat <<'EOF' > {{ .chroot_mnt_path | quote }}/tmp/sysctl_host.sh +cat <<'EOF' > {{ .Values.conf.chroot_mnt_path | quote }}/tmp/sysctl_host.sh {{ include "divingbell.shcommon" . }} # TODO: Make prefix configurable to control param loading order @@ -89,7 +89,7 @@ add_sysctl_param(){ curr_settings="${curr_settings}${fname_prefix}${system_key}.conf"$'\n' } -{{- range $key, $value := .sysctl }} +{{- range $key, $value := .Values.conf.sysctl }} add_sysctl_param {{ $key | quote }} {{ $value | quote }} {{- end }} @@ -126,8 +126,8 @@ fi exit 0 EOF -chmod 755 {{ .chroot_mnt_path | quote }}/tmp/sysctl_host.sh -chroot {{ .chroot_mnt_path | quote }} /tmp/sysctl_host.sh +chmod 755 {{ .Values.conf.chroot_mnt_path | quote }}/tmp/sysctl_host.sh +chroot {{ .Values.conf.chroot_mnt_path | quote }} /tmp/sysctl_host.sh sleep 1 echo 'INFO Putting the daemon to sleep.' diff --git a/divingbell/templates/configmap-ethtool.yaml b/divingbell/templates/configmap-ethtool.yaml new file mode 100644 index 0000000..a6ae896 --- /dev/null +++ b/divingbell/templates/configmap-ethtool.yaml @@ -0,0 +1,30 @@ +{{/* +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. +*/}} + +{{- define "divingbell.configmap.ethtool" }} +{{- $configMapName := index . 0 }} +{{- $envAll := index . 1 }} +{{- with $envAll }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ $configMapName }} +data: + ethtool: |+ +{{ tuple "bin/_ethtool.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} +{{- end }} +{{- end }} diff --git a/divingbell/templates/configmap-mounts.yaml b/divingbell/templates/configmap-mounts.yaml new file mode 100644 index 0000000..de5541c --- /dev/null +++ b/divingbell/templates/configmap-mounts.yaml @@ -0,0 +1,30 @@ +{{/* +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. +*/}} + +{{- define "divingbell.configmap.mounts" }} +{{- $configMapName := index . 0 }} +{{- $envAll := index . 1 }} +{{- with $envAll }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ $configMapName }} +data: + mounts: |+ +{{ tuple "bin/_mounts.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} +{{- end }} +{{- end }} diff --git a/divingbell/templates/configmap-sysctl.yaml b/divingbell/templates/configmap-sysctl.yaml new file mode 100644 index 0000000..939b192 --- /dev/null +++ b/divingbell/templates/configmap-sysctl.yaml @@ -0,0 +1,30 @@ +{{/* +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. +*/}} + +{{- define "divingbell.configmap.sysctl" }} +{{- $configMapName := index . 0 }} +{{- $envAll := index . 1 }} +{{- with $envAll }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ $configMapName }} +data: + sysctl: |+ +{{ tuple "bin/_sysctl.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} +{{- end }} +{{- end }} diff --git a/divingbell/templates/daemonset-ethtool.yaml b/divingbell/templates/daemonset-ethtool.yaml new file mode 100644 index 0000000..903a919 --- /dev/null +++ b/divingbell/templates/daemonset-ethtool.yaml @@ -0,0 +1,65 @@ +{{/* +# Copyright 2017 AT&T Intellectual Property. All other rights reserved. +# +# 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. +*/}} + +{{- define "divingbell.daemonset.ethtool" }} + {{- $daemonset := index . 0 }} + {{- $configMapName := index . 1 }} + {{- $envAll := index . 2 }} + {{- with $envAll }} +--- +apiVersion: extensions/v1beta1 +kind: DaemonSet +metadata: + name: {{ $daemonset }} +spec: + template: + metadata: + labels: +{{ list $envAll .Chart.Name $daemonset | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 8 }} + spec: + hostNetwork: true + hostPID: true + hostIPC: true + containers: + - name: {{ $daemonset }} + image: {{ .Values.images.divingbell }} + imagePullPolicy: {{ .Values.images.pull_policy }} + command: + - /tmp/{{ $daemonset }}.sh + volumeMounts: + - name: rootfs-{{ $daemonset }} + mountPath: {{ .Values.conf.chroot_mnt_path }} + - name: {{ $configMapName }} + mountPath: /tmp/{{ $daemonset }}.sh + subPath: {{ $daemonset }} + readOnly: true + securityContext: + privileged: true + volumes: + - name: rootfs-{{ $daemonset }} + hostPath: + path: / + - name: {{ $configMapName }} + configMap: + name: {{ $configMapName }} + defaultMode: 0555 + {{- end }} +{{- end }} +{{- $daemonset := "ethtool" }} +{{- $configMapName := "divingbell-ethtool" }} +{{- $daemonset_yaml := list $daemonset $configMapName . | include "divingbell.daemonset.ethtool" | toString | fromYaml }} +{{- $configmap_include := "divingbell.configmap.ethtool" }} +{{- list $daemonset $daemonset_yaml $configmap_include $configMapName . | include "helm-toolkit.utils.daemonset_overrides" }} diff --git a/divingbell/templates/daemonset-mounts.yaml b/divingbell/templates/daemonset-mounts.yaml new file mode 100644 index 0000000..ce09d8d --- /dev/null +++ b/divingbell/templates/daemonset-mounts.yaml @@ -0,0 +1,65 @@ +{{/* +# Copyright 2017 AT&T Intellectual Property. All other rights reserved. +# +# 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. +*/}} + +{{- define "divingbell.daemonset.mounts" }} + {{- $daemonset := index . 0 }} + {{- $configMapName := index . 1 }} + {{- $envAll := index . 2 }} + {{- with $envAll }} +--- +apiVersion: extensions/v1beta1 +kind: DaemonSet +metadata: + name: {{ $daemonset }} +spec: + template: + metadata: + labels: +{{ list $envAll .Chart.Name $daemonset | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 8 }} + spec: + hostNetwork: true + hostPID: true + hostIPC: true + containers: + - name: {{ $daemonset }} + image: {{ .Values.images.divingbell }} + imagePullPolicy: {{ .Values.images.pull_policy }} + command: + - /tmp/{{ $daemonset }}.sh + volumeMounts: + - name: rootfs-{{ $daemonset }} + mountPath: {{ .Values.conf.chroot_mnt_path }} + - name: {{ $configMapName }} + mountPath: /tmp/{{ $daemonset }}.sh + subPath: {{ $daemonset }} + readOnly: true + securityContext: + privileged: true + volumes: + - name: rootfs-{{ $daemonset }} + hostPath: + path: / + - name: {{ $configMapName }} + configMap: + name: {{ $configMapName }} + defaultMode: 0555 + {{- end }} +{{- end }} +{{- $daemonset := "mounts" }} +{{- $configMapName := "divingbell-mounts" }} +{{- $daemonset_yaml := list $daemonset $configMapName . | include "divingbell.daemonset.mounts" | toString | fromYaml }} +{{- $configmap_include := "divingbell.configmap.mounts" }} +{{- list $daemonset $daemonset_yaml $configmap_include $configMapName . | include "helm-toolkit.utils.daemonset_overrides" }} diff --git a/divingbell/templates/daemonset-sysctl.yaml b/divingbell/templates/daemonset-sysctl.yaml new file mode 100644 index 0000000..7fba82f --- /dev/null +++ b/divingbell/templates/daemonset-sysctl.yaml @@ -0,0 +1,65 @@ +{{/* +# Copyright 2017 AT&T Intellectual Property. All other rights reserved. +# +# 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. +*/}} + +{{- define "divingbell.daemonset.sysctl" }} + {{- $daemonset := index . 0 }} + {{- $configMapName := index . 1 }} + {{- $envAll := index . 2 }} + {{- with $envAll }} +--- +apiVersion: extensions/v1beta1 +kind: DaemonSet +metadata: + name: {{ $daemonset }} +spec: + template: + metadata: + labels: +{{ list $envAll .Chart.Name $daemonset | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 8 }} + spec: + hostNetwork: true + hostPID: true + hostIPC: true + containers: + - name: {{ $daemonset }} + image: {{ .Values.images.divingbell }} + imagePullPolicy: {{ .Values.images.pull_policy }} + command: + - /tmp/{{ $daemonset }}.sh + volumeMounts: + - name: rootfs-{{ $daemonset }} + mountPath: {{ .Values.conf.chroot_mnt_path }} + - name: {{ $configMapName }} + mountPath: /tmp/{{ $daemonset }}.sh + subPath: {{ $daemonset }} + readOnly: true + securityContext: + privileged: true + volumes: + - name: rootfs-{{ $daemonset }} + hostPath: + path: / + - name: {{ $configMapName }} + configMap: + name: {{ $configMapName }} + defaultMode: 0555 + {{- end }} +{{- end }} +{{- $daemonset := "sysctl" }} +{{- $configMapName := "divingbell-sysctl" }} +{{- $daemonset_yaml := list $daemonset $configMapName . | include "divingbell.daemonset.sysctl" | toString | fromYaml }} +{{- $configmap_include := "divingbell.configmap.sysctl" }} +{{- list $daemonset $daemonset_yaml $configmap_include $configMapName . | include "helm-toolkit.utils.daemonset_overrides" }} diff --git a/divingbell/templates/daemonsets.yaml b/divingbell/templates/daemonsets.yaml deleted file mode 100644 index dca235d..0000000 --- a/divingbell/templates/daemonsets.yaml +++ /dev/null @@ -1,256 +0,0 @@ -# Copyright 2017 AT&T Intellectual Property. All other rights reserved. -# -# 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. - -{{- $daemonsets := list "sysctl" "mounts" "ethtool" }} -{{- $envAll := . }} -{{- range $daemonset := $daemonsets }} - - {{- $daemonset_root_name := printf (print $.Chart.Name "-" $daemonset) }} - {{- set $.Values "__daemonset_list" list }} - {{- set $.Values "__default" dict }} - {{- if hasKey $.Values.conf "overrides" }} - {{- range $key, $val := $.Values.conf.overrides }} - - {{- if eq $key $daemonset_root_name }} - {{- range $type, $type_data := . }} - - {{- if eq $type "hosts" }} - {{- range $host_data := . }} - # dictionary that will contain all info needed to generate this - # iteration of the daemonset - {{- $current_dict := dict }} - - # generate daemonset name - {{- $name := printf (print $daemonset_root_name "-" $host_data.name) }} - {{- set $current_dict "name" $name }} - - # apply overrides - {{- $override_conf_copy := $host_data.conf }} - # Omit overrides because they are not needed, and - # because it causes a stack overflow during compilation - {{- $root_conf_copy := omit $.Values.conf "overrides" }} - {{- $merged_dict := merge $override_conf_copy $root_conf_copy }} - {{- set $current_dict "nodeData" $merged_dict }} - - # Schedule to this host explicitly. - {{- $nodeSelector_dict := dict }} - - {{- set $nodeSelector_dict "key" "kubernetes.io/hostname" }} - {{- set $nodeSelector_dict "operator" "In" }} - - {{- $values_list := list $host_data.name }} - {{- set $nodeSelector_dict "values" $values_list }} - - {{- $list_aggregate := list $nodeSelector_dict }} - {{- set $current_dict "matchExpressions" $list_aggregate }} - - # store completed daemonset entry/info into global list - {{- $list_aggregate := append $.Values.__daemonset_list $current_dict }} - {{- set $.Values "__daemonset_list" $list_aggregate }} - - {{- end }} - {{- end }} - - {{- if eq $type "labels" }} - {{- set $.Values "__label_list" . }} - {{- range $label_data := . }} - # dictionary that will contain all info needed to generate this - # iteration of the daemonset. - {{- set $.Values "__current_label" dict }} - - # generate daemonset name - {{- $name := printf (print $daemonset_root_name "-" $label_data.label.key) }} - {{- set $.Values.__current_label "name" $name }} - - # apply overrides - {{- $override_conf_copy := $label_data.conf }} - # Omit overrides because they are not needed, and - # because it causes a stack overflow during compilation - {{- $root_conf_copy := omit $.Values.conf "overrides" }} - {{- $merged_dict := merge $override_conf_copy $root_conf_copy }} - {{- set $.Values.__current_label "nodeData" $merged_dict }} - - # Schedule to the provided label value(s) - {{- $label_dict := omit $label_data.label "NULL" }} - {{- set $label_dict "operator" "In" }} - {{- $list_aggregate := list $label_dict }} - {{- set $.Values.__current_label "matchExpressions" $list_aggregate }} - - # Do not schedule to other specified labels, with higher - # precedence as the list position increases. Last defined label - # is highest priority. - {{- $other_labels := without $.Values.__label_list $label_data }} - {{- range $label_data2 := $other_labels }} - {{- $label_dict := omit $label_data2.label "NULL" }} - - {{- set $label_dict "operator" "NotIn" }} - - {{- $list_aggregate := append $.Values.__current_label.matchExpressions $label_dict }} - {{- set $.Values.__current_label "matchExpressions" $list_aggregate }} - {{- end }} - {{- set $.Values "__label_list" $other_labels }} - - # Do not schedule to any other specified hosts - {{- range $type, $type_data := $val }} - {{- if eq $type "hosts" }} - {{- range $host_data := . }} - {{- $label_dict := dict }} - - {{- set $label_dict "key" "kubernetes.io/hostname" }} - {{- set $label_dict "operator" "NotIn" }} - - {{- $values_list := list $host_data.name }} - {{- set $label_dict "values" $values_list }} - - {{- $list_aggregate := append $.Values.__current_label.matchExpressions $label_dict }} - {{- set $.Values.__current_label "matchExpressions" $list_aggregate }} - {{- end }} - {{- end }} - {{- end }} - - # store completed daemonset entry/info into global list - {{- $list_aggregate := append $.Values.__daemonset_list $.Values.__current_label }} - {{- set $.Values "__daemonset_list" $list_aggregate }} - {{- unset $.Values "__current_label" }} - - {{- end }} - {{- end }} - {{- end }} - - # scheduler exceptions for the default daemonset - {{- set $.Values.__default "matchExpressions" list }} - - {{- range $type, $type_data := . }} - # Do not schedule to other specified labels - {{- if eq $type "labels" }} - {{- range $label_data := . }} - {{- $default_dict := omit $label_data.label "NULL" }} - - {{- set $default_dict "operator" "NotIn" }} - - {{- $list_aggregate := append $.Values.__default.matchExpressions $default_dict }} - {{- set $.Values.__default "matchExpressions" $list_aggregate }} - {{- end }} - {{- end }} - # Do not schedule to other specified hosts - {{- if eq $type "hosts" }} - {{- range $host_data := . }} - {{- $default_dict := dict }} - - {{- set $default_dict "key" "kubernetes.io/hostname" }} - {{- set $default_dict "operator" "NotIn" }} - - {{- $values_list := list $host_data.name }} - {{- set $default_dict "values" $values_list }} - - {{- $list_aggregate := append $.Values.__default.matchExpressions $default_dict }} - {{- set $.Values.__default "matchExpressions" $list_aggregate }} - {{- end }} - {{- end }} - {{- end }} - - {{- end }} - {{- end }} - {{- end }} - - # generate the default daemonset - - # name - {{- $name := printf (print $daemonset_root_name "-default") }} - {{- set $.Values.__default "name" $name }} - - # use values.conf as-is, minus overrides - {{- $root_conf_copy := omit $.Values.conf "overrides" }} - {{- set $.Values.__default "nodeData" $root_conf_copy }} - - # add to global list - {{- $list_aggregate := append $.Values.__daemonset_list $.Values.__default }} - {{- set $.Values "__daemonset_list" $list_aggregate }} - {{- unset $.Values "__default" }} - - {{- range $current_dict := $.Values.__daemonset_list }} - {{- $template_location := printf (print "bin/_" $daemonset ".sh.tpl") | toString -}} - # referenced by helm toolkit - {{- set $current_dict.nodeData "Template" dict -}} - {{- set $current_dict.nodeData.Template "Name" $.Template.Name }} - # name needs to be a DNS-1123 compliant name - # generate a uuid since the version of sprig packaged with helm 2.5.1 does - # not contain regex* functions. As a result we wont use $current_dict.name - {{- $dns_1123_name := printf (print $.Chart.Name "-" $daemonset "-" uuidv4) | lower }} ---- -apiVersion: extensions/v1beta1 -kind: DaemonSet -metadata: - name: {{ $dns_1123_name }} -spec: - template: - metadata: - labels: -{{ list $envAll $.Chart.Name $daemonset | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 8 }} - annotations: - values-hash: {{ list $current_dict.nodeData . | quote | sha256sum }} - spec: - {{- if hasKey $current_dict "matchExpressions" }} - affinity: - nodeAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - nodeSelectorTerms: - - matchExpressions: - {{- range $matchExpression := $current_dict.matchExpressions }} - - key: {{ $matchExpression.key }} - operator: {{ $matchExpression.operator }} - values: - {{- range $schedule_val := $matchExpression.values }} - - {{ $schedule_val | quote }} - {{- end }} - {{- end }} - {{- end }} - hostNetwork: true - hostPID: true - hostIPC: true - containers: - - name: {{ $dns_1123_name }} - image: {{ $.Values.images.divingbell }} - imagePullPolicy: {{ $.Values.images.pull_policy }} - command: - - /tmp/{{ $daemonset }}.sh - volumeMounts: - - name: rootfs-{{ $daemonset }} - mountPath: {{ $.Values.conf.chroot_mnt_path }} - - name: {{ $dns_1123_name }} - mountPath: /tmp/{{ $daemonset }}.sh - subPath: {{ $daemonset }} - readOnly: true - securityContext: - privileged: true - volumes: - - name: rootfs-{{ $daemonset }} - hostPath: - path: / - - name: {{ $dns_1123_name }} - configMap: - name: {{ $dns_1123_name }} - defaultMode: 0555 ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ $dns_1123_name }} -data: - {{ $daemonset }}: |+ -{{- tuple $current_dict.nodeData $template_location $current_dict.nodeData | include "helm-toolkit.utils.configmap_templater" | indent 4 }} - {{- end -}} - {{- unset $.Values "__daemonset_list" -}} -{{- end -}} - diff --git a/divingbell/tools/gate/test.sh b/divingbell/tools/gate/test.sh index 6c12ef0..117f4f5 100755 --- a/divingbell/tools/gate/test.sh +++ b/divingbell/tools/gate/test.sh @@ -483,7 +483,7 @@ test_overrides(){ net.ipv4.ip_forward: 1 net.ipv6.conf.all.forwarding: 1 overrides: - divingbell-sysctl: + divingbell_sysctl: labels: - label: key: compute_type @@ -494,16 +494,16 @@ test_overrides(){ sysctl: net.ipv4.ip_forward: 1 - label: - key: another_label + key: compute_type values: - - another_value + - special conf: sysctl: net.ipv4.ip_forward: 1 - label: - key: test_label + key: compute_type values: - - test_value + - special conf: sysctl: net.ipv4.ip_forward: 1 @@ -521,7 +521,7 @@ test_overrides(){ conf: sysctl: net.ipv6.conf.all.forwarding: 1 - divingbell-mounts: + divingbell_mounts: labels: - label: key: blarg @@ -535,14 +535,14 @@ test_overrides(){ device: tmpfs type: tmpfs options: 'defaults,noatime,nosuid,nodev,noexec,mode=1777,size=32M' - divingbell-ethtool: + divingbell_ethtool: hosts: - name: ethtool-host conf: ethtool: ens3: hw-tc-offload: on - divingbell-bogus: + divingbell_bogus: labels: - label: key: bogus @@ -581,33 +581,6 @@ test_overrides(){ # TODO: Implement more robust tests that do not depend on match expression # ordering. - # Verify generated affinity for test_label - echo "${tc_output}" | grep ' spec: - affinity: - nodeAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - nodeSelectorTerms: - - matchExpressions: - - key: test_label - operator: In - values: - - "test_value" - - key: kubernetes.io/hostname - operator: NotIn - values: - - "superhost" - - key: kubernetes.io/hostname - operator: NotIn - values: - - "helm1" - - key: kubernetes.io/hostname - operator: NotIn - values: - - "specialhost" - hostNetwork: true' && - echo '[SUCCESS] overrides test 2 passed successfully' >> "${TEST_RESULTS}" || - (echo '[FAILURE] overrides test 2 failed' && exit 1) - # Verify generated affinity for another_label echo "${tc_output}" | grep ' spec: affinity: @@ -619,10 +592,6 @@ test_overrides(){ operator: In values: - "another_value" - - key: test_label - operator: NotIn - values: - - "test_value" - key: kubernetes.io/hostname operator: NotIn values: @@ -634,8 +603,37 @@ test_overrides(){ - key: kubernetes.io/hostname operator: NotIn values: - - "specialhost" - hostNetwork: true' && + - "specialhost"' && + echo '[SUCCESS] overrides test 2 passed successfully' >> "${TEST_RESULTS}" || + (echo '[FAILURE] overrides test 2 failed' && exit 1) + + # Verify generated affinity for compute_type + echo "${tc_output}" | grep ' spec: + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: compute_type + operator: In + values: + - "special" + - key: another_label + operator: NotIn + values: + - "another_value" + - key: kubernetes.io/hostname + operator: NotIn + values: + - "superhost" + - key: kubernetes.io/hostname + operator: NotIn + values: + - "helm1" + - key: kubernetes.io/hostname + operator: NotIn + values: + - "specialhost"' && echo '[SUCCESS] overrides test 3 passed successfully' >> "${TEST_RESULTS}" || (echo '[FAILURE] overrides test 3 failed' && exit 1) @@ -651,14 +649,14 @@ test_overrides(){ values: - "dpdk" - "sriov" + - key: compute_type + operator: NotIn + values: + - "special" - key: another_label operator: NotIn values: - "another_value" - - key: test_label - operator: NotIn - values: - - "test_value" - key: kubernetes.io/hostname operator: NotIn values: @@ -670,8 +668,7 @@ test_overrides(){ - key: kubernetes.io/hostname operator: NotIn values: - - "specialhost" - hostNetwork: true' && + - "specialhost"' && echo '[SUCCESS] overrides test 4 passed successfully' >> "${TEST_RESULTS}" || (echo '[FAILURE] overrides test 4 failed' && exit 1) @@ -686,8 +683,7 @@ test_overrides(){ operator: In values: - "soup" - - "chips" - hostNetwork: true' && + - "chips"' && echo '[SUCCESS] overrides test 5 passed successfully' >> "${TEST_RESULTS}" || (echo '[FAILURE] overrides test 5 failed' && exit 1) @@ -715,15 +711,14 @@ test_overrides(){ values: - "dpdk" - "sriov" + - key: compute_type + operator: NotIn + values: + - "special" - key: another_label operator: NotIn values: - - "another_value" - - key: test_label - operator: NotIn - values: - - "test_value" - hostNetwork: true' && + - "another_value"' && echo '[SUCCESS] overrides test 6 passed successfully' >> "${TEST_RESULTS}" || (echo '[FAILURE] overrides test 6 failed' && exit 1) @@ -735,7 +730,7 @@ test_overrides(){ $SYSCTL_KEY1: 1 $SYSCTL_KEY2: $key2_non_override_val overrides: - divingbell-sysctl: + divingbell_sysctl: hosts: - name: $(hostname -f) conf: