Salt top.sls 无法使用 gitfs 在 `salt-run fileserver.update` 上更新

Salt top.sls 无法使用 gitfs 在 `salt-run fileserver.update` 上更新

我有一个连接到 salt master 的 salt minion。我最近将一个大型 .sls 从“webserver.sls”重命名为“jetty.sls”。我使用带有 pygit2 和 ssh 的 gitfs 后端。我只启用了 gitfs 后端。 /etc/salt/master

fileserver_backend:
#  - roots
  - git

gitfs_provider: pygit2
gitfs_remotes:
  - [email protected]:Groomblecom/[repo].git:
    - pubkey: /root/salt-credentials/id_rsa.pub
    - privkey: /root/salt-credentials/id_rsa

但是,每当我运行时salt-run fileserver.update && salt '*' state.highstate都会出现错误:

Data failed to compile:
----------
    No matching sls found for 'webserver' in env 'base'

运行后salt '*' state.show_sls jetty会给出预期的(长)输出,与我在 bitbucket repo 中看到的一致。运行后salt '*' state.show_top会给出以下内容:

----------
    base:
        - common
        - ingress
        - webserver

这与 bitbucket repo 中的 top.sls 不一致:

base:
  '*':
    - common
  '*ingress*':
    - ingress
    - jetty
    - nginx

运行salt-run fileserver.updaterm -rf /var/cache/salt/* && service salt-master restart对输出没有影响。

我想知道这种行为是否存在已知错误(和解决方法),是否有办法强制清除真正的缓存,或者我是否犯了配置错误。

答案1

错误的原因在于 salt 会考虑所有分支,然后合并所有 (!) 分支来编译最终的 top.sls。我有一个旧分支,它比 master 落后了几个提交,因此仍然引用了 webserver.sls。解决方案非常简单:只需将以下内容添加到/etc/salt/master

gitfs_env_whitelist:
  - master

或者,如果您的主分支不是 master,请将 master 替换为您的分支名称。

答案2

原因是 salt 合并了所有分支来编译最终的 top.sls。我可以通过将其添加到来修复它/etc/salt/master

gitfs_env_whitelist:
  - base

由于 Salt 将master分支映射到base环境(感谢gitfs_base),因此正确的env白名单是base,而不是master

相关内容