Bagaimana cara memeriksa output Jinja di Saltstack?


16

Saya memiliki templated SLSdi Salt yang saya coba buat, tetapi memancarkan sintaks yang tidak valid, yang menghasilkan kesalahan seperti:

my-minion-id:
    - State 'system' in SLS 'network' is not formed as a list

Pada prinsipnya, seharusnya dimungkinkan untuk, entah bagaimana memeriksa output dari template Jinja sebelum mencoba mengurai output sebagai SLSfile. Ada modul Python untuk penyaji Jinja salt.renderers.jinja, tetapi jika saya mencoba mengeksekusinya di CLI, saya mendapatkan kesalahan:

# salt my-minion-id salt.renderers.jinja.render /srv/salt/network/init.sls
my-minion-id:
    'salt.renderers.jinja.render' is not available.
ERROR: Minions returned with non-zero exit code
# salt my-minion-id renderers.jinja.render /srv/salt/network/init.sls
my-minion-id:
    'renderers.jinja.render' is not available.
ERROR: Minions returned with non-zero exit code

Bagaimana saya bisa melihat output dari template saya? Tampaknya tidak masuk akal seharusnya ini sulit untuk di-debug.

Jawaban:


11

Check out slsutil.renderer modul.

Ini harus melakukan apa yang Anda inginkan

salt my-minion-id slsutil.renderer /srv/salt/network/init.sls 'jinja'

Modul ini hanya memanggil fungsi compile_template secara langsung untuk Anda.

Sunting: /srv/salt/network/init.sls adalah jalur di antek, jika Anda tidak menargetkan master sebagai antek Anda, Anda mungkin perlu melakukan hal berikut.

salt minion-id cp.cache_file salt://network/init.sls
salt minion-id slsutil.renderer /var/cache/salt/minion/files/base/network/init.sls

atau arahkan ke file apa pun yang dimuntahkan cache_file.

Jika Anda menggunakan 2018.3 atau lebih baru, Anda bisa menentukan salt://network/init.sls


Tapi jalur apa itu / srv / salt / network? Apakah itu jalan di atas tuan? Anteknya?
Mrten

Itu adalah jalan di antek. Anda dapat melakukan salt minion-id cp.cache_file salt://network/init.slsdan kemudian menjalankan slsutil.renderer terhadap file yang diludahkan kembali setelah di-cache di antek, atau mulai pada 2018.3, Anda cukup menentukansalt://network/init.sls
gtmanfred

8

Mengingat berapa banyak waktu yang saya habiskan berminggu-minggu yang lalu bergumul dengan masalah yang berkaitan erat, saya berharap saya bisa mengetahuinya lebih cepat.

Solusinya adalah menggunakan salt.modules.cp.get_templateminion Garam untuk mengambil file, merendernya melalui mesin templating dan menempatkannya di tempat yang mudah dibaca:

# salt my-minion-id cp.get_template salt://network/init.sls /root/network.sls template=jinja
my-minion-id:
    /root/network.sls

Dari sana, Anda terhubung ke my-minion-idhost dan memeriksa file tempat Anda berada /root/network.sls.

Ini masuk akal; salt.renderers.jinjaada di salt.renderersnamespace, sementara modul Anda memiliki akses ke dari CLI berada di salt.modulesnamespace.

Ini juga masuk akal dari sudut pandang visibilitas data; rendering template terjadi pada antek , di mana butir dan semacamnya tersedia, dan saya belum melihat modul yang mengeksekusi kode antek mengembalikan output sewenang-wenang ke master (untuk tampilan pada CLI, misalnya); data yang dikembalikan selalu terstruktur dengan baik dan ringkas. (Mungkin ada modul seperti itu, tapi saya tidak tahu apa itu. Itu akan menjadi solusi yang lebih baik untuk menjatuhkan file uji ke antek.)

sunting: @ gtmanfred jawaban jauh lebih baik dan lebih langsung, dan saya telah menerimanya. Saya meninggalkan yang satu ini di sini untuk tujuan informatif. Ini bukan solusi terbaik, tetapi masih berfungsi.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.