私はこのような私の州で使用できる機能を備えたカスタムモジュールを持っています
{% set myvar = salt['mymodule.myfunction']() %}
今、私はそれを私の柱で使用したい/必要があります。同じように呼んでみましたが、エラーが発生しました
Jinja variable 'salt.loader.LazyLoader object' has no attribute 'mymodule.myfunction'
このモジュールと機能をpillarで有効として宣言する方法はありますか?
ありがとう
編集
実際の関数は、ミニオンIDをその短い形式に変換する単純な正規表現です。最終的に、Jinjaを使用して、状態と柱の両方で実際の機能を実装しました。状態とピラーで使用して、.slsファイルが存在する場合にそれをロードして、ミニオンごとのデフォルト設定をオーバーライドできるようにしたい。
だから私の問題は実際に解決されましたが、背後にある質問:状態と柱にロードできる(実行)モジュールをどのように持つかはまだ関連していると思います。質問の名前を変更する場合があります。
柱のコンパイルは、ミニオンではなくマスターで行われます。これは、salt://...
ツリー(たとえば、salt://_modules
)でのみ使用可能なモジュールをピラーファイル内で使用できないことを意味します。
ピラーファイルでモジュールを使用するには、マスターがモジュールを使用できるようにする必要があります。デフォルトの構成では、これはモジュールを/var/cache/salt/master/extmods/modules
にコピーすることで可能になります。モジュールを2つの場所に維持する必要をなくすために、シンボルリンクを追加するだけです。
ln -s /srv/salt/_modules /var/cache/salt/master/extmods/modules
extension_modules
のmodule_dirs
および/etc/salt/master
オプションの値によっては、使用する必要のある実際のパスが異なる場合があります。
これは正確に正しい解決策ではないかもしれませんが、 外部ピラー インターフェースを呼び出すことによってピラーデータを生成するためのメカニズムがSalt内にあります。これにより、salt以外で定義されている情報を使用できます。 ext_pillar
インターフェースを実行するように構成するには、salt-master構成のext_pillar
オプションを更新する必要があることに注意してください。
使用可能なext_pillar関数の完全なリストについては、以下を参照してください。 https://github.com/saltstack/salt/tree/develop/salt/pillar