如何在可以覆盖的支柱中包含基础值?

时间:2015-10-01 19:55:36

标签: salt-stack

我想将所有Salt文件(支柱,状态,数据文件等)存储在git存储库中,以便可以在几个不同的部署中克隆此存储库。

然后我希望能够更改某些支柱设置的值,例如路径名或密码,但不需要编辑版本控制中的原始文件(即,这些修改仅限于本地,不一定版本控制)。

我希望能够从原始存储库中提取新版本(例如添加新的支柱和状态定义),而不会丢失自定义值。

E.g。 "基地"或"默认"支柱文件的设置如下:

service:
  dir: /var/opt/myservice
  username: myuser
  password: mypassword

我想在另一个文件中自定义一些设置,而不更改基本文件:

service:
  dir: /mnt/data/myservice
  password: secret_password

修改后的设置应优先于基本/默认设置。

是否可以通过使用环境(例如" base"环境和" custom"环境)来实现这一目标?

或者也许包括这些自定义支柱文件?

文档似乎表明没有一个固定的订单来覆盖支柱设置。

1 个答案:

答案 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_pillarsalt 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

所有外部支柱都按照配置文件中列出的顺序执行。