首页 > 解决方案 > ansible-playbook 等待 ssh 超时并出现 ping 错误,但在本地工作

问题描述

我正在尝试通过我的 ansible-playbook 文件 ssh 到一个 ec2 实例。我可以在本地通过 ssh 进入实例,目前我的 ansible-playbook 文件中有以下配置:

- name: Wait for SSH to come up
  delegate_to: "{{ public_dns }}"
  wait_for_connection:
    delay: 60
    timeout: 120
  with_items: "{{ public_ip }}"
  remote_user: ubuntu
  connection: ssh
  register: item

但是,当我运行它时,我收到以下错误:

失败:[localhost -> {{ public_dns }}] (item={'_ansible_item_result': True, '_ansible_no_log': False, '_ansible_delegated_vars': {'ansible_delegated_host': u'{{ public_dns }}', 'ansible_host': u'{{ public_dns }}'}, 'changed': False, 'elapsed': 184, 'failed': True, 'item': u'{{ public_ip }}', 'msg': u"超时等待用于 ping 模块测试成功:'ping'", '_ansible_ignore_errors': None}) => {"changed": false, "elapsed": 184, "item": "{{ public_ip }}", "msg": "等待 ping 模块测试成功超时:'ping'"}

当我从我的机器上 ping public_dns 或 public_ip 值时,两者都成功。

为什么运行 Ansible 文件时 ping 事件会失败?(我不是故意尝试 ping 实例,我实际上想通过 ssh 连接到它。但是错误表明 Ansible 可能在连接之前尝试 ping 实例,基于“超时等待 ping 模块测试成功")

从那以后,我将方法更改为:

- name: Add new instance to host group
  add_host:
  hostname: ""{{ public_ip }}"
  groupname: launched

- name: Wait for SSH to come up
  wait_for:
    host: launched
    port: 22
    sleep: 30
    delay: 10
    timeout: 360
  state: started

但是,这引发了一个不同的错误,“等待启动时​​超时:22” 回溯包括以下内容:

connect_socket = socket.create_connection((host, port), connect_timeout) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 557, in create_connection for res in getaddrinfo(主机,端口,0,SOCK_STREAM):。

有任何想法吗?

标签: amazon-ec2ansible

解决方案


请注意 Ansible ping 模块ICMP Ping不同:https ://docs.ansible.com/ansible/2.5/modules/ping_module.html 。sshAnsible在使用 ping 模块时会尝试通过 via 连接到目标主机

如果上述任务在针对新配置的 ec2 实例运行的剧本中,我会将其设置为我的第一个任务gather_facts: false并运行。wait_for_connection如果仍然失败,请尝试增加timeout参数


推荐阅读