В Ansible, как я могу получить файл с нескольких узлов и сохранить его в одном файле централизованно?

Все, что мне нужно, в заголовке, например, я хочу знать, как я могу сделать что-то вроде этого:

---
- hosts: ansible-clients

  tasks:
    - name: Fetch source list from clients
      fetch: src=/etc/apt/sources.list
             dest=/tmp/allnodes.sourcelist

ИЛИ просто

echo remote@/etc/apt/sources.list >> local@/tmp/allnodes.sourcelist

Я могу создавать и запускать сценарии на локальном компьютере, но единственное условие, которое у меня есть, - это выполнять все действия в одной пьесе.

1 ответ

Решение

Вы можете использовать его пьесу:

---
- hosts: ansible-clients
  tasks:
    - name: Fetch source list from clients
      fetch:
        src: /etc/apt/sources.list
        flat: yes
        dest: "/tmp/{{ inventory_hostname }}.sourcelist"
    - name: Merge files
      run_once: yes
      delegate_to: localhost
      shell: "cat /tmp/{{ item }}.sourcelist >> /tmp/allnodes.sourcelist"
      with_items: "{{ groups['ansible-clients'] }}"
  • Первая задача используется для получения всех файлов с удаленных устройств и их сохранения в /tmp (имя_хоста) используется в имени файла.

  • Вторая задача запускается один раз и добавляет все файлы (получить список хостов, связанных с группой ansible-клиентов) в окончательный файл

Внимание: окончательный файл никогда не удаляется, может быть, вы удалите его перед извлечением файлов (с run_once = yes)

Другие вопросы по тегам