在盐命令的主人的名字

我对盐很新,所以有可能我错过了一些东西,但是我无法弄清楚。

我使用salt作为命令执行工具(到目前为止没有configurationpipe理)。 我无法find一种方法来从盐唾手可得的configuration,并把它们放到git存储库。

我最终试图实现的是给盐主这样的configfiles列表

/etc/ssh/ssh_config /etc/vim/vimrc etc. 

并得到salt-master运行获取这些文件,把它放在文件夹中

 /srv/salt/minions/configs/minion01/etc/ssh/ssh_config /srv/salt/minions/configs/minion02/etc/ssh/ssh_config 

那么我可以让主人把所有的东西都推到我们的git服务器上,并且让所有的configuration版本化。

我知道salt可以处理状态,但我发现的一切都是关于将文件从主文件推送到备用文件以保持状态,但是我只想从所有服务器收集所有更新configuration并自动对其进行版本。

有一个命令叫

 salt \* cp.push /etc/ssh/ssh_config 

这将configuration文件推到/ var / cache /盐/ minion / minion01 /文件/ etc / ssh / ssh_config,这似乎是完美的,但我不知道如何告诉盐做文件更改(我们有几个服务器和大量的configuration到版本…),只有取得它,如果它已经改变,所以我不必每隔五分钟左右(通过cron)获取所有文件。

任何人都有一个想法如何用盐做到这一点?

问候,Mohrphium

您正在考虑这个错误的方法,Salt的目的不是为了向您提供您在机器上所做的更改的历史logging,而是指示机器应该处于“高”状态。etckeeper遵循本地进行的更改,将本地更改logging到git中,而盐会使您的框在git回购中发生任何更改。 如果仆从有任何本地的变化,它会告诉你,当你做一个高级的状态。 你能猜出哪一个尺度?

所以这里是一个简单的例子,如何做到这一点(这发生在使用bitbucket git):

1)使用以下命令设置你的salt master / etc / salt / master:

 file_roots:
  基础:
     -  / srv / salt

 fileserver_backend:
   - 混帐
   - 根

 gitfs_remotes:
   -  [email protected]:user / your-salt-repo.git

 pillar_roots:
  基础:
     -  / SRV /支柱

2)在你的git仓库的根目录下创build一个简单的top.sls:

基础:
   '* .domain.com':
     - 核心

3)在你的git仓库中创build一些额外的目录:

 mkdir核心
 mkdir服务器
 mkdir servers / default
 mkdir servers / minion01

4)创build一个简单的核心/ init.sls文件:

的/ etc / SSH / ssh_config中:
   file.managed:
     - 资源:
       -  salt:// servers / {{grains ['id']}} / ssh_config
       -  salt:// servers / default / ssh_config

5)在servers / default / ssh_config下创build一个默认的ssh_config。

6)在servers / minion01 / ssh_config下创build一个特定于服务器的ssh_config

7)提交并推送更改回你的git仓库(bitbucket)。

8)从盐主运行: sudo salt '*' state.highstate test=true以查看将应用的更改。

当minion01联系salt master时,会得到servers / minion01 / ssh_config,但是其他任务(比如minion02)在/servers/minion.id.whatever/下没有ssh_config文件,并且将列表移到下一个源(服务器/默认)。 而不是通过minion_id这样做,你也可以基于其他谷物,如os,fqdn,domain等来做到这一点(参见一个salt 'minion-id' grains.items )。

一旦你捕获了这些文件的初始状态,你可以在一个中心位置进行修改(git repo),然后运行state.highstate来进一步修改。 最初的痛苦是值得的。 你可以自动化一些,但是你真正想要做的是find离群值,根据定义需要一些人工干预来识别。 我build议你从ssd_config开始,一次运行state.highstate test=true一个state.highstate test=true 。 如果从默认值有变化,它会显示你的差异,你可以判断是否保证违约的例外。

注意:您需要为salt master上的根用户设置ssh密钥才能读取您的git存储库(bitbucket调用这些部署密钥)。