groups.get (client_group_name, []) в ansible - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть ansible -playbok файл yaml с одним условием и одним делегированием

when: not delegate_facts_host | bool or inventory_hostname in groups.get(client_group_name, [])


delegate_to: "{{ item }}"
delegate_facts: True
with_items: "{{ groups['all'] | difference(groups.get('clients', [])) }}" 

Я не понимаю эту строку. когда я печатаю

delegate_facts_host 

Он показывает True, даже если я установил

  vars:
    delegate_facts_host: False 

, самая запутанная часть -

groups.get(client_group_name, [])

Я ищу, но не понимаю на все

1 Ответ

1 голос
/ 21 апреля 2020

Я вижу хорошее Ansible здесь ...

  1. groups['all'] - список всех хостов (группа 'all' содержит все хосты, groups - переменная magi c) .
  2. groups.get('clients', []) представляет собой смесь Ansible и Python. Groups - это переменная magi c (словарь python!), Поэтому мы используем метод python get для создания groups['clients'] со значением по умолчанию, равным пустому списку ([]). См. [1]
  3. |difference - фильтр Jinja, который берет список из левой части (groups['all']) и вычитает список из правой (groups.get('clients', [])). В результате получается «список всех хостов, которые не входят в группу клиентов».
  4. with_items выполняет итерации по этому списку.
  5. delegate_to: {{ item }} - это код запуска на каждом хосте из этого списка.
  6. , когда: not delegate_facts_host | bool использует установщик bool (преобразует строки 'yes', 'no', et c в значение bool) - задача запускается, если для Delegate_facts_host установлено значение 'no' ИЛИ, если inventory_hostname in groups.get(client_group_name, []) - вторая часть проверяет, находится ли узел в группе с именем client_group_name`.

По сути, он говорит: «Запустите это с данными от не-клиентов на всех клиентах» (запустите на всех клиентах, но делегируйте всем не клиенты). Это аккуратно и кратко, но не для начинающих, да.

[1] https://docs.python.org/3/library/stdtypes.html#typesmapping

get (ключ [, по умолчанию])

Возвращает значение для ключа, если ключ находится в словаре, иначе по умолчанию. Если значение по умолчанию не указано, по умолчанию используется значение Нет, поэтому этот метод никогда не вызывает ошибку KeyError.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...