From a95fdcf68fdf05ef5194bef80bf519b24ea1b13e Mon Sep 17 00:00:00 2001 From: Paulo Janotti <pjanotti@splunk.com> Date: Tue, 4 May 2021 12:11:29 -0700 Subject: [PATCH] Make selector required by default --- internal/configsource/envvarconfigsource/session.go | 11 ++++++----- .../configsource/envvarconfigsource/session_test.go | 11 ++++------- .../testdata/env_config_source_end_2_end.yaml | 4 ++-- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/internal/configsource/envvarconfigsource/session.go b/internal/configsource/envvarconfigsource/session.go index 5764599b9e..81dc86e05b 100644 --- a/internal/configsource/envvarconfigsource/session.go +++ b/internal/configsource/envvarconfigsource/session.go @@ -34,10 +34,11 @@ type ( ) type retrieveParams struct { - // Retrieve parameter for the config source. If set to true and the environment - // variable specified on the selector is not defined or not available on the - // defaults the call to Retrieve will fail. - Required bool `mapstructure:"required"` + // Optional is used to change the default behavior when an environment variable + // requested via the config source is not defined. By default the value of this + // field is 'false' which will cause an error if the specified environment variable + // is not defined. Set it to 'true' to ignore not defined environment variables. + Optional bool `mapstructure:"optional"` } // envVarSession implements the configsource.Session interface. @@ -64,7 +65,7 @@ func (e *envVarSession) Retrieve(_ context.Context, selector string, params inte defaultValue, ok := e.defaults[selector] if !ok { - if actualParams.Required { + if !actualParams.Optional { return nil, &errMissingRequiredEnvVar{fmt.Errorf("env var %q is required but not defined and not present on defaults", selector)} } diff --git a/internal/configsource/envvarconfigsource/session_test.go b/internal/configsource/envvarconfigsource/session_test.go index e48712c1fb..960fde06f8 100644 --- a/internal/configsource/envvarconfigsource/session_test.go +++ b/internal/configsource/envvarconfigsource/session_test.go @@ -45,6 +45,9 @@ func TestEnvVarConfigSource_Session(t *testing.T) { { name: "missing_not_required", selector: "UNDEFINED_ENV_VAR", + params: map[string]interface{}{ + "optional": true, + }, expected: "", // The default behavior for undefined env var is empty string. }, { @@ -55,18 +58,12 @@ func TestEnvVarConfigSource_Session(t *testing.T) { wantErr: &errInvalidRetrieveParams{}, }, { - name: "missing_required", - params: map[string]interface{}{ - "required": true, - }, + name: "missing_required", selector: "UNDEFINED_ENV_VAR", wantErr: &errMissingRequiredEnvVar{}, }, { name: "required_on_defaults", - params: map[string]interface{}{ - "required": true, - }, defaults: map[string]interface{}{ "FALLBACK_ENV_VAR": "fallback_env_var", }, diff --git a/internal/configsource/envvarconfigsource/testdata/env_config_source_end_2_end.yaml b/internal/configsource/envvarconfigsource/testdata/env_config_source_end_2_end.yaml index 4ac819a987..7e36120ae1 100644 --- a/internal/configsource/envvarconfigsource/testdata/env_config_source_end_2_end.yaml +++ b/internal/configsource/envvarconfigsource/testdata/env_config_source_end_2_end.yaml @@ -8,6 +8,6 @@ config_sources: config: from_defined_env_var: ${env:_TEST_ENV_VAR_CFG_SRC} - from_undefined_env_var: ${env:_UNDEFINED_ENV_VAR}/some/path + from_undefined_env_var: ${env:_UNDEFINED_ENV_VAR?optional=true}/some/path field_from_default: $env:k0 - map_from_default: $env:cfg?required=true + map_from_default: $env:cfg?optional=true