Git

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

  • January 14, 2017

我有一個連接到鹽主的鹽奴才。我最近將一個大的 .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.updaterm -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

引用自:https://serverfault.com/questions/817345