首页 > 解决方案 > 服务重启后ansible重新连接

问题描述

我有一个处理程序可以在配置更改时重新启动服务:

- name: restart openvpn
  service: name=openvpnas state=restarted

然而 ansible 无法正确处理它:

fatal: [vpn]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host 10.10.10.2 port 22: Connection refused", "unreachable": true}

Ansible 可以处理主机重启,但我该如何处理这种服务重启?

作为临时解决方法:

- name: restart openvpn
  debug: msg="restarting openvpn"
  changed_when: yes
  notify:
      - restart openvpn raw
      - reconnect

- name: restart openvpn raw
  service: name=openvpnas state=restarted
  ignore_errors: yes
  async: 300
  poll: 0

- name: reconnect
  wait_for_connection:
    delay: 5
    timeout: 300

但是,即使在异步模式下,服务重启任务仍然失败。

标签: ansible

解决方案


从 Ansible 2.7 开始,ignore_unreachable可以使用。我确实认为这是一个稍微干净的解决方案,因为它只忽略连接错误。

我使用这样的处理程序:

- name: restart Tor
  service:
    name: tor@default
    state: restarted
  ignore_unreachable: yes

- name: reconnect
  wait_for_connection:
    connect_timeout: 15
    sleep: 5 
    timeout: 300
  listen: restart Tor

推荐阅读