Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions pkg/compose/secrets.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,15 @@ func (s *composeService) injectSecrets(ctx context.Context, project *types.Proje
config.Target = "/run/secrets/" + config.Target
}

env, ok := project.Environment[file.Environment]
if !ok {
return fmt.Errorf("environment variable %q required by secret %q is not set", file.Environment, file.Name)
content := file.Content
if content == "" {
env, ok := project.Environment[file.Environment]
if !ok {
return fmt.Errorf("environment variable %q required by secret %q is not set", file.Environment, file.Name)
}
content = env
}
b, err := createTar(env, types.FileReferenceConfig(config))
b, err := createTar(content, types.FileReferenceConfig(config))
if err != nil {
return err
}
Expand Down
10 changes: 10 additions & 0 deletions pkg/e2e/fixtures/env-secret/child/compose.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
services:
included:
image: alpine
secrets:
- my-secret
command: cat /run/secrets/my-secret

secrets:
my-secret:
environment: 'MY_SECRET'
5 changes: 5 additions & 0 deletions pkg/e2e/fixtures/env-secret/compose.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
include:
- path: child/compose.yaml
env_file:
- secret.env

services:
foo:
image: alpine
Expand Down
1 change: 1 addition & 0 deletions pkg/e2e/fixtures/env-secret/secret.env
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
MY_SECRET='this-is-secret'
10 changes: 10 additions & 0 deletions pkg/e2e/secrets_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,13 @@ func TestSecretFromEnv(t *testing.T) {
res.Assert(t, icmd.Expected{Out: "-r--r----- 1 1005 1005"})
})
}

func TestSecretFromInclude(t *testing.T) {
c := NewParallelCLI(t)
defer c.cleanupWithDown(t, "env-secret-include")

t.Run("compose run", func(t *testing.T) {
res := c.RunDockerComposeCmd(t, "-f", "./fixtures/env-secret/compose.yaml", "run", "included")
res.Assert(t, icmd.Expected{Out: "this-is-secret"})
})
}