У меня есть специальный модуль с функцией, которую я могу использовать в своих состояниях, подобных этому
{% set myvar = salt['mymodule.myfunction']() %}
Теперь я хочу / должен использовать его в своей опоре. Я пробовал позвонить так же, но у меня возникла ошибка
Jinja variable 'salt.loader.LazyLoader object' has no attribute 'mymodule.myfunction'
Есть ли способ объявить этот модуль и его функцию действительными в pillar?
Спасибо
редактировать
Фактическая функция - это простое регулярное выражение для преобразования идентификатора миньона в его краткую форму. Я наконец реализовал фактическую функциональность с Jinja как в состояниях, так и в опоре, и это работает. Я хочу использовать его в состояниях и столбах, чтобы иметь возможность загружать файл .sls, если он существует, чтобы переопределить настройку по умолчанию с настройками для каждого миньона.
Итак, моя проблема фактически решена, но вопрос: как получить модуль (выполнение), который может быть загружен в состояниях И столбце, по-прежнему актуален, я думаю. Я могу переименовать свой вопрос.
Компиляция столба происходит на мастере, а не на миньоне. Это означает, что модули доступны только в salt://...
дерево (например, в salt://_modules
) нельзя использовать внутри файлов колонн.
Чтобы использовать модуль в файле столба, он также должен быть доступен мастеру. В конфигурации по умолчанию это должно быть возможно путем копирования модуля в /var/cache/salt/master/extmods/modules
. Чтобы избежать необходимости поддерживать модули в двух местах, можно просто добавить символьную ссылку:
ln -s /srv/salt/_modules /var/cache/salt/master/extmods/modules
В зависимости от значений extension_modules
и module_dirs
варианты в /etc/salt/master
, фактический путь, который необходимо использовать, может быть другим.
Это может быть не совсем правильное решение, но в Salt есть механизм для генерации данных столбца путем вызова внешний столб интерфейсы. Что позволяет вам использовать любую информацию, которая определена вне соли. Обратите внимание, что вам нужно будет обновить ext_pillar
в вашей конфигурации salt-master, чтобы настроить ext_pillar
интерфейс для запуска.
Полный список доступных функций ext_pillar см .: https://github.com/saltstack/salt/tree/develop/salt/pillar