From d08a3c8b30df9fe03975c254449445312f0e728f Mon Sep 17 00:00:00 2001 From: Michael Schurter Date: Mon, 5 Nov 2018 17:39:02 -0800 Subject: [PATCH] client: interpolate driver configurations Also add missing SetDriverNetwork calls. --- client/allocrunner/taskrunner/task_runner.go | 2 +- .../allocrunner/taskrunner/task_runner_getters.go | 6 +++++- client/driver/env/env.go | 15 +++++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/client/allocrunner/taskrunner/task_runner.go b/client/allocrunner/taskrunner/task_runner.go index b90f45457b71..699245eb5b99 100644 --- a/client/allocrunner/taskrunner/task_runner.go +++ b/client/allocrunner/taskrunner/task_runner.go @@ -462,8 +462,8 @@ func (tr *TaskRunner) runDriver() error { // TODO(nickethier): make sure this uses alloc.AllocatedResources once #4750 is rebased taskConfig := tr.buildTaskConfig() - // TODO: load variables evalCtx := &hcl.EvalContext{ + Variables: tr.envBuilder.Build().AllValues(), Functions: shared.GetStdlibFuncs(), } diff --git a/client/allocrunner/taskrunner/task_runner_getters.go b/client/allocrunner/taskrunner/task_runner_getters.go index 3bce6ffcd77d..89d67a99ebb0 100644 --- a/client/allocrunner/taskrunner/task_runner_getters.go +++ b/client/allocrunner/taskrunner/task_runner_getters.go @@ -61,11 +61,15 @@ func (tr *TaskRunner) getDriverHandle() *DriverHandle { return tr.handle } -// setDriverHanlde sets the driver handle and creates a new result proxy. +// setDriverHanlde sets the driver handle, creates a new result proxy, and +// updates the driver network in the task's environment. func (tr *TaskRunner) setDriverHandle(handle *DriverHandle) { tr.handleLock.Lock() defer tr.handleLock.Unlock() tr.handle = handle + + // Update the environment's driver network + tr.envBuilder.SetDriverNetwork(handle.net) } func (tr *TaskRunner) clearDriverHandle() { diff --git a/client/driver/env/env.go b/client/driver/env/env.go index 013623168d38..a7872e6e7d1e 100644 --- a/client/driver/env/env.go +++ b/client/driver/env/env.go @@ -12,6 +12,7 @@ import ( "github.com/hashicorp/nomad/helper" hargs "github.com/hashicorp/nomad/helper/args" "github.com/hashicorp/nomad/nomad/structs" + "github.com/zclconf/go-cty/cty" ) // A set of environment variables that are exported by each driver. @@ -159,6 +160,20 @@ func (t *TaskEnv) All() map[string]string { return m } +// AllValues is a map of the task's environment variables and the node's +// attributes with cty.Value (String) values. +func (t *TaskEnv) AllValues() map[string]cty.Value { + m := make(map[string]cty.Value, len(t.EnvMap)+len(t.NodeAttrs)) + for k, v := range t.EnvMap { + m[k] = cty.StringVal(v) + } + for k, v := range t.NodeAttrs { + m[k] = cty.StringVal(v) + } + + return m +} + // ParseAndReplace takes the user supplied args replaces any instance of an // environment variable or Nomad variable in the args with the actual value. func (t *TaskEnv) ParseAndReplace(args []string) []string {