github.1git.de/docker/cli@v26.1.3+incompatible/cli/command/swarm/update.go (about) 1 package swarm 2 3 import ( 4 "context" 5 "fmt" 6 7 "github.com/docker/cli/cli" 8 "github.com/docker/cli/cli/command" 9 "github.com/docker/cli/cli/command/completion" 10 "github.com/docker/docker/api/types/swarm" 11 "github.com/pkg/errors" 12 "github.com/spf13/cobra" 13 "github.com/spf13/pflag" 14 ) 15 16 func newUpdateCommand(dockerCli command.Cli) *cobra.Command { 17 opts := swarmOptions{} 18 19 cmd := &cobra.Command{ 20 Use: "update [OPTIONS]", 21 Short: "Update the swarm", 22 Args: cli.NoArgs, 23 RunE: func(cmd *cobra.Command, args []string) error { 24 return runUpdate(cmd.Context(), dockerCli, cmd.Flags(), opts) 25 }, 26 PreRunE: func(cmd *cobra.Command, args []string) error { 27 if cmd.Flags().NFlag() == 0 { 28 return pflag.ErrHelp 29 } 30 return nil 31 }, 32 Annotations: map[string]string{ 33 "version": "1.24", 34 "swarm": "manager", 35 }, 36 ValidArgsFunction: completion.NoComplete, 37 } 38 39 cmd.Flags().BoolVar(&opts.autolock, flagAutolock, false, "Change manager autolocking setting (true|false)") 40 addSwarmFlags(cmd.Flags(), &opts) 41 return cmd 42 } 43 44 func runUpdate(ctx context.Context, dockerCli command.Cli, flags *pflag.FlagSet, opts swarmOptions) error { 45 client := dockerCli.Client() 46 47 var updateFlags swarm.UpdateFlags 48 49 swarmInspect, err := client.SwarmInspect(ctx) 50 if err != nil { 51 return err 52 } 53 54 prevAutoLock := swarmInspect.Spec.EncryptionConfig.AutoLockManagers 55 56 opts.mergeSwarmSpec(&swarmInspect.Spec, flags, swarmInspect.ClusterInfo.TLSInfo.TrustRoot) 57 58 curAutoLock := swarmInspect.Spec.EncryptionConfig.AutoLockManagers 59 60 err = client.SwarmUpdate(ctx, swarmInspect.Version, swarmInspect.Spec, updateFlags) 61 if err != nil { 62 return err 63 } 64 65 fmt.Fprintln(dockerCli.Out(), "Swarm updated.") 66 67 if curAutoLock && !prevAutoLock { 68 unlockKeyResp, err := client.SwarmGetUnlockKey(ctx) 69 if err != nil { 70 return errors.Wrap(err, "could not fetch unlock key") 71 } 72 printUnlockCommand(dockerCli.Out(), unlockKeyResp.UnlockKey) 73 } 74 75 return nil 76 }