2016-12-12 9 views
0

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

--- 
- hosts: ansible-clients 

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

ИЛИ в просто способ

echo [email protected]/etc/apt/sources.list >> [email protected]/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 (inventory_hostname) используется в имени файла.

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

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

+1

'run_once' ограничивает количество заданий до 1, но это все равно будет выполняться на удаленном хосте. Вы должны добавить 'delegate_to: localhost' для локального согласования файлов. – dgw

+0

Я забыл об этом, спасибо –

+0

Я попробую ваш playbook, и я вернусь. Спасибо :) – Ilies