Você pode verificar a existência do arquivo usando stat e usar o modelo somente se o arquivo não existir.
tasks:
- stat: path=/etc/somefile.conf
register: st
- template: src=somefile.j2 dest=/etc/somefile.conf
when: not st.stat.exists
Estou usando Ansible 1.6.6
para provisionar minha máquina.
Existe uma tarefa de modelo no meu manual que cria o ficheiro de destino do modelo Jinja2:
tasks:
- template: src=somefile.j2 dest=/etc/somefile.conf
Eu não quero substituir somefile.conf
se ele já existir. É possível com Ansible? Se sim, como?
Você pode usar apenas o parâmetro force do módulo de modelo:
tasks:
- template: src=somefile.j2 dest=/etc/somefile.conf force=no
Ou nomeando a tarefa; -)
tasks:
- name: Create file from template if it doesn't exist already.
template:
src: somefile.j2
dest:/etc/somefile.conf
force: no
Do módulo de modelo Ansible docs:
force: the default is yes, which will replace the remote file when contents are different than the source. If no, the file will only be transferred if the destination does not exist.
Outras respostas usam stat
porque o parâmetro force foi adicionado depois que foram escritas.
Você pode primeiro verificar se o arquivo de destino existe ou não e, em seguida, tomar uma decisão com base na saída do resultado.
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
De acordo comigo, a solução mais fácil é usar o atributo "force = no" no módulo de modelo