如何确保新的 ec2_eip 已准备好执行下一个任务?

How can I make sure a new ec2_eip is ready for the next task?

使用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 而失败。我怎样才能避免这个错误?

在我对弹性 IP 的测试中,这似乎运行良好:

- pause: seconds=15
- name: wait for ssh
  wait_for: port=22 timeout=600

这感觉像是黑客攻击,但 the docs 说 "Use wait_for and pause to delay further playbook execution until the instance is reachable, if necessary." 所以这是官方黑客攻击。

您可以尝试调整暂停长度,尤其是在 15 秒后您仍然看到错误的情况下。我发现 seconds=5seconds=10 不够长。

wait_for 做很多事情——它可以监视文件,也可以监视端口。在您的情况下,您不是在等待 Web 服务器完成 starting/stopping,而是想知道服务器已启动。

这里有一些隐藏的细微差别-命令是 运行 在 远程 节点上,所以 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。尽管如此,它只是隐含的,所以很容易错过。