@@ -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" },
@@ -75,12 +81,6 @@ var generateFlags = []cli.Flag{
7581 cli.StringSliceFlag {Name : "mount-bind" , Usage : "bind mount directories src:dest[:options...]" },
7682 cli.StringFlag {Name : "mount-cgroups" , Value : "no" , Usage : "mount cgroups (rw,ro,no)" },
7783 cli.StringFlag {Name : "output" , Usage : "output file (defaults to stdout)" },
78- cli.StringSliceFlag {Name : "poststart" , Usage : "set command to run in poststart hooks" },
79- cli.StringSliceFlag {Name : "poststart-timeout" , Usage : "set timeout for commands to run in poststart hooks" },
80- cli.StringSliceFlag {Name : "poststop" , Usage : "set command to run in poststop hooks" },
81- cli.StringSliceFlag {Name : "poststop-timeout" , Usage : "set timeout for commands to run in poststop hooks" },
82- cli.StringSliceFlag {Name : "prestart" , Usage : "set command to run in prestart hooks" },
83- cli.StringSliceFlag {Name : "prestart-timeout" , Usage : "set timeout for commands to run in prestart hooks" },
8484 cli.BoolFlag {Name : "privileged" , Usage : "enable privileged container settings" },
8585 cli.StringSliceFlag {Name : "process-cap-add" , Usage : "add Linux capabilities" },
8686 cli.StringSliceFlag {Name : "process-cap-drop" , Usage : "drop Linux capabilities" },
@@ -338,27 +338,34 @@ func setupSpec(g *generate.Generator, context *cli.Context) error {
338338 }
339339 }
340340
341- << << << < HEAD
342- if context .IsSet ("hooks-prestart" ) {
343- preStartHooks := context .StringSlice ("hooks-prestart" )
344- for _ , hook := range preStartHooks {
345- path , args , err := parseHook (hook )
346- == == == =
347- if context .IsSet ("poststart" ) {
348- postStartHooks := context .StringSlice ("poststart" )
341+ if context .IsSet ("hooks-poststart" ) {
342+ postStartHooks := context .StringSlice ("hooks-poststart" )
349343 for _ , hook := range postStartHooks {
350- path , args := parseHook (hook )
344+ path , args , err := parseHook (hook )
345+ if err != nil {
346+ return err
347+ }
351348 g .AddPostStartHook (path , args )
352349 }
353350 }
354351
355- if context .IsSet ("poststart-timeout" ) {
356- postStartTimeouts := context .StringSlice ("poststart-timeout" )
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 nil
358+ }
359+ g .AddPostStartHookEnv (path , env )
360+ }
361+ }
362+
363+ if context .IsSet ("hooks-poststart-timeout" ) {
364+ postStartTimeouts := context .StringSlice ("hooks-poststart-timeout" )
357365 for _ , postStartTimeout := range postStartTimeouts {
358366 path , timeout , err := parseHookTimeout (postStartTimeout )
359- >> >> >> > generate: add timeout options for hooks
360367 if err != nil {
361- return nil
368+ return err
362369 }
363370 g .AddPostStartHookTimeout (path , timeout )
364371 }
@@ -375,34 +382,52 @@ func setupSpec(g *generate.Generator, context *cli.Context) error {
375382 }
376383 }
377384
378- << << << < HEAD
379- if context .IsSet ("hooks-poststart" ) {
380- postStartHooks := context .StringSlice ("hooks-poststart" )
381- for _ , hook := range postStartHooks {
382- path , args , err := parseHook (hook )
383- == == == =
384- if context .IsSet ("poststop-timeout" ) {
385- postStopTimeouts := context .StringSlice ("poststop-timeout" )
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 nil
391+ }
392+ g .AddPostStopHookEnv (path , env )
393+ }
394+ }
395+
396+ if context .IsSet ("hooks-poststop-timeout" ) {
397+ postStopTimeouts := context .StringSlice ("hooks-poststop-timeout" )
386398 for _ , postStopTimeout := range postStopTimeouts {
387399 path , timeout , err := parseHookTimeout (postStopTimeout )
388- >> >> >> > generate: add timeout options for hooks
389400 if err != nil {
390401 return nil
391402 }
392403 g .AddPostStopHookTimeout (path , timeout )
393404 }
394405 }
395406
396- if context .IsSet ("prestart" ) {
397- preStartHooks := context .StringSlice ("prestart" )
407+ if context .IsSet ("hooks- prestart" ) {
408+ preStartHooks := context .StringSlice ("hooks- prestart" )
398409 for _ , hook := range preStartHooks {
399- path , args := parseHook (hook )
410+ path , args , err := parseHook (hook )
411+ if err != nil {
412+ return nil
413+ }
400414 g .AddPreStartHook (path , args )
401415 }
402416 }
403417
404- if context .IsSet ("prestart-timeout" ) {
405- preStartTimeouts := context .StringSlice ("prestart-timeout" )
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 nil
424+ }
425+ g .AddPreStartHookEnv (path , env )
426+ }
427+ }
428+
429+ if context .IsSet ("hooks-prestart-timeout" ) {
430+ preStartTimeouts := context .StringSlice ("hooks-prestart-timeout" )
406431 for _ , preStartTimeout := range preStartTimeouts {
407432 path , timeout , err := parseHookTimeout (preStartTimeout )
408433 if err != nil {
@@ -688,6 +713,17 @@ func parseHook(s string) (string, []string, error) {
688713 return path , args , nil
689714}
690715
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+
691727func parseHookTimeout (s string ) (string , int , error ) {
692728 parts := strings .Split (s , ":" )
693729 if len (parts ) != 2 {
0 commit comments