Ansible模板根据主机组设置environment参数失效问题排查
问题分析与解决
你的问题出在模板中的判断条件使用了ansible_fqdn,但这个变量是远程主机返回的完全限定域名(比如可能是server1.example.com),而你主机清单里的主机名是server1,两者不匹配,导致tier1组的服务器也无法匹配条件,最终全部走else分支设置为tier2。
解决方案
方案1:使用清单主机名判断
将模板中的ansible_fqdn替换为inventory_hostname,这个变量是Ansible从清单中读取的主机名,和你配置的server1/server2完全一致:
{% if inventory_hostname in groups['tier1'] %} environment: tier1 {% else %} environment: tier2 {% endif %}
方案2:直接检查主机所属组
更可靠的方式是利用group_names变量,它包含当前主机所属的所有组的列表,直接检查是否包含tier1即可:
{% if 'tier1' in group_names %} environment: tier1 {% else %} environment: tier2 {% endif %}
替换模板后重新运行Playbook,就能正确为tier1和tier2组的服务器设置对应的environment值了。
内容的提问来源于stack exchange,提问作者Roberto Jobet
相关产品推荐
相关产品推荐

