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

All Salt Stack functions able to be set as variables?

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

salt '*' timezone.get_zone

它输出像 Etc/UTC 这样的单个字符串作为时区。我正在为 运行 一些基于本地服务器时区的 cron 作业编写一个函数。但是,在神社模板中,当我设置时:

...
{% 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>

有什么建议吗?

<function get_zone at 0x7fb48a7c9f50>是一条线索。 salt['timezone.get_zone'] 正在返回一个函数。要实际调用它,您需要在它后面加上括号,所以您的行需要看起来像:

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

这应该适合你。它在我的测试中有效。