Tenho abaixo o pseudocódigo para implementar em ansible.
changed = true
if (changed)
{
print("The first block executes")
}
else
{
print("The second block executes.")
changed = false
}
Agora preciso converter a lógica acima em ansible playbook, para que, quando eu executar o playbook pela primeira vez, ele imprima o primeiro bloco e todas as chamadas subsequentes imprimam o segundo bloco. Tentei abaixo mas não funcionou.
hosts: localhost
become: true
vars:
changed: "true"
tasks:
- name: First block
debug:
msg: "The first block is printed"
when: changed == "true"
- name: Second block
debug:
msg: "The second block is printed"
- set_fact:
changed: "false"
Alguém pode me orientar se este caso de uso pode ser implementado em ansible? A principal questão é se um manual pode ser projetado de forma que mude seu comportamento após a primeira execução. Se eu executar o manual pela primeira vez, ele deverá imprimir o primeiro bloco, mas em todas as execuções subsequentes desse manual, ele deverá executar apenas a segunda mensagem de bloco.
Remova as aspas ao redor da variável.
Ansible é baseado em python e a linguagem é por si só 'verdadeira' .
Isso deve funcionar conforme o esperado.
Observe também que você tenta definir
changed
como falso, quando já é falso. Então você não precisa mudar isso.--editar--
Então, você me disse:
Eu adiciono um dispositivo e verifico
lsblk
se esse dispositivo foi adicionado.Se for adicionado, o Ansible falhará na segunda execução.
Novamente, Ansible é o estado desejado. Você não deve usar
lsblk
comandos, mas sim módulos oficiais .Se você realmente deseja executar um comando shell e, em seguida, executar o segundo comando com base na saída do primeiro comando: