Skip to content

Commit

Permalink
extract logic for resolving image/plugin digest and platform
Browse files Browse the repository at this point in the history
Signed-off-by: Sebastiaan van Stijn <[email protected]>
  • Loading branch information
thaJeztah committed Apr 16, 2020
1 parent 10c748c commit ed09653
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 44 deletions.
56 changes: 34 additions & 22 deletions client/service_create.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}

Expand All @@ -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
Expand Down
24 changes: 2 additions & 22 deletions client/service_update.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}

Expand Down

0 comments on commit ed09653

Please sign in to comment.