sekarang saya menggunakan skrip shell di ansible yang akan jauh lebih mudah dibaca jika ada di beberapa baris
- name: iterate user groups
shell: groupmod -o -g {{ item['guid'] }} {{ item['username'] }} ....more stuff to do
with_items: "{{ users }}"
Hanya tidak yakin bagaimana mengizinkan skrip multiline dalam modul shell Ansible
Jawaban:
Ansible menggunakan sintaks YAML dalam buku pedomannya. YAML memiliki sejumlah operator blok:
Ini
>
adalah operator blok lipat. Artinya, ini menggabungkan beberapa baris bersama-sama oleh spasi. Sintaks berikut:Akan menetapkan nilai
This text has multiple lines\n
untukkey
.The
|
karakter adalah operator blok literal. Ini mungkin yang Anda inginkan untuk skrip shell multi-baris. Sintaks berikut:Akan menetapkan nilai
This text\nhas multiple\nlines\n
untukkey
.Anda dapat menggunakan ini untuk skrip shell multiline seperti ini:
Ada satu peringatan: Ansible melakukan manipulasi argumen yang tersendat-sendat pada
shell
perintah, jadi meskipun cara di atas umumnya akan berfungsi seperti yang diharapkan, berikut ini tidak akan:Ansible sebenarnya akan membuat teks itu dengan spasi di depan, yang berarti shell tidak akan pernah menemukan string
EOF
di awal baris. Anda dapat menghindari heuristik Ansible yang tidak membantu dengan menggunakancmd
parameter seperti ini:sumber
https://support.ansible.com/hc/en-us/articles/201957837-How-do-I-split-an-action-into-a-multi-line-format-
menyebutkan kelanjutan baris YAML.
Sebagai contoh (dicoba dengan 2.0.0.2):
Perintah shell diciutkan menjadi satu baris, seperti pada
ls --color /home
sumber
>
memiliki arti yang sangat spesifik. Saya mencoba ini dan tidak berhasil seperti yang diharapkan.Menambahkan spasi sebelum pembatas EOF memungkinkan untuk menghindari cmd:
sumber