Cómo aislar la salida ansible según la clave

Cómo aislar la salida ansible según la clave

Estoy tratando de aislar la salida del libro de jugadas ansible sin embargo dice"output.stdout": "VARIABLE IS NOT DEFINED!"

El código de mi libro de jugadas es: --- - hosts: localhost tasks: - name: Register variable shell: "echo {{ item }}" loop: - "one" - "two" register: output - debug: var: output.stdout

Curiosamente, la salida de depuración funciona bien si no la aíslo usando stdoutla clave.

TASK [Register variable] ***********************************************************************************************************************************************
changed: [localhost] => (item=one)
changed: [localhost] => (item=two)

TASK [debug] ***********************************************************************************************************************************************************
ok: [localhost] => {
    "output": {
        "changed": true,
        "msg": "All items completed",
        "results": [
            {
                "ansible_loop_var": "item",
                "changed": true,
                "cmd": "echo one",
                "delta": "0:00:00.002986",
                "end": "2020-01-24 00:20:57.226744",
                "failed": false,
                "invocation": {
                    "module_args": {
                        "_raw_params": "echo one",
                        "_uses_shell": true,
                        "argv": null,
                        "chdir": null,
                        "creates": null,

Qué estoy haciendo mal ?

Respuesta1

https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#registering-variables-with-a-loop

Cuando usas el registro con un bucle, la estructura de datos colocada en la variable contendrá un atributo de resultados que es una lista de todas las respuestas del módulo.

De este modo:

output.results[0].stdout
output.results[1].stdout

Respuesta2

Una forma más sencilla sería realizar un bucle en un archivo .yml separado (mediante inclusión), que realizará una operación suave + salida. Por ejemplo:

principal.yml:

- name: RUN start.yml
  include: start.yml
  vars:
    app: "{{ item.name }}"
  static: false
  with_items: "{{ list_items }}"

start.yml en el mismo rol:

- name: "Run {{ app }}"
  command: './runapp.sh {{ app }}'
  register: start_app_register
  no_log: True

- debug:
    msg: '{{ start_app_register.stdout }}'

información relacionada