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

时间:2017-04-30 20:58:34

标签: ansible jinja2

我正在尝试动态读取模板中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变量吗?

1 个答案:

答案 0 :(得分:3)

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

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