github.com/noxiouz/docker@v0.7.3-0.20160629055221-3d231c78e8c5/api/client/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/client" 9 "github.com/docker/docker/cli" 10 "github.com/docker/engine-api/types/swarm" 11 "github.com/spf13/cobra" 12 "github.com/spf13/pflag" 13 ) 14 15 func newUpdateCommand(dockerCli *client.DockerCli) *cobra.Command { 16 opts := swarmOptions{autoAccept: NewAutoAcceptOption()} 17 18 cmd := &cobra.Command{ 19 Use: "update", 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 *client.DockerCli, flags *pflag.FlagSet, opts swarmOptions) error { 32 client := dockerCli.Client() 33 ctx := context.Background() 34 35 swarm, err := client.SwarmInspect(ctx) 36 if err != nil { 37 return err 38 } 39 40 err = mergeSwarm(&swarm, flags) 41 if err != nil { 42 return err 43 } 44 45 err = client.SwarmUpdate(ctx, swarm.Version, swarm.Spec) 46 if err != nil { 47 return err 48 } 49 50 fmt.Println("Swarm updated.") 51 return nil 52 } 53 54 func mergeSwarm(swarm *swarm.Swarm, flags *pflag.FlagSet) error { 55 spec := &swarm.Spec 56 57 if flags.Changed(flagAutoAccept) { 58 value := flags.Lookup(flagAutoAccept).Value.(*AutoAcceptOption) 59 spec.AcceptancePolicy.Policies = value.Policies(nil) 60 } 61 62 var psecret *string 63 if flags.Changed(flagSecret) { 64 secret, _ := flags.GetString(flagSecret) 65 psecret = &secret 66 } 67 68 for i := range spec.AcceptancePolicy.Policies { 69 spec.AcceptancePolicy.Policies[i].Secret = psecret 70 } 71 72 if flags.Changed(flagTaskHistoryLimit) { 73 spec.Orchestration.TaskHistoryRetentionLimit, _ = flags.GetInt64(flagTaskHistoryLimit) 74 } 75 76 if flags.Changed(flagDispatcherHeartbeat) { 77 if v, err := flags.GetDuration(flagDispatcherHeartbeat); err == nil { 78 spec.Dispatcher.HeartbeatPeriod = uint64(v.Nanoseconds()) 79 } 80 } 81 82 if flags.Changed(flagCertExpiry) { 83 if v, err := flags.GetDuration(flagCertExpiry); err == nil { 84 spec.CAConfig.NodeCertExpiry = v 85 } 86 } 87 88 return nil 89 }