github.com/zhuohuang-hust/src-cbuild@v0.0.0-20230105071821-c7aab3e7c840/cli/command/swarm/update.go (about) 1 package swarm 2 3 import ( 4 "fmt" 5 6 "golang.org/x/net/context" 7 8 "github.com/docker/docker/api/types/swarm" 9 "github.com/docker/docker/cli" 10 "github.com/docker/docker/cli/command" 11 "github.com/pkg/errors" 12 "github.com/spf13/cobra" 13 "github.com/spf13/pflag" 14 ) 15 16 func newUpdateCommand(dockerCli *command.DockerCli) *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(dockerCli, cmd.Flags(), opts) 25 }, 26 } 27 28 cmd.Flags().BoolVar(&opts.autolock, flagAutolock, false, "Change manager autolocking setting (true|false)") 29 addSwarmFlags(cmd.Flags(), &opts) 30 return cmd 31 } 32 33 func runUpdate(dockerCli *command.DockerCli, flags *pflag.FlagSet, opts swarmOptions) error { 34 client := dockerCli.Client() 35 ctx := context.Background() 36 37 var updateFlags swarm.UpdateFlags 38 39 swarm, err := client.SwarmInspect(ctx) 40 if err != nil { 41 return err 42 } 43 44 prevAutoLock := swarm.Spec.EncryptionConfig.AutoLockManagers 45 46 opts.mergeSwarmSpec(&swarm.Spec, flags) 47 48 curAutoLock := swarm.Spec.EncryptionConfig.AutoLockManagers 49 50 err = client.SwarmUpdate(ctx, swarm.Version, swarm.Spec, updateFlags) 51 if err != nil { 52 return err 53 } 54 55 fmt.Fprintln(dockerCli.Out(), "Swarm updated.") 56 57 if curAutoLock && !prevAutoLock { 58 unlockKeyResp, err := client.SwarmGetUnlockKey(ctx) 59 if err != nil { 60 return errors.Wrap(err, "could not fetch unlock key") 61 } 62 printUnlockCommand(ctx, dockerCli, unlockKeyResp.UnlockKey) 63 } 64 65 return nil 66 }