根据某些颗粒/柱子值考虑一些动态状态形状。例如,Web服务器可以为调试端点添加其他站点定义:
{% if grains['dev'] %}
/etc/nginx/sites-enabled/logaccess.conf:
file.managed:
- source: salt://some/path/logaccess.conf
{% endif %}
这样可以正常工作,除非例如开发服务器改变其角色并成为高效的角色。没有剩下的状态,文件驻留在小兵身上。
我当然可以添加对应的
/etc/nginx/sites-enabled/logaccess.conf:
{% if grains['dev'] %}
file.managed:
- source: salt://some/path/logaccess.conf
{% else %}
file.absent: []
{% endif %}
这是丑陋的,并不适用于例如软件包(不需要为特定状态安装软件,并不总是不需要另一个软件包,也不是故意手动安装)。
如何正确处理这些状态的更改以及最终清理已创建的工件,已安装的软件等?
答案 0 :(得分:1)
实际上你在问:“Salt支持状态回滚吗?”
答案是否定的,但各州本身往往提供某种形式
“回滚”,例如file
州可以restore backup
当dev
- >发生prod
从您的示例转换。
我从未尝试过这样的备份,而且它们只适用于file
州。
我同意添加这些令人讨厌的if
s grains['dev']
是丑陋的,但是
我看到了其他几个选项如何处理:
dev
- > prod
)并在发生这种情况时传播自定义事件。
适当处理此事件(给定执行状态列表创建将恢复某些小兵变更的状态)pkg
,您可以列出在OS上安装的初始软件包,并在回滚期间清除所有其他软件包)。不幸的是,我认为这不容易,甚至不可能 <crazy>
如果minion使用提供快照的文件系统(如btrfs
),您可以尝试在转换事件时将快照恢复到某个初始/不同状态。
</crazy>
如果我是你,我会选择1)