web-dev-qa-db-ja.com

Ansible:宛先ファイルが存在しない場合にのみテンプレートをコピーします

マシンのプロビジョニングにAnsible 1.6.6を使用しています。

Jinja2テンプレートから宛先ファイルを作成する テンプレートタスク が私のプレイブックにあります:

tasks:
    - template: src=somefile.j2 dest=/etc/somefile.conf

somefile.confが既に存在する場合は、置き換えたくありません。 Ansibleで可能ですか?もしそうなら、どうですか?

48
Slava Fomin II

Statを使用してファイルの存在を確認し、ファイルが存在しない場合にのみテンプレートを使用できます。

tasks:
  - stat: path=/etc/somefile.conf
    register: st
  - template: src=somefile.j2 dest=/etc/somefile.conf
    when: not st.stat.exists
62
Teftin

テンプレートモジュールのforceパラメータを使用するだけです。

tasks:
    - template: src=somefile.j2 dest=/etc/somefile.conf force=no

またはタスクに名前を付ける;-)

tasks:
    - name: Create file from template if it doesn't exist already.
      template: 
        src: somefile.j2
        dest:/etc/somefile.conf
        force: no

Ansibleテンプレートモジュール ドキュメントから:

force:デフォルトはyesで、内容がソースと異なる場合にリモートファイルを置き換えます。いいえの場合、宛先が存在しない場合にのみファイルが転送されます。

forceパラメータが記述された後に追加されたため、他の回答はstatを使用します。

45
sanzante

最初に宛先ファイルが存在するかどうかを確認してから、その結果の出力に基づいて決定を行うことができます。

tasks:
  - name: Check that the somefile.conf exists
    stat:
      path: /etc/somefile.conf
    register: stat_result

  - name: Copy the template, if it doesnt exist already
    template:
      src: somefile.j2
      dest: /etc/somefile.conf
    when: stat_result.stat.exists == False   
10
arbabnazar