Quando o Ansible inicia um script do PowerShell, como fazer com que o Ansible retorne “ok” (nada mudou)?

Quando o Ansible inicia um script do PowerShell, como fazer com que o Ansible retorne “ok” (nada mudou)?

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 $Ansiblevariá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.Difffoi 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.Changedpode 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.Failedpode 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.Verbosityrevela 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 0quando nada muda, 4quando 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.

informação relacionada