2015-10-01 32 views
2

我想将所有Salt文件(支柱,状态,数据文件等)存储在git存储库中,以便可以在多个不同的部署中克隆此存储库。如何让基础值可以被覆盖的支柱?

然后,我想能够更改一些支柱设置的值,例如路径名或密码,但不编辑版本控制中的原始文件(即,这些修改仅为本地而不是必然版本化)。

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

E.g. “基地”或“默认”支柱文件将有这样的设置:

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

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

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

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

是否可以通过使用环境(例如“基本”环境和“自定义”环境)来实现此目的?

或者也许通过包含这些自定义的支柱文件?

该文档似乎表明,没有用于覆盖支柱设置的固定顺序。

+1

查看这个答案中的'import_yaml'语句http://stackoverflow.com/a/32760671/425050。不过,我从来没有尝试过使用'git_pillar'。 – mafrosis

+0

谢谢。我不认为这样做是因为重写文件将不得不重复默认文件的整个结构,并且如果在默认文件中添加了新条目,则它们也必须被添加到覆盖文件中。我试图实现的是自动导入默认文件中的所有键,并且只覆盖选择键。 –

回答

1

让我首先建议一种方法,将原始文件和自定义设置保存在git存储库中。看下面如何用git之外的文件覆盖设置。

安装Git的支柱

我认为所有的文件都保存在一个Git pillar like described here。我在这里使用盐版本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 

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