如何从清单动态设置defaults / main.yml中的值

时间:2018-07-26 13:14:08

标签: ansible

我的项目有一个动态清单,在部署时,host_groups会加载清单清单。同时,我想在role / defaults / main.yml中使用host_vars [master]中的值设置一个名为master_ip的变量。

我的主机分组如下:

[master] 
xx.eco.project.com

[slave]
yy.eco.project.com
zz.eco.project.com

因为我无法在YAML中使用if / else。就像我使用的模板一样,

{% if inventory_hostname in groups['master'] %}
 master_ip: {{ lookup('dig', inventory_hostname) }}

作为master_ip:10.1.0.1。这怎么可能?

1 个答案:

答案 0 :(得分:1)

我已经解决了此问题,方法是在模板中定义一个宏函数来确定主函数,并将该值返回给master_ip的模板变量。我发现这比获得defaults / main.yml中的值的最初想法更有意义。

{% macro master_ip() -%}
    {% for inventory_hostname in groups['master'] -%}
        {{ lookup('dig', inventory_hostname) }}
    {%- endfor -%}
{% endmacro -%}

在模板中使用

bind {{ master_ip() }}