主机
[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
我有一个生成zookeeper zoo.cfg
的模板{% for server in groups[cluster] %}
server.{{loop.index}}={{server}}:2888:3888
{% endfor %}
有没有办法在此循环中添加if zoo_id is defined
,还是可以通过剧本中的任务生成列表?
答案 0 :(得分:1)
Ansible的if var is defined
语法源自jinja。您应该能够在循环中检查动物园ID:
{% for server in groups[cluster] %}
{% if zoo_id is defined %}
server.{{loop.index}}={{server}}:2888:3888
{% endif %}
{% endfor %}
我不能说这是否会在没有看到你的剧本的情况下编译/运行,但假设你的问题中的循环按原样工作,这将允许你过滤是否定义zoo_id
。
答案 1 :(得分:1)
Ansible的模板语法为Jinja2,因此您可以立即使用它。
此外,您需要使用zoo_id
数组访问目标主机的hostvars
。
{% for server in groups[cluster] %}
{% if hostvars[server].zoo_id is defined %}
server.{{loop.index}}={{server}}:2888:3888
{% endif %}
{% endfor %}
您可能必须先加载委托事实,然后才能访问hostvars,但我认为,如果您需要访问清单中直接定义的任何内容,则不需要。