一千萬個為什麽

搜索

如何查看Saltstack中的Jinja輸出?



我在Salt中嘗試構建了一個模板化的 SLS ,但它發出的語法無效,導致出現如下錯誤:

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

原則上,在嘗試將輸出解析為 SLS 文件之前,應該可以檢查Jinja模板的輸出。 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

我怎樣才能看到我的模板輸出?這似乎很荒謬,應該很難調試。

轉載註明原文: 如何查看Saltstack中的Jinja輸出?

一共有 2 個回答:

考慮到幾周前我花了多少時間與一個密切相關的問題鬥爭,我希望我早點明白了這一點。

該解決方案似乎是使用 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.jinja 位於 salt.renderers 命名空間中,而您可以從CLI訪問的模塊位於 salt.modules 命名空間。

從數據可視性的角度來看,這也是有意義的;模板渲染發生在 minion 上,並且我還沒有看到一個執行minion代碼的模塊將任意輸出返回給master(例如,在CLI中查看) ;返回的數據總是結構合理和簡潔。 (可能有這樣一個模塊,但我不知道它是什麽,這將是一個將測試文件放到小工具上的最佳解決方案。)

edit: @gtmanfred's answer is far better and more direct, and I've accepted that one. I'm leaving this one here for informative purposes. It's not the best solution, but it does still work.

查看 slsutil.renderer 模塊。

這應該做你想做的

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

這個模塊直接為你調用compile_template函數。