Преглед изворни кода

only use ToModel when --no-interpolate is set

Signed-off-by: Nicolas De Loof <[email protected]>
Nicolas De Loof пре 1 година
родитељ
комит
5a1ba0efcf
2 измењених фајлова са 28 додато и 15 уклоњено
  1. 25 12
      cmd/compose/config.go
  2. 3 3
      pkg/e2e/compose_test.go

+ 25 - 12
cmd/compose/config.go

@@ -136,21 +136,34 @@ func configCommand(p *ProjectOptions, dockerCli command.Cli) *cobra.Command {
 }
 
 func runConfig(ctx context.Context, dockerCli command.Cli, opts configOptions, services []string) error {
-	model, err := opts.ToModel(ctx, dockerCli, services)
-	if err != nil {
-		return err
-	}
-
-	if opts.resolveImageDigests {
-		err = resolveImageDigests(ctx, dockerCli, model)
+	var content []byte
+	if opts.noInterpolate {
+		// we can't use ToProject, so the model we render here is only partially resolved
+		model, err := opts.ToModel(ctx, dockerCli, services)
 		if err != nil {
 			return err
 		}
-	}
 
-	content, err := formatModel(model, opts.Format)
-	if err != nil {
-		return err
+		if opts.resolveImageDigests {
+			err = resolveImageDigests(ctx, dockerCli, model)
+			if err != nil {
+				return err
+			}
+		}
+
+		content, err = formatModel(model, opts.Format)
+		if err != nil {
+			return err
+		}
+	} else {
+		project, err := opts.ToProject(ctx, dockerCli, services)
+		if err != nil {
+			return err
+		}
+		content, err = project.MarshalYAML()
+		if err != nil {
+			return err
+		}
 	}
 
 	if !opts.noInterpolate {
@@ -164,7 +177,7 @@ func runConfig(ctx context.Context, dockerCli command.Cli, opts configOptions, s
 	if opts.Output != "" && len(content) > 0 {
 		return os.WriteFile(opts.Output, content, 0o666)
 	}
-	_, err = fmt.Fprint(dockerCli.Out(), string(content))
+	_, err := fmt.Fprint(dockerCli.Out(), string(content))
 	return err
 }
 

+ 3 - 3
pkg/e2e/compose_test.go

@@ -245,9 +245,6 @@ func TestConfig(t *testing.T) {
 	t.Run("up", func(t *testing.T) {
 		res := c.RunDockerComposeCmd(t, "-f", "./fixtures/simple-build-test/compose.yaml", "-p", projectName, "convert")
 		res.Assert(t, icmd.Expected{Out: fmt.Sprintf(`name: %s
-networks:
-  default:
-    name: compose-e2e-convert_default
 services:
   nginx:
     build:
@@ -255,6 +252,9 @@ services:
       dockerfile: Dockerfile
     networks:
       default: null
+networks:
+  default:
+    name: compose-e2e-convert_default
 `, projectName, filepath.Join(wd, "fixtures", "simple-build-test", "nginx-build")), ExitCode: 0})
 	})
 }