From fca96f23f1acaf9dffe927d6cf84647b76855187 Mon Sep 17 00:00:00 2001 From: Timofey Kirillov Date: Tue, 16 May 2023 13:14:56 +0300 Subject: [PATCH] fix(multiarch): use correct multiarch manifests for werf-run and werf-kube-run commands Signed-off-by: Timofey Kirillov --- cmd/werf/kube_run/kube_run.go | 15 ++------------- cmd/werf/run/run.go | 14 ++------------ pkg/build/conveyor.go | 13 +++++++++++++ pkg/container_backend/legacy_stage_image.go | 1 - pkg/docker/main.go | 10 +++++----- 5 files changed, 22 insertions(+), 31 deletions(-) diff --git a/cmd/werf/kube_run/kube_run.go b/cmd/werf/kube_run/kube_run.go index cbd568ca8c..09210c9226 100644 --- a/cmd/werf/kube_run/kube_run.go +++ b/cmd/werf/kube_run/kube_run.go @@ -417,21 +417,10 @@ func run(ctx context.Context, pod, secret, namespace string, werfConfig *config. } } - targetPlatforms, err := c.GetTargetPlatforms() + image, err = c.GetFullImageName(ctx, imageName) if err != nil { - return fmt.Errorf("invalid target platforms: %w", err) + return fmt.Errorf("unable to get full name for image %q: %w", imageName, err) } - if len(targetPlatforms) == 0 { - targetPlatforms = []string{containerBackend.GetDefaultPlatform()} - } - - // FIXME(multiarch): specify multiarch manifest here - if err := c.FetchLastImageStage(ctx, targetPlatforms[0], imageName); err != nil { - return err - } - - // FIXME(multiarch): specify multiarch manifest here - image = c.GetImageNameForLastImageStage(targetPlatforms[0], imageName) return nil }); err != nil { return err diff --git a/cmd/werf/run/run.go b/cmd/werf/run/run.go index d2feaeb39a..1c111ce2e0 100644 --- a/cmd/werf/run/run.go +++ b/cmd/werf/run/run.go @@ -403,20 +403,10 @@ func run(ctx context.Context, containerBackend container_backend.ContainerBacken } } - targetPlatforms, err := c.GetTargetPlatforms() + dockerImageName, err = c.GetFullImageName(ctx, imageName) if err != nil { - return fmt.Errorf("invalid target platforms: %w", err) + return fmt.Errorf("unable to get full name for image %q: %w", imageName, err) } - if len(targetPlatforms) == 0 { - targetPlatforms = []string{containerBackend.GetDefaultPlatform()} - } - - // FIXME(multiarch): specify multiarch manifest here - if err := c.FetchLastImageStage(ctx, targetPlatforms[0], imageName); err != nil { - return err - } - - dockerImageName = c.GetImageNameForLastImageStage(targetPlatforms[0], imageName) return nil }); err != nil { return err diff --git a/pkg/build/conveyor.go b/pkg/build/conveyor.go index e9cf292921..170b525a38 100644 --- a/pkg/build/conveyor.go +++ b/pkg/build/conveyor.go @@ -403,6 +403,19 @@ func (c *Conveyor) FetchLastImageStage(ctx context.Context, targetPlatform, imag return c.StorageManager.FetchStage(ctx, c.ContainerBackend, lastImageStage) } +func (c *Conveyor) GetFullImageName(ctx context.Context, imageName string) (string, error) { + infoGetters, err := c.GetImageInfoGetters(imagePkg.InfoGetterOptions{}) + if err != nil { + return "", nil + } + for _, getter := range infoGetters { + if getter.WerfImageName == imageName { + return getter.GetName(), nil + } + } + return "", fmt.Errorf("image not found") +} + func (c *Conveyor) GetImageInfoGetters(opts imagePkg.InfoGetterOptions) ([]*imagePkg.InfoGetter, error) { var imagesGetters []*imagePkg.InfoGetter for _, desc := range c.imagesTree.GetImagesByName(true) { diff --git a/pkg/container_backend/legacy_stage_image.go b/pkg/container_backend/legacy_stage_image.go index 125eff93f1..c57c099051 100644 --- a/pkg/container_backend/legacy_stage_image.go +++ b/pkg/container_backend/legacy_stage_image.go @@ -67,7 +67,6 @@ func (i *LegacyStageImage) GetID() string { } func (i *LegacyStageImage) Build(ctx context.Context, options BuildOptions) error { - // FIXME(multiarch): docker server default platform should be defined using server-info, not current machine platform if i.GetTargetPlatform() == i.ContainerBackend.GetDefaultPlatform() && i.ContainerBackend.GetDefaultPlatform() != "linux/amd64" { logboek.Context(ctx).Error().LogF("Detected your default build platform as %s.\n", i.ContainerBackend.GetDefaultPlatform()) logboek.Context(ctx).Error().LogF("Building of stapel-type images using Docker-Server backend for platforms other than linux/amd64 is not supported.\n") diff --git a/pkg/docker/main.go b/pkg/docker/main.go index cb86b652d1..f7f3f75960 100644 --- a/pkg/docker/main.go +++ b/pkg/docker/main.go @@ -23,7 +23,7 @@ import ( var ( liveCliOutputEnabled bool isDebug bool - defaultCLi command.Cli + defaultCLI command.Cli defaultPlatform string runtimePlatform string useBuildx bool @@ -36,7 +36,7 @@ const ( ) func IsEnabled() bool { - return defaultCLi != nil + return defaultCLI != nil } type InitOptions struct { @@ -63,13 +63,13 @@ func Init(ctx context.Context, opts InitOptions) error { isDebug = os.Getenv("WERF_DEBUG_DOCKER") == "1" liveCliOutputEnabled = opts.Verbose || opts.Debug - defaultCLi, err = newDockerCli(defaultCliOptions(ctx)) + defaultCLI, err = newDockerCli(defaultCliOptions(ctx)) if err != nil { return err } spec := platforms.DefaultSpec() - spec.OS = defaultCLi.ServerInfo().OSType + spec.OS = defaultCLI.ServerInfo().OSType runtimePlatform = platforms.Format(spec) claimPlatforms := opts.ClaimPlatforms @@ -169,7 +169,7 @@ func cli(ctx context.Context) command.Cli { case cliInterf != nil: return cliInterf.(command.Cli) case ctx == context.Background(): - return defaultCLi + return defaultCLI default: panic("context is not bound with docker cli") }