From 3eb686b08b5e02a51120366acf364bb71a9aee83 Mon Sep 17 00:00:00 2001 From: Hans Hasselberg Date: Tue, 27 Sep 2022 19:14:44 +0200 Subject: [PATCH] support for HCP_SCADA_ADDRESS (#13) * support for HCP_SCADA_ADDRESS * set scada address via env * add server-statefuleset bats tests for HCP_SCADA_ADDRESS * add scada address tests to cloud preset tests Co-authored-by: John Murret --- .../consul/templates/server-statefulset.yaml | 5 +++++ .../consul/test/unit/server-statefulset.bats | 20 +++++++++++++++++-- cli/cmd/install/install.go | 2 ++ cli/preset/cloud_preset.go | 3 +++ cli/preset/cloud_preset_test.go | 2 ++ 5 files changed, 30 insertions(+), 2 deletions(-) diff --git a/charts/consul/templates/server-statefulset.yaml b/charts/consul/templates/server-statefulset.yaml index 357f386204..5fd1ba4704 100644 --- a/charts/consul/templates/server-statefulset.yaml +++ b/charts/consul/templates/server-statefulset.yaml @@ -286,6 +286,11 @@ spec: secretKeyRef: name: {{ .Values.global.cloud.secretName }} key: api-hostname + - name: HCP_SCADA_ADDRESS + valueFrom: + secretKeyRef: + name: {{ .Values.global.cloud.secretName }} + key: scada-address {{- end }} {{- include "consul.extraEnvironmentVars" .Values.server | nindent 12 }} command: diff --git a/charts/consul/test/unit/server-statefulset.bats b/charts/consul/test/unit/server-statefulset.bats index 91a7e8d860..e9768f9814 100755 --- a/charts/consul/test/unit/server-statefulset.bats +++ b/charts/consul/test/unit/server-statefulset.bats @@ -1952,7 +1952,7 @@ load _helpers [ "${envvar}" = "" ] } -@test "server/StatefulSet: does not create HCP_RESOURCE_ID, HCP_CLIENT_ID, HCP_CLIENT_SECRET, HCP_AUTH_URL, and HCP_API_HOSTNAME envvars in consul container when global.cloud.enabled is not set" { +@test "server/StatefulSet: does not create HCP_RESOURCE_ID, HCP_CLIENT_ID, HCP_CLIENT_SECRET, HCP_AUTH_URL, HCP_SCADA_ADDRESS, and HCP_API_HOSTNAME envvars in consul container when global.cloud.enabled is not set" { cd `chart_dir` local object=$(helm template \ -s templates/server-statefulset.yaml \ @@ -1982,6 +1982,10 @@ load _helpers yq -r '.env[] | select(.name == "HCP_API_HOSTNAME")' | tee /dev/stderr) [ "${envvar}" = "" ] + envvar=$(echo "$container" | + yq -r '.env[] | select(.name == "HCP_SCADA_ADDRESS")' | tee /dev/stderr) + [ "${envvar}" = "" ] + } @test "server/StatefulSet: cloud config is set in command when global.cloud.enabled is set" { @@ -1998,7 +2002,7 @@ load _helpers } -@test "server/StatefulSet: creates HCP_RESOURCE_ID, HCP_CLIENT_ID, HCP_CLIENT_SECRET, HCP_AUTH_URL, and HCP_API_HOSTNAME envvars in consul container when global.cloud.enabled is set" { +@test "server/StatefulSet: creates HCP_RESOURCE_ID, HCP_CLIENT_ID, HCP_CLIENT_SECRET, HCP_AUTH_URL, HCP_SCADA_ADDRESS, and HCP_API_HOSTNAME envvars in consul container when global.cloud.enabled is set" { cd `chart_dir` local object=$(helm template \ -s templates/server-statefulset.yaml \ @@ -2068,6 +2072,18 @@ load _helpers actual=$(echo "$envvar" | yq -r '.valueFrom.secretKeyRef.key' | tee /dev/stderr) [ "${actual}" = "api-hostname" ] + + # HCP_SCADA_ADDRESS + envvar=$(echo "$container" | + yq -r '.env[] | select(.name == "HCP_SCADA_ADDRESS")' | tee /dev/stderr) + + local actual=$(echo "$envvar" | + yq -r '.valueFrom.secretKeyRef.name' | tee /dev/stderr) + [ "${actual}" = "foo" ] + + actual=$(echo "$envvar" | + yq -r '.valueFrom.secretKeyRef.key' | tee /dev/stderr) + [ "${actual}" = "scada-address" ] } @test "server/StatefulSet: cloud config is set in command global.cloud.enabled is not set" { diff --git a/cli/cmd/install/install.go b/cli/cmd/install/install.go index 4aa4df10cd..ecb8f3d67e 100644 --- a/cli/cmd/install/install.go +++ b/cli/cmd/install/install.go @@ -68,6 +68,7 @@ const ( envHCPClientSecret = "HCP_CLIENT_SECRET" envHCPAuthURL = "HCP_AUTH_URL" envHCPAPIHost = "HCP_API_HOST" + envHCPScadaAddress = "HCP_SCADA_ADDRESS" flagNameDemo = "demo" defaultDemo = false @@ -655,6 +656,7 @@ func (c *Command) getPreset(name string) (preset.Preset, error) { ClientSecret: os.Getenv(envHCPClientSecret), AuthURL: os.Getenv(envHCPAuthURL), APIHostname: os.Getenv(envHCPAPIHost), + ScadaAddress: os.Getenv(envHCPScadaAddress), } getPresetConfig := &preset.GetPresetConfig{ Name: name, diff --git a/cli/preset/cloud_preset.go b/cli/preset/cloud_preset.go index d0988831c9..a97cdf46b6 100644 --- a/cli/preset/cloud_preset.go +++ b/cli/preset/cloud_preset.go @@ -31,6 +31,7 @@ const ( secretKeyHCPResourceID = "resource-id" secretKeyHCPAuthURL = "auth-url" secretKeyHCPAPIHostname = "api-hostname" + secretKeyHCPScadaAddress = "scada-address" secretKeyGossipKey = "key" secretKeyBootstrapToken = "token" ) @@ -52,6 +53,7 @@ type HCPConfig struct { ClientSecret string AuthURL string APIHostname string + ScadaAddress string } // ConsulConfig represents 'cluster.consul_config' in the response @@ -302,6 +304,7 @@ func (i *CloudPreset) saveServerHCPConfigSecret(config *CloudBootstrapConfig) er secretKeyHCPResourceID: []byte(config.HCPConfig.ResourceID), secretKeyHCPAuthURL: []byte(config.HCPConfig.AuthURL), secretKeyHCPAPIHostname: []byte(config.HCPConfig.APIHostname), + secretKeyHCPScadaAddress: []byte(config.HCPConfig.ScadaAddress), } if err := i.saveSecret(secretNameHCPConfig, data, corev1.SecretTypeOpaque); err != nil { return err diff --git a/cli/preset/cloud_preset_test.go b/cli/preset/cloud_preset_test.go index a3ec87325a..521abaa7ac 100644 --- a/cli/preset/cloud_preset_test.go +++ b/cli/preset/cloud_preset_test.go @@ -76,6 +76,7 @@ var hcpConfig *HCPConfig = &HCPConfig{ ClientSecret: hcpClientSecret, AuthURL: "https://foobar", APIHostname: "https://foo.bar", + ScadaAddress: "10.10.10.10", } var validBootstrapConfig *CloudBootstrapConfig = &CloudBootstrapConfig{ @@ -398,6 +399,7 @@ func checkSecretsWereSaved(t require.TestingT, k8s kubernetes.Interface, expecte require.Equal(t, expectedConfig.HCPConfig.ClientSecret, string(hcpConfigSecret.Data[secretKeyHCPClientSecret])) require.Equal(t, expectedConfig.HCPConfig.ResourceID, string(hcpConfigSecret.Data[secretKeyHCPResourceID])) require.Equal(t, expectedConfig.HCPConfig.AuthURL, string(hcpConfigSecret.Data[secretKeyHCPAuthURL])) + require.Equal(t, expectedConfig.HCPConfig.ScadaAddress, string(hcpConfigSecret.Data[secretKeyHCPScadaAddress])) require.Equal(t, expectedConfig.HCPConfig.APIHostname, string(hcpConfigSecret.Data[secretKeyHCPAPIHostname])) require.Equal(t, corev1.SecretTypeOpaque, hcpConfigSecret.Type) require.Equal(t, common.CLILabelValue, hcpConfigSecret.Labels[common.CLILabelKey])