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

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

{% 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, я думаю, все еще актуален. Я могу переименовать свой вопрос.

1
задан 24 August 2016 в 22:21
2 ответа

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

1
ответ дан 3 December 2019 в 23:42

Возможно, это не совсем верное решение, но внутри Salt существует механизм генерации данных из столба путем вызова интерфейсов внешнего столба . Это позволяет использовать любую информацию, которая определена вне соли. Обратите внимание, что вам необходимо обновить опцию ext_pillar в вашей конфигурации salt-master, чтобы настроить интерфейс ext_pillar на выполнение.

Полный список доступных функций ext_pillar смотрите в разделе : https://github.com/saltstack/salt/tree/develop/salt/pillar

0
ответ дан 3 December 2019 в 23:42

Теги

Похожие вопросы