saltstack:在状态和支柱中使用Python模块

我有一个自定义模块,可以在我这样的状态下使用

{% set myvar = salt['mymodule.myfunction']() %} 

现在我想/需要在我的支柱中使用它。 我曾尝试以同样的方式调用它,但出现错误

 Jinja variable 'salt.loader.LazyLoader object' has no attribute 'mymodule.myfunction' 

有什么办法可以宣布这个模块和function在支柱上是有效的吗?

谢谢

编辑

实际的function是一个简单的正则expression式将小众ID转换成简短的forms。 我最终在Jinja的状态和支柱上实现了实际的function,并且工作。 我想在状态和支柱中使用它,以便能够加载一个.sls文件,如果它存在覆盖默认设置每个。

所以我的问题实际上已经解决了,但背后的问题是:如何拥有一个可以在状态和支柱中加载的(执行)模块,我认为还是相关的。 我可以重命名我的问题。

支柱汇编发生在主人身上,而不是奴才。 这意味着仅在salt://...树中可用的模块(例如salt://_modules )不能在支柱文件中使用。

为了在支柱文件中使用模块,还必须使主模块可用。 在默认configuration中,这应该可以通过将模块复制到/var/cache/salt/master/extmods/modules 。 为了避免必须在两个地方维护模块,可以简单地添加符号链接:

ln -s /srv/salt/_modules /var/cache/salt/master/extmods/modules

根据/etc/salt/master中的extension_modulesmodule_dirs选项的值,必须使用的实际path可能不同。

这可能不是正确的解决scheme,但是Salt内部有一个通过调用外部支柱接口来生成支柱数据的机制。 它允许您使用盐以外定义的任何信息。 请注意,您将需要更新您的salt-masterconfiguration中的ext_pillar选项,以configuration要运行的ext_pillar接口。

有关可用ext_pillar函数的完整列表,请参阅: https : //github.com/saltstack/salt/tree/develop/salt/pillar