Назад | Перейти на главную страницу

saltstack: используйте модуль Python как в состояниях, так и в столбе

У меня есть специальный модуль с функцией, которую я могу использовать в своих состояниях, подобных этому

{% 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