使用 Ansible ad-hoc 命令串行重启服务器并设置暂停时间

56次阅读
没有评论

问题描述

想要通过 Ansible ad-hoc 命令在 Ansible 清单中的所有主机上串行执行重启操作,并且希望在每次重启之间有一定的等待时间。他希望达到类似于以下命令的效果:

ansible -i inventory nodes -a "/sbin/reboot"

这个命令应该在每次重启之后暂停,并且按顺序执行。

解决方案

请注意以下操作可能会涉及到版本差异或需要额外的配置。

使用 Ansible 的 reboot 模块

Ansible 提供了一个 reboot 模块,它可以更好地满足你的需求,而不是直接运行一个命令。这个模块允许你在重启服务器之前等待服务器完全启动,并按照指定的顺序逐个重启服务器。

以下是使用 reboot 模块的示例命令:

ansible -i inventory nodes --forks 1 -m reboot

在上面的命令中,--forks 1 参数确保 Ansible 以串行模式运行,每次只运行一个任务。这将确保在一个服务器重启之后等待其完全启动,然后再继续下一个服务器。

你可以通过 -a 参数将需要的参数传递给模块,根据你的需求进行配置。

使用 sleep 和 -f 参数的方式

另一种方法是在命令中使用 sleep 命令来实现暂停,并通过设置 -f 参数让 Ansible 以串行模式运行。这个方法可以让你自定义等待的时间。

以下是使用 sleep-f 参数的示例命令:

ansible -i inventory nodes -a "sleep 30 && /sbin/reboot" -f 1

在上面的命令中,sleep 30 表示等待 30 秒,然后执行 /sbin/reboot 命令。 -f 1 参数确保 Ansible 以串行模式运行。

总结

以上两种方法都可以帮助你在 Ansible 清单中的所有主机上进行串行重启操作,并可以设置等待时间。使用 Ansible 的 reboot 模块可以更加直观和灵活地实现这个目标,而使用 sleep-f 参数的方式则更具有可定制性。

请记得根据你的实际情况选择适合的方法,并在执行操作前做好备份和测试。

如果你对 Ansible 的其他功能或更多高级用法感兴趣,可以查阅官方文档或深入学习 Ansible 的更多内容。

正文完