Ansible Jinja2 if/else与两者匹配
我正试图在ansible模板中使用if/else语句来根据我的主机名填充值。我已经编写了一个模块,解析主机名并将值作为事实添加。我能够在我的剧本中使用这些事实,但在获得正确使用它们的if/else语句时遇到了困难。最后,if和else都匹配,所以这两个值都会出现在我的文件中 jinja2模板Ansible Jinja2 if/else与两者匹配,ansible,jinja2,Ansible,Jinja2,我正试图在ansible模板中使用if/else语句来根据我的主机名填充值。我已经编写了一个模块,解析主机名并将值作为事实添加。我能够在我的剧本中使用这些事实,但在获得正确使用它们的if/else语句时遇到了困难。最后,if和else都匹配,所以这两个值都会出现在我的文件中 jinja2模板 {% for host in groups['tag_Function_logfe'] %} {% if hostvars[host]['tt_number'] == "01" %} is_master =
{% for host in groups['tag_Function_logfe'] %}
{% if hostvars[host]['tt_number'] == "01" %}
is_master = true
{% else %}
is_master = false
{% endif %}
{% endfor %}
可靠的事实:
ok: [node1] => {"ansible_facts": {"tt_number": "01"}, "changed": false, "msg": "Additional facts added successfully"}
ok: [node2] => {"ansible_facts": {"tt_number": "02"}, "changed": false, "msg": "Additional facts added successfully"}
is_master = true
is_master = false
结果:
ok: [node1] => {"ansible_facts": {"tt_number": "01"}, "changed": false, "msg": "Additional facts added successfully"}
ok: [node2] => {"ansible_facts": {"tt_number": "02"}, "changed": false, "msg": "Additional facts added successfully"}
is_master = true
is_master = false
我不完全了解您试图做什么,但Ansible和Jinja的行为似乎与本案例中记录的一样,因此可能在其他地方存在误解 您有一个Ansible将在每个主机上呈现到配置文件中的模板。在此模板中,for循环在给定组中的主机上迭代,并为每个主机声明
是\u master
。这将在模板的每个实例中产生多个定义,等于“tag_Function_logfe”组中的主机数
这对我来说似乎没有意义,因为我假设每个主机只有一个is\u master
定义
也许您想要做的是在模板中包含以下内容:
{% if inventory_hostname in groups['tag_Function_logfe'] %}
{% if tt_number == "01" %}
is_master = true
{% else %}
is_master = false
{% endif %}
{% endif %}
inventory\u hostname
指向Ansible目前正在使用的主机。我们显然想检查此主机是否属于“tag\u Function\u logfe”组,如果不是,我们根本不定义是主主机
然后,我们想根据tt\U number
确定是\u master
应该有什么值。注意,我们不需要使用hostvars
,因为我们只访问模板呈现到配置文件中的当前主机的tt\u number
值
可能可以进一步取消组成员资格测试,但如果不查看其余配置,就很难判断。我不知道您总体上想做什么,但Ansible和Jinja的行为似乎与本例中记录的一样,因此其他地方可能存在误解
您有一个Ansible将在每个主机上呈现到配置文件中的模板。在此模板中,for循环在给定组中的主机上迭代,并为这些主机中的每个主机声明is\u master
。这将导致模板的每个实例中都有多个定义,等于“tag\u Function\u logfe”中的主机数“小组
这对我来说似乎没有意义,因为我假设每个主机只有一个is\u master
定义
也许您想要做的是在模板中包含以下内容:
{% if inventory_hostname in groups['tag_Function_logfe'] %}
{% if tt_number == "01" %}
is_master = true
{% else %}
is_master = false
{% endif %}
{% endif %}
inventory\u hostname
指向Ansible目前正在使用的主机。我们显然想检查此主机是否属于“tag\u Function\u logfe”组,如果不是,我们根本不定义是主主机
然后,我们想根据tt\U number
确定是\u master
应该有什么值。注意,我们不需要使用hostvars
,因为我们只访问模板呈现到配置文件中的当前主机的tt\u number
值
可能可以进一步取消组成员资格测试,但如果不查看其余的配置,就很难判断这一点。太好了,效果非常好!我可以删除组成员资格测试,我使用它来拉入主机,然后检查hostvars,我没有意识到我可以像这样直接访问事实!Grea这很好!我可以删除组成员资格测试,我用它来拉入主机,然后检查hostvars,没有意识到我可以像这样直接访问事实!