From c61ea6f7898b1f1752fb17eebd504a9f813fd26b Mon Sep 17 00:00:00 2001 From: Nishant Totla Date: Thu, 11 May 2017 02:07:35 -0700 Subject: [PATCH 1/2] Service create/update set QueryRegistry appropriately Signed-off-by: Nishant Totla --- cli/command/service/create.go | 4 +++- cli/command/service/trust.go | 6 +++--- cli/command/service/update.go | 3 ++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/cli/command/service/create.go b/cli/command/service/create.go index cfc2830f55..7dadb6ba77 100644 --- a/cli/command/service/create.go +++ b/cli/command/service/create.go @@ -92,7 +92,7 @@ func runCreate(dockerCli *command.DockerCli, flags *pflag.FlagSet, opts *service service.TaskTemplate.ContainerSpec.Configs = configs } - if err := resolveServiceImageDigest(dockerCli, &service); err != nil { + if err := resolveServiceImageDigestContentTrust(dockerCli, &service); err != nil { return err } @@ -106,6 +106,8 @@ func runCreate(dockerCli *command.DockerCli, flags *pflag.FlagSet, opts *service createOpts.EncodedRegistryAuth = encodedAuth } + createOpts.QueryRegistry = true + response, err := apiClient.ServiceCreate(ctx, service, createOpts) if err != nil { return err diff --git a/cli/command/service/trust.go b/cli/command/service/trust.go index 650f0d95c0..ec199a770a 100644 --- a/cli/command/service/trust.go +++ b/cli/command/service/trust.go @@ -15,10 +15,10 @@ import ( "golang.org/x/net/context" ) -func resolveServiceImageDigest(dockerCli command.Cli, service *swarm.ServiceSpec) error { +func resolveServiceImageDigestContentTrust(dockerCli command.Cli, service *swarm.ServiceSpec) error { if !command.IsTrusted() { - // Digests are resolved by the daemon when not using content - // trust. + // When not using content trust, digest resolution happens later when + // contacting the registry to retrieve image information. return nil } diff --git a/cli/command/service/update.go b/cli/command/service/update.go index ef5452fd3c..a57145afa6 100644 --- a/cli/command/service/update.go +++ b/cli/command/service/update.go @@ -164,9 +164,10 @@ func runUpdate(dockerCli *command.DockerCli, flags *pflag.FlagSet, options *serv } if flags.Changed("image") { - if err := resolveServiceImageDigest(dockerCli, spec); err != nil { + if err := resolveServiceImageDigestContentTrust(dockerCli, spec); err != nil { return err } + updateOpts.QueryRegistry = true } updatedSecrets, err := getUpdatedSecrets(apiClient, flags, spec.TaskTemplate.ContainerSpec.Secrets) From 39d03bb2bd24f69073dfe30de2d9fc2898e6df9e Mon Sep 17 00:00:00 2001 From: Nishant Totla Date: Mon, 15 May 2017 16:01:48 -0700 Subject: [PATCH 2/2] Adding a flag to allow disabling registry lookup Signed-off-by: Nishant Totla --- cli/command/service/create.go | 6 +++++- cli/command/service/opts.go | 6 +++++- cli/command/service/update.go | 4 +++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/cli/command/service/create.go b/cli/command/service/create.go index 7dadb6ba77..ef73ec19ed 100644 --- a/cli/command/service/create.go +++ b/cli/command/service/create.go @@ -6,6 +6,7 @@ import ( "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/versions" "github.com/spf13/cobra" "github.com/spf13/pflag" "golang.org/x/net/context" @@ -106,7 +107,10 @@ func runCreate(dockerCli *command.DockerCli, flags *pflag.FlagSet, opts *service createOpts.EncodedRegistryAuth = encodedAuth } - createOpts.QueryRegistry = true + // query registry if flag disabling it was not set + if !opts.noResolveImage && versions.GreaterThanOrEqualTo(apiClient.ClientVersion(), "1.30") { + createOpts.QueryRegistry = true + } response, err := apiClient.ServiceCreate(ctx, service, createOpts) if err != nil { diff --git a/cli/command/service/opts.go b/cli/command/service/opts.go index e1d328c487..dfa0eedb74 100644 --- a/cli/command/service/opts.go +++ b/cli/command/service/opts.go @@ -542,7 +542,8 @@ type serviceOptions struct { networks opts.ListOpts endpoint endpointOptions - registryAuth bool + registryAuth bool + noResolveImage bool logDriver logDriverOptions @@ -797,6 +798,8 @@ func addServiceFlags(flags *pflag.FlagSet, opts *serviceOptions, defaultFlagValu flags.StringVar(&opts.endpoint.mode, flagEndpointMode, defaultFlagValues.getString(flagEndpointMode), "Endpoint mode (vip or dnsrr)") flags.BoolVar(&opts.registryAuth, flagRegistryAuth, false, "Send registry authentication details to swarm agents") + flags.BoolVar(&opts.noResolveImage, flagNoResolveImage, false, "Do not query the registry to resolve image digest and supported platforms") + flags.SetAnnotation(flagNoResolveImage, "version", []string{"1.30"}) flags.StringVar(&opts.logDriver.name, flagLogDriver, "", "Logging driver for service") flags.Var(&opts.logDriver.opts, flagLogOpt, "Logging driver options") @@ -899,6 +902,7 @@ const ( flagUser = "user" flagWorkdir = "workdir" flagRegistryAuth = "with-registry-auth" + flagNoResolveImage = "no-resolve-image" flagLogDriver = "log-driver" flagLogOpt = "log-opt" flagHealthCmd = "health-cmd" diff --git a/cli/command/service/update.go b/cli/command/service/update.go index a57145afa6..88529e0d0a 100644 --- a/cli/command/service/update.go +++ b/cli/command/service/update.go @@ -167,7 +167,9 @@ func runUpdate(dockerCli *command.DockerCli, flags *pflag.FlagSet, options *serv if err := resolveServiceImageDigestContentTrust(dockerCli, spec); err != nil { return err } - updateOpts.QueryRegistry = true + if !options.noResolveImage && versions.GreaterThanOrEqualTo(apiClient.ClientVersion(), "1.30") { + updateOpts.QueryRegistry = true + } } updatedSecrets, err := getUpdatedSecrets(apiClient, flags, spec.TaskTemplate.ContainerSpec.Secrets)