Как проверить выход 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? Это путь на мастера? Миньон?
Мртен

Это путь на миньона. Вы можете сделать, 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 получить файл, отрендерить его через механизм шаблонов и поместить его в удобочитаемое место:

# 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); возвращаемые данные неизменно хорошо структурированы и кратки. (Может быть такой модуль, но я не знаю, что это. Это было бы предпочтительным решением для переноса тестовых файлов на миньона.)

edit: ответ @ gtmanfred намного лучше и более прямой, и я принял его. Я оставляю этот здесь в информационных целях. Это не лучшее решение, но оно все еще работает.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.