Skip to content

Commit f0e382a

Browse files
fix: Merge env vars correctly (#2096)
1 parent 2bbbd44 commit f0e382a

File tree

4 files changed

+21
-43
lines changed

4 files changed

+21
-43
lines changed

deploy/cloud/operator/internal/controller/dynamocomponentdeployment_controller.go

Lines changed: 3 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1214,46 +1214,14 @@ func (r *DynamoComponentDeploymentReconciler) generatePodTemplateSpec(ctx contex
12141214

12151215
containerPort := commonconsts.DynamoServicePort
12161216

1217-
var envs []corev1.EnvVar
1218-
envsSeen := make(map[string]struct{})
1219-
12201217
resourceAnnotations := opt.dynamoComponentDeployment.Spec.Annotations
1221-
specEnvs := opt.dynamoComponentDeployment.Spec.Envs
12221218

12231219
if resourceAnnotations == nil {
12241220
resourceAnnotations = make(map[string]string)
12251221
}
12261222

12271223
isDebugModeEnabled := checkIfIsDebugModeEnabled(resourceAnnotations)
12281224

1229-
if specEnvs != nil {
1230-
envs = make([]corev1.EnvVar, 0, len(specEnvs)+1)
1231-
1232-
for _, env := range specEnvs {
1233-
if _, ok := envsSeen[env.Name]; ok {
1234-
continue
1235-
}
1236-
if env.Name == commonconsts.EnvDynamoServicePort {
1237-
// nolint: gosec
1238-
containerPort, err = strconv.Atoi(env.Value)
1239-
if err != nil {
1240-
return nil, errors.Wrapf(err, "invalid port value %s", env.Value)
1241-
}
1242-
}
1243-
envsSeen[env.Name] = struct{}{}
1244-
envVar := corev1.EnvVar{
1245-
Name: env.Name,
1246-
}
1247-
if env.Value != "" {
1248-
envVar.Value = env.Value
1249-
}
1250-
if env.ValueFrom != nil {
1251-
envVar.ValueFrom = env.ValueFrom
1252-
}
1253-
envs = append(envs, envVar)
1254-
}
1255-
}
1256-
12571225
defaultEnvs := []corev1.EnvVar{
12581226
{
12591227
Name: commonconsts.EnvDynamoServicePort,
@@ -1275,11 +1243,7 @@ func (r *DynamoComponentDeploymentReconciler) generatePodTemplateSpec(ctx contex
12751243
})
12761244
}
12771245

1278-
for _, env := range defaultEnvs {
1279-
if _, ok := envsSeen[env.Name]; !ok {
1280-
envs = append(envs, env)
1281-
}
1282-
}
1246+
envs := dynamo.MergeEnvs(opt.dynamoComponentDeployment.Spec.Envs, defaultEnvs)
12831247

12841248
var livenessProbe *corev1.Probe
12851249
if opt.dynamoComponentDeployment.Spec.LivenessProbe != nil {
@@ -1470,6 +1434,8 @@ func (r *DynamoComponentDeploymentReconciler) generatePodTemplateSpec(ctx contex
14701434
err = errors.Wrapf(err, "failed to merge extraPodSpecMainContainer into container")
14711435
return nil, err
14721436
}
1437+
// finally merge the envs from extraPodSpecMainContainer into container
1438+
container.Env = dynamo.MergeEnvs(container.Env, extraPodSpecMainContainer.Env)
14731439
}
14741440
}
14751441

deploy/cloud/operator/internal/controller/dynamocomponentdeployment_controller_test.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -824,6 +824,12 @@ func TestDynamoComponentDeploymentReconciler_generateLeaderWorkerSet(t *testing.
824824
DynamoComponent: "test-lws-component",
825825
DynamoTag: "test-tag",
826826
DynamoComponentDeploymentSharedSpec: v1alpha1.DynamoComponentDeploymentSharedSpec{
827+
Envs: []corev1.EnvVar{
828+
{
829+
Name: "TEST_ENV_FROM_DYNAMO_COMPONENT_DEPLOYMENT_SPEC",
830+
Value: "test_value_from_dynamo_component_deployment_spec",
831+
},
832+
},
827833
ServiceName: "test-lws-deploy-service",
828834
DynamoNamespace: &[]string{"default"}[0],
829835
Annotations: map[string]string{
@@ -845,6 +851,12 @@ func TestDynamoComponentDeploymentReconciler_generateLeaderWorkerSet(t *testing.
845851
Args: []string{
846852
"some dynamo command",
847853
},
854+
Env: []corev1.EnvVar{
855+
{
856+
Name: "TEST_ENV_FROM_EXTRA_POD_SPEC",
857+
Value: "test_value_from_extra_pod_spec",
858+
},
859+
},
848860
},
849861
},
850862
},
@@ -896,7 +908,7 @@ func TestDynamoComponentDeploymentReconciler_generateLeaderWorkerSet(t *testing.
896908
Image: "test-image:latest",
897909
Command: []string{"sh", "-c"},
898910
Args: []string{"ray start --head --port=6379 && some dynamo command"},
899-
Env: []corev1.EnvVar{{Name: "DYNAMO_PORT", Value: fmt.Sprintf("%d", commonconsts.DynamoServicePort)}},
911+
Env: []corev1.EnvVar{{Name: "DYNAMO_PORT", Value: fmt.Sprintf("%d", commonconsts.DynamoServicePort)}, {Name: "TEST_ENV_FROM_DYNAMO_COMPONENT_DEPLOYMENT_SPEC", Value: "test_value_from_dynamo_component_deployment_spec"}, {Name: "TEST_ENV_FROM_EXTRA_POD_SPEC", Value: "test_value_from_extra_pod_spec"}},
900912
VolumeMounts: []corev1.VolumeMount{
901913
{
902914
Name: "shared-memory", MountPath: "/dev/shm",
@@ -948,7 +960,7 @@ func TestDynamoComponentDeploymentReconciler_generateLeaderWorkerSet(t *testing.
948960
Image: "test-image:latest",
949961
Command: []string{"sh", "-c"},
950962
Args: []string{"ray start --address=$(LWS_LEADER_ADDRESS):6379 --block"},
951-
Env: []corev1.EnvVar{{Name: "DYNAMO_PORT", Value: fmt.Sprintf("%d", commonconsts.DynamoServicePort)}},
963+
Env: []corev1.EnvVar{{Name: "DYNAMO_PORT", Value: fmt.Sprintf("%d", commonconsts.DynamoServicePort)}, {Name: "TEST_ENV_FROM_DYNAMO_COMPONENT_DEPLOYMENT_SPEC", Value: "test_value_from_dynamo_component_deployment_spec"}, {Name: "TEST_ENV_FROM_EXTRA_POD_SPEC", Value: "test_value_from_extra_pod_spec"}},
952964
VolumeMounts: []corev1.VolumeMount{{Name: "shared-memory", MountPath: "/dev/shm"}},
953965
Ports: []corev1.ContainerPort{{Protocol: corev1.ProtocolTCP, Name: commonconsts.DynamoServicePortName, ContainerPort: commonconsts.DynamoServicePort}, {
954966
Protocol: corev1.ProtocolTCP, Name: commonconsts.DynamoHealthPortName, ContainerPort: commonconsts.DynamoHealthPort,

deploy/cloud/operator/internal/dynamo/graph.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ func GenerateDynamoComponentsDeployments(ctx context.Context, parentDynamoGraphD
176176
}
177177
// merge the envs from the parent deployment with the envs from the service
178178
if len(parentDynamoGraphDeployment.Spec.Envs) > 0 {
179-
deployment.Spec.Envs = mergeEnvs(parentDynamoGraphDeployment.Spec.Envs, deployment.Spec.Envs)
179+
deployment.Spec.Envs = MergeEnvs(parentDynamoGraphDeployment.Spec.Envs, deployment.Spec.Envs)
180180
}
181181
err := updateDynDeploymentConfig(deployment, commonconsts.DynamoServicePort)
182182
if err != nil {
@@ -279,7 +279,7 @@ func overrideWithDynDeploymentConfig(ctx context.Context, dynamoDeploymentCompon
279279
return nil
280280
}
281281

282-
func mergeEnvs(common, specific []corev1.EnvVar) []corev1.EnvVar {
282+
func MergeEnvs(common, specific []corev1.EnvVar) []corev1.EnvVar {
283283
envMap := make(map[string]corev1.EnvVar)
284284

285285
// Add all common environment variables.
@@ -362,7 +362,7 @@ func GenerateGrovePodGangSet(ctx context.Context, dynamoDeployment *v1alpha1.Dyn
362362
}
363363
// merge the envs from the parent deployment with the envs from the service
364364
if len(dynamoDeployment.Spec.Envs) > 0 {
365-
container.Env = mergeEnvs(dynamoDeployment.Spec.Envs, container.Env)
365+
container.Env = MergeEnvs(dynamoDeployment.Spec.Envs, container.Env)
366366
}
367367
container.Env = append(container.Env, corev1.EnvVar{
368368
Name: commonconsts.EnvDynamoServicePort,

deploy/cloud/operator/internal/dynamo/graph_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1106,7 +1106,7 @@ func Test_mergeEnvs(t *testing.T) {
11061106
}
11071107
for _, tt := range tests {
11081108
t.Run(tt.name, func(t *testing.T) {
1109-
got := mergeEnvs(tt.args.common, tt.args.specific)
1109+
got := MergeEnvs(tt.args.common, tt.args.specific)
11101110
sort.Slice(got, func(i, j int) bool {
11111111
return got[i].Name < got[j].Name
11121112
})

0 commit comments

Comments
 (0)