Ansible 的 ping 模块(全名 ansible.builtin.ping)是一个非常稳定且广泛使用的模块,用于测试 Ansible 是否能够成功登录到目标主机,并验证主机上是否存在可以执行代码的 Python 解释器。它与网络中的 ping 命令不同,而是专注于测试 Ansible 的连接能力和主机的基本运行状态。

主要功能

  • 验证连接:检查 Ansible 是否能够通过 SSH 或其他连接方式登录到目标主机。
  • 验证 Python 环境:确保目标主机上安装了 Python 解释器,因为 Ansible 需要 Python 来执行任务。
  • 简单易用:通常不需要额外参数,直接运行即可。

主要参数和返回值

  • data 参数:用于自定义返回值,默认为 "pong"。如果设置为 "crash",则在失败时会抛出异常。
  • 返回值:默认返回 "pong",可以通过 data 参数自定义。

示例:测试主机可用性

以下是一个使用 ping 模块的 Ansible Playbook 示例:

---
- name: ping module demo
  hosts: all
  become: false
  tasks:
    - name: test connection
      ansible.builtin.ping:

执行步骤

  1. 准备主机清单文件 确保你的 inventory 文件中包含了目标主机的列表。例如:

    ini [targets] demo.example.com

  2. 运行 Playbook 使用以下命令运行 Playbook:

    bash ansible-playbook -i inventory ping_demo.yml

执行结果

如果目标主机可以成功连接,输出将类似于以下内容:

PLAY [ping module demo] ***************************************************

TASK [Gathering Facts] ****************************************************
ok: [demo.example.com]

TASK [test connection] ****************************************************
ok: [demo.example.com] => {
    "changed": false,
    "ping": "pong"
}

PLAY RECAP ****************************************************************
demo.example.com           : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

如果目标主机无法连接,可能会看到类似以下的错误:

TASK [test connection] ****************************************************
unreachable: [demo.example.com] => {"changed": false, "msg": "SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh"}

自定义返回值

如果你想自定义返回值,可以使用 data 参数。例如:

---
- name: ping module demo with custom data
  hosts: all
  become: false
  tasks:
    - name: test connection with custom data
      ansible.builtin.ping:
        data: "custom response"

执行后,返回值将变为 "custom response":

TASK [test connection with custom data] ***********************************
ok: [demo.example.com] => {
    "changed": false,
    "ping": "custom response"
}

使用 crash 参数

如果你想测试失败情况,可以将 data 参数设置为 "crash":

---
- name: ping module demo with crash
  hosts: all
  become: false
  tasks:
    - name: test connection with crash
      ansible.builtin.ping:
        data: "crash"

执行后,任务将失败并抛出异常:

TASK [test connection with crash] ******************************************
fatal: [demo.example.com]: FAILED! => {"changed": false, "msg": "crash"}

总结

Ansible 的 ping 模块是一个简单但非常有用的工具,用于快速验证 Ansible 是否能够成功连接到目标主机。它通常用于初步测试和诊断连接问题。通过自定义 data 参数,你可以根据需要调整模块的行为。