%3F.png)
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 $Ansible
variable PowerShell, mediante la cual puedo modificar qué información se devuelve al controlador.
Desde elwin_powershelldocumentación:
$Ansible.Result
es un valor que se devuelve al controlador tal cual.$Ansible.Diff
se 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.Changed
se 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.Failed
se puede establecer en verdadero si el script quiere devolver el error al controlador.$Ansible.Tmpdir
es la ruta a un directorio temporal para usar como ubicación temporal que se limpia una vez finalizado el módulo.$Ansible.Verbosity
revela 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 0
cuando nada cambió, 4
cuando 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: false
es perfectamente aceptable.