问题描述
想要通过 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 的更多内容。