使用 Ansible 如何在 SSH 服务重启时等待或恢复?

使用 Ansible 如何在 SSH 服务重启时等待或恢复?

使用 Ansible 如何在 SSH 服务重新启动时等待或恢复?我有一个 ansible playbook,它对 SSH 配置做了一些更改,但是当 ssh 重新启动时,Ansible 当然会丢失 SSH 连接。我正在使用内置的 ansible 模块来执行服务重启。

我可以触发重新启动并等待,但当我只需要等待一会儿服务完成重新启动时,这似乎有些过度,有人有办法解决这个问题吗?

答案1

只需在 ssh 服务重启任务后添加一个 wait_for 模块的新任务即可。以下是参考来自官方 Ansible 文档。

# Do not assume the inventory_hostname is resolvable and delay 10 seconds at start
- name: Wait 300 seconds for port 22 to become open and contain "OpenSSH"
  ansible.builtin.wait_for:
    port: 22
    host: '{{ (ansible_ssh_host|default(ansible_host))|default(inventory_hostname) }}'
    search_regex: OpenSSH
    delay: 10
  connection: local

在默认的 Ansible 示例中,延迟为 10 秒,但我还在我的示例(如下)中将超时时间添加到 300 秒,因此它将每 10 秒重试一次,如果它无法连接到库存主机上的端口 22,它将在 300 秒后失败。请根据需要随意修改它。

这是您任务的示例。我在提供解决方案之前已经测试过了。它包含三个任务。第一个任务是重新启动 ssh 守护进程。第二个任务将等待 300 秒,每 10 秒重试一次。如果连接成功,它将继续执行下一个任务,我已经使用 ping 模块对其进行了测试。

---
- name: Reload service ssh, in all cases
  hosts: yourinventoryname
  become: true
  tasks:
    - name: Reload SSH service
      ansible.builtin.systemd:
        name: sshd
        state: restarted

- name: Wait for SSH service to be available
  hosts: all
  gather_facts: false
  tasks:
    - name: Wait for port 22 to become open and contain "OpenSSH"
      ansible.builtin.wait_for:
        port: 22
        host: '{{ (ansible_ssh_host|default(ansible_host))|default(inventory_hostname) }}'
        search_regex: OpenSSH
        delay: 10
        timeout: 300
      connection: local

- name: Test SSH connection
  gather_facts: false
  hosts: yourinventoryname
  tasks:
    - name: Ping hosts
      ansible.builtin.ping:

相关内容