如何在minion上安装file.recurse的文件?
这样可行:
files_per_minion:
file.recurse:
- source: salt://monitoring/files/per_minion/{{ grains.id }}
- name: /
- template: jinja
...但是对于那些在主人身上没有此目录的仆从来说却失败了。我不想为我主人的每个小兵创建一个目录。
我搜索可选包含的方法。这是伪代码中的条件:
{% 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
答案 0 :(得分:2)
根据您的用例和状态树,有不同的方法。
最简单的方法是创建一个单独的状态,并使用top.sls
附加此状态。
如果您处理通过支柱配置的公式。我会把这些信息写在我支柱的某个地方。然后各州根据支柱数据做出决定。
<强> pillar.example 强>:
yourformula:
getspecificfile: true
<强> somestate.sls 强>:
{% if salt['pillar.get']("yourformula:getspecificfile") %}
files_per_minion:
file.recurse:
- source: salt://monitoring/files/per_minion/{{ grains.id }}
- name: /
- template: jinja
{% endif %}
<强>更新强>:
我刚看了docs of the file.managed state
可以将source参数指定为列表。如果这样做,那么要匹配的第一个文件将是使用的文件。如果salt文件服务器上不存在所需的文件,则允许您拥有一个默认文件。这是一个例子:
/etc/foo.conf:
file.managed:
- source:
- salt://foo.conf.{{ grains['fqdn'] }}
- salt://foo.conf.fallback
- user: foo
- group: users
- mode: 644
- backup: minion
这似乎是另一种选择 - 如果你不小心推出你的爪牙上不需要的空文件。