web-dev-qa-db-ja.com

テンプレートモジュールは複数のテンプレート/ディレクトリを処理できますか?

Ansible copy module は、たくさんの「ファイル」を1回のヒットでコピーできると思います。これは、ディレクトリを再帰的にコピーすることで実現できると思います。

Ansible template module たくさんの「テンプレート」を取得して、1回のヒットでデプロイできますか?テンプレートのフォルダを展開して再帰的に適用するようなことはありますか?

5
danday74

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を使用できます。

29
techraf

この回答は、@ 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にコピーして貼り付け、その間にすべてのテンプレートを解析することと考えてください。

7
danday74