diff --git a/executor.go b/executor.go index c567519..fbf6e60 100644 --- a/executor.go +++ b/executor.go @@ -3612,6 +3612,10 @@ func (e *Executor) lookupValue(expr string, host string, task *Task) (any, bool) if data, err := coreio.Local.Read(e.resolveLocalPath(arg)); err == nil { return data, true } + case "template": + if data, err := e.TemplateFile(arg, host, task); err == nil { + return data, true + } case "fileglob": if matches, err := e.resolveFileGlob(arg); err == nil && len(matches) > 0 { return matches, true diff --git a/executor_extra_test.go b/executor_extra_test.go index 18bd6aa..f6c35af 100644 --- a/executor_extra_test.go +++ b/executor_extra_test.go @@ -879,6 +879,18 @@ func TestExecutorExtra_HandleLookup_Good_FileLookupResolvesBasePath(t *testing.T assert.Equal(t, "from base path", result) } +func TestExecutorExtra_HandleLookup_Good_TemplateLookupResolvesBasePathAndVars(t *testing.T) { + dir := t.TempDir() + require.NoError(t, writeTestFile(joinPath(dir, "templates", "message.j2"), []byte("Hello {{ name }}"), 0644)) + + e := NewExecutor(dir) + e.SetVar("name", "world") + + result := e.handleLookup("lookup('template', 'templates/message.j2')", "host1", nil) + + assert.Equal(t, "Hello world", result) +} + func TestExecutorExtra_HandleLookup_Good_VarsLookup(t *testing.T) { e := NewExecutor("/tmp") e.SetVar("lookup_value", "resolved from vars")