diff --git a/command/init.go b/command/init.go index 6bff4990e..92554ce45 100644 --- a/command/init.go +++ b/command/init.go @@ -128,11 +128,11 @@ job "example" { } } - service "id-redis-check" { + service { # name = redis tags = ["global", "cache"] port = "db" - check "id-alive-check" { + check { name = "alive" type = "tcp" interval = "10s" diff --git a/jobspec/parse.go b/jobspec/parse.go index 725006be8..ebf7f250f 100644 --- a/jobspec/parse.go +++ b/jobspec/parse.go @@ -144,7 +144,7 @@ func parseJob(result *structs.Job, list *ast.ObjectList) error { // If we have tasks outside, create TaskGroups for them if o := listVal.Filter("task"); len(o.Items) > 0 { var tasks []*structs.Task - if err := parseTasks(&tasks, o); err != nil { + if err := parseTasks(result.Name, "", &tasks, o); err != nil { return err } @@ -247,7 +247,7 @@ func parseGroups(result *structs.Job, list *ast.ObjectList) error { // Parse tasks if o := listVal.Filter("task"); len(o.Items) > 0 { - if err := parseTasks(&g.Tasks, o); err != nil { + if err := parseTasks(result.Name, g.Name, &g.Tasks, o); err != nil { return err } } @@ -346,7 +346,7 @@ func parseConstraints(result *[]*structs.Constraint, list *ast.ObjectList) error return nil } -func parseTasks(result *[]*structs.Task, list *ast.ObjectList) error { +func parseTasks(jobName string, taskGroupName string, result *[]*structs.Task, list *ast.ObjectList) error { list = list.Children() if len(list.Items) == 0 { return nil @@ -385,6 +385,9 @@ func parseTasks(result *[]*structs.Task, list *ast.ObjectList) error { // Build the task var t structs.Task t.Name = n + if taskGroupName == "" { + taskGroupName = n + } if err := mapstructure.WeakDecode(m, &t); err != nil { return err } @@ -403,7 +406,7 @@ func parseTasks(result *[]*structs.Task, list *ast.ObjectList) error { } if o := listVal.Filter("service"); len(o.Items) > 0 { - if err := parseServices(&t, o); err != nil { + if err := parseServices(jobName, taskGroupName, &t, o); err != nil { return err } } @@ -459,13 +462,10 @@ func parseTasks(result *[]*structs.Task, list *ast.ObjectList) error { return nil } -func parseServices(task *structs.Task, serviceObjs *ast.ObjectList) error { +func parseServices(jobName string, taskGroupName string, task *structs.Task, serviceObjs *ast.ObjectList) error { task.Services = make([]structs.Service, len(serviceObjs.Items)) for idx, o := range serviceObjs.Items { var service structs.Service - label := o.Keys[0].Token.Value().(string) - service.Id = label - var m map[string]interface{} if err := hcl.DecodeObject(&m, o.Val); err != nil { return err @@ -478,7 +478,7 @@ func parseServices(task *structs.Task, serviceObjs *ast.ObjectList) error { } if service.Name == "" { - service.Name = service.Id + service.Name = fmt.Sprintf("%s-%s-%s", jobName, taskGroupName, task.Name) } // Fileter checks @@ -486,7 +486,7 @@ func parseServices(task *structs.Task, serviceObjs *ast.ObjectList) error { if ot, ok := o.Val.(*ast.ObjectType); ok { checkList = ot.List } else { - return fmt.Errorf("service '%s': should be an object", label) + return fmt.Errorf("service '%s': should be an object", service.Name) } if co := checkList.Filter("check"); len(co.Items) > 0 { @@ -505,7 +505,6 @@ func parseChecks(service *structs.Service, checkObjs *ast.ObjectList) error { service.Checks = make([]structs.ServiceCheck, len(checkObjs.Items)) for idx, co := range checkObjs.Items { var check structs.ServiceCheck - label := co.Keys[0].Token.Value().(string) var cm map[string]interface{} if err := hcl.DecodeObject(&cm, co.Val); err != nil { return err @@ -522,10 +521,6 @@ func parseChecks(service *structs.Service, checkObjs *ast.ObjectList) error { return err } - check.Id = label - if check.Name == "" { - check.Name = label - } service.Checks[idx] = check } diff --git a/jobspec/parse_test.go b/jobspec/parse_test.go index 1c993caa2..398c95e0b 100644 --- a/jobspec/parse_test.go +++ b/jobspec/parse_test.go @@ -96,13 +96,13 @@ func TestParse(t *testing.T) { }, Services: []structs.Service{ { - Id: "service-id", - Name: "service-name", + Id: "", + Name: "binstore-storagelocker-binsl-binstore", Tags: []string{"foo", "bar"}, PortLabel: "http", Checks: []structs.ServiceCheck{ { - Id: "check-id", + Id: "", Name: "check-name", Type: "tcp", Interval: 10 * time.Second, diff --git a/jobspec/test-fixtures/basic.hcl b/jobspec/test-fixtures/basic.hcl index 609c8f2f5..9696fdef8 100644 --- a/jobspec/test-fixtures/basic.hcl +++ b/jobspec/test-fixtures/basic.hcl @@ -45,11 +45,10 @@ job "binstore-storagelocker" { HELLO = "world" LOREM = "ipsum" } - service "service-id" { - name = "service-name" + service { tags = ["foo", "bar"] port = "http" - check "check-id" { + check { name = "check-name" type = "tcp" interval = "10s"