@@ -20,15 +20,12 @@ var generateFlags = []cli.Flag{
2020 cli.StringSliceFlag {Name : "args" , Usage : "command to run in the container" },
2121 cli.StringSliceFlag {Name : "env" , Usage : "add environment variable e.g. key=value" },
2222 cli.StringSliceFlag {Name : "env-file" , Usage : "read in a file of environment variables" },
23- cli.StringSliceFlag {Name : "hooks-poststart" , Usage : "set command to run in poststart hooks" },
24- cli.StringSliceFlag {Name : "hooks-poststart-env" , Usage : "set environment variables for commands to run in poststart hooks" },
25- cli.StringSliceFlag {Name : "hooks-poststart-timeout" , Usage : "set timeout for commands to run in poststart hooks" },
26- cli.StringSliceFlag {Name : "hooks-poststop" , Usage : "set command to run in poststop hooks" },
27- cli.StringSliceFlag {Name : "hooks-poststop-env" , Usage : "set environment variables for commands to run in poststop hooks" },
28- cli.StringSliceFlag {Name : "hooks-poststop-timeout" , Usage : "set timeout for commands to run in poststop hooks" },
29- cli.StringSliceFlag {Name : "hooks-prestart" , Usage : "set command to run in prestart hooks" },
30- cli.StringSliceFlag {Name : "hooks-prestart-env" , Usage : "set environment variables for commands to run in prestart hooks" },
31- cli.StringSliceFlag {Name : "hooks-prestart-timeout" , Usage : "set timeout for commands to run in prestart hooks" },
23+ cli.StringSliceFlag {Name : "hooks-poststart-add" , Usage : "set command to run in poststart hooks" },
24+ cli.BoolFlag {Name : "hooks-poststart-remove-all" , Usage : "remove all poststart hooks" },
25+ cli.StringSliceFlag {Name : "hooks-poststop-add" , Usage : "set command to run in poststop hooks" },
26+ cli.BoolFlag {Name : "hooks-poststop-remove-all" , Usage : "remove all poststop hooks" },
27+ cli.StringSliceFlag {Name : "hooks-prestart-add" , Usage : "set command to run in prestart hooks" },
28+ cli.BoolFlag {Name : "hooks-prestart-remove-all" , Usage : "remove all prestart hooks" },
3229 cli.StringFlag {Name : "hostname" , Usage : "hostname value for the container" },
3330 cli.StringSliceFlag {Name : "label" , Usage : "add annotations to the configuration e.g. key=value" },
3431 cli.StringFlag {Name : "linux-apparmor" , Usage : "specifies the the apparmor profile for the container" },
@@ -442,102 +439,45 @@ func setupSpec(g *generate.Generator, context *cli.Context) error {
442439 }
443440 }
444441
445- if context .IsSet ("hooks-poststart" ) {
446- postStartHooks := context .StringSlice ("hooks-poststart" )
447- for _ , hook := range postStartHooks {
448- path , args , err := parseHook (hook )
449- if err != nil {
450- return err
451- }
452- g .AddPostStartHook (path , args )
453- }
442+ if context .IsSet ("hooks-poststart-remove-all" ) {
443+ g .ClearPostStartHooks ()
454444 }
455445
456- if context .IsSet ("hooks-poststart-env " ) {
457- postStartEnvs := context .StringSlice ("hooks-poststart-env " )
458- for _ , postStartEnv := range postStartEnvs {
459- path , env , err := parseHookEnv ( postStartEnv )
446+ if context .IsSet ("hooks-poststart-add " ) {
447+ postStartHooks := context .StringSlice ("hooks-poststart-add " )
448+ for _ , hook := range postStartHooks {
449+ err := g . AddPostStartHook ( hook )
460450 if err != nil {
461451 return err
462452 }
463- g .AddPostStartHookEnv (path , env )
464453 }
465454 }
466455
467- if context .IsSet ("hooks-poststart-timeout" ) {
468- postStartTimeouts := context .StringSlice ("hooks-poststart-timeout" )
469- for _ , postStartTimeout := range postStartTimeouts {
470- path , timeout , err := parseHookTimeout (postStartTimeout )
471- if err != nil {
472- return err
473- }
474- g .AddPostStartHookTimeout (path , timeout )
475- }
456+ if context .IsSet ("hooks-poststop-remove-all" ) {
457+ g .ClearPostStopHooks ()
476458 }
477459
478- if context .IsSet ("hooks-poststop" ) {
479- postStopHooks := context .StringSlice ("hooks-poststop" )
460+ if context .IsSet ("hooks-poststop-add " ) {
461+ postStopHooks := context .StringSlice ("hooks-poststop-add " )
480462 for _ , hook := range postStopHooks {
481- path , args , err := parseHook (hook )
482- if err != nil {
483- return err
484- }
485- g .AddPostStopHook (path , args )
486- }
487- }
488-
489- if context .IsSet ("hooks-poststop-env" ) {
490- postStopEnvs := context .StringSlice ("hooks-poststop-env" )
491- for _ , postStopEnv := range postStopEnvs {
492- path , env , err := parseHookEnv (postStopEnv )
463+ err := g .AddPostStopHook (hook )
493464 if err != nil {
494465 return err
495466 }
496- g .AddPostStopHookEnv (path , env )
497467 }
498468 }
499469
500- if context .IsSet ("hooks-poststop-timeout" ) {
501- postStopTimeouts := context .StringSlice ("hooks-poststop-timeout" )
502- for _ , postStopTimeout := range postStopTimeouts {
503- path , timeout , err := parseHookTimeout (postStopTimeout )
504- if err != nil {
505- return err
506- }
507- g .AddPostStopHookTimeout (path , timeout )
508- }
470+ if context .IsSet ("hooks-prestart-remove-all" ) {
471+ g .ClearPreStartHooks ()
509472 }
510473
511- if context .IsSet ("hooks-prestart" ) {
512- preStartHooks := context .StringSlice ("hooks-prestart" )
474+ if context .IsSet ("hooks-prestart-add " ) {
475+ preStartHooks := context .StringSlice ("hooks-prestart-add " )
513476 for _ , hook := range preStartHooks {
514- path , args , err := parseHook (hook )
515- if err != nil {
516- return err
517- }
518- g .AddPreStartHook (path , args )
519- }
520- }
521-
522- if context .IsSet ("hooks-prestart-env" ) {
523- preStartEnvs := context .StringSlice ("hooks-prestart-env" )
524- for _ , preStartEnv := range preStartEnvs {
525- path , env , err := parseHookEnv (preStartEnv )
477+ err := g .AddPreStartHook (hook )
526478 if err != nil {
527479 return err
528480 }
529- g .AddPreStartHookEnv (path , env )
530- }
531- }
532-
533- if context .IsSet ("hooks-prestart-timeout" ) {
534- preStartTimeouts := context .StringSlice ("hooks-prestart-timeout" )
535- for _ , preStartTimeout := range preStartTimeouts {
536- path , timeout , err := parseHookTimeout (preStartTimeout )
537- if err != nil {
538- return err
539- }
540- g .AddPreStartHookTimeout (path , timeout )
541481 }
542482 }
543483
@@ -804,44 +744,6 @@ func parseHugepageLimit(pageLimit string) (string, uint64, error) {
804744 return pl [0 ], uint64 (limit ), nil
805745}
806746
807- func parseHook (s string ) (string , []string , error ) {
808- args := []string {}
809- parts := strings .Split (s , ":" )
810- if len (parts ) > 1 && parts [0 ] == "" {
811- return "" , args , fmt .Errorf ("invalid hook value: %s" , s )
812- }
813- path := parts [0 ]
814- if len (parts ) > 1 {
815- args = parts [1 :]
816- }
817- return path , args , nil
818- }
819-
820- func parseHookEnv (s string ) (string , []string , error ) {
821- parts := strings .Split (s , ":" )
822- envs := []string {}
823- if len (parts ) < 2 {
824- return "" , envs , fmt .Errorf ("invalid format: %s" , s )
825- }
826- envs = parts [1 :]
827-
828- return parts [0 ], envs , nil
829- }
830-
831- func parseHookTimeout (s string ) (string , int , error ) {
832- parts := strings .Split (s , ":" )
833- if len (parts ) != 2 {
834- return "" , 0 , fmt .Errorf ("invalid format: %s" , s )
835- }
836-
837- timeout , err := strconv .Atoi (parts [1 ])
838- if err != nil {
839- return "" , 0 , err
840- }
841-
842- return parts [0 ], timeout , nil
843- }
844-
845747func parseNetworkPriority (np string ) (string , int32 , error ) {
846748 var err error
847749
0 commit comments