我想将所有Salt文件(支柱,状态,数据文件等)存储在git存储库中,以便可以在几个不同的部署上克隆此存储库 .
然后,我希望能够更改某些支柱设置的值,例如路径名或密码,但不编辑版本控制中的原始文件(即,这些修改只是本地修改,不一定是版本化的) .
我希望能够从原始存储库中提取新版本(例如,添加新的支柱和状态定义),而不会丢失自定义值 .
例如 . “基础”或“默认”支柱文件的设置如下:
service:
dir: /var/opt/myservice
username: myuser
password: mypassword
我想在另一个文件中自定义一些设置,而不更改基本文件:
service:
dir: /mnt/data/myservice
password: secret_password
修改后的设置应优先于基本/默认设置 .
是否可以通过使用环境(例如“基础”环境和“自定义”环境)来实现此目的?
或者也许包含这些自定义支柱文件?
文档似乎表明没有固定的订单来覆盖支柱设置 .
1 回答
我首先建议一种将原始文件和自定义设置保存在git存储库中的方法 . 请参阅下文,了解如何使用git之外的文件覆盖设置 .
Setup Git Pillar
我假设所有文件都存储在git pillar like described here中 . 我在这里使用salt版本2015.8的语法 .
在top.sls文件中,您可以列出不同的SLS文件 . 它们将按顶部文件中列出的顺序相互覆盖:
这将适用于所有服务器:
这适用于名称以“qa”结尾的所有服务器:
这将适用于名为“hostqa”的服务器:
然后命令
salt hostqa saltutil.refresh_pillar
和salt hostqa pillar.data
将显示值A2和B2全部合并在一起 .由于这在没有指定环境的情况下有效,我建议不要在这里使用环境 .
Override some local settings outside of Git
要在本地覆盖某些设置,您可以添加另一个外部支柱 . 其中一个最简单的是
cmd_yaml
,它将运行一个命令(这里:cat
)并将输出与当前支柱合并:所有外部支柱都按配置文件中列出的顺序执行 .