es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ansible: ¿Cómo depurar múltiples tareas, comandos o iteraciones?

En un archivo de juego de YAML, necesito ejecutar varios comandos en cada elemento de un arreglo. Estoy utilizando with_items para iterar, pero obtengo errores de sintaxis cuando trato de combinar debug en las tareas.

Todo funciona cuando elimino el módulo debug, pero entonces no puedo ver lo que está sucediendo. A continuación se proporciona un ejemplo.

Produce Error de Sintaxis:

- name: Iterar a través del arreglo y mostrar resultados
  shell: "ejecutar comando 1 en {{ item }}"
  register: command1
  debug:
    msg: "Comando 1 || {{ command1.stdout_lines }}"
  shell: "ejecutar comando 2 en {{ item }}"
  register: command2
  debug:
    msg: "Comando 2 || {{ command2.stdout_lines }}"
  with_items: "{{ array_name }}"

Todo parece funcionar bien cuando elimino los comandos de depuración, pero necesito ver qué produce cada comando porque tiene información importante.

¿Existe alguna manera de imprimir/mostrar los resultados mientras se mantienen dentro de las iteraciones with_items?

Edit:

También intenté algunas cosas más, pero también me dieron un error de sintaxis.

También Intenté 1:

- name: Iterar a través del arreglo y mostrar resultados
- shell: "ejecutar comando 1 en {{ item }}"
  register: command1
- debug:
    msg: "Comando 1 || {{ command1.stdout_lines }}"
- shell: "ejecutar comando 2 en {{ item }}"
  register: command2
- debug:
    msg: "Comando 2 || {{ command2.stdout_lines }}"
  with_items: "{{ array_name }}"

También Intenté 2:

- name: Iterar a través del arreglo y mostrar resultados
  - shell: "ejecutar comando 1 en {{ item }}"
    register: command1
  - debug:
      msg: "Comando 1 || {{ command1.stdout_lines }}"
  - shell: "ejecutar comando 2 en {{ item }}"
    register: command2
  - debug:
      msg: "Comando 2 || {{ command2.stdout_lines }}"
  with_items: "{{ array_name }}"
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para solucionar el error de sintaxis, debes utilizar la palabra clave tasks y colocar cada tarea (incluida la tarea debug correspondiente) en un diccionario separado. Luego puedes utilizar with_items para iterar a través del array y ejecutar cada tarea con el elemento apropiado.

    Aquí tienes un ejemplo de un playbook YAML que debería funcionar:

    - name: Iterar a través del array y mostrar los resultados
      tasks:
        - name: Ejecutar el comando 1 en el elemento
          shell: "ejecutar comando 1 en {{ item }}"
          register: command1
        - debug:
            msg: "Comando 1 || {{ command1.stdout_lines }}"
        - name: Ejecutar el comando 2 en el elemento
          shell: "ejecutar comando 2 en {{ item }}"
          register: command2
        - debug:
            msg: "Comando 2 || {{ command2.stdout_lines }}"
      with_items: "{{ array_name }}"
    

    En este ejemplo, hemos utilizado la palabra clave tasks para definir una lista de tareas que deben ejecutarse para cada elemento del array. Cada tarea es un diccionario que incluye un atributo name (para mayor legibilidad), la tarea en sí (que puede ser un comando shell o cualquier otra tarea) y una tarea debug para imprimir el resultado del comando anterior.

    Ten en cuenta que la palabra clave with_items se encuentra al mismo nivel que la palabra clave tasks, lo que indica que queremos ejecutar toda la lista de tareas para cada elemento del array.

Comments are closed.