Ansible copy module は、たくさんの「ファイル」を1回のヒットでコピーできると思います。これは、ディレクトリを再帰的にコピーすることで実現できると思います。
Ansible template module たくさんの「テンプレート」を取得して、1回のヒットでデプロイできますか?テンプレートのフォルダを展開して再帰的に適用するようなことはありますか?
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
を使用できます。
この回答は、@ techrafによって定められたアプローチの実用的な例を提供します
with_fileglobは、ファイルのみがテンプレートフォルダー内に存在することを想定しています https://serverfault.com/questions/578544/deploying-a-を参照) folder-of-template-files-using-ansible
with_fileglobは、テンプレートフォルダー内のファイルのみを解析します
with_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'
基本的に、このアプローチは、ディレクトリとそのすべてのコンテンツをAからBにコピーして貼り付け、その間にすべてのテンプレートを解析することと考えてください。