我对盐还很陌生,所以可能我错过了一些东西,但我无法弄清楚。
我正在使用 salt 作为命令执行工具(目前还没有配置管理)。我找不到使用 salt 从 minions 获取配置并将其放入 git 存储库的方法。
我最终尝试实现的是为 salt master 提供如下配置文件列表
/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 服务器并对所有配置进行版本控制。
我知道 salt 可以处理状态,但我发现的一切都是关于将文件从主机推送到从机以保持应有的状态,但我只想从所有服务器收集所有更新配置并自动对其进行版本控制。
有一个名为
salt \* cp.push /etc/ssh/ssh_config
将配置文件推送到 /var/cache/salt/minion/minion01/files/etc/ssh/ssh_config,这看起来很完美,但我不知道如何告诉 salt 在文件更改时执行此操作(我们有相当多的服务器和很多要版本的配置......)并且仅在文件发生变化时才获取它,这样我就不必每五分钟左右获取一次所有文件(通过 cron)。
有人知道如何用盐来做这个吗?
问候,Mohrphium
答案1
您的想法是错误的,Salt 的设计目的不是为您提供您在机器上所做的更改的历史记录,而是规定机器应处于的“高”状态。etckeeper 会跟踪本地所做的更改,将本地所做的更改记录到 git 中,而 salt 会让您的机器跟踪 git repo 中的任何更改。如果 minion 有任何本地更改,它会在您执行 highstate 时显示给您。您能猜出哪一个是可扩展的吗?
下面是一个如何执行此操作的简单示例(这恰好使用 bitbucket 进行 git):
1)使用以下命令设置你的 salt master /etc/salt/master:
文件根目录: 根据: - /srv/salt 文件服务器_后端: -git - 根 gitfs_remotes: -[电子邮件保护]:用户/你的 salt-repo.git 支柱根: 根据: - /srv/支柱
2)在你的 git repo 根目录中创建一个简单的 top.sls:
根据: ‘*.domain.com’: - 核
3)在你的 git repo 中创建一些额外的目录:
mkdir 核心 mkdir 服务器 mkdir 服务器/默认 mkdir 服务器/minion01
4)创建一个简单的core/init.sls文件:
在 /etc/ssh/ssh_config 中: 文件.管理: - 来源: - salt://servers/{{grains['id'] }}/ssh_config -salt://服务器/默认/ssh_config
5)在servers/default/ssh_config下创建默认的ssh_config。
6)在servers/minion01/ssh_config下创建minion特定的ssh_config
7)提交并将更改推送回您的 git 存储库(bitbucket)。
8)从 salt master 运行:sudo salt '*' state.highstate test=true
查看将应用哪些更改。
当 minion01 联系 salt master 时,它将获取 servers/minion01/ssh_config,但对于 /servers/minion.id.whatever/ 下没有 ssh_config 文件的其他 minion(例如 minion02),它将沿列表向下移动到下一个源(servers/default)。除了通过 minion_id 执行此操作外,您还可以基于其他 Grain(如 os、fqdn、domain 等)执行此操作(使用 查看 minion 上的 Grain 列表salt 'minion-id' grains.items
)。
一旦捕获了这些文件的初始状态,您就可以在一个中心位置(git repo)进行更改,然后运行 state.highstate 以推出进一步的更改。这种最初的痛苦是值得付出努力的。您可以自动执行其中的一些操作,但您真正想要做的是找到异常值,这些异常值根据定义需要一些手动干预才能识别。我建议您从 ssd_config 之类的东西开始,state.highstate test=true
一次运行一个 minion。如果与默认值有变化,它会向您显示差异,您可以判断这是否需要对默认值进行例外处理。
注意:您需要为 salt master 上的 root 用户设置 ssh 密钥,以便有权限读取您的 git 存储库(bitbucket 称之为部署密钥)。