diff --git a/internal/tools/unknown_keys.go b/internal/tools/unknown_keys.go index f309d4d0d9..ad4b829e96 100644 --- a/internal/tools/unknown_keys.go +++ b/internal/tools/unknown_keys.go @@ -66,6 +66,11 @@ func checkEnvironmentConfigKeys(defaults map[string]interface{}) { if !strings.HasPrefix(envKey, envPrefix) { continue } + // Kubernetes automatically adds some variables which are not used by Centrifugo + // itself. We skip warnings about them. + if isKubernetesEnvVar(envKey) { + continue + } if !isKnownEnvKey(defaults, envPrefix, envKey) { log.Warn().Str("key", envKey).Msg("unknown key found in the environment") } @@ -73,6 +78,20 @@ func checkEnvironmentConfigKeys(defaults map[string]interface{}) { } } +var k8sPrefixes = []string{ + "CENTRIFUGO_PORT_", + "CENTRIFUGO_SERVICE_", +} + +func isKubernetesEnvVar(envKey string) bool { + for _, k8sPrefix := range k8sPrefixes { + if strings.HasPrefix(envKey, k8sPrefix) { + return true + } + } + return false +} + func isKnownEnvKey(defaults map[string]interface{}, envPrefix string, envKey string) bool { for defKey := range defaults { defKeyEnvFormat := envPrefix + strings.ToUpper(strings.ReplaceAll(defKey, ".", "_")) diff --git a/internal/tools/unknown_keys_test.go b/internal/tools/unknown_keys_test.go new file mode 100644 index 0000000000..63bfda4d8a --- /dev/null +++ b/internal/tools/unknown_keys_test.go @@ -0,0 +1,23 @@ +package tools + +import ( + "strconv" + "testing" +) + +func Test_isKubernetesEnvVar(t *testing.T) { + tests := []struct { + envKey string + want bool + }{ + {"CENTRIFUGO_SERVICE_PORT_GRPC", true}, + {"CENTRIFUGO_PORT_8000_TCP", true}, + } + for i, tt := range tests { + t.Run(strconv.Itoa(i), func(t *testing.T) { + if got := isKubernetesEnvVar(tt.envKey); got != tt.want { + t.Errorf("isKubernetesEnvVar() = %v, want %v", got, tt.want) + } + }) + } +}