Saltar al contenido

Cómo hacer un script de shell multilínea en Ansible

Este grupo especializado pasados ciertos días de investigación y de juntar de información, han obtenido la solución, esperamos que resulte útil para ti en tu trabajo.

Solución:

Ansible usa la sintaxis YAML en sus playbooks. YAML tiene varios operadores de bloque:

  • los > es un operador de bloque plegable. Es decir, une varias líneas entre sí por espacios. La siguiente sintaxis:

    key: >
      This text
      has multiple
      lines
    

    le asignaría el valor This text has multiple linesn a key.

  • los | El carácter es un operador de bloque literal. Esto es probablemente lo que desea para los scripts de shell de varias líneas. La siguiente sintaxis:

    key: |
      This text
      has multiple
      lines
    

    le asignaría el valor This textnhas multiplenlinesn a key.

Puede usar esto para scripts de shell multilínea como este:

- name: iterate user groups
  shell: |
    groupmod -o -g  item['guid']   item['username']  
    do_some_stuff_here
    and_some_other_stuff
  with_items: " users "

Hay una advertencia: Ansible manipula los argumentos de forma irregular para shell comando, por lo que si bien lo anterior generalmente funcionará como se esperaba, lo siguiente no lo hará:

- shell: |
    cat <

Ansible en realidad representará ese texto con espacios iniciales, lo que significa que el shell nunca encontrará el string EOF al principio de una línea. Puede evitar las heurísticas inútiles de Ansible utilizando el cmd parámetro como este:

- shell:
    cmd: |
      cat <

https://support.ansible.com/hc/en-us/articles/201957837-How-do-I-split-an-action-into-a-multi-line-format-

menciona continuaciones de línea YAML.

Como ejemplo (probado con ansible 2.0.0.2):

---
- hosts: all
  tasks:
    - name: multiline shell command
      shell: >
        ls --color
        /home
      register: stdout

    - name: debug output
      debug: msg= stdout 

El comando de shell se contrae en una sola línea, como en ls --color /home

Agregar un espacio antes del delimitador EOF permite evitar cmd:

- shell: |
    cat <<' EOF'
    This is a test.
    EOF

Reseñas y calificaciones del artículo

Si te ha sido útil nuestro post, te agradeceríamos que lo compartas con más juniors y nos ayudes a dar difusión a esta información.

¡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 *

Respuestas a preguntas comunes sobre programacion y tecnología