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
akey
. -
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
akey
.
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.