频繁下线机器的 Ansible 管理

Rga*_*ddi 4 linux ansible

我想使用 Ansible 来管理大约十几个 Linux 工作站上的配置。问题是,作为人们使用的物理机器,它们经常关闭。所以我需要一个解决方案来确保,当我更改集中配置时,它不仅会被推送到正在运行的机器上,而且最终会被推送到几周后出现的机器上。

我有一个想法,并且我愿意接受更好的想法,那就是让一个 cron 作业运行 @reboot 以通过 SSH 连接到服务器并请求针对自身运行剧本。

这似乎意味着我需要:

  • 在服务器上创建部署用户(deploy@server)
  • 在每个工作站上创建一个部署用户 (deploy@ws) 并赋予他们 sudo 权限。
  • 将deploy@server的公钥添加到deploy@ws的authorized_keys中
  • 为deploy@ws 生成一个新的SSH 密钥,并将新生成的SSH 密钥添加到deploy@server 的authorized_keys
  • 设置工作站 cron 作业以作为 deploy@ws 运行以通过 SSH 连接到服务器,并使用相关工作站的 --limit 运行 ansible-playbook。该作业以 deploy@server 的身份运行,然后以 deploy@ws 的身份通过 SSH 返回以实际进行配置。

这感觉有点令人费解。是否有一些更直接的解决方案,我错过了?

Joh*_*ald 5

不需要代理到中央服务器并返回。在托管节点上安装 Python 和 Ansible,并在本地主机上运行 play。这将 Ansible 从推送变为拉取。

ansible-pull是此类脚本最著名的示例。它假设可以从源控制存储库中检索播放。不是最优雅的事情,但肯定是使用临时清单编写 ansible-playbook 脚本的有用示例。也就是说,它默认将主机模式限制为 localhost加号,socket.getfqdn()因此您可以提供完整的清单,但它只为自己运行。

如果脚本在计划任务中以 root 身份运行,则这种拉取模型的优点可能是不需要特权远程用户。

缺点,这在可以运行 Ansible 的主机上更容易运行,所以 POSIX 操作系统,而不是 Windows 或网络设备。在拉模型中跟踪库存并不容易,请考虑通过打开回调插件来实现某种报告。