github.com/Ilhicas/nomad@v1.0.4-0.20210304152020-e86851182bc3/jobspec2/parse_job.go (about) 1 package jobspec2 2 3 import ( 4 "time" 5 6 "github.com/hashicorp/nomad/api" 7 ) 8 9 func normalizeJob(jc *jobConfig) { 10 j := jc.Job 11 if j.Name == nil { 12 j.Name = &jc.JobID 13 } 14 if j.ID == nil { 15 j.ID = &jc.JobID 16 } 17 18 if j.Periodic != nil && j.Periodic.Spec != nil { 19 v := "cron" 20 j.Periodic.SpecType = &v 21 } 22 23 normalizeVault(jc.Vault) 24 25 if len(jc.Tasks) != 0 { 26 alone := make([]*api.TaskGroup, 0, len(jc.Tasks)) 27 for _, t := range jc.Tasks { 28 alone = append(alone, &api.TaskGroup{ 29 Name: &t.Name, 30 Tasks: []*api.Task{t}, 31 }) 32 } 33 alone = append(alone, j.TaskGroups...) 34 j.TaskGroups = alone 35 } 36 37 for _, tg := range j.TaskGroups { 38 normalizeNetworkPorts(tg.Networks) 39 for _, t := range tg.Tasks { 40 if t.Resources != nil { 41 normalizeNetworkPorts(t.Resources.Networks) 42 } 43 44 normalizeTemplates(t.Templates) 45 46 // normalize Vault 47 normalizeVault(t.Vault) 48 49 if t.Vault == nil { 50 t.Vault = jc.Vault 51 } 52 } 53 } 54 } 55 56 func normalizeVault(v *api.Vault) { 57 if v == nil { 58 return 59 } 60 61 if v.Env == nil { 62 v.Env = boolToPtr(true) 63 } 64 if v.ChangeMode == nil { 65 v.ChangeMode = stringToPtr("restart") 66 } 67 } 68 69 func normalizeNetworkPorts(networks []*api.NetworkResource) { 70 if networks == nil { 71 return 72 } 73 for _, n := range networks { 74 if len(n.DynamicPorts) == 0 { 75 continue 76 } 77 78 dynamic := make([]api.Port, 0, len(n.DynamicPorts)) 79 var reserved []api.Port 80 81 for _, p := range n.DynamicPorts { 82 if p.Value > 0 { 83 reserved = append(reserved, p) 84 } else { 85 dynamic = append(dynamic, p) 86 } 87 } 88 if len(dynamic) == 0 { 89 dynamic = nil 90 } 91 92 n.DynamicPorts = dynamic 93 n.ReservedPorts = reserved 94 } 95 96 } 97 98 func normalizeTemplates(templates []*api.Template) { 99 if len(templates) == 0 { 100 return 101 } 102 103 for _, t := range templates { 104 if t.ChangeMode == nil { 105 t.ChangeMode = stringToPtr("restart") 106 } 107 if t.Perms == nil { 108 t.Perms = stringToPtr("0644") 109 } 110 if t.Splay == nil { 111 t.Splay = durationToPtr(5 * time.Second) 112 } 113 } 114 } 115 116 func int8ToPtr(v int8) *int8 { 117 return &v 118 } 119 120 func boolToPtr(v bool) *bool { 121 return &v 122 } 123 124 func stringToPtr(v string) *string { 125 return &v 126 } 127 128 func durationToPtr(v time.Duration) *time.Duration { 129 return &v 130 }