我有三台服务器
[servers]
server1
server2
server3
我想为每个服务器创建服务器列表,但不包括自身:例如
我可以创建所有服务器的列表,但不知道如何排除一台服务器?
- hosts: servers
vars:
network_check_list: "{{groups['servers']|join(',')}}"
您可以将difference
过滤器与包含当前目标服务器作为参数的单个元素列表一起使用:
---
- hosts: servers
gather_facts: false
vars:
network_check_list: "{{ groups['servers'] | difference([inventory_hostname]) | join(',') }}"
tasks:
- debug:
var: network_check_list
由于jinja2表达式是当场解释的,并且每次在特定服务器上运行时都可以解释,因此您可以将此定义保留在您的剧本vars中,并将其适应任务中的每个上下文。这是结果(用于示例清单):
$ ansible-playbook -i inventory play.yml
PLAY [servers] ****************************************************************************************************************************************************************************************************
TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [server1] => {
"network_check_list": "server2,server3"
}
ok: [server2] => {
"network_check_list": "server1,server3"
}
ok: [server3] => {
"network_check_list": "server1,server2"
}
PLAY RECAP ********************************************************************************************************************************************************************************************************
server1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
server2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
server3 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
参考:https : //docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#set-theory-filters
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句