From ed096538e82e8468b4c35690ffe269e66468553b Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Thu, 16 Apr 2020 13:42:47 +0200 Subject: [PATCH] extract logic for resolving image/plugin digest and platform Signed-off-by: Sebastiaan van Stijn --- client/service_create.go | 56 ++++++++++++++++++++++++---------------- client/service_update.go | 24 ++--------------- 2 files changed, 36 insertions(+), 44 deletions(-) diff --git a/client/service_create.go b/client/service_create.go index 5dd6a430cb..e0428bf98b 100644 --- a/client/service_create.go +++ b/client/service_create.go @@ -41,34 +41,14 @@ func (cli *Client) ServiceCreate(ctx context.Context, service swarm.ServiceSpec, service.TaskTemplate.ContainerSpec.Image = taggedImg } if options.QueryRegistry { - if img, imgPlatforms, err := imageDigestAndPlatforms(ctx, cli, service.TaskTemplate.ContainerSpec.Image, options.EncodedRegistryAuth); err != nil { - resolveWarning = digestWarning(service.TaskTemplate.ContainerSpec.Image) - } else { - service.TaskTemplate.ContainerSpec.Image = img - if len(imgPlatforms) > 0 { - if service.TaskTemplate.Placement == nil { - service.TaskTemplate.Placement = &swarm.Placement{} - } - service.TaskTemplate.Placement.Platforms = imgPlatforms - } - } + resolveWarning = resolveContainerSpecImage(ctx, cli, &service.TaskTemplate, options.EncodedRegistryAuth) } case service.TaskTemplate.PluginSpec != nil: if taggedImg := imageWithTagString(service.TaskTemplate.PluginSpec.Remote); taggedImg != "" { service.TaskTemplate.PluginSpec.Remote = taggedImg } if options.QueryRegistry { - if img, imgPlatforms, err := imageDigestAndPlatforms(ctx, cli, service.TaskTemplate.PluginSpec.Remote, options.EncodedRegistryAuth); err != nil { - resolveWarning = digestWarning(service.TaskTemplate.PluginSpec.Remote) - } else { - service.TaskTemplate.PluginSpec.Remote = img - if len(imgPlatforms) > 0 { - if service.TaskTemplate.Placement == nil { - service.TaskTemplate.Placement = &swarm.Placement{} - } - service.TaskTemplate.Placement.Platforms = imgPlatforms - } - } + resolveWarning = resolvePluginSpecRemote(ctx, cli, &service.TaskTemplate, options.EncodedRegistryAuth) } } @@ -86,6 +66,38 @@ func (cli *Client) ServiceCreate(ctx context.Context, service swarm.ServiceSpec, return response, err } +func resolveContainerSpecImage(ctx context.Context, cli DistributionAPIClient, taskSpec *swarm.TaskSpec, encodedAuth string) string { + var warning string + if img, imgPlatforms, err := imageDigestAndPlatforms(ctx, cli, taskSpec.ContainerSpec.Image, encodedAuth); err != nil { + warning = digestWarning(taskSpec.ContainerSpec.Image) + } else { + taskSpec.ContainerSpec.Image = img + if len(imgPlatforms) > 0 { + if taskSpec.Placement == nil { + taskSpec.Placement = &swarm.Placement{} + } + taskSpec.Placement.Platforms = imgPlatforms + } + } + return warning +} + +func resolvePluginSpecRemote(ctx context.Context, cli DistributionAPIClient, taskSpec *swarm.TaskSpec, encodedAuth string) string { + var warning string + if img, imgPlatforms, err := imageDigestAndPlatforms(ctx, cli, taskSpec.PluginSpec.Remote, encodedAuth); err != nil { + warning = digestWarning(taskSpec.PluginSpec.Remote) + } else { + taskSpec.PluginSpec.Remote = img + if len(imgPlatforms) > 0 { + if taskSpec.Placement == nil { + taskSpec.Placement = &swarm.Placement{} + } + taskSpec.Placement.Platforms = imgPlatforms + } + } + return warning +} + func imageDigestAndPlatforms(ctx context.Context, cli DistributionAPIClient, image, encodedAuth string) (string, []swarm.Platform, error) { distributionInspect, err := cli.DistributionInspect(ctx, image, encodedAuth) var platforms []swarm.Platform diff --git a/client/service_update.go b/client/service_update.go index 4a930eed14..c63895f74f 100644 --- a/client/service_update.go +++ b/client/service_update.go @@ -49,34 +49,14 @@ func (cli *Client) ServiceUpdate(ctx context.Context, serviceID string, version service.TaskTemplate.ContainerSpec.Image = taggedImg } if options.QueryRegistry { - if img, imgPlatforms, err := imageDigestAndPlatforms(ctx, cli, service.TaskTemplate.ContainerSpec.Image, options.EncodedRegistryAuth); err != nil { - resolveWarning = digestWarning(service.TaskTemplate.ContainerSpec.Image) - } else { - service.TaskTemplate.ContainerSpec.Image = img - if len(imgPlatforms) > 0 { - if service.TaskTemplate.Placement == nil { - service.TaskTemplate.Placement = &swarm.Placement{} - } - service.TaskTemplate.Placement.Platforms = imgPlatforms - } - } + resolveWarning = resolveContainerSpecImage(ctx, cli, &service.TaskTemplate, options.EncodedRegistryAuth) } case service.TaskTemplate.PluginSpec != nil: if taggedImg := imageWithTagString(service.TaskTemplate.PluginSpec.Remote); taggedImg != "" { service.TaskTemplate.PluginSpec.Remote = taggedImg } if options.QueryRegistry { - if img, imgPlatforms, err := imageDigestAndPlatforms(ctx, cli, service.TaskTemplate.PluginSpec.Remote, options.EncodedRegistryAuth); err != nil { - resolveWarning = digestWarning(service.TaskTemplate.PluginSpec.Remote) - } else { - service.TaskTemplate.PluginSpec.Remote = img - if len(imgPlatforms) > 0 { - if service.TaskTemplate.Placement == nil { - service.TaskTemplate.Placement = &swarm.Placement{} - } - service.TaskTemplate.Placement.Platforms = imgPlatforms - } - } + resolveWarning = resolvePluginSpecRemote(ctx, cli, &service.TaskTemplate, options.EncodedRegistryAuth) } }