Ansible -playbook: перечислить все серверы как запятые и исключить собственный сервер - PullRequest
1 голос
/ 05 февраля 2020

У меня есть три сервера

[servers]
server1 
server2 
server3

Я хотел бы создать для каждого сервера список серверов без включения самого себя: например,

  • для сервера1: это должен быть сервер2, server3;
  • для сервера2: это должен быть сервер1, сервер3;
  • для сервера3: это должен быть сервер1, сервер2;

Я могу создать список всех серверов но не знаете, как исключить один сервер?

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

1 Ответ

2 голосов
/ 05 февраля 2020

Вы можете использовать фильтр difference с одним списком элементов, содержащим текущий целевой сервер в качестве аргумента:

---
- hosts: servers
  gather_facts: false

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

  tasks:
    - debug:
        var: network_check_list

Поскольку выражение jinja2 интерпретируется на месте и для каждого запуска на определенном сервере, Вы можете сохранить это определение в своем файле PlaySars 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

...