diff --git a/jobspec/parse.go b/jobspec/parse.go index 7c63a4287..914f930e8 100644 --- a/jobspec/parse.go +++ b/jobspec/parse.go @@ -74,6 +74,7 @@ func parseJob(result *structs.Job, obj *hclobj.Object) error { if err := hcl.DecodeObject(&m, obj); err != nil { return err } + delete(m, "constraint") delete(m, "meta") // Set the name to the object key @@ -84,6 +85,13 @@ func parseJob(result *structs.Job, obj *hclobj.Object) error { return err } + // Parse constraints + if o := obj.Get("constraint", false); o != nil { + if err := parseConstraints(&result.Constraints, o); err != nil { + return err + } + } + // Parse out meta fields. These are in HCL as a list so we need // to iterate over them and merge them. if metaO := obj.Get("meta", false); metaO != nil { diff --git a/jobspec/parse_test.go b/jobspec/parse_test.go index ab68c90d7..3f238a70d 100644 --- a/jobspec/parse_test.go +++ b/jobspec/parse_test.go @@ -27,6 +27,14 @@ func TestParse(t *testing.T) { "foo": "bar", }, + Constraints: []*structs.Constraint{ + &structs.Constraint{ + LTarget: "kernel.os", + RTarget: "windows", + Operand: "=", + }, + }, + TaskGroups: []*structs.TaskGroup{ &structs.TaskGroup{ Name: "outside", diff --git a/jobspec/test-fixtures/basic.hcl b/jobspec/test-fixtures/basic.hcl index 175997182..6d767d420 100644 --- a/jobspec/test-fixtures/basic.hcl +++ b/jobspec/test-fixtures/basic.hcl @@ -9,6 +9,11 @@ job "binstore-storagelocker" { foo = "bar" } + constraint { + attribute = "kernel.os" + value = "windows" + } + task "outside" { driver = "java" config {