@@ -21,8 +21,14 @@ var generateFlags = []cli.Flag{
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" },
2323 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" },
2426 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" },
2529 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" },
2632 cli.StringFlag {Name : "hostname" , Usage : "hostname value for the container" },
2733 cli.StringSliceFlag {Name : "label" , Usage : "add annotations to the configuration e.g. key=value" },
2834 cli.StringFlag {Name : "linux-apparmor" , Usage : "specifies the the apparmor profile for the container" },
@@ -332,14 +338,36 @@ func setupSpec(g *generate.Generator, context *cli.Context) error {
332338 }
333339 }
334340
335- if context .IsSet ("hooks-prestart " ) {
336- preStartHooks := context .StringSlice ("hooks-prestart " )
337- for _ , hook := range preStartHooks {
341+ if context .IsSet ("hooks-poststart " ) {
342+ postStartHooks := context .StringSlice ("hooks-poststart " )
343+ for _ , hook := range postStartHooks {
338344 path , args , err := parseHook (hook )
339345 if err != nil {
340346 return err
341347 }
342- g .AddPreStartHook (path , args )
348+ g .AddPostStartHook (path , args )
349+ }
350+ }
351+
352+ if context .IsSet ("hooks-poststart-env" ) {
353+ postStartEnvs := context .StringSlice ("hooks-poststart-env" )
354+ for _ , postStartEnv := range postStartEnvs {
355+ path , env , err := parseHookEnv (postStartEnv )
356+ if err != nil {
357+ return err
358+ }
359+ g .AddPostStartHookEnv (path , env )
360+ }
361+ }
362+
363+ if context .IsSet ("hooks-poststart-timeout" ) {
364+ postStartTimeouts := context .StringSlice ("hooks-poststart-timeout" )
365+ for _ , postStartTimeout := range postStartTimeouts {
366+ path , timeout , err := parseHookTimeout (postStartTimeout )
367+ if err != nil {
368+ return err
369+ }
370+ g .AddPostStartHookTimeout (path , timeout )
343371 }
344372 }
345373
@@ -354,14 +382,58 @@ func setupSpec(g *generate.Generator, context *cli.Context) error {
354382 }
355383 }
356384
357- if context .IsSet ("hooks-poststart" ) {
358- postStartHooks := context .StringSlice ("hooks-poststart" )
359- for _ , hook := range postStartHooks {
385+ if context .IsSet ("hooks-poststop-env" ) {
386+ postStopEnvs := context .StringSlice ("hooks-poststop-env" )
387+ for _ , postStopEnv := range postStopEnvs {
388+ path , env , err := parseHookEnv (postStopEnv )
389+ if err != nil {
390+ return err
391+ }
392+ g .AddPostStopHookEnv (path , env )
393+ }
394+ }
395+
396+ if context .IsSet ("hooks-poststop-timeout" ) {
397+ postStopTimeouts := context .StringSlice ("hooks-poststop-timeout" )
398+ for _ , postStopTimeout := range postStopTimeouts {
399+ path , timeout , err := parseHookTimeout (postStopTimeout )
400+ if err != nil {
401+ return err
402+ }
403+ g .AddPostStopHookTimeout (path , timeout )
404+ }
405+ }
406+
407+ if context .IsSet ("hooks-prestart" ) {
408+ preStartHooks := context .StringSlice ("hooks-prestart" )
409+ for _ , hook := range preStartHooks {
360410 path , args , err := parseHook (hook )
361411 if err != nil {
362412 return err
363413 }
364- g .AddPostStartHook (path , args )
414+ g .AddPreStartHook (path , args )
415+ }
416+ }
417+
418+ if context .IsSet ("hooks-prestart-env" ) {
419+ preStartEnvs := context .StringSlice ("hooks-prestart-env" )
420+ for _ , preStartEnv := range preStartEnvs {
421+ path , env , err := parseHookEnv (preStartEnv )
422+ if err != nil {
423+ return err
424+ }
425+ g .AddPreStartHookEnv (path , env )
426+ }
427+ }
428+
429+ if context .IsSet ("hooks-prestart-timeout" ) {
430+ preStartTimeouts := context .StringSlice ("hooks-prestart-timeout" )
431+ for _ , preStartTimeout := range preStartTimeouts {
432+ path , timeout , err := parseHookTimeout (preStartTimeout )
433+ if err != nil {
434+ return err
435+ }
436+ g .AddPreStartHookTimeout (path , timeout )
365437 }
366438 }
367439
@@ -641,6 +713,31 @@ func parseHook(s string) (string, []string, error) {
641713 return path , args , nil
642714}
643715
716+ func parseHookEnv (s string ) (string , []string , error ) {
717+ parts := strings .Split (s , ":" )
718+ envs := []string {}
719+ if len (parts ) < 2 {
720+ return "" , envs , fmt .Errorf ("invalid format: %s" , s )
721+ }
722+ envs = parts [1 :]
723+
724+ return parts [0 ], envs , nil
725+ }
726+
727+ func parseHookTimeout (s string ) (string , int , error ) {
728+ parts := strings .Split (s , ":" )
729+ if len (parts ) != 2 {
730+ return "" , 0 , fmt .Errorf ("invalid format: %s" , s )
731+ }
732+
733+ timeout , err := strconv .Atoi (parts [1 ])
734+ if err != nil {
735+ return "" , 0 , err
736+ }
737+
738+ return parts [0 ], timeout , nil
739+ }
740+
644741func parseNetworkPriority (np string ) (string , int32 , error ) {
645742 var err error
646743
0 commit comments