agora estou usando um script de shell em ansible que seria muito mais legível se estivesse em várias linhas
- name: iterate user groups
shell: groupmod -o -g {{ item['guid'] }} {{ item['username'] }} ....more stuff to do
with_items: "{{ users }}"
Só não tenho certeza de como permitir script de várias linhas no módulo de shell Ansible
Respostas:
A Ansible usa a sintaxe YAML em seus manuais. YAML tem vários operadores de bloco:
O
>
é um operador de bloco dobrável. Ou seja, ele une várias linhas por espaços. A seguinte sintaxe:Atribuiria o valor
This text has multiple lines\n
akey
.O
|
personagem é um operador de bloco literal. Isso é provavelmente o que você deseja para scripts de shell de várias linhas. A seguinte sintaxe:Atribuiria o valor
This text\nhas multiple\nlines\n
akey
.Você pode usar isso para scripts de shell de várias linhas como este:
Há uma ressalva: o Ansible faz alguma manipulação desajeitada de argumentos para o
shell
comando, portanto, embora o acima funcione normalmente, o seguinte não:Na verdade, o Ansible renderizará esse texto com espaços à esquerda, o que significa que o shell nunca encontrará a string
EOF
no início de uma linha. Você pode evitar as heurísticas inúteis do Ansible usando ocmd
parâmetro como este:fonte
https://support.ansible.com/hc/en-us/articles/201957837-How-do-I-split-an-action-into-a-multi-line-format-
menciona continuações de linha YAML.
Como exemplo (experimentado com ansible 2.0.0.2):
O comando do shell é reduzido em uma única linha, como em
ls --color /home
fonte
>
tem um significado muito específico. Tentei fazer isso e não funcionou como esperado.Adicionar um espaço antes do delimitador EOF permite evitar o cmd:
fonte