У меня есть единственный соленый миньон, связанный с мастером соли. Недавно я переименовал большой файл .sls с «webserver.sls» в «jetty.sls». Я использую бэкэнд gitfs с pygit2 и ssh. Я включил только серверную часть 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
дает ожидаемый (длинный) вывод, соответствующий тому, что я вижу в репозитории битбакета. Бег salt '*' state.show_top
дает следующее:
----------
base:
- common
- ingress
- webserver
Это несовместимо с top.sls в репозитории bitbucket:
base:
'*':
- common
'*ingress*':
- ingress
- jetty
- nginx
Бег salt-run fileserver.update
или rm -rf /var/cache/salt/* && service salt-master restart
не влияет на выходы.
Я хотел бы знать, есть ли известная ошибка (и обходной путь) для этого поведения, есть ли способ принудительно очистить реальный кеш или я допустил ошибку конфигурации.
Причина ошибки в том, что соль рассматривает все ветки, а затем объединяет все (!) Ветки для компиляции окончательного файла top.sls. У меня была старая ветка, которая была парой коммитов за мастером, и поэтому все еще ссылалась на webserver.sls. Решение довольно простое: просто добавьте в /etc/salt/master
:
gitfs_env_whitelist:
- master
Или, если ваша основная ветка не является главной, замените master именем своей ветки.
Причина в том, что соль объединяет все ветки для компиляции окончательного файла top.sls. Я смог исправить это, добавив это в /etc/salt/master
:
gitfs_env_whitelist:
- base
Поскольку соль отображает master
ветвь к base
окружающая среда (благодаря gitfs_base
), правильно env
в белый список base
не master
.