Ansible 如何从库存动态设置defaults/main.yml中的值

Ansible 如何从库存动态设置defaults/main.yml中的值,ansible,Ansible,我有一个项目的动态清单,在部署时,主机组会加载清单列表。同时,我想在role/defaults/main.yml中设置一个名为master_ip的变量,该变量的值来自host_vars[master] 我的主机分组如下: [master] xx.eco.project.com [slave] yy.eco.project.com zz.eco.project.com 因为我不能在YAML中使用if/else。就像我使用的模板一样 {% if inventory_hostname in gr

我有一个项目的动态清单,在部署时,主机组会加载清单列表。同时,我想在role/defaults/main.yml中设置一个名为master_ip的变量,该变量的值来自host_vars[master]

我的主机分组如下:

[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.0.1.1。怎么可能呢

我通过在模板中定义宏函数来确定主节点,并将值返回到主节点的模板变量,从而解决了这个问题。我发现这比在defaults/main.yml中获取值的最初想法更有意义

{% macro master_ip() -%}
    {% for inventory_hostname in groups['master'] -%}
        {{ lookup('dig', inventory_hostname) }}
    {%- endfor -%}
{% endmacro -%}
在模板中使用

bind {{ master_ip() }}
有什么问题吗:master_ip:{{lookup'dig',host}}?是关于什么的?