agent: task groups in system jobs do not support scaling stanzas.
This commit is contained in:
parent
e095a70bd6
commit
2da8bd8f58
|
@ -391,6 +391,18 @@ func (s *HTTPServer) jobUpdate(resp http.ResponseWriter, req *http.Request,
|
|||
}
|
||||
}
|
||||
|
||||
// GH-8481. Jobs of type system can only have a count of 1 and therefore do
|
||||
// not support scaling. Even though this returns an error on the first
|
||||
// occurrence, the error is generic but detailed enough that an operator
|
||||
// can fix the problem across multiple task groups.
|
||||
if args.Job.Type != nil && *args.Job.Type == api.JobTypeSystem {
|
||||
for _, tg := range args.Job.TaskGroups {
|
||||
if tg.Scaling != nil {
|
||||
return nil, CodedError(400, "Task groups with job type system do not support scaling stanzas")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sJob, writeReq := s.apiJobAndRequestToStructs(args.Job, req, args.WriteRequest)
|
||||
regReq := structs.JobRegisterRequest{
|
||||
Job: sJob,
|
||||
|
|
|
@ -448,6 +448,36 @@ func TestHTTP_JobQuery_Payload(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestHTTP_jobUpdate_systemScaling(t *testing.T) {
|
||||
t.Parallel()
|
||||
httpTest(t, nil, func(s *TestAgent) {
|
||||
// Create the job
|
||||
job := MockJob()
|
||||
job.Type = helper.StringToPtr("system")
|
||||
job.TaskGroups[0].Scaling = &api.ScalingPolicy{Enabled: helper.BoolToPtr(true)}
|
||||
args := api.JobRegisterRequest{
|
||||
Job: job,
|
||||
WriteRequest: api.WriteRequest{
|
||||
Region: "global",
|
||||
Namespace: api.DefaultNamespace,
|
||||
},
|
||||
}
|
||||
buf := encodeReq(args)
|
||||
|
||||
// Make the HTTP request
|
||||
req, err := http.NewRequest("PUT", "/v1/job/"+*job.ID, buf)
|
||||
if err != nil {
|
||||
t.Fatalf("err: %v", err)
|
||||
}
|
||||
respW := httptest.NewRecorder()
|
||||
|
||||
// Make the request
|
||||
obj, err := s.Server.JobSpecificRequest(respW, req)
|
||||
assert.Nil(t, obj)
|
||||
assert.Equal(t, CodedError(400, "Task groups with job type system do not support scaling stanzas"), err)
|
||||
})
|
||||
}
|
||||
|
||||
func TestHTTP_JobUpdate(t *testing.T) {
|
||||
t.Parallel()
|
||||
httpTest(t, nil, func(s *TestAgent) {
|
||||
|
|
Loading…
Reference in a new issue