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  }