web-dev-qa-db-ja.com

saltstack:状態と柱の両方でPythonモジュールを使用する

私はこのような私の州で使用できる機能を備えたカスタムモジュールを持っています

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

今、私はそれを私の柱で使用したい/必要があります。同じように呼んでみましたが、エラーが発生しました

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

このモジュールと機能をpillarで有効として宣言する方法はありますか?

ありがとう

編集

実際の関数は、ミニオンIDをその短い形式に変換する単純な正規表現です。最終的に、Jinjaを使用して、状態と柱の両方で実際の機能を実装しました。状態とピラーで使用して、.slsファイルが存在する場合にそれをロードして、ミニオンごとのデフォルト設定をオーバーライドできるようにしたい。

だから私の問題は実際に解決されましたが、背後にある質問:状態と柱にロードできる(実行)モジュールをどのように持つかはまだ関連していると思います。質問の名前を変更する場合があります。

1
daks

柱のコンパイルは、ミニオンではなくマスターで行われます。これは、salt://...ツリー(たとえば、salt://_modules)でのみ使用可能なモジュールをピラーファイル内で使用できないことを意味します。

ピラーファイルでモジュールを使用するには、マスターがモジュールを使用できるようにする必要があります。デフォルトの構成では、これはモジュールを/var/cache/salt/master/extmods/modulesにコピーすることで可能になります。モジュールを2つの場所に維持する必要をなくすために、シンボルリンクを追加するだけです。

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

extension_modulesmodule_dirsおよび/etc/salt/masterオプションの値によっては、使用する必要のある実際のパスが異なる場合があります。

1

これは正確に正しい解決策ではないかもしれませんが、 外部ピラー インターフェースを呼び出すことによってピラーデータを生成するためのメカニズムがSalt内にあります。これにより、salt以外で定義されている情報を使用できます。 ext_pillarインターフェースを実行するように構成するには、salt-master構成のext_pillarオプションを更新する必要があることに注意してください。

使用可能なext_pillar関数の完全なリストについては、以下を参照してください。 https://github.com/saltstack/salt/tree/develop/salt/pillar

0
Roald Nefs