Skip to content

Commit 91feb40

Browse files
authored
[Fix] : redis exporter mismatch environment (#670)
Signed-off-by: drivebyer <yang.wu@daocloud.io>
1 parent 861b8f3 commit 91feb40

File tree

2 files changed

+77
-71
lines changed

2 files changed

+77
-71
lines changed

k8sutils/statefulset.go

Lines changed: 30 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -344,12 +344,10 @@ func generateContainerDef(name string, containerParams containerParameters, clus
344344
SecurityContext: containerParams.SecurityContext,
345345
Env: getEnvironmentVariables(
346346
containerParams.Role,
347-
false,
348347
containerParams.EnabledPassword,
349348
containerParams.SecretName,
350349
containerParams.SecretKey,
351350
containerParams.PersistenceEnabled,
352-
containerParams.RedisExporterEnv,
353351
containerParams.TLSConfig,
354352
containerParams.ACLConfig,
355353
containerParams.EnvVars,
@@ -464,19 +462,8 @@ func enableRedisMonitoring(params containerParameters) corev1.Container {
464462
Name: redisExporterContainer,
465463
Image: params.RedisExporterImage,
466464
ImagePullPolicy: params.RedisExporterImagePullPolicy,
467-
Env: getEnvironmentVariables(
468-
params.Role,
469-
true,
470-
params.EnabledPassword,
471-
params.SecretName,
472-
params.SecretKey,
473-
params.PersistenceEnabled,
474-
params.RedisExporterEnv,
475-
params.TLSConfig,
476-
params.ACLConfig,
477-
params.EnvVars,
478-
),
479-
VolumeMounts: getVolumeMount("", nil, false, false, nil, params.AdditionalMountPath, params.TLSConfig, params.ACLConfig), // We need/want the tls-certs but we DON'T need the PVC (if one is available)
465+
Env: getExporterEnvironmentVariables(params.TLSConfig, params.RedisExporterEnv),
466+
VolumeMounts: getVolumeMount("", nil, false, false, nil, params.AdditionalMountPath, params.TLSConfig, params.ACLConfig), // We need/want the tls-certs but we DON'T need the PVC (if one is available)
480467
Ports: []corev1.ContainerPort{
481468
{
482469
Name: redisExporterPortName,
@@ -491,6 +478,32 @@ func enableRedisMonitoring(params containerParameters) corev1.Container {
491478
return exporterDefinition
492479
}
493480

481+
func getExporterEnvironmentVariables(tlsConfig *redisv1beta2.TLSConfig, env *[]corev1.EnvVar) []corev1.EnvVar {
482+
var envVars []corev1.EnvVar
483+
if tlsConfig != nil {
484+
envVars = append(envVars, corev1.EnvVar{
485+
Name: "REDIS_EXPORTER_TLS_CLIENT_KEY_FILE",
486+
Value: "/tls/tls.key",
487+
})
488+
envVars = append(envVars, corev1.EnvVar{
489+
Name: "REDIS_EXPORTER_TLS_CLIENT_CERT_FILE",
490+
Value: "/tls/tls.crt",
491+
})
492+
envVars = append(envVars, corev1.EnvVar{
493+
Name: "REDIS_EXPORTER_TLS_CA_CERT_FILE",
494+
Value: "/tls/ca.crt",
495+
})
496+
envVars = append(envVars, corev1.EnvVar{
497+
Name: "REDIS_EXPORTER_SKIP_TLS_VERIFICATION",
498+
Value: "true",
499+
})
500+
}
501+
if env != nil {
502+
envVars = append(envVars, *env...)
503+
}
504+
return envVars
505+
}
506+
494507
// getVolumeMount gives information about persistence mount
495508
func getVolumeMount(name string, persistenceEnabled *bool, clusterMode bool, nodeConfVolume bool, externalConfig *string, mountpath []corev1.VolumeMount, tlsConfig *redisv1beta2.TLSConfig, aclConfig *redisv1beta2.ACLConfig) []corev1.VolumeMount {
496509
var VolumeMounts []corev1.VolumeMount
@@ -557,8 +570,8 @@ func getProbeInfo(probe *commonapi.Probe) *corev1.Probe {
557570
}
558571

559572
// getEnvironmentVariables returns all the required Environment Variables
560-
func getEnvironmentVariables(role string, enabledMetric bool, enabledPassword *bool, secretName *string,
561-
secretKey *string, persistenceEnabled *bool, exporterEnvVar *[]corev1.EnvVar, tlsConfig *redisv1beta2.TLSConfig,
573+
func getEnvironmentVariables(role string, enabledPassword *bool, secretName *string,
574+
secretKey *string, persistenceEnabled *bool, tlsConfig *redisv1beta2.TLSConfig,
562575
aclConfig *redisv1beta2.ACLConfig, envVar *[]corev1.EnvVar) []corev1.EnvVar {
563576
envVars := []corev1.EnvVar{
564577
{Name: "SERVER_MODE", Value: role},
@@ -574,24 +587,6 @@ func getEnvironmentVariables(role string, enabledMetric bool, enabledPassword *b
574587

575588
if tlsConfig != nil {
576589
envVars = append(envVars, GenerateTLSEnvironmentVariables(tlsConfig)...)
577-
if enabledMetric {
578-
envVars = append(envVars, corev1.EnvVar{
579-
Name: "REDIS_EXPORTER_TLS_CLIENT_KEY_FILE",
580-
Value: "/tls/tls.key",
581-
})
582-
envVars = append(envVars, corev1.EnvVar{
583-
Name: "REDIS_EXPORTER_TLS_CLIENT_CERT_FILE",
584-
Value: "/tls/tls.crt",
585-
})
586-
envVars = append(envVars, corev1.EnvVar{
587-
Name: "REDIS_EXPORTER_TLS_CA_CERT_FILE",
588-
Value: "/tls/ca.crt",
589-
})
590-
envVars = append(envVars, corev1.EnvVar{
591-
Name: "REDIS_EXPORTER_SKIP_TLS_VERIFICATION",
592-
Value: "true",
593-
})
594-
}
595590
}
596591

597592
if aclConfig != nil {
@@ -623,10 +618,6 @@ func getEnvironmentVariables(role string, enabledMetric bool, enabledPassword *b
623618
envVars = append(envVars, corev1.EnvVar{Name: "PERSISTENCE_ENABLED", Value: "true"})
624619
}
625620

626-
if exporterEnvVar != nil {
627-
envVars = append(envVars, *exporterEnvVar...)
628-
}
629-
630621
if envVar != nil {
631622
envVars = append(envVars, *envVar...)
632623
}

k8sutils/statefulset_test.go

Lines changed: 47 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -222,12 +222,10 @@ func TestGetEnvironmentVariables(t *testing.T) {
222222
tests := []struct {
223223
name string
224224
role string
225-
enabledMetric bool
226225
enabledPassword *bool
227226
secretName *string
228227
secretKey *string
229228
persistenceEnabled *bool
230-
exporterEnvVar *[]corev1.EnvVar
231229
tlsConfig *redisv1beta2.TLSConfig
232230
aclConfig *redisv1beta2.ACLConfig
233231
envVar *[]corev1.EnvVar
@@ -236,14 +234,10 @@ func TestGetEnvironmentVariables(t *testing.T) {
236234
{
237235
name: "Test with role sentinel, metrics true, password true, persistence true, exporter env, tls enabled, acl enabled and env var",
238236
role: "sentinel",
239-
enabledMetric: true,
240237
enabledPassword: pointer.Bool(true),
241238
secretName: pointer.String("test-secret"),
242239
secretKey: pointer.String("test-key"),
243240
persistenceEnabled: pointer.Bool(true),
244-
exporterEnvVar: &[]corev1.EnvVar{
245-
{Name: "TEST_EXPORTER_ENV", Value: "exporter-value"},
246-
},
247241
tlsConfig: &redisv1beta2.TLSConfig{
248242
TLSConfig: common.TLSConfig{
249243
CaKeyFile: "test_ca.crt",
@@ -266,10 +260,6 @@ func TestGetEnvironmentVariables(t *testing.T) {
266260
{Name: "ACL_MODE", Value: "true"},
267261
{Name: "PERSISTENCE_ENABLED", Value: "true"},
268262
{Name: "REDIS_ADDR", Value: "redis://localhost:26379"},
269-
{Name: "REDIS_EXPORTER_SKIP_TLS_VERIFICATION", Value: "true"},
270-
{Name: "REDIS_EXPORTER_TLS_CA_CERT_FILE", Value: "/tls/ca.crt"},
271-
{Name: "REDIS_EXPORTER_TLS_CLIENT_CERT_FILE", Value: "/tls/tls.crt"},
272-
{Name: "REDIS_EXPORTER_TLS_CLIENT_KEY_FILE", Value: "/tls/tls.key"},
273263
{Name: "TLS_MODE", Value: "true"},
274264
{Name: "REDIS_TLS_CA_KEY", Value: path.Join("/tls/", "test_ca.crt")},
275265
{Name: "REDIS_TLS_CERT", Value: path.Join("/tls/", "test_tls.crt")},
@@ -285,18 +275,15 @@ func TestGetEnvironmentVariables(t *testing.T) {
285275
{Name: "SERVER_MODE", Value: "sentinel"},
286276
{Name: "SETUP_MODE", Value: "sentinel"},
287277
{Name: "TEST_ENV", Value: "test-value"},
288-
{Name: "TEST_EXPORTER_ENV", Value: "exporter-value"},
289278
},
290279
},
291280
{
292281
name: "Test with role redis, metrics false, password nil, persistence nil, exporter nil, tls nil, acl nil and nil env var",
293282
role: "redis",
294-
enabledMetric: false,
295283
enabledPassword: nil,
296284
secretName: nil,
297285
secretKey: nil,
298286
persistenceEnabled: nil,
299-
exporterEnvVar: nil,
300287
tlsConfig: nil,
301288
aclConfig: nil,
302289
envVar: nil,
@@ -309,12 +296,10 @@ func TestGetEnvironmentVariables(t *testing.T) {
309296
{
310297
name: "Test with role redis, metrics false, password nil, persistence false, exporter nil, tls nil, acl nil and nil env var",
311298
role: "sentinel",
312-
enabledMetric: false,
313299
enabledPassword: nil,
314300
secretName: nil,
315301
secretKey: nil,
316302
persistenceEnabled: pointer.Bool(false),
317-
exporterEnvVar: nil,
318303
tlsConfig: nil,
319304
aclConfig: nil,
320305
envVar: nil,
@@ -327,16 +312,12 @@ func TestGetEnvironmentVariables(t *testing.T) {
327312
{
328313
name: "Test with role cluster, metrics true, password true, persistence true, exporter env, tls nil, acl enabled and env var",
329314
role: "cluster",
330-
enabledMetric: true,
331315
enabledPassword: pointer.Bool(true),
332316
secretName: pointer.String("test-secret"),
333317
secretKey: pointer.String("test-key"),
334318
persistenceEnabled: pointer.Bool(true),
335-
exporterEnvVar: &[]corev1.EnvVar{
336-
{Name: "TEST_EXPORTER_ENV", Value: "exporter-value"},
337-
},
338-
tlsConfig: nil,
339-
aclConfig: &redisv1beta2.ACLConfig{},
319+
tlsConfig: nil,
320+
aclConfig: &redisv1beta2.ACLConfig{},
340321
envVar: &[]corev1.EnvVar{
341322
{Name: "TEST_ENV", Value: "test-value"},
342323
},
@@ -355,36 +336,70 @@ func TestGetEnvironmentVariables(t *testing.T) {
355336
{Name: "SERVER_MODE", Value: "cluster"},
356337
{Name: "SETUP_MODE", Value: "cluster"},
357338
{Name: "TEST_ENV", Value: "test-value"},
358-
{Name: "TEST_EXPORTER_ENV", Value: "exporter-value"},
359339
},
360340
},
361341
{
362342
name: "Test with cluster role and only metrics enabled",
363343
role: "cluster",
364-
enabledMetric: true,
365344
enabledPassword: nil,
366345
secretName: nil,
367346
secretKey: nil,
368347
persistenceEnabled: nil,
369-
exporterEnvVar: &[]corev1.EnvVar{
370-
{Name: "TEST_EXPORTER_ENV", Value: "exporter-value"},
371-
},
372-
tlsConfig: nil,
373-
aclConfig: nil,
374-
envVar: nil,
348+
tlsConfig: nil,
349+
aclConfig: nil,
350+
envVar: nil,
375351
expectedEnvironment: []corev1.EnvVar{
376352
{Name: "REDIS_ADDR", Value: "redis://localhost:6379"},
377353
{Name: "SERVER_MODE", Value: "cluster"},
378354
{Name: "SETUP_MODE", Value: "cluster"},
379-
{Name: "TEST_EXPORTER_ENV", Value: "exporter-value"},
380355
},
381356
},
382357
}
383358

384359
for _, tt := range tests {
385360
t.Run(tt.name, func(t *testing.T) {
386-
actualEnvironment := getEnvironmentVariables(tt.role, tt.enabledMetric, tt.enabledPassword, tt.secretName,
387-
tt.secretKey, tt.persistenceEnabled, tt.exporterEnvVar, tt.tlsConfig, tt.aclConfig, tt.envVar)
361+
actualEnvironment := getEnvironmentVariables(tt.role, tt.enabledPassword, tt.secretName,
362+
tt.secretKey, tt.persistenceEnabled, tt.tlsConfig, tt.aclConfig, tt.envVar)
363+
364+
assert.ElementsMatch(t, tt.expectedEnvironment, actualEnvironment)
365+
})
366+
}
367+
}
368+
369+
func Test_getExporterEnvironmentVariables(t *testing.T) {
370+
tests := []struct {
371+
name string
372+
tlsConfig *redisv1beta2.TLSConfig
373+
envVar *[]corev1.EnvVar
374+
expectedEnvironment []corev1.EnvVar
375+
}{
376+
{
377+
name: "Test with tls enabled and env var",
378+
tlsConfig: &redisv1beta2.TLSConfig{
379+
TLSConfig: common.TLSConfig{
380+
CaKeyFile: "test_ca.crt",
381+
CertKeyFile: "test_tls.crt",
382+
KeyFile: "test_tls.key",
383+
Secret: corev1.SecretVolumeSource{
384+
SecretName: "tls-secret",
385+
},
386+
},
387+
},
388+
envVar: &[]corev1.EnvVar{
389+
{Name: "TEST_ENV", Value: "test-value"},
390+
},
391+
expectedEnvironment: []corev1.EnvVar{
392+
{Name: "REDIS_EXPORTER_TLS_CLIENT_KEY_FILE", Value: "/tls/tls.key"},
393+
{Name: "REDIS_EXPORTER_TLS_CLIENT_CERT_FILE", Value: "/tls/tls.crt"},
394+
{Name: "REDIS_EXPORTER_TLS_CA_CERT_FILE", Value: "/tls/ca.crt"},
395+
{Name: "REDIS_EXPORTER_SKIP_TLS_VERIFICATION", Value: "true"},
396+
{Name: "TEST_ENV", Value: "test-value"},
397+
},
398+
},
399+
}
400+
for _, tt := range tests {
401+
t.Run(tt.name, func(t *testing.T) {
402+
actualEnvironment := getExporterEnvironmentVariables(tt.tlsConfig, tt.envVar)
388403

389404
assert.ElementsMatch(t, tt.expectedEnvironment, actualEnvironment)
390405
})

0 commit comments

Comments
 (0)