github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/swarmkit/cmd/swarmctl/service/flagparser/update.go (about)

     1  package flagparser
     2  
     3  import (
     4  	"errors"
     5  	"time"
     6  
     7  	"github.com/docker/swarmkit/api"
     8  	"github.com/spf13/pflag"
     9  )
    10  
    11  func parseUpdate(flags *pflag.FlagSet, spec *api.ServiceSpec) error {
    12  	if flags.Changed("update-parallelism") {
    13  		parallelism, err := flags.GetUint64("update-parallelism")
    14  		if err != nil {
    15  			return err
    16  		}
    17  		if spec.Update == nil {
    18  			spec.Update = &api.UpdateConfig{}
    19  		}
    20  		spec.Update.Parallelism = parallelism
    21  	}
    22  
    23  	if flags.Changed("update-delay") {
    24  		delay, err := flags.GetString("update-delay")
    25  		if err != nil {
    26  			return err
    27  		}
    28  
    29  		delayDuration, err := time.ParseDuration(delay)
    30  		if err != nil {
    31  			return err
    32  		}
    33  
    34  		if spec.Update == nil {
    35  			spec.Update = &api.UpdateConfig{}
    36  		}
    37  		spec.Update.Delay = delayDuration
    38  	}
    39  
    40  	if flags.Changed("update-on-failure") {
    41  		if spec.Update == nil {
    42  			spec.Update = &api.UpdateConfig{}
    43  		}
    44  
    45  		action, err := flags.GetString("update-on-failure")
    46  		if err != nil {
    47  			return err
    48  		}
    49  		switch action {
    50  		case "pause":
    51  			spec.Update.FailureAction = api.UpdateConfig_PAUSE
    52  		case "continue":
    53  			spec.Update.FailureAction = api.UpdateConfig_CONTINUE
    54  		case "rollback":
    55  			spec.Update.FailureAction = api.UpdateConfig_ROLLBACK
    56  		default:
    57  			return errors.New("--update-on-failure value must be pause or continue")
    58  		}
    59  	}
    60  
    61  	if flags.Changed("update-order") {
    62  		if spec.Update == nil {
    63  			spec.Update = &api.UpdateConfig{}
    64  		}
    65  
    66  		order, err := flags.GetString("update-order")
    67  		if err != nil {
    68  			return err
    69  		}
    70  
    71  		switch order {
    72  		case "stop-first":
    73  			spec.Update.Order = api.UpdateConfig_STOP_FIRST
    74  		case "start-first":
    75  			spec.Update.Order = api.UpdateConfig_START_FIRST
    76  		default:
    77  			return errors.New("--update-order value must be stop-first or start-first")
    78  		}
    79  	}
    80  
    81  	if flags.Changed("rollback-parallelism") {
    82  		parallelism, err := flags.GetUint64("rollback-parallelism")
    83  		if err != nil {
    84  			return err
    85  		}
    86  		if spec.Rollback == nil {
    87  			spec.Rollback = &api.UpdateConfig{}
    88  		}
    89  		spec.Rollback.Parallelism = parallelism
    90  	}
    91  
    92  	if flags.Changed("rollback-delay") {
    93  		delay, err := flags.GetString("rollback-delay")
    94  		if err != nil {
    95  			return err
    96  		}
    97  
    98  		delayDuration, err := time.ParseDuration(delay)
    99  		if err != nil {
   100  			return err
   101  		}
   102  
   103  		if spec.Rollback == nil {
   104  			spec.Rollback = &api.UpdateConfig{}
   105  		}
   106  		spec.Rollback.Delay = delayDuration
   107  	}
   108  
   109  	if flags.Changed("rollback-on-failure") {
   110  		if spec.Rollback == nil {
   111  			spec.Rollback = &api.UpdateConfig{}
   112  		}
   113  
   114  		action, err := flags.GetString("rollback-on-failure")
   115  		if err != nil {
   116  			return err
   117  		}
   118  		switch action {
   119  		case "pause":
   120  			spec.Rollback.FailureAction = api.UpdateConfig_PAUSE
   121  		case "continue":
   122  			spec.Rollback.FailureAction = api.UpdateConfig_CONTINUE
   123  		default:
   124  			return errors.New("--rollback-on-failure value must be pause or continue")
   125  		}
   126  	}
   127  
   128  	if flags.Changed("rollback-order") {
   129  		if spec.Rollback == nil {
   130  			spec.Rollback = &api.UpdateConfig{}
   131  		}
   132  
   133  		order, err := flags.GetString("rollback-order")
   134  		if err != nil {
   135  			return err
   136  		}
   137  
   138  		switch order {
   139  		case "stop-first":
   140  			spec.Rollback.Order = api.UpdateConfig_STOP_FIRST
   141  		case "start-first":
   142  			spec.Rollback.Order = api.UpdateConfig_START_FIRST
   143  		default:
   144  			return errors.New("--rollback-order value must be stop-first or start-first")
   145  		}
   146  	}
   147  
   148  	return nil
   149  }