Как я могу хранить пользовательские факты об удаленных хостах в совокупности, прежде чем продолжить с остальной частью Runbook? - PullRequest
1 голос
/ 02 ноября 2019

Я пишу сборник пьес, обеспечивающий кластеризацию, в Ansible, который требует, чтобы каждый узел был настроен с общедоступными сертификатами других узлов во время установки. Я не могу придумать простой способ сказать, как можно ответить:

  1. Идите за удаленными сертификатами
  2. Сложите их в список
  3. Сделайте эти резюме сертификатов доступнымина каждый удаленный узел для генерации авторизованного списка узлов

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

1 Ответ

0 голосов
/ 02 ноября 2019

Мой ответ будет как можно более общим: сохранить факт на определенной машине в группе и прочитать этот факт для всех машин в группе с другой машины.

  1. Я принимаю как должное вашуplaybook на самом деле нацелен на группу my_node_group, содержащую все узлы вашего кластера.
  2. Храните информацию с удаленного узла в собственных фактах (или получайте ее непосредственно из своего инвентаря ...).

    # This one should be replaced with getting certs in your context
    # with whatever solution is best suited for your.
    - name: Get an info from current machine
      shell: echo "I'm a dummy task running on {{ inventory_hostname }}" 
      register: my_info_cmd
    
    - name: Push info in a fact for current node
      set_fact:
        my_info: "{{ my_info_cmd.stdout }}"
    
  3. Это действительно полезная часть: используйте сохраненную информацию в другом месте
    - name: example loop to access 'my_info` on each machines of group `my_node_group`
      debug:
        var: item
      loop: >-
        {{
          groups['my_node_group']
          | map('extract', hostvars, 'my_info')
          | list 
        }}
    

Объяснение последнего шага

  • Получить машины вгруппа my_node_group
  • Используйте эти имена для map extract filter on hostvars и получите список соответствующих хэшей фактов, в которых вы сохраняете толькоmy_info атрибут
  • Преобразование возвращенного объекта карты в список с циклом над ним.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...