如何确保新的ec2_eip为下一个任务做好准备?

时间:2015-03-11 04:19:46

标签: ansible ansible-playbook

使用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而失败。如何避免此错误?

2 个答案:

答案 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=5seconds=10不够长。