Skip to content

Commit 31eb761

Browse files
authored
Merge pull request #134 from vshn/fix-ref-ordering
fix: Secret references must be sorted to ensure stable output
2 parents 6c9ed3e + d63f169 commit 31eb761

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

pkg/converter/converter.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,19 @@ func composeServiceToContainer(
314314
envFrom = append(envFrom, core.EnvFromSource{SecretRef: &core.SecretEnvSource{LocalObjectReference: core.LocalObjectReference{Name: secret.Name}}})
315315
}
316316
env := []core.EnvVar{}
317-
for key, value := range workload.AsCompose().Environment {
317+
318+
// We need to iterate over the Environment map in an ordered way, because otherwise the resulting secret references will have a non-deterministic order.
319+
// Hence we get the keys first and sort them.
320+
keys := make([]string, len(workload.AsCompose().Environment))
321+
i := 0
322+
for k := range workload.AsCompose().Environment {
323+
keys[i] = k
324+
i++
325+
}
326+
sort.Strings(keys)
327+
// Now iterate over the sorted keys
328+
for _, key := range keys {
329+
value := workload.AsCompose().Environment[key]
318330
if value != nil && strings.HasPrefix(*value, SecretRefMagic+":") {
319331
// we've encountered a reference to another secret (starting with "$_ref_:" in the compose file)
320332
refValue := (*value)[len(SecretRefMagic)+1:]
@@ -326,6 +338,7 @@ func composeServiceToContainer(
326338
env = append(env, core.EnvVar{Name: key, ValueFrom: &core.EnvVarSource{SecretKeyRef: &core.SecretKeySelector{LocalObjectReference: core.LocalObjectReference{Name: refStrings[0]}, Key: refStrings[1]}}})
327339
}
328340
}
341+
329342
return core.Container{
330343
Name: composeService.Name + refSlug,
331344
Image: composeService.Image,

tests/golden/env-vars/compose.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,5 @@ services:
66
- BAR=${BAR}
77
- something_else=${BAZ}
88
- "PASSWORD=$_ref_:mongodb-secret:password"
9+
- "FOOREF=$_ref_:foo:fooooooo"
10+
- "BARREF=$_ref_:bar:baaaaaar"

tests/golden/env-vars/manifests/fooBar-oasp-deployment.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,16 @@ spec:
3232
topologyKey: kubernetes.io/hostname
3333
containers:
3434
- env:
35+
- name: BARREF
36+
valueFrom:
37+
secretKeyRef:
38+
key: baaaaaar
39+
name: bar
40+
- name: FOOREF
41+
valueFrom:
42+
secretKeyRef:
43+
key: fooooooo
44+
name: foo
3545
- name: PASSWORD
3646
valueFrom:
3747
secretKeyRef:

0 commit comments

Comments
 (0)