| 622 | } |
| 623 | |
| 624 | func (options *serviceOptions) ToServiceMode() (swarm.ServiceMode, error) { |
| 625 | serviceMode := swarm.ServiceMode{} |
| 626 | switch options.mode { |
| 627 | case "global": |
| 628 | if options.replicas.Value() != nil { |
| 629 | return serviceMode, errors.New("replicas can only be used with replicated or replicated-job mode") |
| 630 | } |
| 631 | |
| 632 | if options.maxReplicas > 0 { |
| 633 | return serviceMode, errors.New("replicas-max-per-node can only be used with replicated or replicated-job mode") |
| 634 | } |
| 635 | if options.maxConcurrent.Value() != nil { |
| 636 | return serviceMode, errors.New("max-concurrent can only be used with replicated-job mode") |
| 637 | } |
| 638 | |
| 639 | serviceMode.Global = &swarm.GlobalService{} |
| 640 | case "replicated": |
| 641 | if options.maxConcurrent.Value() != nil { |
| 642 | return serviceMode, errors.New("max-concurrent can only be used with replicated-job mode") |
| 643 | } |
| 644 | |
| 645 | serviceMode.Replicated = &swarm.ReplicatedService{ |
| 646 | Replicas: options.replicas.Value(), |
| 647 | } |
| 648 | case "replicated-job": |
| 649 | concurrent := options.maxConcurrent.Value() |
| 650 | if concurrent == nil { |
| 651 | concurrent = options.replicas.Value() |
| 652 | } |
| 653 | serviceMode.ReplicatedJob = &swarm.ReplicatedJob{ |
| 654 | MaxConcurrent: concurrent, |
| 655 | TotalCompletions: options.replicas.Value(), |
| 656 | } |
| 657 | case "global-job": |
| 658 | if options.maxReplicas > 0 { |
| 659 | return serviceMode, errors.New("replicas-max-per-node can only be used with replicated or replicated-job mode") |
| 660 | } |
| 661 | if options.maxConcurrent.Value() != nil { |
| 662 | return serviceMode, errors.New("max-concurrent can only be used with replicated-job mode") |
| 663 | } |
| 664 | if options.replicas.Value() != nil { |
| 665 | return serviceMode, errors.New("replicas can only be used with replicated or replicated-job mode") |
| 666 | } |
| 667 | serviceMode.GlobalJob = &swarm.GlobalJob{} |
| 668 | default: |
| 669 | return serviceMode, fmt.Errorf("unknown mode: %s, only replicated and global supported", options.mode) |
| 670 | } |
| 671 | return serviceMode, nil |
| 672 | } |
| 673 | |
| 674 | func (options *serviceOptions) ToStopGracePeriod(flags *pflag.FlagSet) *time.Duration { |
| 675 | if flags.Changed(flagStopGracePeriod) { |