diff --git a/nomad/structs/structs.go b/nomad/structs/structs.go index 1689422f448f..c9271efee171 100644 --- a/nomad/structs/structs.go +++ b/nomad/structs/structs.go @@ -3381,6 +3381,12 @@ func (j *Job) Validate() error { } if len(j.Datacenters) == 0 { mErr.Errors = append(mErr.Errors, errors.New("Missing job datacenters")) + } else { + for _, v := range j.Datacenters { + if v == "" { + mErr.Errors = append(mErr.Errors, errors.New("Job datacenter must be non-empty string")) + } + } } if len(j.TaskGroups) == 0 { mErr.Errors = append(mErr.Errors, errors.New("Missing job task groups")) diff --git a/nomad/structs/structs_test.go b/nomad/structs/structs_test.go index 2b5751dbe9fd..186e1268eeb3 100644 --- a/nomad/structs/structs_test.go +++ b/nomad/structs/structs_test.go @@ -110,6 +110,16 @@ func TestJob_Validate(t *testing.T) { if !strings.Contains(mErr.Errors[2].Error(), "Task group web validation failed") { t.Fatalf("err: %s", err) } + + // test for empty datacenters + j = &Job{ + Datacenters: []string{""}, + } + err = j.Validate() + mErr = err.(*multierror.Error) + if !strings.Contains(mErr.Error(), "datacenter must be non-empty string") { + t.Fatalf("err: %s", err) + } } func TestJob_Warnings(t *testing.T) {