Saya menggunakan buku pedoman yang dimungkinkan secara programatik. Secara umum, karena playbook hanya YAML, ini mudah. Namun, saat menggunakan key=value
formulir "sederhana" , playbook tidak murni YAML - mereka memasukkan konten yang disematkan shlex
formulir yang dapat dipecah.
Untuk menghindari ambiguitas dalam formulir ini (apakah key=value
memasangkan argumen dengan perintah atau argumen untuk kemungkinan?), Dan hanya memiliki satu format untuk diuraikan dan dibuat, saya tanpa syarat menggunakan mekanisme argumen kompleks yang ditunjukkan dengan contoh dalam ansible repositori -contoh .
Ini menggunakan sintaks dari jenis berikut:
action: module-name
args:
key1: value1
key2: value2
... yang bagus dan bagus. Namun, ketika mencoba menggunakan formulir ini untuk modul shell
atau command
( yang dokumentasinya menggambarkan perintah aktual yang diteruskan dalam argumen bernama free_form
), ini tidak berfungsi dengan baik:
action: shell
args:
free_form: echo hello_world >/tmp/something
creates: /tmp/something
Ketika dipanggil, ini dijalankan sebagai berikut:
/bin/sh -c " free_form='echo hello_world >/tmp/something' "
... yang bukan apa yang ingin saya capai.
Apa cara yang benar untuk menggunakan Modul yang memungkinkan mengambil perintah "bentuk bebas" menggunakan sintaks YAML murni?
- shell: ...
? Jika struktur ini adalah sesuatu yang hanya dapat dihasilkan secara andal dengan tangan, itu agak mengalahkan inti pertanyaan....
peran secara umum. Jika Anda melihatlibrary/commands/command
, Anda akan menemukan regex yang cocok cukup murah haticreates=
,removes=
,chdir=
, dan sebagainya. Jika Anda perlu memastikan perintah apa pun dapat dilewati, Anda harus menulis modul Anda sendiri.Ini dibahas dalam dokumentasi Ansible sekarang.
Perhatikan bahwa tidak ada parameter bernama 'free_form'.
sumber
args
mencegahk=v
pasangan tidak diuraikancommand
, haruskah ada? (Jika demikian, ini mengatasi ambiguitas dengan bersih; jika tidak, tampaknya masih ada).