У меня есть специальный модуль с функцией, которую я могу использовать в таких состояниях, как это
{% set myvar = salt['mymodule.myfunction']() %}
Теперь я хочу / должен использовать его в своей опоре. Я попытался вызвать его таким же образом, но у меня возникла ошибка
Jinja variable 'salt.loader.LazyLoader object' has no attribute 'mymodule.myfunction'
Есть ли способ объявить этот модуль и функцию действительными в pillar?
Спасибо
редактировать
Фактическая функция представляет собой простое регулярное выражение для преобразовать ID миньона в его краткую форму. Я наконец реализовал фактическую функциональность с Jinja как в состояниях, так и в опоре, и это работает. Я попытался вызвать его таким же образом, но у меня возникла ошибка
Jinja variable 'salt.loader.LazyLoader object' has no attribute 'mymodule.myfunction'
Есть ли способ объявить этот модуль и функцию действительными в pillar?
Спасибо
редактировать
Фактическая функция представляет собой простое регулярное выражение для преобразовать ID миньона в его краткую форму. Я наконец реализовал фактическую функциональность с Jinja как в состояниях, так и в опоре, и это работает. Я попытался вызвать его таким же образом, но у меня возникла ошибка
Jinja variable 'salt.loader.LazyLoader object' has no attribute 'mymodule.myfunction'
Есть ли способ объявить этот модуль и функцию действительными в pillar?
Спасибо
редактировать
Фактическая функция представляет собой простое регулярное выражение для преобразуйте ID миньона в его краткую форму. Я наконец реализовал фактическую функциональность с Jinja как в состояниях, так и в опоре, и это работает. Я хочу использовать его в состояниях и столбе, чтобы иметь возможность загружать файл .sls, если он существует, чтобы переопределить настройку по умолчанию для отдельных миньонов.
Итак, моя проблема фактически решена, но вопрос позади: как получить ( Execution), который может быть загружен в состояниях AND pillar, я думаю, все еще актуален. Я могу переименовать свой вопрос.
Компиляция столба происходит на мастере, а не на миньоне. Это означает, что модули доступны только в salt: // ...
tree (например, в 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