Browse Source

fix support for secret set by env inside included file

Signed-off-by: Nicolas De Loof <[email protected]>
Nicolas De Loof 8 months ago
parent
commit
ea07ba8e2a

+ 8 - 4
pkg/compose/secrets.go

@@ -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
 		}

+ 10 - 0
pkg/e2e/fixtures/env-secret/child/compose.yaml

@@ -0,0 +1,10 @@
+services:
+  included:
+    image: alpine
+    secrets:
+      - my-secret
+    command: cat /run/secrets/my-secret
+
+secrets:
+  my-secret:
+    environment: 'MY_SECRET'

+ 5 - 0
pkg/e2e/fixtures/env-secret/compose.yaml

@@ -1,3 +1,8 @@
+include:
+  - path: child/compose.yaml
+    env_file:
+      - secret.env
+
 services:
   foo:
     image: alpine

+ 1 - 0
pkg/e2e/fixtures/env-secret/secret.env

@@ -0,0 +1 @@
+MY_SECRET='this-is-secret'

+ 10 - 0
pkg/e2e/secrets_test.go

@@ -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"})
+	})
+}