首页 文章

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

提问于
浏览
3

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

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

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

例如 . “基础”或“默认”支柱文件的设置如下:

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

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

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

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

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

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

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

1 回答

  • 2

    我首先建议一种将原始文件和自定义设置保存在git存储库中的方法 . 请参阅下文,了解如何使用git之外的文件覆盖设置 .

    Setup 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全部合并在一起 .

    由于这在没有指定环境的情况下有效,我建议不要在这里使用环境 .

    Override some local settings outside of Git

    要在本地覆盖某些设置,您可以添加另一个外部支柱 . 其中一个最简单的是 cmd_yaml ,它将运行一个命令(这里: cat )并将输出与当前支柱合并:

    ext_pillar:
      - git:
        - master https://gitserver/git-pillar.git:
          - env: base
      - cmd_yaml: cat /srv/salt/local_override.sls
    

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

相关问题