Skip to content

Commit 6adefd5

Browse files
committed
keep empty environment variables as those must be UNSET in container
Signed-off-by: Nicolas De Loof <[email protected]>
1 parent 65600ce commit 6adefd5

File tree

2 files changed

+49
-4
lines changed

2 files changed

+49
-4
lines changed

loader/normalize.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,14 @@ func Normalize(dict map[string]any, env types.Mapping) (map[string]any, error) {
5252
}
5353

5454
if a, ok := build["args"]; ok {
55-
build["args"], _ = resolve(a, fn)
55+
build["args"], _ = resolve(a, fn, false)
5656
}
5757

5858
service["build"] = build
5959
}
6060

6161
if e, ok := service["environment"]; ok {
62-
service["environment"], _ = resolve(e, fn)
62+
service["environment"], _ = resolve(e, fn, true)
6363
}
6464

6565
var dependsOn map[string]any
@@ -178,12 +178,12 @@ func normalizeNetworks(dict map[string]any) {
178178
}
179179
}
180180

181-
func resolve(a any, fn func(s string) (string, bool)) (any, bool) {
181+
func resolve(a any, fn func(s string) (string, bool), keepEmpty bool) (any, bool) {
182182
switch v := a.(type) {
183183
case []any:
184184
var resolved []any
185185
for _, val := range v {
186-
if r, ok := resolve(val, fn); ok {
186+
if r, ok := resolve(val, fn, keepEmpty); ok {
187187
resolved = append(resolved, r)
188188
}
189189
}
@@ -197,6 +197,8 @@ func resolve(a any, fn func(s string) (string, bool)) (any, bool) {
197197
}
198198
if s, ok := fn(key); ok {
199199
resolved[key] = s
200+
} else if keepEmpty {
201+
resolved[key] = nil
200202
}
201203
}
202204
return resolved, true
@@ -205,6 +207,9 @@ func resolve(a any, fn func(s string) (string, bool)) (any, bool) {
205207
if val, ok := fn(v); ok {
206208
return fmt.Sprintf("%s=%s", v, val), true
207209
}
210+
if keepEmpty {
211+
return v, true
212+
}
208213
return "", false
209214
}
210215
return v, true

loader/normalize_test.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,3 +336,43 @@ services:
336336
assert.NilError(t, err)
337337
assert.DeepEqual(t, expect, model)
338338
}
339+
340+
func TestNormalizeEnvironment(t *testing.T) {
341+
project := `
342+
name: myProject
343+
services:
344+
test:
345+
environment:
346+
- FOO
347+
- BAR
348+
- ZOT=QIX
349+
`
350+
351+
expected := `
352+
name: myProject
353+
networks:
354+
default:
355+
name: myProject_default
356+
services:
357+
test:
358+
environment:
359+
- FOO
360+
- BAR=bar
361+
- ZOT=QIX
362+
networks:
363+
default: null
364+
`
365+
var model map[string]any
366+
err := yaml.Unmarshal([]byte(project), &model)
367+
assert.NilError(t, err)
368+
model, err = Normalize(model, map[string]string{
369+
"BAR": "bar",
370+
"ZOT": "zot",
371+
})
372+
assert.NilError(t, err)
373+
374+
var expect map[string]any
375+
err = yaml.Unmarshal([]byte(expected), &expect)
376+
assert.NilError(t, err)
377+
assert.DeepEqual(t, expect, model)
378+
}

0 commit comments

Comments
 (0)