diff --git a/api/tasks.go b/api/tasks.go index c1d5bf2ff..b2516e706 100644 --- a/api/tasks.go +++ b/api/tasks.go @@ -1,12 +1,25 @@ package api +import ( + "time" +) + +//RestartPolicy defines how the Nomad client restarts +//tasks in a taskgroup when they fail +type RestartPolicy struct { + Interval time.Duration + Attempts int + Delay time.Duration +} + // TaskGroup is the unit of scheduling. type TaskGroup struct { - Name string - Count int - Constraints []*Constraint - Tasks []*Task - Meta map[string]string + Name string + Count int + Constraints []*Constraint + Tasks []*Task + RestartPolicy *RestartPolicy + Meta map[string]string } // NewTaskGroup creates a new TaskGroup. diff --git a/jobspec/parse.go b/jobspec/parse.go index c3c71ac9c..548632239 100644 --- a/jobspec/parse.go +++ b/jobspec/parse.go @@ -202,8 +202,9 @@ func parseGroups(result *structs.Job, obj *hclobj.Object) error { return err } } + g.RestartPolicy = structs.NewRestartPolicy(result.Type) - if err := parseRestartPolicy(structs.NewRestartPolicy(result.Type), o); err != nil { + if err := parseRestartPolicy(g.RestartPolicy, o); err != nil { return err } diff --git a/jobspec/parse_test.go b/jobspec/parse_test.go index c3b91e785..e785443b7 100644 --- a/jobspec/parse_test.go +++ b/jobspec/parse_test.go @@ -82,6 +82,11 @@ func TestParse(t *testing.T) { "elb_interval": "10", "elb_checks": "3", }, + RestartPolicy: &structs.RestartPolicy{ + Interval: 10 * time.Minute, + Attempts: 5, + Delay: 15 * time.Second, + }, Tasks: []*structs.Task{ &structs.Task{ Name: "binstore",