Eu tenho que verificar se existe um arquivo /etc/
. Se o arquivo existir, tenho que pular a tarefa. Aqui está o código que estou usando:
- name: checking the file exists
command: touch file.txt
when: $(! -s /etc/file.txt)
Você pode primeiro verificar se o arquivo de destino existe ou não e depois tomar uma decisão com base na saída do resultado:
tasks:
- name: Check that the somefile.conf exists
stat:
path: /etc/file.txt
register: stat_result
- name: Create the file, if it doesnt exist already
file:
path: /etc/file.txt
state: touch
when: not stat_result.stat.exists
stat_result
terástat_result.state.exists
False (e é quando a segunda tarefa for executada). Você pode ver os detalhes do módulo de estatísticas aqui: docs.ansible.com/ansible/stat_module.htmlwhen: stat_result.stat.exists == False
parawhen: not stat_result.stat.exists
se quiser ler mais natural.O módulo stat fará isso, assim como obterá muitas outras informações para os arquivos. A partir da documentação de exemplo:
fonte
Isso pode ser alcançado com o módulo stat para ignorar a tarefa quando o arquivo existir.
fonte
Em geral, você faria isso com o módulo stat . Mas o módulo de comando tem a
creates
opção que torna isso muito simples:Eu acho que o seu comando de toque é apenas um exemplo? A melhor prática seria não verificar nada e deixar o ansible fazer seu trabalho - com o módulo correto. Portanto, se você quiser garantir que o arquivo exista, use o módulo de arquivo:
fonte
state: file
não cria arquivos. Veja docs.ansible.com/ansible/file_module.htmlfonte
when: mypath is not exists
significa neste caso? Não émypath
uma string simples?Acho que pode ser irritante e propenso a erros fazer muitas dessas
.stat.exists
verificações de tipo. Por exemplo, eles exigem cuidados extras para que o modo de verificação (--check
) funcione.Muitas respostas aqui sugerem
No entanto, às vezes, esse é um cheiro de código; portanto, sempre procure maneiras melhores de usar o Ansible, especificamente há muitas vantagens em usar o módulo correto. por exemplo
ou
Mas quando não for possível, use um módulo, investigue também se você pode se registrar e verificar o resultado de uma tarefa anterior. por exemplo
Observe o
when:
mas também ocreates:
modo--check
não erroMenciono isso porque muitas vezes essas práticas abaixo do ideal vêm em pares, ou seja, nenhum pacote apt / yum, então temos que 1) baixar e 2) descompactar
Espero que isto ajude
fonte
Descobriu que a chamada
stat
é lenta e coleta muitas informações que não são necessárias para a verificação da existência de arquivos.Depois de passar algum tempo procurando a solução, descobri a seguinte solução, que funciona muito mais rápido:
fonte
Você pode usar o módulo stat Ansible para registrar o arquivo e quando o módulo aplicar a condição.
fonte
**
Como verificar se existe um arquivo no Ansible usando a condição when
**
Abaixo está a reprodução ansible que usei para remover o arquivo quando ele existe no final do sistema operacional.
Eu usei a condição de reprodução como abaixo
você pode dar verdadeiro / falso com base em sua exigência
fonte
Se você deseja apenas garantir que um determinado arquivo exista (por exemplo, porque ele deve ser criado de uma maneira diferente da via ansible) e falhar, se não existir, você pode fazer o seguinte:
fonte
Uma observação sobre caminhos relativos para complementar as outras respostas.
Ao fazer a infraestrutura como código, geralmente estou usando funções e tarefas que aceitam caminhos relativos, especialmente para arquivos definidos nessas funções.
Variáveis especiais como playbook_dir e role_path são muito úteis para criar os caminhos absolutos necessários para testar a existência.
fonte