定义了 var 的主机的 ansible Jinja2 模板循环

use*_*318 2 jinja2 ansible

主机

[mesosSandbox]
mesos1-01d.chalybs.net zoo_id=1
mesos1-02d.chalybs.net zoo_id=2
mesos1-03d.chalybs.net zoo_id=3
mesos1-04d.chalybs.net
mesos1-05d.chalybs.net
Run Code Online (Sandbox Code Playgroud)

我有一个生成 Zookeeper Zoo.cfg 的模板

{% for server in groups[cluster] %}
    server.{{loop.index}}={{server}}:2888:3888
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

有没有办法添加if zoo_id is defined到此循环或者我可以通过剧本中的任务生成列表?

小智 5

Ansible 的if var is defined语法源自 jinja。您应该能够在循环中检查动物园 ID:

{% for server in groups[cluster] %}
    {% if hostvars[server].zoo_id is defined %}
        server.{{loop.index}}={{server}}:2888:3888
    {% endif %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

我不能说这是否会在没有看到更多剧本的情况下编译/运行,但假设问题中的循环按原样工作,这将允许您过滤是否已zoo_id定义。