SaltstackでJinjaの出力を調べる方法は?


16

SLS構築しようとしているソルトにテンプレートがありますが、無効な構文を出力しているため、次のようなエラーが発生します。

my-minion-id:
    - State 'system' in SLS 'network' is not formed as a list

原則として、出力をファイルとして解析しようとする前に、何らかの方法で Jinjaテンプレートの出力を調べることができるはずSLSです。Jinjaレンダラー用のPythonモジュールがありますがsalt.renderers.jinja、CLIで実行しようとするとエラーが発生します。

# salt my-minion-id salt.renderers.jinja.render /srv/salt/network/init.sls
my-minion-id:
    'salt.renderers.jinja.render' is not available.
ERROR: Minions returned with non-zero exit code
# salt my-minion-id renderers.jinja.render /srv/salt/network/init.sls
my-minion-id:
    'renderers.jinja.render' is not available.
ERROR: Minions returned with non-zero exit code

テンプレートの出力を表示するにはどうすればよいですか?これはデバッグするのが難しいはずです。

回答:


11

slsutil.rendererモジュールを確認してください。

これはあなたが望むことをするはずです

salt my-minion-id slsutil.renderer /srv/salt/network/init.sls 'jinja'

このモジュールは、compile_template関数を直接呼び出します。

編集:/srv/salt/network/init.slsはミニオンのパスです。マスターをミニオンとしてターゲットに設定していない場合は、おそらく以下を実行する必要があります。

salt minion-id cp.cache_file salt://network/init.sls
salt minion-id slsutil.renderer /var/cache/salt/minion/files/base/network/init.sls

または、cache_fileが出力するファイルをポイントします。

2018.3以降を使用している場合は、単に指定できます salt://network/init.sls


しかし、/ srv / salt / networkはどのようなパスですか?マスター上のパスですか?ミニオン?
-Mrten

ミニオン上の道です。あなたは行うことができますsalt minion-id cp.cache_file salt://network/init.slsし、それは手先にキャッシュされ、または2018.3で開始された後に戻ってくれるのファイルに対して実行slsutil.rendererは、あなただけ指定することができますsalt://network/init.sls
gtmanfred

8

数週間前に密接に関連する問題に苦労してどれだけの時間を費やしていたかを考えると、これをもっと早く理解したいと思います。

解決策salt.modules.cp.get_templateは、Salt minionにファイルを取得させ、テンプレートエンジンを介してレンダリングし、読み取り可能な場所に配置するために使用することです。

# salt my-minion-id cp.get_template salt://network/init.sls /root/network.sls template=jinja
my-minion-id:
    /root/network.sls

そこから、my-minion-idホストに接続し、に配置したファイルを調べます/root/network.sls

意味あり; salt.renderers.jinjasalt.renderersネームスペースにありますが、CLIからアクセスできるモジュールはsalt.modulesネームスペースにあります。

データの可視性の観点からも理にかなっています。テンプレートのレンダリングは、グレインなどが利用可能なミニオンで行われ、ミニオンコードを実行するモジュールがマスターに任意の出力を返すのをまだ見ていません(たとえば、CLIで表示するため)。返されるデータは常に適切に構成され、簡潔です。(そのようなモジュールがあるかもしれませんが、それが何なのかわかりません。テストファイルをミニオンにドロップするための望ましい解決策です。)

編集: @gtmanfredの答えははるかに優れており、より直接的であり、私はそれを受け入れました。参考のためにここに残しておきます。それは最善の解決策ではありませんが、それでも機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.