Skip to content
This repository was archived by the owner on Jul 18, 2025. It is now read-only.

Commit 195a374

Browse files
committed
expanded docker-compose parameters on init
Expand parameters with pre-existing parameters.FromFlatten() before marshaling to yaml when initializing from compose file in initFromComposeFile(). Signed-off-by: Nick Adcock <[email protected]>
1 parent d766735 commit 195a374

File tree

2 files changed

+54
-6
lines changed

2 files changed

+54
-6
lines changed

internal/packager/init.go

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"github.com/docker/app/loader"
1818
"github.com/docker/app/types"
1919
"github.com/docker/app/types/metadata"
20+
"github.com/docker/app/types/parameters"
2021
composeloader "github.com/docker/cli/cli/compose/loader"
2122
"github.com/docker/cli/cli/compose/schema"
2223
"github.com/docker/cli/opts"
@@ -136,13 +137,13 @@ func initFromComposeFile(name string, composeFile string) error {
136137
if err := checkComposeFileVersion(cfgMap); err != nil {
137138
return err
138139
}
139-
parameters := make(map[string]string)
140+
params := make(map[string]string)
140141
envs, err := opts.ParseEnvFile(filepath.Join(filepath.Dir(composeFile), ".env"))
141142
if err == nil {
142143
for _, v := range envs {
143144
kv := strings.SplitN(v, "=", 2)
144145
if len(kv) == 2 {
145-
parameters[kv[0]] = kv[1]
146+
params[kv[0]] = kv[1]
146147
}
147148
}
148149
}
@@ -152,16 +153,21 @@ func initFromComposeFile(name string, composeFile string) error {
152153
}
153154
needsFilling := false
154155
for k, v := range vars {
155-
if _, ok := parameters[k]; !ok {
156+
if _, ok := params[k]; !ok {
156157
if v != "" {
157-
parameters[k] = v
158+
params[k] = v
158159
} else {
159-
parameters[k] = "FILL ME"
160+
params[k] = "FILL ME"
160161
needsFilling = true
161162
}
162163
}
163164
}
164-
parametersYAML, err := yaml.Marshal(parameters)
165+
166+
expandedParams, err := parameters.FromFlatten(params)
167+
if err != nil {
168+
return errors.Wrap(err, "failed to expand parameters")
169+
}
170+
parametersYAML, err := yaml.Marshal(expandedParams)
165171
if err != nil {
166172
return errors.Wrap(err, "failed to marshal parameters")
167173
}

internal/packager/init_test.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,48 @@ services:
4444
assert.Assert(t, fs.Equal(dir.Join(appName), manifest))
4545
}
4646

47+
func TestInitFromComposeFileWithFlattenedParams(t *testing.T) {
48+
composeData := `
49+
version: '3.0'
50+
services:
51+
service1:
52+
image: image1
53+
ports:
54+
- ${ports.service1:-9001}
55+
56+
service2:
57+
image: image2
58+
ports:
59+
- ${ports.service2:-9002}
60+
`
61+
inputDir := fs.NewDir(t, "app_input_",
62+
fs.WithFile(internal.ComposeFileName, composeData),
63+
)
64+
defer inputDir.Remove()
65+
66+
appName := "my.dockerapp"
67+
dir := fs.NewDir(t, "app_",
68+
fs.WithDir(appName),
69+
)
70+
defer dir.Remove()
71+
72+
err := initFromComposeFile(dir.Join(appName), inputDir.Join(internal.ComposeFileName))
73+
assert.NilError(t, err)
74+
75+
const expectedParameters = `ports:
76+
service1: 9001
77+
service2: 9002
78+
`
79+
manifest := fs.Expected(
80+
t,
81+
fs.WithMode(0755),
82+
fs.WithFile(internal.ComposeFileName, composeData, fs.WithMode(0644)),
83+
fs.WithFile(internal.ParametersFileName, expectedParameters, fs.WithMode(0644)),
84+
)
85+
86+
assert.Assert(t, fs.Equal(dir.Join(appName), manifest))
87+
}
88+
4789
func TestInitFromInvalidComposeFile(t *testing.T) {
4890
err := initFromComposeFile("my.dockerapp", "doesnotexist")
4991
assert.ErrorContains(t, err, "failed to read")

0 commit comments

Comments
 (0)