ソルトマスターに接続されているソルトミニオンが1つあります。最近、大きな.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リポジトリに表示されるものと一致しています。 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をコンパイルするためです。私はマスターの後ろにいくつかのコミットであった古いブランチを持っていたので、それでもwebserver.slsを参照していました。解決策は非常に簡単です。/etc/salt/master
に以下を追加するだけです。
gitfs_env_whitelist:
- master
または、プライマリブランチがマスターでない場合は、マスターをブランチ名に置き換えます。
その理由は、saltがすべてのブランチをマージして最終的なtop.slsをコンパイルするためです。これを/etc/salt/master
に追加することで、修正することができました。
gitfs_env_whitelist:
- base
Saltはmaster
ブランチをbase
環境にマップするため(gitfs_base
のおかげで)、ホワイトリストへの正しいenv
はbase
ではなくmaster
です。