我们正在使用食盐(无船长者,逃亡者)来维持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 {}
欢迎任何反馈。既然我还没有看过这样的东西,我怀疑我错过了一种更自然的方式来做自己想做的事。