Solución:
matriz de soporte del módulo de depuración, por lo que puede hacer así:
debug:
msg:
- "First line"
- "Second line"
La salida:
ok: [node1] => {
"msg": [
"First line",
"Second line"
]
}
O puede usar el método de esta respuesta:
En YAML, ¿cómo rompo una cadena en varias líneas?
La forma más conveniente que encontré para imprimir texto de varias líneas con depuración es:
- name: Print several lines of text
vars:
msg: |
This is the first line.
This is the second line with a variable like {{ inventory_hostname }}.
And here could be more...
debug:
msg: "{{ msg.split('n') }}"
Divide el mensaje en una matriz y la depuración imprime cada línea como una cadena. La salida es:
ok: [example.com] => {
"msg": [
"This is the first line.",
"This is the second line with a variable like example.com",
"And here could be more...",
""
]
}
Gracias a jhutar.
Módulo de pausa:
La forma más conveniente y sencilla que encontré para mostrar un mensaje con formato (por ejemplo, nuevas líneas, pestañas …) es usar el pause
módulo en lugar de debug
módulo:
- pause:
seconds: 1
prompt: |
======================
line_1
line_2
======================
También puede incluir una variable que contenga formato (nuevas líneas, pestañas …) dentro del indicador y se mostrará como se esperaba:
- name: test
hosts: all
vars:
line3: "n line_3"
tasks:
- pause:
seconds: 1
prompt: |
/////////////////
line_1
line_2 {{ line3 }}
/////////////////
Propina:
cuando desee mostrar una salida de un comando, y en lugar de ejecutar una tarea adicional para ejecutar el comando y registrar la salida, puede usar directamente la búsqueda de tubería dentro del indicador y hacer el trabajo de una sola vez:
- pause:
seconds: 1
prompt: |
=========================
line_1
{{ lookup('pipe', 'echo "line_2 with t tab n line_3 "') }}
line_4
=========================
Notas adicionales sobre el módulo de pausa:
-
Si tiene varios hosts, tenga en cuenta que
pause
La tarea se ejecutará solo una vez en el primer host de la lista de hosts.Esto significa que si la variable que desea mostrar existe solo en parte de los hosts y el primer host no contiene esa variable, obtendrá un error.
Para evitar tal problema, use
{{ hostvars['my_host']['my_var'] }}
en lugar de{{ my_var }}
-
Combinatorio
pause
conwhen
¡condicional podría omitir la tarea! ¿Por qué? Debido a que la tarea solo se ejecutará una vez contra el primer host que podría no cumplir con elwhen
condiciones.Para evitar esto, ¡no use condiciones que restrinjan el número de hosts! Como tampoco lo necesita, porque sabe que la tarea se ejecutará solo una vez de todos modos. También use
hostvars
indicado anteriormente para asegurarse de obtener la variable necesaria, sea cual sea el host elegido.
Ejemplo:
Incorrecto:
- name: test
hosts: host1,host2
vars:
display_my_var: true
tasks:
- when: inventory_hostname == 'host2'
set_fact:
my_var: "hi there"
- when:
- display_my_var|bool
- inventory_hostname == 'host2'
pause:
seconds: 1
prompt: |
{{ my_var }}
Este ejemplo omitirá la tarea de pausa, porque elegirá solo el primer host host1
y luego comienza a evaluar las condiciones, cuando encuentra que host1
no cumple con la segunda condición, se saltará la tarea.
Correcto:
- name: test
hosts: host1,host2
vars:
display_my_var: true
tasks:
- when: inventory_hostname == 'host2'
set_fact:
my_var: "hi there"
- when: display_my_var|bool
pause:
seconds: 1
prompt: |
{{ hostvars['host2']['my_var'] }}
Otro ejemplo para mostrar mensajes donde el contenido depende del host:
- set_fact:
my_var: "hi from {{ inventory_hostname }}"
- pause:
seconds: 1
prompt: |
{% for host in ansible_play_hosts %}
{{ hostvars[host]['my_var'] }}
{% endfor %}