Resolvido: copiar modelo apenas quando o arquivo de destino não existir

47

Estou usando Ansible 1.6.6para provisionar minha máquina.

Existe uma tarefa de modelo no meu manual que cria um arquivo de destino a partir do modelo Jinja2:

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

Não quero substituir somefile.confse já existir. É possível com o Ansible? Se sim, como?

Slava Fomin II
fonte

Respostas:

61

Você pode verificar a existência do arquivo usando stat e, em seguida, usar o modelo apenas 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
Teftin
fonte
42

Você pode apenas usar o parâmetro de força do módulo de modelo:

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

Ou nomear a tarefa ;-)

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

Nos documentos do módulo de modelo Ansible :

force: o padrão é yes, que substituirá o arquivo remoto quando o conteúdo for diferente da fonte. Se não, o arquivo será transferido apenas se o destino não existir.

Outras respostas são usadas statporque o parâmetro force foi adicionado após a gravação.

sanzante
fonte
2
a minha resposta usa stat, porque no momento da pergunta / resposta não havia avaialable argumento força para o modelo
Teftin
10

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   
arbabnazar
fonte
11
Eu prefiro esta resposta, porque nomes é tarefas :)
Asfand Qazi
-3

De acordo comigo, a solução mais fácil é usar o atributo "force = no" do módulo de modelo

Thibault Richard
fonte