首页 文章

SaltStack file.recurse per minion

提问于
浏览
0

目标

如何在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

1 回答

  • 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 %}
    

    UPDATE

    我刚看了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
    

    这似乎是另一种选择 - 如果你不打算推出你的小兵不需要的空文件 .

相关问题