Ansible:仅当目标文件不存在时复制模板

Ansible:仅当目标文件不存在时复制模板

我正在使用Ansible 1.6.6它来配置我的机器。

有一个模板任务在我的剧本中,从 Jinja2 模板创建目标文件:

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

如果它已经存在,我不想替换somefile.conf。使用 Ansible 可以吗?如果可以,怎么做?

答案1

您可以使用 stat 检查文件是否存在,然后仅当文件不存在时才使用模板。

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

答案2

您可以使用力量模板模块的参数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,当内容与源不同时将替换远程文件。如果为 no,则仅当目标不存在时才会传输文件。

其他答案使用stat因为力量参数是在写入后添加的。

答案3

您可以首先检查目标文件是否存在,然后根据其结果的输出做出决定。

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   

答案4

我认为,最简单的解决方案是使用模板模块中的属性“force = no”

相关内容