如何解决我如何遍历 Ansible 中通配符标识的主机
以下是我运行良好的剧本。
---
- hosts: "PROD_SERVERS"
user: "{{USER}}"
tasks:
- name: Check if all hosts are reachable
fail:
msg: "Server is UNREACHABLE."
when: "hostvars[item].ansible_facts|list|length == 0"
with_items: "{{ groups.PROD_SERVERS }}"
但是,当主机显示为通配符即 {{ENV}}_*
时,您能帮我了解语法吗?
---
- hosts: "{{ENV}}_*"
user: "{{USER}}"
tasks:
- name: Check if all hosts are reachable
fail:
msg: "Server is UNREACHABLE."
when: "hostvars[item].ansible_facts|list|length == 0"
with_items: "{{ groups.{{ENV}}_* }}" <------- Need help with this part of the code
解决方法
有special variables也称为“魔术变量”,用于识别当前播放中的主机。它们是:
ansible_play_hosts
ansible_play_batch
您可以使用这些变量之一代替库存组名称进行循环。
ansible_play_hosts
示例:
- fail:
msg: "Server is UNREACHABLE."
when: hostvars[item].ansible_facts|list|length == 0
with_items: "{{ ansible_play_hosts }}"
更新:
更改了 Ansible 版本“2.4.x”的示例,应该使用 with_items
而不是 loop
执行循环。引用自 official documentation
我们在 Ansible 2.5 中添加了 loop
。它尚未完全替代 with_<lookup>
,但我们建议在大多数用例中使用它。
注意:对于 Ansible,“2.9.16”和“2.10.2”loop
也适用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。