我有一个自定义模块,它的功能可以在我的状态下使用,就像这样
{% set myvar = salt['mymodule.myfunction']() %}
现在我想/需要在我的支柱中使用它。我试过用同样的方式调用它,但我得到了一个错误
Jinja variable 'salt.loader.LazyLoader object' has no attribute 'mymodule.myfunction'
有没有办法声明这个模块和功能在支柱中有效?
谢谢
编辑
实际函数是一个简单的正则表达式,用于将 minion ID 转换为它的缩写形式。我终于在状态和支柱中使用 Jinja 实现了实际功能,并且它有效。我想在状态和支柱中使用它,以便能够加载 .sls 文件(如果存在),以使用每个仆从覆盖默认设置。
所以我的问题实际上已经解决了,但背后的问题:如何拥有一个可以在状态和支柱中加载的(执行)模块,我认为仍然是相关的。我可以重命名我的问题。
支柱编译发生在 master 上,而不是 minion 上。这意味着仅在
salt://...
树中可用的模块(例如 insalt://_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