Exemplo n.º 1
0
/*
type Hooks struct {
	Prestart []Hook `optional`
	Poststop []Hook `optional`
}
*/
func HooksFrom(image schema.ImageManifest, msgs []string) (specs.Hooks, []string) {
	var hs specs.Hooks
	for index := 0; index < len(image.App.EventHandlers); index++ {
		var h specs.Hook
		eh := image.App.EventHandlers[index]
		if len(eh.Exec) == 0 {
			continue
		}
		for e_index := 0; e_index < len(eh.Exec); e_index++ {
			if e_index == 0 {
				h.Path = eh.Exec[0]
			} else {
				h.Args = append(h.Args, eh.Exec[e_index])
			}
		}
		switch eh.Name {
		case "pre-start":
			hs.Prestart = append(hs.Prestart, h)
			break
		case "post-stop":
			hs.Poststop = append(hs.Poststop, h)
			break
		}
	}
	return hs, msgs
}
Exemplo n.º 2
0
func (s stringSlice) ParseHooks() (hooks specs.Hooks, err error) {
	for _, v := range s {
		parts := strings.SplitN(v, ":", 2)
		if len(parts) <= 1 {
			return hooks, fmt.Errorf("parsing %s as hook_name:exec failed", v)
		}
		cmd := strings.Split(parts[1], " ")
		exec, err := exec.LookPath(cmd[0])
		if err != nil {
			return hooks, fmt.Errorf("looking up exec path for %s failed: %v", cmd[0], err)
		}
		hook := specs.Hook{
			Path: exec,
		}
		if len(cmd) > 1 {
			hook.Args = cmd[:1]
		}
		switch parts[0] {
		case "prestart":
			hooks.Prestart = append(hooks.Prestart, hook)
		case "poststart":
			hooks.Poststart = append(hooks.Poststart, hook)
		case "poststop":
			hooks.Poststop = append(hooks.Poststop, hook)
		default:
			return hooks, fmt.Errorf("%s is not a valid hook, try 'prestart', 'poststart', or 'poststop'", parts[0])
		}
	}
	return hooks, nil
}