github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/client/taskenv/network.go (about)

     1  package taskenv
     2  
     3  import (
     4  	"github.com/hashicorp/nomad/nomad/structs"
     5  )
     6  
     7  // InterpolateNetworks returns an interpolated copy of the task group networks
     8  // with values from the task's environment.
     9  //
    10  // Current interoperable fields:
    11  //   - Hostname
    12  //   - DNS
    13  func InterpolateNetworks(taskEnv *TaskEnv, networks structs.Networks) structs.Networks {
    14  
    15  	// Guard against not having a valid taskEnv. This can be the case if the
    16  	// PreKilling or Exited hook is run before Poststart.
    17  	if taskEnv == nil || networks == nil {
    18  		return nil
    19  	}
    20  
    21  	// Create a copy of the networks array, so we can manipulate the copy.
    22  	interpolated := networks.Copy()
    23  
    24  	// Iterate the copy and perform the interpolation.
    25  	for i := range interpolated {
    26  		interpolated[i].Hostname = taskEnv.ReplaceEnv(interpolated[i].Hostname)
    27  		if interpolated[i].DNS != nil {
    28  			interpolated[i].DNS.Servers = taskEnv.ParseAndReplace(interpolated[i].DNS.Servers)
    29  			interpolated[i].DNS.Searches = taskEnv.ParseAndReplace(interpolated[i].DNS.Searches)
    30  			interpolated[i].DNS.Options = taskEnv.ParseAndReplace(interpolated[i].DNS.Options)
    31  		}
    32  	}
    33  
    34  	return interpolated
    35  }