Saltstack主机配置和提高数据可读性

时间:2018-06-25 14:10:14

标签: salt-stack

我们正在使用食盐(无船长者,逃亡者)来维持10名主机的舰队。到年底可能会增长到15-20。我有一个名为credentials/init.sls的支柱文件,其中有一个很大的Yaml,看起来像这样:

host_credentials:
  host1.example.com:
    role: staging
    mysql:
      superdatabase:
        role1:
          username: role1_username
          password: someSecretSHA1
          from_hosts:
            - host2.example.com
          grants: select, insert, update, delete
        role2:
          username: role2_username
          password: anotherSecretSHA1
          from_hosts:
            - host3.example.com
          grants: select

  host2.example.com:
    role: staging
    superthing:
      mysql:
        database: superdatabase
        host: host1.example.com
        role: role1

此处的要点是,配置host1的代码可以从host_credentials['host1.example.com']获取所有相关数据,而设置host2的代码可以通过一些查询从host_credentials['host2.example.com']获取数据,例如,在host1的信息中输入,以便了解具有role1的host1上超级数据库的用户和密码。

这可行,但是很麻烦。实际上,防火墙规则(乍看之下也可能已在此yaml结构中)现在位于不同的支柱文件中,这非常繁琐。而且,没有任何方法可以控制每个主机的Yaml是否符合我们想要的模式,因此我们必须在salt代码中进行一些错误检查。

此外,当有一天我们使用盐管理器时,这将导致我们不得不与所有奴才共享所有主机信息,这并不理想。

目标是将每条信息记录一次。例如,如果我更改了mysql数据库用户的密码,则不必两次更改密码,一次是在服务器上,一次是在使用该数据库的每个客户端上。而且,当我做错事时,我想得到半合理的错误信息。如果我告诉host4连接到host2上的mysql,我应该收到一条错误消息,内容为“ host4请求连接到host2上的mysql,但host2没有运行mysql服务器”。

目前,我发现的唯一更好的解决方案是编写一些python代码(使用salt py渲染器),该代码生成一个空对象,但在中间进行了大量检查。

salt/codequal/init.sls

#!py

def run():
    # Do lots of error checking here.
    return {}

欢迎任何反馈。既然我还没有看过这样的东西,我怀疑我错过了一种更自然的方式来做自己想做的事。

0 个答案:

没有答案