Skip to content
This repository was archived by the owner on Nov 27, 2023. It is now read-only.

Commit 2e89920

Browse files
committed
Add envFile arguments to run command
Signed-off-by: Ulysses Souza <[email protected]>
1 parent 4f48318 commit 2e89920

File tree

6 files changed

+42
-1
lines changed

6 files changed

+42
-1
lines changed

cli/cmd/run/run.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ func Command(contextType string) *cobra.Command {
5252
cmd.Flags().Float64Var(&opts.Cpus, "cpus", 1., "Number of CPUs")
5353
cmd.Flags().VarP(&opts.Memory, "memory", "m", "Memory limit")
5454
cmd.Flags().StringArrayVarP(&opts.Environment, "env", "e", []string{}, "Set environment variables")
55+
cmd.Flags().StringArrayVar(&opts.EnvironmentFiles, "envFile", []string{}, "Path to environment files to be translated as environment variables")
5556
cmd.Flags().StringVarP(&opts.RestartPolicyCondition, "restart", "", containers.RestartPolicyNone, "Restart policy to apply when a container exits")
5657

5758
if contextType == store.AciContextType {

cli/cmd/run/run_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import (
2323

2424
"gotest.tools/v3/assert"
2525
"gotest.tools/v3/golden"
26+
27+
"github.com/docker/compose-cli/cli/options/run"
2628
)
2729

2830
func TestHelp(t *testing.T) {
@@ -40,3 +42,24 @@ func TestHelpNoDomainFlag(t *testing.T) {
4042
_ = c.Help()
4143
assert.Assert(t, !strings.Contains(b.String(), "domainname"))
4244
}
45+
46+
func TestRunEnvironmentFiles(t *testing.T) {
47+
runOpts := run.Opts{
48+
Environment: []string{
49+
"VAR=1",
50+
},
51+
EnvironmentFiles: []string{
52+
"testdata/runtest1.env",
53+
"testdata/runtest2.env",
54+
},
55+
}
56+
containerConfig, err := runOpts.ToContainerConfig("test")
57+
assert.NilError(t, err)
58+
assert.DeepEqual(t, containerConfig.Environment, []string{
59+
"VAR=1",
60+
"FIRST_VAR=\"firstValue\"",
61+
"SECOND_VAR=secondValue",
62+
"THIRD_VAR=2",
63+
"FOURTH_VAR=fourthValue",
64+
})
65+
}

cli/cmd/run/testdata/run-help.golden

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ Flags:
88
-d, --detach Run container in background and print container ID
99
--domainname string Container NIS domain name
1010
-e, --env stringArray Set environment variables
11+
--envFile stringArray Path to environment files to be translated as environment variables
1112
-l, --label stringArray Set meta data on a container
1213
-m, --memory bytes Memory limit
1314
--name string Assign a name to the container

cli/cmd/run/testdata/runtest1.env

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
FIRST_VAR="firstValue"
2+
SECOND_VAR=secondValue

cli/cmd/run/testdata/runtest2.env

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
THIRD_VAR=2
2+
FOURTH_VAR=fourthValue

cli/options/run/opts.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import (
2121
"strconv"
2222
"strings"
2323

24+
"github.com/docker/cli/opts"
25+
2426
"github.com/docker/compose-cli/utils"
2527

2628
"github.com/docker/docker/pkg/namesgenerator"
@@ -40,6 +42,7 @@ type Opts struct {
4042
Memory formatter.MemBytes
4143
Detach bool
4244
Environment []string
45+
EnvironmentFiles []string
4346
RestartPolicyCondition string
4447
DomainName string
4548
}
@@ -65,6 +68,15 @@ func (r *Opts) ToContainerConfig(image string) (containers.ContainerConfig, erro
6568
return containers.ContainerConfig{}, err
6669
}
6770

71+
envVars := r.Environment
72+
for _, f := range r.EnvironmentFiles {
73+
vars, err := opts.ParseEnvFile(f)
74+
if err != nil {
75+
return containers.ContainerConfig{}, err
76+
}
77+
envVars = append(envVars, vars...)
78+
}
79+
6880
return containers.ContainerConfig{
6981
ID: r.Name,
7082
Image: image,
@@ -73,7 +85,7 @@ func (r *Opts) ToContainerConfig(image string) (containers.ContainerConfig, erro
7385
Volumes: r.Volumes,
7486
MemLimit: r.Memory,
7587
CPULimit: r.Cpus,
76-
Environment: r.Environment,
88+
Environment: envVars,
7789
RestartPolicyCondition: restartPolicy,
7890
DomainName: r.DomainName,
7991
}, nil

0 commit comments

Comments
 (0)