2017-02-28 39 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,你的答案不是很具体。是的,我用粘贴的方式以一致的方式使用了忍者。如果您可以指出这个代码中的问题究竟是什么或者我应该采取什么不同的方式,那将会有所帮助。谢谢! –