2017-02-28 25 views
0

我需要應用基於狀態文件中的靜態小衆id的if-else邏輯。目標glob限定了一大堆服務器,但是我需要在單個服務器上運行一小段邏輯,並在所有服務器上運行一些常見的東西。我怎樣才能做到這一點?如何從salt狀態的忍者腳本中獲得小衆ID

當我把這個在金賈文件,它的錯誤:

{% import salt.config %} 
{% minion_opts = salt.config.minion_config('/etc/salt/minion') %} 
{% print(minion_opts['id']) %} 
{% if minion_opts['id'] == 'xyz.server': %} 
-- run the logic here 
.. 
.. 

錯誤:

- Rendering SLS 'base:bin.test' failed: Jinja syntax error: expected token 'as', got 'end of statement block'; line 1 
- 
- --- 
- {% import salt.config %} <====================== 
- {% minion_opts = salt.config.minion_config('/etc/salt/minion') %} 
- {% print(minion_opts['id']) %} 

它可能不用說,我沒有任何手段Saltstack專家。

+1

你的代碼在哪裏結束,錯誤是從哪裏開始的?你能修正格式嗎? – fragmentedreality

+0

上面顯示的是開始,它在第一行本身失敗。它不喜歡進口聲明。但它在文檔中被描述爲合法。 –

回答

0

發生此錯誤是因爲您在unexpected way中使用了Jinja的import。如果這是一個瓶的應用程序,你應該使用這樣的事情在你的views.py路線提供變量的模板:

render_template('my_template.html', salt=salt) 

改正的代碼應該是這個樣子:

{% set minion_opts = salt.config.minion_config('/etc/salt/minion') %} 
{{ minion_opts['id'] }} 
{% if minion_opts['id'] == 'xyz.server' %} 
    {{ 'logic goes here' }} 
{% endif %} 

見關於如何爲變量賦值的Assignments docs

if statement結束時不需要冒號,記住在完成條件語句後使用{% endif %}

+0

我上面粘貼的python代碼就是我試圖放入鹽狀態的東西。鹽州允許忍者蟒蛇。你可以在這裏找到這個例子:https://docs.saltstack.com/en/latest/ref/clients/ –

+0

@SridharNallani儘管視覺上相似,Jinja不是Python。你嘗試過Salt Jinja文檔嗎? https://docs.saltstack.com/en/latest/topics/jinja/index.html – Roundel

+0

嗨@Roundel,你的答案不是很具體。是的,我用粘貼的方式以一致的方式使用了忍者。如果您可以指出這個代碼中的問題究竟是什麼或者我應該採取什麼不同的方式,那將會有所幫助。謝謝! –