Як перевірити вихід Jinja у Saltstack?


16

У мене є шаблон SLSу Salt, який я намагаюся створити, але він випускає недійсний синтаксис, який призводить до помилок, таких як:

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

В принципі, слід якось вивчити вихід шаблону Jinja до того, як він спробує проаналізувати вихід у вигляді SLSфайлу. Існує модуль Python для візуалізації Jinja salt.renderers.jinja, але якщо я спробую виконати його на CLI, я отримаю помилку:

# 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

Як я бачу вихід мого шаблону? Здається абсурдним, це налагодити це важко.

Відповіді:


11

Перевірте модуль slsutil.renderer .

Це має робити те, що ви хочете

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

Цей модуль просто викликає функцію compile_template безпосередньо для вас.

Редагувати: /srv/salt/network/init.sls - шлях на міньйоні, якщо ви не орієнтуєтесь на майстра як свого міньона, вам, ймовірно, потрібно буде виконати наступне.

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

або вкажіть на будь-який файл, який виплює cache_file.

Якщо ви переглядаєте 2018.3 або новішу версію, ви можете просто вказати salt://network/init.sls


Але який шлях / srv / salt / network? Це шлях на господаря? Міньйон?
Mrten

Це шлях на міньйоні. Ви можете зробити, salt minion-id cp.cache_file salt://network/init.slsа потім запустити slsutil.renderer проти файлу, який він плює назад після кешування на міньйоні, або починаючи з 2018.3, ви можете просто вказатиsalt://network/init.sls
gtmanfred

8

З огляду на те, скільки часу я провів тижнів тому на боротьбу з тісно пов’язаною проблемою, хотілося б, щоб я раніше це зрозумів.

Рішення, як видається, використовуватиметься salt.modules.cp.get_templateдля того, щоб Salt minion отримав файл, вивів його через двигун шаблонів і розмістив його в читаному місці:

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

Звідти ви підключаєтесь до my-minion-idхоста і вивчаєте файл, який ви розмістили /root/network.sls.

Це має сенс; salt.renderers.jinjaзнаходиться в salt.renderersпросторі імен, тоді як модулі, до яких ви маєте доступ з CLI, знаходяться в salt.modulesпросторі імен.

Це також має сенс з точки зору видимості даних; візуалізація шаблонів відбувається на міньйоні , де доступні зерна і таке, і я ще не бачив модуля, який виконує код міньйона, повертає довільний вихід до майстра (для перегляду на CLI, наприклад); повернені дані незмінно добре структуровані та стислі. (Можливо, такий модуль є, але я не знаю, що це таке. Це було б кращим рішенням для скидання тестових файлів на міньйон.)

редагувати: @ gtmanfred відповідь набагато краща і пряміша, і я прийняв її. Я залишаю цю сюди в інформаційних цілях. Це не найкраще рішення, але все-таки працює.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.