Пытаюсь потихоньку слезать с ансибла для обновления соли и пишу логику для апдейта states & stack(pillar) самой Солью.
Ключевая проблема что независимо от того что прилетело в релизе у меня должна быть возможность это откатить или накатить новое == соли нельзя ломатся если сломались стейты или пилары.
Со стейтами все просто - делаем immutable & separated стейт который умеет ТОЛЬКО накатывать новые релизы. Он не перезатерается релизами и живет в другом fileserver_root.
С пиларами все сложно. У нас pillarstack и если он сломан то я не могу ничего запустить с руганью что стек не может собратся. В том числе не могу запустить откат. Проблема.
Относительно простой вариант был бы использовать его gitfs версию, но увы нам этот вариант не подходит по архитектурным соображениям.
Я пытался разделить стек по environments но тут тоже все не просто. В ванильном пиларе есть такая конструкция:
if "__env__" in opts["pillar_roots"]:
env = opts.get("pillarenv") or opts.get("saltenv") or "base"
То есть их можно разделить по энвам и если ничего не передано то будет base! В pillarstack такой фишки нет - там можно указать поиск по ключу но нету fallback to base как у нативного. В принципе можно запатчить но вообще ситуация какая-то чрезмерно запутанная.
Кто-то решал подобные проблемы?