Ansible教程:Ad-hoc 命令用法-ping模块

介绍

校验两点:

  1. SSH登录能否成功
  2. 受控节点有可用Python解释器

模块全名:ansible.builtin.ping,属于内置核心模块,Linux/类Unix主机使用

重点:不是 ICMP ping! 不是网络层 ping

原理

  1. Ansible 通过 SSH 连接目标主机
  2. 将ping模块脚本传输到远程主机执行
  3. 在远程主机尝试调用Python,验证Python环境可用
  4. 成功返回 pong;失败抛出异常(SSH拒绝、密码错误、无Python、权限不足等)

返回值

  • ping:字符串,成功默认返回 "pong"
  • changed: false:ping模块不会修改远程主机任何文件/状态,永远不会产生变更
  • ansible_facts:顺带返回远程主机Python解释器信息(discovered_interpreter_python)

成功示例输出:

192.168.1.100 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

例子:指定ip列表

注意: 必须有 , 否则报错,有 , 表示列表

ansible all -i 192.168.58.138,  -m ping

例子:自定义 inventory(推荐)

创建文件

新建 ansible_client.ini

[web]
192.168.58.138 ansible_user=user

解释:

  • [web]:主机组名,可以一次性管理组内所有机器
  • ansible_user:ssh登录的用户名,可省略

提示:执行命令时用 -i ansible_client.ini 指定。

测试所有的组内被控端

ansible all -m ping -i ansible_client.ini

测试 web 组内被控端

ansible web -m ping -i ansible_client.ini

例子:修改默认 hosts

修改 hosts 文件

sudo nano /etc/ansible/hosts

在文件末尾添加分组:

[web]
192.168.58.138 ansible_user=user

解释:

  • [web]:主机组名,可以一次性管理组内所有机器
  • ansible_user:ssh登录的用户名,可省略

测试所有的组内被控端:

ansible all -m ping

测试 web 组内被控端:

ansible web -m ping

五、常见失败原因

  1. SSH 无法连通:防火墙拦截、端口不是22、IP不可达、密钥不对、账号密码错误
  2. 受控节点无Python:最小化安装CentOS/RHEL,没有python2/python3,ping直接报错
  3. Python版本/解释器识别问题:Ansible找不到python,需要在inventory指定 ansible_python_interpreter=/usr/bin/python3
  4. sudo权限问题:不需要sudo,ping不需要root权限,普通用户SSH登录即可
  5. 主机密钥确认:首次ssh连接,需要手动ssh登录一次接受host key,或配置host_key_checking=False

查看官方文档命令

ansible-doc ping

原文出处:/show_1GW45GbSJxyU.html