diff --git a/gateway/README.md b/gateway/README.md index c1cf047b739320db4529119b51152043c6e41ac5..9cf4f5b6487cf2e2b50df37778aa0b984bc5e79a 100644 --- a/gateway/README.md +++ b/gateway/README.md @@ -56,3 +56,4 @@ The gateway can be configured through the following environment variables: | `direct_functions_suffix` | Provide a DNS suffix for invoking functions directly over overlay network | | `basic_auth` | Set to `true` or `false` to enable embedded basic auth on the /system and /ui endpoints (recommended) | | `secret_mount_path` | Set a location where you have mounted `basic-auth-user` and `basic-auth-password`, default: `/run/secrets/`. | +| `scale_from_zero` | Enables an intercepting proxy which will scale any function from 0 replicas to the desired amount | diff --git a/gateway/types/readconfig.go b/gateway/types/readconfig.go index 115c9d59ff81502cad57e1bba49e632b6b658475..09a0d960501104db23e79a7663ad574e36044b46 100644 --- a/gateway/types/readconfig.go +++ b/gateway/types/readconfig.go @@ -112,6 +112,7 @@ func (ReadConfig) Read(hasEnv HasEnv) GatewayConfig { secretPath = "/run/secrets/" } cfg.SecretMountPath = secretPath + cfg.ScaleFromZero = parseBoolValue(hasEnv.Getenv("scale_from_zero")) return cfg } @@ -149,11 +150,16 @@ type GatewayConfig struct { // If set this will be used to resolve functions directly DirectFunctionsSuffix string +<<<<<<< HEAD // If set, reads secrets from file-system for enabling basic auth. UseBasicAuth bool // SecretMountPath specifies where to read secrets from for embedded basic auth SecretMountPath string +======= + // Enable the gateway to scale any service from 0 replicas to its configured "min replicas" + ScaleFromZero bool +>>>>>>> Add scale_from_zero flag } // UseNATS Use NATSor not diff --git a/gateway/types/readconfig_test.go b/gateway/types/readconfig_test.go index f1a09489c64d29ee53e3cfe9ecf634d87e61d00a..9d904e7728138736fb72adf803e3f3161bfcdfcb 100644 --- a/gateway/types/readconfig_test.go +++ b/gateway/types/readconfig_test.go @@ -68,6 +68,29 @@ func TestRead_DirectFunctionsOverride(t *testing.T) { } } +func TestRead_ScaleZeroDefaultAndOverride(t *testing.T) { + defaults := NewEnvBucket() + readConfig := ReadConfig{} + // defaults.Setenv("scale_from_zero", "true") + config := readConfig.Read(defaults) + + want := false + if config.ScaleFromZero != want { + t.Logf("ScaleFromZero should be %v, got: %v", want, config.ScaleFromZero) + t.Fail() + } + + defaults.Setenv("scale_from_zero", "true") + config = readConfig.Read(defaults) + want = true + + if config.ScaleFromZero != want { + t.Logf("ScaleFromZero was overriden - should be %v, got: %v", want, config.ScaleFromZero) + t.Fail() + } + +} + func TestRead_EmptyTimeoutConfig(t *testing.T) { defaults := NewEnvBucket() readConfig := ReadConfig{}