В соляных столбах мне нужно загрузить содержимое файла в переменную Jinja.Если файл не существует, Jinja выдает ошибку (TemplateNotFound: ...)
У меня есть несколько папок (компания A, компания B и т. Д.) В моих столбах, которые могут содержать или не содержать файл с именем Default.sls.Если файл существует - он будет загружен в переменную.Проблема возникает, когда файл не существует - в этом случае Jinja генерирует исключение TemplateNotFound.Моя папка Pillar выглядит примерно так:
pillar
|
|-Default.sls
|
|-Company A
| |-Default.sls <-- This could be missing
| |-init.sls
| |-prod.sls
| |-test.sls
| |-etc...
|
|-Company B
| |-Default.sls <-- This could be missing
| |-init.sls
| |-prod.sls
| |-test.sls
| |-etc...
|
|-Company C
|...
Я не нашел хорошего способа решить эту проблему.Я использовал следующий код (info: tpldir содержит имя текущего имя папки, в котором находится файл sls (в данном случае init.sls)):
{{Company x}}/init.sls
----------------------
{% from tpldir + '/default.sls' import companyDefaultX with context %}
xx:
companyDefault: {{ companyDefaultX | yaml }}
Чтобы проверить, есть ли файлсуществует - я использую:
salt['file.file_exists']('/srv/pillar/' + tpldir + "/default.sls")
Это прекрасно работает, пока file_roots, определенный в главной конфигурации Salt, настроен по умолчанию.Теперь мы перешли к использованию gitfs - теперь вышеприведенное использование file.file_exists, очевидно, не работает, поскольку файлы больше не находятся на мастер-соли в /srv/pillar/...!
ПричинаПриведенный выше код заключается в том, что это способ сделать Tiering между конфигурациями по умолчанию и companyDefault.Сначала читается значение по умолчанию (Defalt.sls), затем {{Company X}} / Default.sls объединяется с / по умолчанию.В-третьих, среда (prod.sls, test.sls и т. Д.) Объединяется с новым значением по умолчанию ...
Дополнительный вопрос: как зациклить файлы в папке без использования:
salt['file.readdir']('/srv/pillar/' + tpldir)
Поскольку это та же проблема (/srv/pillar)...