github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/swarmkit/cmd/swarmctl/service/flagparser/placement.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 parsePlacement(flags *pflag.FlagSet, spec *api.ServiceSpec) error {
    11  	if flags.Changed("constraint") {
    12  		constraints, err := flags.GetStringSlice("constraint")
    13  		if err != nil {
    14  			return err
    15  		}
    16  		if spec.Task.Placement == nil {
    17  			spec.Task.Placement = &api.Placement{}
    18  		}
    19  		spec.Task.Placement.Constraints = constraints
    20  	}
    21  
    22  	if flags.Changed("replicas-max-per-node") {
    23  		if spec.GetReplicated() == nil {
    24  			return fmt.Errorf("--replicas-max-per-node can only be specified in --mode replicated")
    25  		}
    26  		maxReplicas, err := flags.GetUint64("replicas-max-per-node")
    27  		if err != nil {
    28  			return err
    29  		}
    30  		if spec.Task.Placement == nil {
    31  			spec.Task.Placement = &api.Placement{}
    32  		}
    33  		spec.Task.Placement.MaxReplicas = maxReplicas
    34  	}
    35  
    36  	return nil
    37  }