Saltar al contenido

Ansible – Imprimir mensaje – debug: msg = “line1 n {{var2}} n line3 with var3 = {{var3}}”

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:

  1. 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 }}

  2. Combinatorio pause con when ¡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 el when 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 %}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *