api: add DefaultUpdateStrategy to system jobs if missing (#26777)

From 1.11, Nomad system jobs will feature deployments, and thus jobspecs missing
an update block should be canonicalized to have one.
This commit is contained in:
Piotr Kazmierczak
2025-09-18 15:21:23 +02:00
committed by GitHub
parent 3ef25e5867
commit f42239bf6c
3 changed files with 82 additions and 3 deletions

View File

@@ -1227,7 +1227,7 @@ func (j *Job) Canonicalize() {
}
if j.Update != nil {
j.Update.Canonicalize()
} else if *j.Type == JobTypeService {
} else if *j.Type == JobTypeService || *j.Type == JobTypeSystem {
j.Update = DefaultUpdateStrategy()
}
if j.Multiregion != nil {

View File

@@ -999,6 +999,70 @@ func TestJobs_Canonicalize(t *testing.T) {
},
},
},
{
name: "missing update for system job",
input: &Job{
Name: pointerOf("foo"),
ID: pointerOf("bar"),
ParentID: pointerOf("lol"),
Type: pointerOf(JobTypeSystem),
TaskGroups: []*TaskGroup{
{
Name: pointerOf("bar"),
Tasks: []*Task{
{
Name: "task1",
},
},
},
},
},
expected: &Job{
Namespace: pointerOf(DefaultNamespace),
ID: pointerOf("bar"),
ParentID: pointerOf("lol"),
Name: pointerOf("foo"),
Region: pointerOf("global"),
Type: pointerOf(JobTypeSystem),
Priority: pointerOf(JobDefaultPriority),
NodePool: pointerOf(""),
AllAtOnce: pointerOf(false),
ConsulNamespace: pointerOf(""),
VaultNamespace: pointerOf(""),
NomadTokenID: pointerOf(""),
Stop: pointerOf(false),
Stable: pointerOf(false),
Version: pointerOf(uint64(0)),
Status: pointerOf(""),
StatusDescription: pointerOf(""),
CreateIndex: pointerOf(uint64(0)),
ModifyIndex: pointerOf(uint64(0)),
JobModifyIndex: pointerOf(uint64(0)),
Update: DefaultUpdateStrategy(),
TaskGroups: []*TaskGroup{
{
Name: pointerOf("bar"),
Count: pointerOf(1),
RestartPolicy: defaultServiceJobRestartPolicy(),
EphemeralDisk: &EphemeralDisk{
Sticky: pointerOf(false),
Migrate: pointerOf(false),
SizeMB: pointerOf(300),
},
Update: DefaultUpdateStrategy(),
Tasks: []*Task{
{
Name: "task1",
LogConfig: DefaultLogConfig(),
Resources: DefaultResources(),
KillTimeout: pointerOf(5 * time.Second),
RestartPolicy: defaultServiceJobRestartPolicy(),
},
},
},
},
},
},
{
name: "restart_merge",
input: &Job{