【问题标题】:SaltStack file.recurse per minionSaltStack file.recurse per minion
【发布时间】: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


【解决方案1】:

根据您的用例和状态树,有不同的方法。

最简单的方法是创建一个单独的状态并使用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

源参数可以指定为列表。如果这样做了,那么要匹配的第一个文件将是使用的文件。这允许您拥有一个默认文件,如果 salt 文件服务器上不存在所需的文件,则可以在该文件上回退。这是一个例子:

/etc/foo.conf:
  file.managed:
    - source:
      - salt://foo.conf.{{ grains['fqdn'] }}
      - salt://foo.conf.fallback
    - user: foo
    - group: users
    - mode: 644
    - backup: minion

这似乎是另一种选择 - 如果您不想在您的奴才上推出不需要的空文件。

【讨论】:

  • 是的,这比为所有不需要这个的minions创建一个空目录要好。只有少数奴才需要“files_per_minion”。但是检查“salt://monitoring/files/per_minion/{{ grains.id }}”是否存在会更好......
  • 对您的更新的评论(回退到第二个源条目):是的,这很好:-)。我喜欢这个。我只需要在那里放一个空目录....我想这应该可以。谢谢。
  • 再次感谢您提示您可以为files.recurse 提供两个源文件。我发现后备目录不能为空。否则你会得到这个错误:“file.recurse: Recurse failed: none of the specified sources were found”
  • 我问空目录的“file.recurse: Recurse failed: none of the specified sources were found”是错误还是这里的功能:github.com/saltstack/salt/issues/37539
猜你喜欢
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
相关资源
最近更新 更多