В 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)