【发布时间】:2016-11-08 17:01:23
【问题描述】:
目标
如何在 Minion 上安装带有 file.recurse 的文件,这些文件特定于 Minions?
当前策略
这可行:
files_per_minion:
file.recurse:
- source: salt://monitoring/files/per_minion/{{ grains.id }}
- name: /
- template: jinja
...但是对于在 master 上没有此目录的 minions 会失败。我不想为我的 master 上的每个 minion 创建一个目录。
我正在寻找一种可选包含的方法。这是伪代码中的一个条件:
{% if magic_way_to_check_if_source_exists salt://monitoring/files/per_minion/{{ grains.id }} %}
files_per_minion:
file.recurse:
- source: salt://monitoring/files/per_minion/{{ grains.id }}
- name: /
- template: jinja
{% endif %}
问题
条件magic_way_to_check_if_source_exists怎么写?
欢迎其他解决方案
条件magic_way_to_check_if_source_exists 只是实现目标的一种策略。欢迎使用其他解决方案。
用例
想象一下,我希望安装cron_tab_file_for_xhost,但只能安装在名为 xhost 的主机上。我可以通过为这个主机创建一个目录树和一个文件来解决这个问题:
monitoring/files/per_minion/xhost/etc/cron.d/cron_tab_file_for_xhost
【问题讨论】:
-
那些文件里写了什么?它们是可模板化的吗?
-
@dahrens 是的,我们使用 jinja。请参阅问题中的示例 sn-p。
-
但您没有将任何数据传递给文件。如果 file_per_minion 仅在一个值上有所不同,我建议在您的支柱中应用此值并将其交给文件 - 这样您根本不需要 files_per_minion。
-
@dahrens 我添加了一个用例。我希望这个问题现在更清楚了。我认为支柱中的价值观在这里没有帮助。除了布尔值“此主机在 files/per_minion 中有自定义文件”。
-
关于 cron,我通常使用相当舒适的 salt.states.cron - 这也会将信息写入管理以下行的 crontab。
标签: salt-stack