我正在尝试构建一个Ansible剧本来配置一个ubuntu流浪者盒子。除了在升级内核后控制ubuntu盒重启之外,该手册还可以正常工作。
我有一个用于ansible的主机文件,如下所示:
localhost ansible_connection=local
dockerhost ansible_ssh_port=2222 ansible_ssh_host=127.0.0.1
我尝试解决此问题的最新迭代如下:
- name: Restart the server
shell: sleep 2s && reboot & executable=/bin/bash
- name: Wait until the virtual machine stop ie: ssh port stop responding
local_action: wait_for host={{ansible_ssh_host}} port={{ansible_ssh_port}} state=stopped
sudo: false
- name: Wait for server to come up
local_action: wait_for host={{ansible_ssh_host}} port={{ansible_ssh_port}} delay=30
sudo: false
通过执行此剧本步骤,过程块等待ssh端口停止响应,直到达到超时并退出剧本为止,我猜测如果重新启动速度特别快,则它可能发生在wait_for命令的轮询间隔之间,并且错过了ssh端口实际上处于关闭状态的时间很短。ansible返回的错误是:
失败:[dockerhost] => {“经过”:300,“失败”:true} msg:等待127.0.0.1:2222停止时超时。
至少有一次它成功进入了步骤,ansible等待ssh端口再次可用,但是挂在那里直到超时。我认为此解决方案对于重新启动速度的差异过于敏感,在虚拟环境中,重新启动速度的差异可能很大。我正在使用的ansible版本是1.5.3 Ubuntu是12.04lte,内核升级到3.8完整的剧本安装docker和所有依赖项。
我尝试了在各种网站上找到的许多变体和想法,但从未设法正确地控制重新引导,并继续进行后续步骤。
我正在寻找一种简单且可靠的方法来重新启动服务器,并在计算机备份并运行后继续执行剧本中的后续步骤。
我没有探索运行本地无业游民重装的可能性,因为我想在不运行无业游民的情况下使用同一本剧本,我只是提到了无业游民,以防万一它造成了我不知道的复杂性。我也不想只暂停5分钟,希望服务器再次启动,使用这种工具的目的是以可预测的及时方式提供服务器,并可以在环境之间随身携带,这是一个暂停只是看起来不正确。
我还四处寻找可以满足此要求的ansible模块,但是在ansible网站上的评论似乎将其排除在外。
谢谢
我可能建议使用网桥或专用网络。使用端口转发可能很棘手。我将您的代码与专用网络和桥接网络一起使用时,两者完美结合。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句