From 0cc1af18767f8874683baa85066395f72b0d4640 Mon Sep 17 00:00:00 2001 From: Adrienne Cohea <34219237+AdrienneCohea@users.noreply.github.com> Date: Fri, 8 May 2020 11:35:39 -0700 Subject: [PATCH] Add init containers to support TLS certificate introduction and other dynamic configuration use cases. (#258) --- templates/server-statefulset.yaml | 4 ++ test/unit/server-statefulset.bats | 68 +++++++++++++++++++++++++++++++ values.yaml | 5 +++ 3 files changed, 77 insertions(+) diff --git a/templates/server-statefulset.yaml b/templates/server-statefulset.yaml index 3f40709..96aaf75 100644 --- a/templates/server-statefulset.yaml +++ b/templates/server-statefulset.yaml @@ -52,6 +52,10 @@ spec: fsGroup: {{ .Values.server.gid | default 1000 }} volumes: {{ template "vault.volumes" . }} + {{- if .Values.server.extraInitContainers }} + initContainers: + {{ toYaml .Values.server.extraInitContainers | nindent 8}} + {{- end }} containers: - name: vault {{ template "vault.resources" . }} diff --git a/test/unit/server-statefulset.bats b/test/unit/server-statefulset.bats index 3fa7ba4..5bdc25f 100755 --- a/test/unit/server-statefulset.bats +++ b/test/unit/server-statefulset.bats @@ -618,6 +618,74 @@ load _helpers [ "${actual}" = "testing" ] } +#-------------------------------------------------------------------- +# extraInitContainers + +@test "server/standalone-StatefulSet: adds extra init containers" { + cd `chart_dir` + + # Test that it defines it + local object=$(helm template \ + --show-only templates/server-statefulset.yaml \ + --set 'server.extraInitContainers[0].image=test-image' \ + --set 'server.extraInitContainers[0].name=test-container' \ + --set 'server.extraInitContainers[0].ports[0].name=test-port' \ + --set 'server.extraInitContainers[0].ports[0].containerPort=9410' \ + --set 'server.extraInitContainers[0].ports[0].protocol=TCP' \ + --set 'server.extraInitContainers[0].env[0].name=TEST_ENV' \ + --set 'server.extraInitContainers[0].env[0].value=test_env_value' \ + . | tee /dev/stderr | + yq -r '.spec.template.spec.initContainers[] | select(.name == "test-container")' | tee /dev/stderr) + + local actual=$(echo $object | + yq -r '.name' | tee /dev/stderr) + [ "${actual}" = "test-container" ] + + local actual=$(echo $object | + yq -r '.image' | tee /dev/stderr) + [ "${actual}" = "test-image" ] + + local actual=$(echo $object | + yq -r '.ports[0].name' | tee /dev/stderr) + [ "${actual}" = "test-port" ] + + local actual=$(echo $object | + yq -r '.ports[0].containerPort' | tee /dev/stderr) + [ "${actual}" = "9410" ] + + local actual=$(echo $object | + yq -r '.ports[0].protocol' | tee /dev/stderr) + [ "${actual}" = "TCP" ] + + local actual=$(echo $object | + yq -r '.env[0].name' | tee /dev/stderr) + [ "${actual}" = "TEST_ENV" ] + + local actual=$(echo $object | + yq -r '.env[0].value' | tee /dev/stderr) + [ "${actual}" = "test_env_value" ] + +} + +@test "server/standalone-StatefulSet: add two extra init containers" { + cd `chart_dir` + + # Test that it defines it + local object=$(helm template \ + --show-only templates/server-statefulset.yaml \ + --set 'server.extraInitContainers[0].image=test-image' \ + --set 'server.extraInitContainers[0].name=test-container' \ + --set 'server.extraInitContainers[1].image=test-image' \ + --set 'server.extraInitContainers[1].name=test-container-2' \ + . | tee /dev/stderr | + yq -r '.spec.template.spec.initContainers' | tee /dev/stderr) + + local containers_count=$(echo $object | + yq -r 'length' | tee /dev/stderr) + [ "${containers_count}" = 2 ] + +} + #-------------------------------------------------------------------- # extraContainers diff --git a/values.yaml b/values.yaml index 2385dcc..f757d13 100644 --- a/values.yaml +++ b/values.yaml @@ -159,6 +159,11 @@ server: authDelegator: enabled: true + # extraInitContainers is a list of init containers. Specified as a raw YAML string. + # This is useful if you need to run a script to provision TLS certificates or + # write out configuration files in a dynamic way. + extraInitContainers: null + # extraContainers is a list of sidecar containers. Specified as a raw YAML string. extraContainers: null