Tengo un libro de jugadas que ejecuta un script en un cuadro de Windows que devuelve un valor que tengo que reutilizar más adelante en mi libro de jugadas después de cambiar al localhost. ¿Cómo puedo acceder a este valor después de volver a localhost? Aquí hay un ejemplo:

hosts: localhost
connection: local
gather_facts: no
tasks:
.
.
.
hosts: windows
gather_facts: no
tasks:
- name: Call PowerShell script
win_command: "c:\\windows\\system32\\WindowsPowerShell\\v1.0\\powershell.exe c:\\psl_scripts\\getData.ps1"
register: value_to_reuse

hosts: localhost
gather_facts: no
connection: local
tasks:
- name: debug store_name from windows host
  debug:
    var: "{{ hostvars[windows][value_to_reuse][stdout_lines] }}"

¿Cuál es la sintaxis correcta para acceder a una variable desde otro host? Recibo un mensaje de error: "msg": "La tarea incluye una opción con una variable indefinida. El error fue: 'windows' no está definido

1
larrybg 22 feb. 2018 a las 23:18

2 respuestas

La mejor respuesta

Aquí está el código que funciona with_items:

  - name: print value_to_reuse
    debug:
      var: hostvars[item]['value_to_reuse']['stdout_lines']
    with_items: "{{ groups['windows'] }}"

El mismo código funciona sin iteraciones:

 - name: print value_to_reuse
    debug:
      var: hostvars[groups['windows'][0]]['value_to_reuse']['stdout_lines']
2
larrybg 23 feb. 2018 a las 16:00

La sintaxis es:

- debug:
    var: hostvars['windows']['value_to_reuse']['stdout_lines']

Tres errores:

  • deberías citar valores de cadena
  • El parámetro var toma el nombre de la variable, no una plantilla (que debe ser un valor de parámetro msg)
  • windows en el ejemplo dado debe ser el nombre del host ya que todos los hechos están vinculados a los hosts, no al grupo de hosts
1
techraf 26 feb. 2018 a las 18:30