Условное делегирование на хост для модуля синхронизации - PullRequest
0 голосов
/ 20 апреля 2020

Я новичок ie до Ansible и пытаюсь выяснить, как синхронизировать между 3 хостами на основе условия. Ниже приведены подробности:

  • Существует 3 узла, и в зависимости от того, какой узел является основным (я смог получить пользовательский набор фактов для него), необходимо делегировать этот хост (который выполняет синхронизацию с этого хоста). другим двум хозяевам).
  • Пользовательский факт в основном представляет собой значение 1 или 0 (1 означает основной / основной, а 0 означает нет).
  • Я не могу получить значение имени хоста (основного имени хоста) для включения в шаги синхронизации.

Ниже приведена моя пьеса. Как заставить синхронизацию прочитать значение «основного» имени хоста, чтобы выполнить следующие шаги?

---

- name: Playbook for rsync
  become: yes
  hosts: clients
  gather_facts: True

  tasks:
  - name: Task to rsync from Primary server
    synchronize:
      src: "{{ item.source }}"
      dest: "{{ item.dest }}"
    with_items:
      - { source: '/rsynctest/', dest: '/rsynctest/' }
      - { source: '/rsynctest1/', dest: '/rsynctest1/' }
    delegate_to: "{{ ansible_hostname }}"
    when:
      - ansible_local.determine.isprimary  == "1"

Спасибо
-Raj

1 Ответ

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

Это не проблема начального уровня. Проблема должна быть разделена на две части: отделение первичного от вторичного и делегирование / выполнение.

По моему опыту, наилучшим способом является использование динамических c групп [1]. Они могут быть сформированы на основе заданного значения c.

Вот пример для группировки:

- hosts: cluster
  name: Grouping hosts
  gather_facts: false
  tasks:
    - name: group master hosts
      group_by:
        key: master
      when: master|d(False)

    - name: group slave hosts
      group_by:
        key: slave
      when: slave|d(False)

(Вам необходимо определить переменные ведомого / ведущего или откорректировать пример по мере необходимости) .

Следующие пьесы в книге воспроизведения могут использовать эти группы.

 - name: Syncing
   hosts: slave
   tasks:
     - name: Sync to master
       command: echo syncing from slave
       delegate_to: '{{ groups.master[0] }}'

[1] https://docs.ansible.com/ansible/latest/modules/group_by_module.html

...