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  }