Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add env vars for dc, region #2507

Merged
merged 12 commits into from
May 4, 2017
1 change: 1 addition & 0 deletions client/alloc_runner_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ func (m *MockAllocStateUpdater) Update(alloc *structs.Allocation) {
func testAllocRunnerFromAlloc(alloc *structs.Allocation, restarts bool) (*MockAllocStateUpdater, *AllocRunner) {
logger := testLogger()
conf := config.DefaultConfig()
conf.Node = mock.Node()
conf.StateDir = os.TempDir()
conf.AllocDir = os.TempDir()
upd := &MockAllocStateUpdater{}
Expand Down
2 changes: 2 additions & 0 deletions client/driver/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,8 @@ func GetTaskEnv(taskDir *allocdir.TaskDir, node *structs.Node,
env := env.NewTaskEnvironment(node).
SetTaskMeta(alloc.Job.CombinedTaskMeta(alloc.TaskGroup, task.Name)).
SetJobName(alloc.Job.Name).
SetDatacenterName(node.Datacenter).
SetRegionName(conf.Region).
SetEnvvars(task.Env).
SetTaskName(task.Name)

Expand Down
7 changes: 6 additions & 1 deletion client/driver/driver_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ func testConfig() *config.Config {
conf.StateDir = os.TempDir()
conf.AllocDir = os.TempDir()
conf.MaxKillTimeout = 10 * time.Second
conf.Region = "global"
conf.Node = mock.Node()
return conf
}

Expand All @@ -88,6 +90,7 @@ type testContext struct {
// It is up to the caller to call AllocDir.Destroy to cleanup.
func testDriverContexts(t *testing.T, task *structs.Task) *testContext {
cfg := testConfig()
cfg.Node = mock.Node()
allocDir := allocdir.NewAllocDir(testLogger(), filepath.Join(cfg.AllocDir, structs.GenerateUUID()))
if err := allocDir.Build(); err != nil {
t.Fatalf("AllocDir.Build() failed: %v", err)
Expand Down Expand Up @@ -162,7 +165,7 @@ func setupTaskEnv(t *testing.T, driver string) (*allocdir.TaskDir, map[string]st
conf := testConfig()
allocDir := allocdir.NewAllocDir(testLogger(), filepath.Join(conf.AllocDir, alloc.ID))
taskDir := allocDir.NewTaskDir(task.Name)
env, err := GetTaskEnv(taskDir, nil, task, alloc, conf, "")
env, err := GetTaskEnv(taskDir, conf.Node, task, alloc, conf, "")
if err != nil {
t.Fatalf("GetTaskEnv() failed: %v", err)
}
Expand Down Expand Up @@ -209,6 +212,8 @@ func setupTaskEnv(t *testing.T, driver string) (*allocdir.TaskDir, map[string]st
"NOMAD_ALLOC_NAME": alloc.Name,
"NOMAD_TASK_NAME": task.Name,
"NOMAD_JOB_NAME": alloc.Job.Name,
"NOMAD_DC": "dc1",
"NOMAD_REGION": "global",
}

act := env.EnvMap()
Expand Down
52 changes: 44 additions & 8 deletions client/driver/env/env.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,12 @@ const (
// AllocIndex is the environment variable for passing the allocation index.
AllocIndex = "NOMAD_ALLOC_INDEX"

// Datacenter is the environment variable for passing the datacenter in which the alloc is running.
Datacenter = "NOMAD_DC"

// Region is the environment variable for passing the region in which the alloc is running.
Region = "NOMAD_REGION"

// AddrPrefix is the prefix for passing both dynamic and static port
// allocations to tasks.
// E.g $NOMAD_ADDR_http=127.0.0.1:80
Expand All @@ -72,10 +78,11 @@ const (

// The node values that can be interpreted.
const (
nodeIdKey = "node.unique.id"
nodeDcKey = "node.datacenter"
nodeNameKey = "node.unique.name"
nodeClassKey = "node.class"
nodeIdKey = "node.unique.id"
nodeDcKey = "node.datacenter"
nodeRegionKey = "node.region"
nodeNameKey = "node.unique.name"
nodeClassKey = "node.class"

// Prefixes used for lookups.
nodeAttributePrefix = "attr."
Expand All @@ -94,6 +101,8 @@ type TaskEnvironment struct {
MemLimit int
TaskName string
AllocIndex int
Datacenter string
Region string
AllocId string
AllocName string
Node *structs.Node
Expand Down Expand Up @@ -195,6 +204,12 @@ func (t *TaskEnvironment) Build() *TaskEnvironment {
if t.JobName != "" {
t.TaskEnv[JobName] = t.JobName
}
if t.Datacenter != "" {
t.TaskEnv[Datacenter] = t.Datacenter
}
if t.Region != "" {
t.TaskEnv[Region] = t.Region
}

// Build the addr of the other tasks
if t.Alloc != nil {
Expand Down Expand Up @@ -227,6 +242,7 @@ func (t *TaskEnvironment) Build() *TaskEnvironment {
// Set up the node values.
t.NodeValues[nodeIdKey] = t.Node.ID
t.NodeValues[nodeDcKey] = t.Node.Datacenter
t.NodeValues[nodeRegionKey] = t.Region
t.NodeValues[nodeNameKey] = t.Node.Name
t.NodeValues[nodeClassKey] = t.Node.NodeClass

Expand Down Expand Up @@ -488,13 +504,13 @@ func (t *TaskEnvironment) SetTaskName(name string) *TaskEnvironment {
return t
}

func (t *TaskEnvironment) SetJobName(name string) *TaskEnvironment {
t.JobName = name
func (t *TaskEnvironment) ClearTaskName() *TaskEnvironment {
t.TaskName = ""
return t
}

func (t *TaskEnvironment) ClearTaskName() *TaskEnvironment {
t.TaskName = ""
func (t *TaskEnvironment) SetJobName(name string) *TaskEnvironment {
t.JobName = name
return t
}

Expand All @@ -503,6 +519,26 @@ func (t *TaskEnvironment) ClearJobName() *TaskEnvironment {
return t
}

func (t *TaskEnvironment) SetDatacenterName(name string) *TaskEnvironment {
t.Datacenter = name
return t
}

func (t *TaskEnvironment) ClearDatacenterName() *TaskEnvironment {
t.Datacenter = ""
return t
}

func (t *TaskEnvironment) SetRegionName(name string) *TaskEnvironment {
t.Region = name
return t
}

func (t *TaskEnvironment) ClearRegionName() *TaskEnvironment {
t.Region = ""
return t
}

func (t *TaskEnvironment) SetVaultToken(token string, inject bool) *TaskEnvironment {
t.VaultToken = token
t.InjectVaultToken = inject
Expand Down
1 change: 1 addition & 0 deletions client/task_runner_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ func testTaskRunner(t *testing.T, restarts bool) *taskRunnerTestCtx {
func testTaskRunnerFromAlloc(t *testing.T, restarts bool, alloc *structs.Allocation) *taskRunnerTestCtx {
logger := testLogger()
conf := config.DefaultConfig()
conf.Node = mock.Node()
conf.StateDir = os.TempDir()
conf.AllocDir = os.TempDir()
upd := &MockTaskStateUpdater{}
Expand Down
1 change: 1 addition & 0 deletions command/agent/consul/int_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ func TestConsul_Integration(t *testing.T) {
defer testconsul.Stop()

conf := config.DefaultConfig()
conf.Node = mock.Node()
conf.ConsulConfig.Addr = testconsul.HTTPAddr
consulConfig, err := conf.ConsulConfig.ApiConfig()
if err != nil {
Expand Down
8 changes: 8 additions & 0 deletions website/source/docs/runtime/environment.html.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,14 @@ environment variables.
<td>`NOMAD_JOB_NAME`</td>
<td>The job's name</td>
</tr>
<tr>
<td>`NOMAD_DC`</td>
<td>The datacenter in which the allocation is running</td>
</tr>
<tr>
<td>`NOMAD_REGION`</td>
<td>The region in which the allocation is running</td>
</tr>
<tr>
<td>`NOMAD_IP_<label>`</td>
<td>The IP of the port with the given label</td>
Expand Down