我正在尝试构建一个ansible playbook来配置一个ubuntu流浪盒.除了在升级内核后控制ubuntu盒重启之外,该手册几乎可以正常工作.
我有一个ansible主机文件如下:
localhost ansible_connection=local
dockerhost ansible_ssh_port=2222 ansible_ssh_host=127.0.0.1
Run Code Online (Sandbox Code Playgroud)
我试图解决这个问题的最新版本如下:
- 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
Run Code Online (Sandbox Code Playgroud)
使用此playbook步骤等待ssh端口停止响应的进程块,直到它达到超时并退出playbook,我猜测如果重启速度特别快,可能会在wait_for命令的轮询间隔之间发生并且错过ssh端口实际关闭的时间很短.ansible返回的错误是:
失败:[dockerhost] => {"elapsed":300,"failed":true} msg:等待127.0.0.1:2222停止时超时.
至少一次它管理到了ansible等待ssh端口再次可用的步骤,但挂在那里直到超时.我认为这种解决方案对重启速度的差异过于敏感,这在虚拟环境中可能会有很大差异.我使用的ansible版本是1.5.3 Ubuntu是12.04lte,内核升级到3.8完整的playbook安装docker和所有依赖项.
我尝试了各种网站中发现的许多变化和想法,但从未设法正确控制重启并继续我的剧本与下一步.
我正在寻找一种简单而简单的方法来重启服务器,并在机器恢复运行后继续执行剧本中的后续步骤
我没有探索运行本地流浪汉重装的可能性,因为我想在操作中使用相同的剧本我不会在流浪汉中运行,我只提到了流浪汉,以防它产生一些我不知道的复杂性.我也不想暂停5分钟并希望服务器再次启动,使用这种工具的关键是以可预测和及时的方式配置服务器并从环境移植到环境,暂停只是似乎不对.
我也四处寻找可以管理这个要求的ansible模块,但是对ansible网站的评论似乎排除了这一点.
谢谢