使用ec2_eip关联或取消关联ElasticIP时,新IP可用几秒钟。但wait_for
经常因致命错误SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh
而失败。如何避免此错误?
答案 0 :(得分:2)
wait_for
可以做许多事情 - 它可以监视文件,也可以监视端口。在您的情况下,您没有注意Web服务器完成启动/停止,您想要知道服务器已经启动。
这里有一些隐藏的细微差别 - 命令在远程节点上运行,因此SSH Error
不是来自wait_for
内部,而是来自Ansible本身,因为Ansible是尝试远程连接并运行wait_for
。
这是什么意思?您需要在服务器端运行wait_for
并等待节点恢复活动。
- name: wait for server to finish booting
local_action: wait_for port=22 timeout=60 host="{{ inventory_hostname }}"
这可以在wait_for
documentation page的最后一个例子中看到。不过,这只是暗示,所以很容易错过。
答案 1 :(得分:1)
在我使用弹性IP的测试中,这似乎运作良好:
- pause: seconds=15
- name: wait for ssh
wait_for: port=22 timeout=600
这感觉就像一个黑客,但the docs说"使用wait_for并暂停以延迟进一步的playbook执行,直到实例可以访问,如果有必要的话。"所以这是一个正式的黑客攻击。
您可以尝试暂停长度,特别是如果您在15秒后仍然看到错误。我发现seconds=5
或seconds=10
不够长。