Skip to content

Commit ea07ba8

Browse files
ndeloofglours
authored andcommitted
fix support for secret set by env inside included file
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
1 parent 432ae23 commit ea07ba8

5 files changed

Lines changed: 34 additions & 4 deletions

File tree

pkg/compose/secrets.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,15 @@ func (s *composeService) injectSecrets(ctx context.Context, project *types.Proje
4545
config.Target = "/run/secrets/" + config.Target
4646
}
4747

48-
env, ok := project.Environment[file.Environment]
49-
if !ok {
50-
return fmt.Errorf("environment variable %q required by secret %q is not set", file.Environment, file.Name)
48+
content := file.Content
49+
if content == "" {
50+
env, ok := project.Environment[file.Environment]
51+
if !ok {
52+
return fmt.Errorf("environment variable %q required by secret %q is not set", file.Environment, file.Name)
53+
}
54+
content = env
5155
}
52-
b, err := createTar(env, types.FileReferenceConfig(config))
56+
b, err := createTar(content, types.FileReferenceConfig(config))
5357
if err != nil {
5458
return err
5559
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
services:
2+
included:
3+
image: alpine
4+
secrets:
5+
- my-secret
6+
command: cat /run/secrets/my-secret
7+
8+
secrets:
9+
my-secret:
10+
environment: 'MY_SECRET'

pkg/e2e/fixtures/env-secret/compose.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
include:
2+
- path: child/compose.yaml
3+
env_file:
4+
- secret.env
5+
16
services:
27
foo:
38
image: alpine
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
MY_SECRET='this-is-secret'

pkg/e2e/secrets_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,13 @@ func TestSecretFromEnv(t *testing.T) {
4141
res.Assert(t, icmd.Expected{Out: "-r--r----- 1 1005 1005"})
4242
})
4343
}
44+
45+
func TestSecretFromInclude(t *testing.T) {
46+
c := NewParallelCLI(t)
47+
defer c.cleanupWithDown(t, "env-secret-include")
48+
49+
t.Run("compose run", func(t *testing.T) {
50+
res := c.RunDockerComposeCmd(t, "-f", "./fixtures/env-secret/compose.yaml", "run", "included")
51+
res.Assert(t, icmd.Expected{Out: "this-is-secret"})
52+
})
53+
}

0 commit comments

Comments
 (0)