github.com/vieux/docker@v0.6.3-0.20161004191708-e097c2a938c7/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/spf13/cobra" 12 "github.com/spf13/pflag" 13 ) 14 15 func newUpdateCommand(dockerCli *command.DockerCli) *cobra.Command { 16 opts := swarmOptions{} 17 18 cmd := &cobra.Command{ 19 Use: "update [OPTIONS]", 20 Short: "Update the swarm", 21 Args: cli.NoArgs, 22 RunE: func(cmd *cobra.Command, args []string) error { 23 return runUpdate(dockerCli, cmd.Flags(), opts) 24 }, 25 } 26 27 addSwarmFlags(cmd.Flags(), &opts) 28 return cmd 29 } 30 31 func runUpdate(dockerCli *command.DockerCli, flags *pflag.FlagSet, opts swarmOptions) error { 32 client := dockerCli.Client() 33 ctx := context.Background() 34 35 var updateFlags swarm.UpdateFlags 36 37 swarm, err := client.SwarmInspect(ctx) 38 if err != nil { 39 return err 40 } 41 42 err = mergeSwarm(&swarm, flags) 43 if err != nil { 44 return err 45 } 46 47 err = client.SwarmUpdate(ctx, swarm.Version, swarm.Spec, updateFlags) 48 if err != nil { 49 return err 50 } 51 52 fmt.Fprintln(dockerCli.Out(), "Swarm updated.") 53 54 return nil 55 } 56 57 func mergeSwarm(swarm *swarm.Swarm, flags *pflag.FlagSet) error { 58 spec := &swarm.Spec 59 60 if flags.Changed(flagTaskHistoryLimit) { 61 taskHistoryRetentionLimit, _ := flags.GetInt64(flagTaskHistoryLimit) 62 spec.Orchestration.TaskHistoryRetentionLimit = &taskHistoryRetentionLimit 63 } 64 65 if flags.Changed(flagDispatcherHeartbeat) { 66 if v, err := flags.GetDuration(flagDispatcherHeartbeat); err == nil { 67 spec.Dispatcher.HeartbeatPeriod = v 68 } 69 } 70 71 if flags.Changed(flagCertExpiry) { 72 if v, err := flags.GetDuration(flagCertExpiry); err == nil { 73 spec.CAConfig.NodeCertExpiry = v 74 } 75 } 76 77 if flags.Changed(flagExternalCA) { 78 value := flags.Lookup(flagExternalCA).Value.(*ExternalCAOption) 79 spec.CAConfig.ExternalCAs = value.Value() 80 } 81 82 return nil 83 }