From 5937f54fc30a3b47d3059294189b613f67e91b10 Mon Sep 17 00:00:00 2001 From: Tim Gross Date: Thu, 8 Jul 2021 16:03:15 -0400 Subject: [PATCH] client: interpolate meta blocks with task environment (#10876) Adds missing interpolation step to the `meta` blocks when building the task environment. Also fixes incorrect parameter order in the test assertion and adds diagnostics to the test. --- .changelog/10876.txt | 3 +++ client/taskenv/env.go | 4 ++-- client/taskenv/env_test.go | 8 +++++++- 3 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 .changelog/10876.txt diff --git a/.changelog/10876.txt b/.changelog/10876.txt new file mode 100644 index 000000000..0b8e16195 --- /dev/null +++ b/.changelog/10876.txt @@ -0,0 +1,3 @@ +```release-note:bug +client: Fixed bug where meta blocks were not interpolated with task environment +``` diff --git a/client/taskenv/env.go b/client/taskenv/env.go index dd68be67e..2cbe5b98e 100644 --- a/client/taskenv/env.go +++ b/client/taskenv/env.go @@ -546,9 +546,9 @@ func (b *Builder) buildEnv(allocDir, localDir, secretsDir string, envMap[VaultNamespace] = b.vaultNamespace } - // Copy task meta + // Copy and interpolate task meta for k, v := range b.taskMeta { - envMap[k] = v + envMap[hargs.ReplaceEnv(k, nodeAttrs, envMap)] = hargs.ReplaceEnv(v, nodeAttrs, envMap) } // Interpolate and add environment variables diff --git a/client/taskenv/env_test.go b/client/taskenv/env_test.go index 098efd665..1f9f6c496 100644 --- a/client/taskenv/env_test.go +++ b/client/taskenv/env_test.go @@ -291,6 +291,10 @@ func TestEnvironment_AllValues(t *testing.T) { "b.": "b", ".": "c", } + task.Meta = map[string]string{ + "taskMetaKey-${NOMAD_TASK_NAME}": "taskMetaVal-${node.unique.id}", + "foo": "bar", + } env := NewBuilder(n, a, task, "global").SetDriverNetwork( &drivers.DriverNetwork{PortMap: map[string]int{"https": 443}}, ) @@ -361,6 +365,7 @@ func TestEnvironment_AllValues(t *testing.T) { "NOMAD_META_elb_check_type": "http", "NOMAD_META_foo": "bar", "NOMAD_META_owner": "armon", + "NOMAD_META_taskMetaKey_web": "taskMetaVal-" + n.ID, "NOMAD_JOB_ID": a.Job.ID, "NOMAD_JOB_NAME": "my-job", "NOMAD_JOB_PARENT_ID": a.Job.ParentID, @@ -405,7 +410,8 @@ func TestEnvironment_AllValues(t *testing.T) { out := "" diag = gohcl.DecodeExpression(expr, evalCtx, &out) require.Empty(t, diag) - require.Equal(t, out, expectedVal) + require.Equal(t, expectedVal, out, + fmt.Sprintf("expected %q got %q", expectedVal, out)) }) } }