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 stdout
la 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
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 }}'