GNU/Linux >> Linux の 問題 >  >> Linux

ansible を使用してテンプレート ファイルのフォルダーをデプロイする

解決策 1:

with_fileglob を使用できます テンプレート ディレクトリからファイルのリストを取得し、フィルタを使用して次のように j2 拡張子を取り除きます:

- name: create x template
  template:
    src: "{{ item }}"
    dest: /tmp/{{ item | basename | regex_replace('\.j2$', '') }}
  with_fileglob:
    - ../templates/*.j2

解決策 2:

Michael DeHaan (Ansible の作成者) が CoderWall に投稿し、非常によく似た問題について語っています。必要に応じて調整および拡張できます (権限や所有権など)。投稿の関連部分は次のとおりです:

これは、「with_items」を使用して簡略化できます " と単一の notify 声明。いずれかのタスクが変更された場合、Playbook の実行の最後に再起動する必要があるのとまったく同じ方法で、サービスに通知されます。

 - name:  template everything for fooserv
   template: src={{item.src}} dest={{item.dest}}
   with_items:
      - { src: 'templates/foo.j2', dest: '/etc/splat/foo.conf' }
      - { src: 'templates/bar.j2', dest: '/etc/splat/bar.conf' }
   notify: 
      - restart fooserv

複数の一意の引数を取るタスクがあるため、単に「item」とは言いません。 'template: の " ' 行、ただし with_items を使用 ハッシュ (辞書) 変数を使用します。必要に応じて、リストを使用して少し短くすることもできます。これはスタイル上の好みです:

 - name:  template everything for fooserv
   template: src={{item.0}} dest={{item.1}}
   with_items:
      - [ 'templates/foo.j2', '/etc/splat/foo.conf' ]
      - [ 'templates/bar.j2', '/etc/splat/bar.conf' ]
   notify: 
      - restart fooserv

もちろん、「groupvars/webservers」のように、別のファイルで調べていたリストを定義することもできます。 " webservers に必要なすべての変数を定義するファイル グループ、または「varsfiles」からロードされた YAML ファイル " プレイブック内のディレクティブ。これを行うと、これがどのようにクリーンアップされるかを見てください。

- name: template everything for fooserv
  template: src={{item.src}} dest={{item.dest}}
  with_items: {{fooserv_template_files}}
  notify: 
      - restart fooserv

解決策 3:

ラッセルの答えは機能しますが、改善が必要です

- name: create x template
- template: src={{ item }} dest=/tmp/{{ item | basename | regex_replace('.j2','') }}
- with_fileglob:
   - files/*.j2

regex_replace の正規表現が間違っていたため、すべての $ の最初の部分を削除する必要があります。第二に、すべてのファイルはテンプレート ディレクトリではなくファイル ディレクトリにある必要があります

解決策 4:

ファイル ツリーでのアクションに役立つファイル ツリー ルックアップ プラグインを作成しました。

  • https://github.com/ansible/ansible/pull/14332 (Ansible v2.x)
  • https://github.com/ansible/ansible/pull/14628 (Ansible v1.9.x)

ファイル ツリー内のファイルを再帰的に処理し、ファイル プロパティに基づいてアクション (テンプレートやコピーなど) を実行できます。相対パスが返されるため、ターゲット システムでファイル ツリーを簡単に再作成できます。

- name: Template complete tree
  template:
    src: '{{ item.src }}'
    dest: /web/{{ item.path }}
    force: yes
  with_filetree: some/path/
  when: item.state == 'file'

より読みやすいプレイブックになります。

解決策 5:

以下のコマンドは、テンプレート内の j2 ファイルを再帰的に検索し、それを移動先に移動するのに役立ちました。目的地へのテンプレートの再帰コピーを探している人に役立つことを願っています.

     - name: Copying the templated jinja2 files
       template: src={{item}} dest={{RUN_TIME}}/{{ item | regex_replace(role_path+'/templates','') | regex_replace('\.j2', '') }}
       with_items: "{{ lookup('pipe','find {{role_path}}/templates -type f').split('\n') }}"

Linux
  1. Ansibleを使用したマルチパス仮想マシン

  2. Ansibleを使用してLinuxユーザーを作成する方法

  3. レンジャーで特定のフォルダ内のファイルを並べ替えますか?

  1. フォルダ内のすべてのファイルを印刷しますか?

  2. SCPを使用してファイルを安全に転送する方法

  3. rsyncを使用してファイルを同期する

  1. Lsを使用してアクセス許可でファイルを並べ替える方法は?

  2. 検索を使用して複数のファイルの名前を変更するにはどうすればよいですか?

  3. フォルダとリストファイルをループしますか?