我正在使用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”