github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/swarmkit/cmd/swarmctl/service/update.go (about) 1 package service 2 3 import ( 4 "errors" 5 "fmt" 6 "reflect" 7 8 "github.com/docker/swarmkit/api" 9 "github.com/docker/swarmkit/cmd/swarmctl/common" 10 "github.com/docker/swarmkit/cmd/swarmctl/service/flagparser" 11 "github.com/spf13/cobra" 12 ) 13 14 var ( 15 updateCmd = &cobra.Command{ 16 Use: "update <service ID>", 17 Short: "Update a service", 18 RunE: func(cmd *cobra.Command, args []string) error { 19 if len(args) == 0 { 20 return errors.New("service ID missing") 21 } 22 23 if len(args) > 1 { 24 return errors.New("update command takes exactly 1 argument") 25 } 26 27 c, err := common.Dial(cmd) 28 if err != nil { 29 return err 30 } 31 32 service, err := getService(common.Context(cmd), c, args[0]) 33 if err != nil { 34 return err 35 } 36 37 spec := service.Spec.Copy() 38 39 if err := flagparser.Merge(cmd, spec, c); err != nil { 40 return err 41 } 42 43 if err := flagparser.ParseAddSecret(cmd, spec, "add-secret"); err != nil { 44 return err 45 } 46 if err := flagparser.ParseRemoveSecret(cmd, spec, "rm-secret"); err != nil { 47 return err 48 } 49 50 if err := flagparser.ParseAddConfig(cmd, spec, "add-config"); err != nil { 51 return err 52 } 53 if err := flagparser.ParseRemoveConfig(cmd, spec, "rm-config"); err != nil { 54 return err 55 } 56 57 if err := flagparser.ParseAddCapability(cmd, spec, "add-capability"); err != nil { 58 return err 59 } 60 if err := flagparser.ParseDropCapability(cmd, spec, "rm-capability"); err != nil { 61 return err 62 } 63 64 if reflect.DeepEqual(spec, &service.Spec) { 65 return errors.New("no changes detected") 66 } 67 68 r, err := c.UpdateService(common.Context(cmd), &api.UpdateServiceRequest{ 69 ServiceID: service.ID, 70 ServiceVersion: &service.Meta.Version, 71 Spec: spec, 72 }) 73 if err != nil { 74 return err 75 } 76 fmt.Println(r.Service.ID) 77 return nil 78 }, 79 } 80 ) 81 82 func init() { 83 updateCmd.Flags().StringSlice("add-secret", nil, "add a new secret to the service") 84 updateCmd.Flags().StringSlice("rm-secret", nil, "remove a secret from the service") 85 updateCmd.Flags().StringSlice("add-config", nil, "add a new config to the service") 86 updateCmd.Flags().StringSlice("rm-config", nil, "remove a config from the service") 87 updateCmd.Flags().StringSlice("add-capability", nil, "add a new capability to the service") 88 updateCmd.Flags().StringSlice("rm-capability", nil, "remove a capability from the service") 89 updateCmd.Flags().Bool("force", false, "force tasks to restart even if nothing has changed") 90 flagparser.AddServiceFlags(updateCmd.Flags()) 91 }