Bergantung pada nilai (Benar / Salah) dari variabel yang didefinisikan ke dalam group_vars saya mencoba mendefinisikan beberapa variabel dalam file vars. Nilai mereka tergantung pada nilai var grup.
File var saya saat ini terlihat seperti ini:
{% if my_group_var %}
test:
var1: value
var2: value
...
varn: value
{% else %}
test:
var1: other_value
var2: other_value
...
varn: other_value
{% endif %}
Untuk setiap peran saya, saya menggunakan variabel yang didefinisikan dalam file ini.
Playbook tes saya terlihat seperti di bawah ini:
- name: blabla
hosts: blabla
vars_files:
- <path>/test_vars.yml
roles: blabla
Kesalahan yang saya terima setelah menjalankan playbook adalah:
{% if my_group_var %}
^ here
exception type: <class 'yaml.scanner.ScannerError'>
exception: while scanning for the next token
found character that cannot start any token
in "<unicode string>"
Apakah saya melakukan sesuatu yang bodoh di sini atau ini bahkan tidak didukung? Saya sudah mencoba mencari cara lain untuk mendefinisikan vars ini (saya punya banyak dari mereka) tetapi saya tidak berhasil mendapatkan sesuatu yang fungsional di sini. Ada saran?
ansible
automation
jinja
pandoJohn
sumber
sumber
template
panggilan modul.test
tergantung grup, itu harus ditempatkan ke dalam group_vars.Jawaban:
Saya rasa Anda tidak bisa, saya biasanya membuat file terpisah untuk menyimpan koleksi variabel kondisional dan menggunakan
when
klausa untuk memasukkannya pada kondisi tertentu:sumber
Ansible memungkinkan salah satu dari formulir berikut untuk mendefinisikan variabel secara kondisional:
Menggabungkan sintaks di atas dengan lookup vars kita dapat memuat vars kompleks (daftar dalam kasus ini):
Ada cara lain untuk melakukan pemuatan pohon bersyarat dengan pencarian vars. Cara ini berguna ketika Anda perlu menerapkan logika kasus (yaitu variabel kondisi memiliki lebih dari dua nilai yang mungkin):
sumber
Meskipun itu akan menyenangkan, saya khawatir jalan Anda tidak mungkin (atau saya tidak sadar cara yang benar).
Saya sarankan untuk terlebih dahulu menyiapkan file vars dari template jinja dan kemudian memasukkannya dengan include_vars. Lihat buku pedoman contoh:
Isi contoh template jinja /tmp/vars.yaml.j2 adalah:
sumber
- debug: var=test
saya bisa melihat, bahwa ada yang didefinisikan baiktest.var1
dantest.var2
dengan nilai yang diharapkan. Jadi, Anda harus dapat menggunakan variabel-variabel ini dalam tugas-tugas lain dari buku pedoman.AFAIK, {} hal yang Anda coba ini adalah untuk template Jinja2 dan bukan untuk file yml. Dari dokumentasi :
Anda dapat menyiapkan file .yml terpisah dengan permainan yang mengatur variabel yang perlu Anda gunakan saat klausa, dan kemudian mengimpor (atau termasuk) mereka di buku pedoman utama Anda. Dengan begitu Anda dapat membuat semua vars ditentukan secara kondisional dalam satu file.
ATAU: Gunakan peran. Saya pikir peran adalah pendekatan yang paling memadai untuk menyelesaikan masalah Anda.
sumber
Apa yang saya lakukan pada akhirnya adalah membuat 2 file var terpisah - sebut saja
type_a.yml
dantype_b.yml
- dan saya mendefinisikan variabel grup yang menunjukkan file apa yang digunakan - sesuatu sepertitype_of_file: a
. Beginilah tampilan buku pedoman saya sekarang:Terima kasih atas semua jawabannya. Saya menemukan mereka sangat membantu.
sumber
Saya harap snip berikut (diambil dari Ansible Documentation ) dapat memberikan tambahan yang bermanfaat untuk kontribusi yang bermanfaat dari orang lain di atas.
sumber