所有Salt Stack函数都可以设置为变量吗?

时间:2016-03-16 05:33:13

标签: timezone jinja2 salt-stack

我错误地认为如果你可以在SaltStack的命令行上运行一个函数,你可以将该输出设置为变量。例如,考虑以下输出所有小兵的时区:

salt '*' timezone.get_zone

它输出单个字符串,如Etc/UTC作为时区。我正在编写一个函数来根据本地服务器的时区运行一些cron作业。但是,在jinja模板中,当我设置:

...
{% set timezone = salt['timezone.get_zone'] %}

{% if timezone == 'America/Los_Angeles' %}
0 23 * * * root somecommand
{% else %}
# TIMEZONE NOT FOUND
{% endif %}
....

我总是得到该模板的# TIMEZONE NOT FOUND输出。如果我尝试通过公式的SLS文件中的context传递时区,我会在渲染后得到以下内容:

<function get_zone at 0x7fb48a7c9f50>

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

<function get_zone at 0x7fb48a7c9f50>是一个线索。 salt['timezone.get_zone']正在返回一个函数。要实际调用它,你需要在它之后放置parens,所以你的行需要看起来像:

{% set timezone = salt['timezone.get_zone']() %}

这对你有用。它在我的测试中起作用。