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


47

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

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

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

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

回答:


61

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

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

42

テンプレートモジュールの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で、コンテンツがソースと異なる場合にリモートファイルを置き換えます。「いいえ」の場合、宛先が存在しない場合にのみファイルが転送されます。

他の回答はstatforceパラメーターが書き込まれた後に追加されたために使用されます。


2
質問/答えの時にテンプレートには力引数avaialableがなかったので、私の答えは、STATを使用しています
Teftin

10

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

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   

1
タスクの名前が付けられているため、この回答が好きです:)
Asfand Qazi

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.