Salt top.sls 不使用 gitfs 在 salt-run fileserver.update
上更新
我有一個連接到鹽主的鹽奴才。我最近將一個大的 .sls 從“webserver.sls”重命名為“jetty.sls”。我使用帶有 pygit2 和 ssh 的 gitfs 後端。我只啟用了 gitfs 後端。
/etc/salt/master
:fileserver_backend: # - roots - git gitfs_provider: pygit2 gitfs_remotes: - git@bitbucket.org: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 儲存庫中看到的一致。執行salt '*' state.show_top
給出以下資訊:---------- base: - common - ingress - webserver
這與 bitbucket 儲存庫中的 top.sls 不一致:
base: '*': - common '*ingress*': - ingress - jetty - nginx
執行
salt-run fileserver.update
或rm -rf /var/cache/salt/* && service salt-master restart
對輸出沒有影響。我想知道這種行為是否存在已知的錯誤(和解決方法),是否有辦法強制清除真正的記憶體,或者我是否犯了配置錯誤。
錯誤的原因是 salt 會考慮所有分支,然後合併所有 (!) 分支以編譯最終的 top.sls。我有一個舊分支,它是 master 後面的幾個送出,所以仍然引用 webserver.sls。解決方案非常簡單:只需將以下內容添加到
/etc/salt/master
:gitfs_env_whitelist: - master
或者,如果您的主分支不是 master,請將 master 替換為您的分支名稱。
原因是salt合併了所有分支來編譯最終的top.sls。我可以通過將其添加到以下內容來修復它
/etc/salt/master
:gitfs_env_whitelist: - base
由於 Salt 將
master
分支映射到base
環境(感謝gitfs_base
),因此正確env
的白名單是base
,而不是master
。