Ansible 访问文件查找路径中的循环变量

Ansible 访问文件查找路径中的循环变量,ansible,jinja2,Ansible,Jinja2,我正在尝试动态读取模板中for循环的文件内容。但当我尝试在文件路径中使用host变量时,它就失败了 一些背景: 组中有三个条目。docker\u主机为 它试图读取的所有文件都存在并且可读 每个文件都有文件内容xx的内容,其中xx是主机索引 例如,此示例非常有效: template.j2 {% for host in groups.docker_hosts %} "{{lookup('file', '{{inventory_dir}}/pki/dev-docke

我正在尝试动态读取模板中for循环的文件内容。但当我尝试在文件路径中使用
host
变量时,它就失败了

一些背景:

  • 组中有三个条目。docker\u主机为
    
    
  • 它试图读取的所有文件都存在并且可读
  • 每个文件都有
    文件内容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'未定义”


它似乎运行在新的隔离上下文中,该上下文只能访问全局变量。你知道如何让它正确地看到
host
变量吗

您正在将值{{host}}作为名称传递给主机。只需使用host作为变量

{% for host in groups['webservers'] %}
"{{ lookup('file', 'test/' + host + '/foo.txt') }}"
{% endfor %}

您正在将值{{host}}作为名称传递给主机。只需使用host作为变量

{% for host in groups['webservers'] %}
"{{ lookup('file', 'test/' + host + '/foo.txt') }}"
{% endfor %}