Por que command quebra a idempotência
Conheça a armadilha do shell bruto e como evitá-la.
Por que command quebra a idempotência é uma aula grátis de Ansible Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Ansible Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Ansible Academy inclui 4 aulas no total.
command É Sempre Executado
O módulo command simplesmente executa na máquina o que você fornecer. Ele não sabe como é um estado “concluído”, portanto é executado todas as vezes.
ansible.builtin.command: useradd deploySempre changed
Como command não consegue inspecionar o estado, o Ansible informa changed em todas as execuções, mesmo quando o comando não fez nada de novo.
changed: [web1]Executar Novamente Pode Causar Problemas
Pior ainda, alguns comandos falham ou duplicam o trabalho quando executados novamente, como useradd, que gera um erro porque o usuário já existe.
Prefira um Módulo Baseado em Estado
Para usuários, prefira o módulo user. Ele verifica se a conta existe e só a cria quando está ausente, mantendo a idempotência.
ansible.builtin.user:
name: deploy
state: presentGeralmente Existe um Módulo
A maioria das tarefas comuns de shell tem um módulo dedicado: file, copy, lineinfile e git. Use-os para que o Ansible possa comparar os estados e ignorar a tarefa quando tudo estiver correto.
Proteja command com creates
Se você precisar usar command, adicione creates. O Ansible ignora a tarefa quando esse caminho já existe, restaurando a idempotência.
ansible.builtin.command: ./build.sh
args:
creates: /opt/app/builtOu Proteja com removes
O equivalente inverso de creates é removes: o comando só é executado se o caminho indicado ainda existir, o que é útil em etapas de limpeza.
ansible.builtin.command: rm /tmp/lock
args:
removes: /tmp/lockControle command com when
Você também pode envolver um comando em uma condição when orientada por uma verificação registrada, para que ele seja executado somente quando realmente necessário.
Informe ao Ansible que Nada Foi Feito
Defina changed_when: false em um comando somente de leitura para que o Ansible deixe de informá-lo como changed em todas as execuções.
ansible.builtin.command: cat /etc/hostname
changed_when: falseshell Tem o Mesmo Problema
O módulo shell apresenta a mesma falha. Ele é executado por meio de um shell e, portanto, também não é idempotente, a menos que você o proteja da mesma forma.
Trate Comandos Brutos como Último Recurso
O command bruto é uma saída de emergência, não a opção padrão. Cada uso é um ponto em que a idempotência pode falhar silenciosamente; portanto, recorra a ele somente quando nenhum módulo for adequado.
Verificação Rápida
Você usou command para executar um script de compilação, e ele aparece como changed em todas as execuções.
Recapitulação
Os módulos command e shell são sempre executados e sempre informam changed. Prefira módulos apropriados ou proteja-os com creates, removes ou changed_when. 🛡️
Perguntas Frequentes
A aula “Por que command quebra a idempotência” é grátis?
Sim — o texto completo de “Por que command quebra a idempotência” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Ansible Academy, atualize para CoddyKit PRO. O curso de Ansible Academy inclui 4 aulas no total.
O que vou aprender em “Por que command quebra a idempotência”?
Conheça a armadilha do shell bruto e como evitá-la. Você pratica Ansible Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Ansible Academy?
Nenhuma experiência prévia é necessária. Ansible Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Por que command quebra a idempotência”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Ansible Academy?
Sim. Cada aula de Ansible Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Estado desejado, não scripts passo a passo
- Lendo changed versus ok na saída
- Por que command quebra a idempotência
- Modo de verificação: simulação com --check