2017-01-16 13 views
2

Я считаю, что Ansible copy module может взять целую кучу «файлов» и скопировать их одним ударом. По-моему, это может быть достигнуто путем рекурсивного копирования каталога.Может ли модуль шаблонов обрабатывать несколько шаблонов/каталогов?

Может ли Ansible template module взять целую кучу «шаблонов» и развернуть их одним ударом? Есть ли такая вещь, как развертывание папки шаблонов и ее рекурсивное применение?

ответ

12

Модуль сам template запускает действие на один файл, но вы можете использовать with_filetree для цикла рекурсивно по указанному пути:

- name: Ensure directory structure exists 
    file: 
    path: '{{ templates_destination }}/{{ item.path }}' 
    state: directory 
    with_filetree: '{{ templates_source }}' 
    when: item.state == 'directory' 

- name: Ensure files are populated from templates 
    template: 
    src: '{{ item.src }}' 
    dest: '{{ templates_destination }}/{{ item.path }}' 
    with_filetree: '{{ templates_source }}' 
    when: item.state == 'file' 

и шаблоны в одном каталоге вы можете использовать with_fileglob.

+0

Этот ответ более полезен, этот ответ потрясающий! Я добавил свой собственный ответ, чтобы объяснить, почему (но принял это) – danday74

+1

Мне нравится, когда план объединяется! –

5

Этот ответ обеспечивает рабочий пример подхода, установленном @techraf

with_fileglob ожидает только файлы жить в папке шаблонов - см https://serverfault.com/questions/578544/deploying-a-folder-of-template-files-using-ansible

with_fileglob только анализировать файлы в папке шаблонов

с_filetree поддерживает структуру каталогов при перемещении файлов шаблонов в dest. Он автоматически создает эти каталоги для вас в dest.

with_filetree будет анализировать все файлы в папке шаблонов и вложенные каталоги

- name: Approve certs server directories 
    file: 
    state: directory 
    dest: '~/{{ item.path }}' 
    with_filetree: '../templates' 
    when: item.state == 'directory' 

- name: Approve certs server files 
    template: 
    src: '{{ item.src }}' 
    dest: '~/{{ item.path }}' 
    with_filetree: '../templates' 
    when: item.state == 'file' 

По существу, думать о таком подходе, как копирование и вставка директории и все ее содержимое от А до Б и в то время как делать это, разбор всех шаблоны.

+0

только вопрос, который я имел здесь, с значком, который мне пришлось скопировать вручную (он был поврежден, когда это произошло) - вы можете спорить, почему у меня есть значок в моей папке шаблонов;) – danday74