Ansible playbook:以逗号分隔列出所有服务器,并排除自己的服务器

Ansible playbook:以逗号分隔列出所有服务器,并排除自己的服务器,ansible,yaml,Ansible,Yaml,我有三台服务器 [servers] server1 server2 server3 我想为每个服务器创建一个不包含自身的服务器列表:例如 对于server1:应该是server2、server3 对于服务器2:应该是服务器1、服务器3 对于server3:应该是server1、server2 我可以创建所有服务器的列表,但不知道如何排除一个服务器 - hosts: servers vars: network_check_list: "{{groups['servers']|

我有三台服务器

[servers]
server1 
server2 
server3
我想为每个服务器创建一个不包含自身的服务器列表:例如

  • 对于server1:应该是server2、server3
  • 对于服务器2:应该是服务器1、服务器3
  • 对于server3:应该是server1、server2
我可以创建所有服务器的列表,但不知道如何排除一个服务器

- hosts: servers
  vars:
    network_check_list: "{{groups['servers']|join(',')}}"

您可以将
差异
过滤器与包含当前目标服务器的单个元素列表一起用作参数:

---
- hosts: servers
  gather_facts: false

  vars:
    network_check_list: "{{ groups['servers'] | difference([inventory_hostname]) | join(',') }}"

  tasks:
    - debug:
        var: network_check_list
由于jinja2表达式是现场解释的,并且对于特定服务器上的每次运行,您可以将此定义保留在playbook变量中,并且它将根据任务中的每个上下文进行调整。以下是结果(使用您的示例库存):

参考:

$ 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