我有一个连接到 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.update
或rm -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
。