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