%3F.png)
Normalmente, quando o Ansible inicia um script do PowerShell com win_command
/ win_shell
/ win_psexec
, desde que não ocorra erros, ele retornará "alterado", porque é claro que ele não sabe o que todo o script fez.
Como podemos retornar qualquer código de saída em um script do PowerShell, existe uma maneira, por meio de códigos de saída ou de outra forma, de notificar o Ansible de que não foi necessária nenhuma alteração para que o Ansible retorne um status "ok"? Ou sempre retornará "alterado", não importa o que aconteça (supondo que não haja falha)?
Responder1
Acho que encontrei. Owin_powershellO módulo acessa a $Ansible
variável do PowerShell, por meio da qual posso modificar quais informações são retornadas ao controlador.
Dewin_powershelldocumentação:
$Ansible.Result
é um valor que é retornado ao controlador como está.$Ansible.Diff
foi adicionado na versão 1.12.0 do ansible.windows e é um dicionário definido para o resultado diff que pode ser interpretado pelo Ansible.$Ansible.Changed
pode ser definido como verdadeiro ou falso para refletir se o módulo fez uma alteração ou não. Por padrão, isso é definido como verdadeiro.$Ansible.Failed
pode ser definido como verdadeiro se o script quiser retornar a falha ao controlador.$Ansible.Tmpdir
é o caminho para um diretório temporário a ser usado como local inicial que é limpo após a conclusão do módulo.$Ansible.Verbosity
revela o nível de verbosidade do Ansible para esta peça. Permite que o script defina VerbosePreference/DebugPreference com base no detalhamento. Adicionado em 1.9.0.
Responder2
Resumindo, como um exemplo de pseudocódigo, baseado em seu cenário de variação rc onde poderíamos imaginar que você sai 0
quando nada muda, 4
quando algo muda e com qualquer outro código quando algo dá errado...
- name: some shell task
ansible.windows.win_command: my_command
register: my_command
failed_when: my_command.rc | int not in [0,4]
changed_when: my_command.rc | int == 4
Para mais informações, vejaTratamento de erros em playbooks
Observe que para comandos estritamente informativos e que nunca alteram nada, changed_when: false
é perfeitamente aceitável.