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.
This commit is contained in:
Tim Gross 2021-07-08 16:03:15 -04:00 committed by GitHub
parent ce38fb0b2b
commit 5937f54fc3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 3 deletions

3
.changelog/10876.txt Normal file
View File

@ -0,0 +1,3 @@
```release-note:bug
client: Fixed bug where meta blocks were not interpolated with task environment
```

View File

@ -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

View File

@ -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))
})
}
}