Cuando Ansible inicia un script de PowerShell, ¿cómo hacer que Ansible devuelva "ok" (nada ha cambiado)?

Cuando Ansible inicia un script de PowerShell, ¿cómo hacer que Ansible devuelva "ok" (nada ha cambiado)?

Por lo general, cuando Ansible inicia un script de PowerShell con win_command/ win_shell/ win_psexec, siempre que no se produzcan errores, devolverá "cambiado", porque, por supuesto, no sabe qué hizo todo el script.

Dado que podemos devolver cualquier código de salida en un script de PowerShell, ¿hay alguna forma, mediante códigos de salida o de otro modo, de notificar a Ansible que no se requirió ningún cambio para que Ansible devuelva un estado "correcto"? ¿O siempre volverá "cambiado" sin importar qué (suponiendo que no haya falla)?

Respuesta1

Creo que lo encontré. Elwin_powershellEl módulo accede a la $Ansiblevariable PowerShell, mediante la cual puedo modificar qué información se devuelve al controlador.

Desde elwin_powershelldocumentación:

  • $Ansible.Resultes un valor que se devuelve al controlador tal cual.
  • $Ansible.Diffse agregó en la versión 1.12.0 de ansible.windows y es un diccionario que se establece en el resultado de diferenciación que Ansible puede interpretar.
  • $Ansible.Changedse puede establecer en verdadero o falso para reflejar si el módulo realizó un cambio o no. De forma predeterminada, esto se establece en verdadero.
  • $Ansible.Failedse puede establecer en verdadero si el script quiere devolver el error al controlador.
  • $Ansible.Tmpdires la ruta a un directorio temporal para usar como ubicación temporal que se limpia una vez finalizado el módulo.
  • $Ansible.Verbosityrevela el nivel de verbosidad de Ansible para esta obra. Permite que el script establezca VerbosePreference/DebugPreference según la detalle. Agregado en 1.9.0.

Respuesta2

En pocas palabras, como ejemplo de pseudocódigo, basado en su escenario de variación de rc donde podríamos imaginar que sale 0cuando nada cambió, 4cuando algo cambió y con cualquier otro código cuando algo salió mal...

- 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 más información, verManejo de errores en los libros de jugadas

Tenga en cuenta que para comandos que son estrictamente informativos y nunca cambian nada, changed_when: falsees perfectamente aceptable.

información relacionada