我正在尝试动态读取模板中for循环内的文件内容。但是一旦我尝试在文件路径中使用host
变量,它就会失败。
一些背景知识:
groups.docker_hosts
中有三个条目。 file content xx
,其中xx
为主机索引例如,这个例子工作正常:
template.j2
{% for host in groups.docker_hosts %}
"{{lookup('file', '{{inventory_dir}}/pki/dev-docker01/test')}}"
{% endfor %}
result
"file content 01"
"file content 01"
"file content 01"
这个也正确呈现每个主机
template.j2
{% for host in groups.docker_hosts %}
"{{host}}"
{% endfor %}
result:
"dev-docker01"
"dev-docker02"
"dev-docker03"
但是当我尝试在文件路径中使用host
时,我收到此错误"msg": "AnsibleUndefinedVariable: 'host' is undefined"
{% for host in groups.mongo_hosts %}
"{{lookup('file', '{{inventory_dir}}/pki/{{host}}/test')}}"
{% endfor %}
似乎它正在新的隔离上下文中运行,它只能访问全局变量。知道如何让它真正正确地看到host
变量吗?
答案 0 :(得分:3)
您将值{{host}}作为名称传递给主机。只需使用host作为变量。
{% for host in groups['webservers'] %}
"{{ lookup('file', 'test/' + host + '/foo.txt') }}"
{% endfor %}