github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/swarmkit/cmd/swarmctl/service/flagparser/mode.go (about) 1 package flagparser 2 3 import ( 4 "fmt" 5 6 "github.com/docker/swarmkit/api" 7 "github.com/spf13/pflag" 8 ) 9 10 func parseMode(flags *pflag.FlagSet, spec *api.ServiceSpec) error { 11 if flags.Changed("mode") { 12 mode, err := flags.GetString("mode") 13 if err != nil { 14 return err 15 } 16 17 switch mode { 18 case "global": 19 if spec.GetGlobal() == nil { 20 spec.Mode = &api.ServiceSpec_Global{ 21 Global: &api.GlobalService{}, 22 } 23 } 24 case "replicated": 25 if spec.GetReplicated() == nil { 26 spec.Mode = &api.ServiceSpec_Replicated{ 27 Replicated: &api.ReplicatedService{}, 28 } 29 } 30 } 31 } 32 33 if flags.Changed("replicas") { 34 if spec.GetReplicated() == nil { 35 return fmt.Errorf("--replicas can only be specified in --mode replicated") 36 } 37 replicas, err := flags.GetUint64("replicas") 38 if err != nil { 39 return err 40 } 41 spec.GetReplicated().Replicas = replicas 42 } 43 44 return nil 45 }