Add stack config command
Make use of existing modules and functions in order to output the merged configs. Added skip interpolation flag of variables, so that you can pipe the output back to stack deploy without much hassle. Signed-off-by: Stoica-Marcu Floris-Andrei <floris.sm@gmail.com> Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
committed by
Sebastiaan van Stijn
parent
429d716fbc
commit
dfc214115b
106
cli/command/stack/config_test.go
Normal file
106
cli/command/stack/config_test.go
Normal file
@ -0,0 +1,106 @@
|
||||
package stack
|
||||
|
||||
import (
|
||||
"io"
|
||||
"testing"
|
||||
|
||||
"github.com/docker/cli/cli/compose/loader"
|
||||
composetypes "github.com/docker/cli/cli/compose/types"
|
||||
"github.com/docker/cli/internal/test"
|
||||
"gotest.tools/v3/assert"
|
||||
)
|
||||
|
||||
func TestConfigWithEmptyComposeFile(t *testing.T) {
|
||||
cmd := newConfigCommand(test.NewFakeCli(&fakeClient{}))
|
||||
cmd.SetOut(io.Discard)
|
||||
|
||||
assert.ErrorContains(t, cmd.Execute(), `Please specify a Compose file`)
|
||||
}
|
||||
|
||||
var configMergeTests = []struct {
|
||||
name string
|
||||
skipInterpolation bool
|
||||
first string
|
||||
second string
|
||||
merged string
|
||||
}{
|
||||
{
|
||||
name: "With Interpolation",
|
||||
skipInterpolation: false,
|
||||
first: `version: "3.7"
|
||||
services:
|
||||
foo:
|
||||
image: busybox:latest
|
||||
command: cat file1.txt
|
||||
`,
|
||||
second: `version: "3.7"
|
||||
services:
|
||||
foo:
|
||||
image: busybox:${VERSION}
|
||||
command: cat file2.txt
|
||||
`,
|
||||
merged: `version: "3.7"
|
||||
services:
|
||||
foo:
|
||||
command:
|
||||
- cat
|
||||
- file2.txt
|
||||
image: busybox:1.0
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "Without Interpolation",
|
||||
skipInterpolation: true,
|
||||
first: `version: "3.7"
|
||||
services:
|
||||
foo:
|
||||
image: busybox:latest
|
||||
command: cat file1.txt
|
||||
`,
|
||||
second: `version: "3.7"
|
||||
services:
|
||||
foo:
|
||||
image: busybox:${VERSION}
|
||||
command: cat file2.txt
|
||||
`,
|
||||
merged: `version: "3.7"
|
||||
services:
|
||||
foo:
|
||||
command:
|
||||
- cat
|
||||
- file2.txt
|
||||
image: busybox:${VERSION}
|
||||
`,
|
||||
},
|
||||
}
|
||||
|
||||
func TestConfigMergeInterpolation(t *testing.T) {
|
||||
|
||||
for _, tt := range configMergeTests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
firstConfig := []byte(tt.first)
|
||||
secondConfig := []byte(tt.second)
|
||||
|
||||
firstConfigData, err := loader.ParseYAML(firstConfig)
|
||||
assert.NilError(t, err)
|
||||
secondConfigData, err := loader.ParseYAML(secondConfig)
|
||||
assert.NilError(t, err)
|
||||
|
||||
env := map[string]string{
|
||||
"VERSION": "1.0",
|
||||
}
|
||||
|
||||
cfg, err := outputConfig(composetypes.ConfigDetails{
|
||||
ConfigFiles: []composetypes.ConfigFile{
|
||||
{Config: firstConfigData, Filename: "firstConfig"},
|
||||
{Config: secondConfigData, Filename: "secondConfig"},
|
||||
},
|
||||
Environment: env,
|
||||
}, tt.skipInterpolation)
|
||||
assert.NilError(t, err)
|
||||
|
||||
assert.Equal(t, cfg, tt.merged)
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user