模块介绍
# command 模块
作用:在远程节点上执行一个命令
chdir 在执行命令前,先cd进入该参数指定的目录
creates 在创建一个文件之前,判断该文件是否存在,如果存在则跳过前面的动作,如果不存在则执行前面的动作
free_from 该参数可以输入任何的系统命令,实现远程执行和管理
removes 定义一个文件是否存在,如果存在则执行前面的动作,如果不存在则跳过前面的动作
2
3
4
command 模块是 ansible 的默认基本模块,也可以省略不写,但是要注意如下的坑:使用 command 模块,不得出现 shell 变量 $name
,也不得出现特殊符号 > < | ; &
这些符号,请使用 shell 模块
command 模块案例
1.获取所有被管理端的负载信息:ansible ceshi -m command -a 'uptime'
2.让客户端机器,先切换到 /tmp 目录下,然后打印当前的工作目录:ansible ceshi -m command -a 'pwd chdir=/tmp/'
3.练习 creates 参数:判断是否有 /tmp 目录,如果有则跳过:ansible 10.0.0.21 -m command -a 'pwd creates=/tmp/'
4.练习 removes 参数:存在则执行,不存在则跳过:ansible ceshi -m command -a 'ls /opt removes=/opt'
5.warn 参数:是否提供告警信息:ansible ceshi -m command -a 'chmod 000 /etc/hosts warn=False'
# shell 模块
在远程机器上执行命令,可以是复杂的命令
chdir 在执行命令前,先cd进入该参数指定的目录
creates 在创建一个文件之前,判断该文件是否存在,如果存在则跳过前面的动作,如果不存在则执行前面的动作
free_from 该参数可以输入任何的系统命令,实现远程执行和管理
removes 定义一个文件是否存在,如果存在则执行前面的动作,如果不存在则跳过前面的动作
2
3
4
shell 模块案例
批量查询进程信息:ansible -m shell -a 'ps -ef | grep vim | grep -v grep'
批量创建文件写入信息:ansible -m shell -a 'echo testInfo > /tmp/testFile.txt'
批量执行脚本(被执行的脚本必须要在客户端存在,否则会报错文件不存在,这是 shell 模块的特点):
1.创建文件夹
2.创建 sh 文件,写入脚本
3.+x权限
4.执行脚本
5.忽略 warning 信息
ansible ceshi -m shell -a "mkdir -p /server/myscripts/;echo 'hostname' > /server/myscripts/hostname.sh;chmod +x /server/myscripts/hostname.sh;bash /server/myscripts/hostname.sh warn=False"
2
3
4
5
6
7
在用 shell 模块时遇到两个问题
问题1:远程启动 tomcat 问题
描述:在管理端使用 shell 模块无论是命令行远程启动 tomcat,还是剧本等等各种方式,结果都是执行成功,但是发现远程主机上的tomcat 事实上并没有启动
分析:给脚本通过 sleep 添加一个延迟执行的时间,发现在脚本未结束的这段时间,tomcat 是正常启动的,但是脚本执行完后 tomcat 就挂了
这通常是因为 tomcat 是作为该会话的子进程启动的,当会话关闭时,所有子进程也会被终止,所以,解决的办法就在于结束 ssh 连接后,所有的子进程继续执行
使用 nohup
启动 Tomcat: nohup
可以让进程在会话断开后继续运行
ansible 10.0.0.22 -m shell -a 'nohup bash /opt/start.sh &'
nohup
: 保持进程在退出会话后继续运行
&
: 在后台运行 Tomcat,防止阻塞会话
问题2:更新系统当前环境变量问题
描述:给被控端安装 jdk 后,通过 source /etc/profile 更新环境变量,发现并没有生效
分析:每次 ansible 通过 shell
模块执行命令时,它会启动一个新的 shell 进程,在新的进程中,环境变量是临时的,执行完命令后该进程会终止,环境变量也随之失效
执行 ansible 10.0.0.21 -m shell -a 'bash -c "source /etc/profile && java -version"',发现输出的版本是最新环境变量
建立新的 ssh 连接,发现环境变量也是最新的
也就是说没有办法让当前系统的环境变量更新
# script 模块
把管理节点上的脚本远程传输到被管理节点上去执行
比起 shell 模块,script 模块功能更加强大,在管理机器上有一份脚本,就可以在所有的管理节点上执行
ansible-doc -s script:查看该模块支持的参数
echo -e "pwd\nhostname" > /myscripts/local_hostname.sh
ansible ceshi -m script -a '/myscripts/local_hostname.sh'
[root@m01 ~]# ansible ceshi -m script -a '/myscripts/local_hostname.sh'
10.0.0.21 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 10.0.0.21 closed.\r\n",
"stderr_lines": [
"Shared connection to 10.0.0.21 closed."
],
"stdout": "/root\r\nrsync01\r\n",
"stdout_lines": [
"/root",
"rsync01"
]
}
10.0.0.22 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 10.0.0.22 closed.\r\n",
"stderr_lines": [
"Shared connection to 10.0.0.22 closed."
],
"stdout": "/root\r\nnfs01\r\n",
"stdout_lines": [
"/root",
"nfs01"
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# copy 模块
用于将文件从控制节点复制到受控节点
ansible-doc -s copy:查看该模块支持的参数
src 指定要复制的源文件路径 必填
dest 指定目标文件的路径 必填
mode 设置文件的权限,使用八进制格式(如 0644)或符号模式(如 u=rw,g=r,o=r)
owner 指定目标文件的所有者
group 指定目标文件的所属组
backup 如果目标文件已存在,设置为 yes 时会在覆盖之前备份该文件
force 如果目标路径已经存在相同的文件,设置为 yes 会强制覆盖
content 直接指定要复制到目标文件的内容
remote_src 当设置为 yes 时,表示源文件位于受控节点而非控制节点,src 路径处于远程主机本身的文件
validate 在将文件复制到目标位置之前,通过指定的命令来验证文件的合法性 validate: '/usr/sbin/nginx -t -c %s'
2
3
4
5
6
7
8
9
10
PS:copy 模块复制目录信息的两种情况
src 后没有 /
时,将目录本身和目录下的所有内容复制到远程主机:ansible all -m copy -a "src=/home dest=/tmp"
src 后有 /
时,只将目录下的所有内容复制到远程主机:ansible all -m copy -a "src=/home/ dest=/tmp"
copy 模块案例
复制文件到远程节点:ansible all -m copy -a "src=/home/user/test.txt dest=/tmp/test.txt"
设置文件权限和所有者:ansible all -m copy -a "src=/home/user/test.txt dest=/tmp/test.txt mode=0644 owner=root group=root"
直接通过 content
参数写入内容:ansible all -m copy -a "content='Hello, World!' dest=/tmp/test.txt mode=0644"
强制覆盖已存在的文件:ansible all -m copy -a "src=/home/user/test.txt dest=/tmp/test.txt force=yes"
备份已存在的文件:ansible all -m copy -a "src=/home/user/test.txt dest=/tmp/test.txt backup=yes"
[root@m01 temp]# ansible ceshi -m copy -a 'src=/temp/testFile.txt dest=/temp/'
10.0.0.22 | CHANGED => { #对哪台主机进行操作
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true, #是否对主机进行了修改
"checksum": "4e1243bd22c66e76c2ba9eddc1f91394e57f9f83", #文件校验码MD5值
"dest": "/temp/testFile.txt", #目标路径信息
"gid": 0, #复制后文件gid信息
"group": "root", #复制文件属组信息
"md5sum": "d8e8fca2dc0f896fd7cb4cb0031ba249", #文件校验码MD5值
"mode": "0644", #复制文件权限信息
"owner": "root", #复制文件属主信息
"secontext": "system_u:object_r:default_t:s0",
"size": 5, #复制文件大小信息
"src": "/root/.ansible/tmp/ansible-tmp-1725315460.3-116267-4319511602637/source",
"state": "file", #复制文件类型信息
"uid": 0 #复制文件id信息
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# fetch 模块
用于将文件从受控节点复制到控制节点
ansible-doc -s fetch:查看该模块支持的参数
src 指定远程主机上要下载的文件或目录的路径 必填
dest 指定在控制节点上存储下载文件的路径,可以是一个目录或具体的文件路径,如果是目录,文件会被存储在该目录下,且路径结构保持不变 必填
flat 如果设置为 yes,文件将直接下载到 dest 指定的目录中,不保留远程主机上的路径结构,默认为 no
fail_on_missing 如果设置为 yes,当源文件在远程主机上不存在时会引发错误,默认值是 no
validate_checksum 是否在传输文件时验证其校验和,默认为 yes,这有助于确保文件完整性
mode 在控制节点上设置下载文件的权限,格式为八进制
2
3
4
5
6
fetch 模块案例
从远程主机下载文件到控制节点的目录:ansible all -m fetch -a "src=/var/log/syslog dest=/tmp/logs/"
下载文件,并保持远程主机的路径结构:ansible all -m fetch -a "src=/var/log/syslog dest=/tmp/logs/ flat=no"
递归下载远程主机上的目录及其所有内容:ansible all -m fetch -a "src=/var/log/myapp/ dest=/tmp/myapp_logs/ flat=no"
下载文件,并在控制节点上将其权限设置为 0600:ansible all -m fetch -a "src=/etc/passwd dest=/tmp/passwd_backup mode=0600"


# file 模块
管理受控节点上的文件和目录的状态
ansible-doc -s file:查看该模块支持的参数
path 指定目标文件、目录或符号链接的路径 必填
state 定义路径的期望状态 [absent directory file hard link touch] 必填
absent 确保文件、目录或符号链接不存在;如果文件存在,这个命令会删除它
directory 确保路径是一个文件夹
hard 确保路径是一个硬链接
link 确保路径是一个符号链接
touch 确保文件存在,如果不存在则创建一个空文件
owner 设置文件或目录的所有者
group 设置文件或目录的组
mode 设置文件或目录的权限
recurse 如果设置为 yes,则递归地应用所有者、组和权限到目录下的所有文件和子目录
src 当 state 为 link 或 hard 时,指定符号链接或硬链接的源文件路径
follow 是否递归地遵循符号链接,默认是 yes
2
3
4
5
6
7
8
9
10
11
12
13
file 模块案例
创建目录:ansible all -m file -a "path=/var/www/html state=directory mode=0755 owner=root group=root"
删除文件:ansible all -m file -a "path=/tmp/old_file.log state=absent"
创建符号链接:ansible all -m file -a "src=/usr/local/bin/python3.9 path=/usr/bin/python state=link"
修改文件权限:ansible all -m file -a "path=/etc/myconfig.conf mode=0644 owner=root group=root"
确保文件存在:ansible all -m file -a "path=/tmp/new_file.log state=touch"
递归更改目录权限:ansible all -m file -a "path=/var/www state=directory mode=0755 owner=www-data group=www-data recurse=yes"
删除目录:ansible all -m file -a "path=/tmp/old_dir state=absent"
# lineinfile 模块
用于确保指定的行在文件中存在,或者在文件中更新某些行
可以用来添加、修改或删除文件中的某一行内容,非常适合管理配置文件和环境变量等
path 要操作的文件路径 必填
line 指定要写入的完整行内容 如果使用 regexp 参数,且文件中找到符合的行,则将此行替换为 line 参数的值
regexp 用于查找要替换的行的正则表达式
state 指定行的状态,present(默认) 表示确保该行存在,absent 表示删除匹配的行
insertafter 在某一行之后插入新的行,可取值为正则表达式或 EOF
insertbefore 在某一行之前插入新的行,可以是正则表达式,也可以是 BOF
create 当目标文件不存在时是否创建文件 默认为 no
backrefs 启用正则表达式替换模式
backup 是否在修改文件之前备份文件 默认为 no
2
3
4
5
6
7
8
9
lineinfile 模块案例
添加或更新行:ansible all -m lineinfile -a "path=/etc/profile regexp='^export JAVA_HOME=' line='export JAVA_HOME=/opt/jdk'"
删除行:ansible all -m lineinfile -a "path=/etc/profile regexp='^export JAVA_HOME=' state=absent"
在文件末尾插入行:ansible all -m lineinfile -a "path=/etc/profile line='export PATH=$JAVA_HOME/bin:$PATH' insertafter=EOF"
在文件开头插入行:ansible all -m lineinfile -a "path=/etc/profile line='# This is a comment' insertbefore=BOF"
# yum 模块
安装、卸载、更新和管理系统上的软件包
name 要管理的软件包的名称 必填
state 定义软件包的目标状态 必填
present 确保软件包已安装(默认值)
absent 确保软件包已卸载
latest 确保软件包已更新到最新版本
removed 与 absent 类似,确保软件包已被卸载
installed 与 present 类似,确保软件包已安装
disable_gpg_check 是否禁用 GPG 签名检查,设置为 yes 禁用检查
enablerepo 启用指定的 Yum 仓库(repo)来安装软件包
disablerepo 禁用指定的 Yum 仓库
update_cache 在安装或卸载软件包之前,更新包管理器的缓存,设置为 yes 时启用
allow_downgrade 是否允许降级软件包版本,设置为 yes 时允许降级
2
3
4
5
6
7
8
9
10
11
12
yum 模块案例
安装单个软件包:ansible all -m yum -a "name=htop state=present"
卸载软件包:ansible all -m yum -a "name=htop state=absent"
安装特定版本的软件包:ansible all -m yum -a "name=nginx-1.14.1 state=present"
更新所有已安装的软件包:ansible all -m yum -a "name=* state=latest"
安装多个软件包:ansible all -m yum -a "name=git,htop,wget state=present"
使用特定的 Yum 仓库安装软件包:ansible all -m yum -a "name=docker-ce state=present enablerepo=docker-ce-stable"
更新包缓存并安装软件包:ansible all -m yum -a "name=nginx state=present update_cache=yes"
# get_url 模块
用于从 URL 下载文件到远程主机
url 指定下载文件的 URL
dest 下载文件保存的路径
checksum 验证下载文件的校验和
mode 文件的权限设置
force 如果目标文件已存在,是否强制重新下载 默认 no
timeout 设置下载文件的超时时间,单位是秒
validate_certs 是否验证 SSL 证书,默认是 yes
2
3
4
5
6
7
get_url 模块案例
下载文件并指定目标路径:ansible all -m wget -a "url=https://example.com/file.zip dest=/tmp/file.zip"
下载文件并设置自定义权限:ansible all -m wget -a "url=https://example.com/file.zip dest=/tmp/file.zip mode=0644"
下载文件并指定下载的超时:ansible all -m wget -a "url=https://example.com/file.zip dest=/tmp/file.zip timeout=30"
下载文件并使用代理:
ansible all -m wget -a "url=https://example.com/file.zip dest=/tmp/file.zip proxy=http://proxy.example.com:8080"
# mount 模块
用于管理远程主机的文件系统挂载操作
path 指定挂载点的路径 必填
src 指定要挂载的设备或远程文件系统 必填
fstype 文件系统的类型,例如 ext4、xfs、nfs 等
state 指定挂载状态
mounted 确保文件系统已挂载
unmounted 确保文件系统已卸载
present 确保挂载点存在于 /etc/fstab 中,但不执行挂载操作
absent 确保挂载点不在 /etc/fstab 中,并卸载文件系统
boot 如果设置为 yes,文件系统会在系统启动时自动挂载
2
3
4
5
6
7
8
9
mount 模块案例
挂载设备 /dev/sdb1
到 /mnt/data
,文件系统类型为 ext4
:
ansible all -m mount -a "path=/mnt/data src=/dev/sdb1 fstype=ext4 state=mounted"
卸载 /mnt/data
挂载点的文件系统:ansible all -m mount -a "path=/mnt/data state=unmounted"
将设备 /dev/sdb1
添加到 /etc/fstab
,但不执行挂载操作:
ansible all -m mount -a "path=/mnt/data src=/dev/sdb1 fstype=ext4 state=present"
删除 /etc/fstab
中的挂载点:ansible all -m mount -a "path=/mnt/data state=absent"
指定挂载选项:ansible all -m mount -a "path=/mnt/data src=/dev/sdb1 fstype=ext4 opts=rw,noatime state=mounted"
# service 模块
用来启动、停止、重启服务,以及检查服务的状态
name 指定要管理的服务名称 必填
state 定义服务的目标状态
started 确保服务正在运行
stopped 确保服务已停止
restarted 重新启动服务
reloaded 重新加载服务配置而不中断服务
enabled 是否设置服务在系统启动时自动启动
yes 服务将在系统启动时自动启动
no 服务不会在系统启动时自动启动
2
3
4
5
6
7
8
9
service 模块案例
启动服务:ansible all -m service -a "name=httpd state=started"
停止服务:ansible all -m service -a "name=httpd state=stopped"
重启服务:ansible all -m service -a "name=httpd state=restarted"
重新加载服务:ansible all -m service -a "name=httpd state=reloaded"
设置服务为开机启动:ansible all -m service -a "name=httpd enabled=yes"
停止服务并禁止开机启动:ansible all -m service -a "name=httpd state=stopped enabled=no"
# systemd 服务
可以用来启动、停止、重启服务,以及管理服务的状态和开机启动设置
name 指定要管理的服务名称
state 定义服务的目标状态
started 确保服务正在运行
stopped 确保服务已停止
restarted 重新启动服务
reloaded 重新加载服务配置(不中断服务)
enabled 定义服务是否在系统启动时自动启动
yes 服务将配置为开机启动
no 服务将配置为不随系统启动
masked 定义服务是否被屏蔽 屏蔽后的服务无法启动 [yes no]
daemon_reload 在执行操作前是否调用 systemctl daemon-reload 以刷新 systemd 配置 [yes no]
2
3
4
5
6
7
8
9
10
11
systemd 模块案例
启动服务:ansible all -m systemd -a "name=httpd state=started"
停止服务:ansible all -m systemd -a "name=nginx state=stopped"
使服务开机自启动:ansible all -m systemd -a "name=nginx enabled=yes"
重新加载服务配置:ansible all -m systemd -a "name=nginx state=reloaded"
禁用服务:ansible all -m systemd -a "name=firewalld enabled=no"
# cron 模块
用来定期执行任务的服务
name 任务的描述性名称 必填
mstate 定义任务执行的分钟
hour 定义任务执行的小时
day 定义任务执行的日期
month 定义任务执行的月份
weekday 定义任务执行的星期几
job 要执行的命令或脚本,需要确保目标主机上已经有这个脚本 必填
state 定义 cron 任务的状态,可以是 present(创建或更新任务)或 absent(删除任务)
user 指定运行任务的用户
2
3
4
5
6
7
8
9
job:'xxx/.sh > /dev/null 2>&1'
扩展用法:
- 避免反复执行时出现多个定时任务,给定时任务加上 name 注释
- 删除定时任务时,只能删除 ansible 创建的定时任务,需要指定定时任务的 name
- 通过 disabled 批量注释指定的定时任务
cron 模块案例
创建一个 cron
任务:
ansible all -m cron -a 'name="Backup script" minute=0 hour=2 job="/usr/local/bin/backup.sh" state=present user=root'
删除一个 cron
任务:ansible all -m cron -a 'name="Backup script" state=absent user=root'
更新一个 cron
任务:
ansible all -m cron -a 'name="Backup script" minute=30 hour=3 job="/usr/local/bin/backup.sh" state=present user=root'
批量注释 cron
任务:ansible all -m cron -a 'name="Backup script" job="/usr/local/bin/backup.sh" disabled=yes'
# user 模块
在远程主机上管理用户的创建、删除和修改等操作
name 指定要管理的用户名 必填
state 定义用户的状态
present 确保用户存在 默认值
absent 确保用户不存在,删除用户
uid 指定用户的 UID
group 指定用户的初始组
groups 指定用户的附加组,多个组之间用逗号分隔
password 设置用户的加密密码,需用加密算法生成的密码字符串
shell 指定用户登录时的默认 shell
home 指定用户的主目录路径
createhome 如果设置为 yes,将会创建主目录 默认为 yes
comment 添加用户的描述信息
remove 当 state=absent 时,是否删除用户的主目录和邮件文件
force 当删除用户时,如果设置为 yes,会强制删除用户,即使用户当前正处于登录状态
2
3
4
5
6
7
8
9
10
11
12
13
14
user 模块案例
创建用户并设置密码,密码为 password123
(使用 SHA512 加密):
ansible all -m user -a "name=john password='password123'"
创建用户并设置附加组:ansible all -m user -a "name=john groups=wheel,docker append=yes",append=yes
表示不替换已有组
删除用户并删除主目录:ansible all -m user -a "name=john state=absent remove=yes"
修改用户的 shell:ansible all -m user -a "name=john shell=/bin/bash"
# group 模块
在远程主机上管理组的创建、删除和修改等操作
name 用户组的名称 必填
state 定义用户组的状态
present 确保用户组存在
absent 确保用户组不存在
gid 指定用户组的 GID
system 如果设置为 yes,会创建一个系统用户组,通常 GID 小于 1000
local: 如果设置为 yes,只会在本地修改用户组,而不会在网络共享服务(如 LDAP)上修改
2
3
4
5
6
7
group 模块案例
创建一个用户组:ansible all -m group -a "name=developers state=present"
创建一个指定 GID 的用户组:ansible all -m group -a "name=developers gid=1001 state=present"
删除一个用户组:ansible all -m group -a "name=developers state=absent"
创建系统用户组:ansible all -m group -a "name=backup system=yes state=present"
# firewalld 模块
添加、删除、防火墙规则以及管理防火墙的状态
service:指定服务名称,例如 http、https,等效于 `firewalld` 中的服务名
port:指定要管理的端口,格式为 "端口号/协议"(如 "80/tcp")
zone:指定要应用规则的区域,默认是 "public"
state:定义规则的状态,常见值有:
present:确保规则存在
absent:确保规则不存在
permanent:是否将规则设置为永久(即是否在重启后保留),默认值为 false
interface:指定网络接口
source:定义来源 IP 地址范围
rich_rule:一个用于管理复杂防火墙规则的富规则,格式为字符串
immediate:是否立即生效,默认为 yes
masquerade:启用或禁用网络地址转换(NAT)
icmp_block:阻止指定类型的 ICMP(例如 echo-request,阻止 ping)
2
3
4
5
6
7
8
9
10
11
12
13
firewalld 模块案例
开启 HTTP 端口:ansible all -m firewalld -a 'port=80/tcp zone=public state=present permanent=true'
关闭 HTTPS 端口:ansible all -m firewalld -a 'port=443/tcp zone=public state=absent permanent=true'
添加富规则:ansible all -m firewalld -a 'rich_rule="rule family=ipv4 source address=192.168.0.10 port port=22 protocol=tcp accept" zone=public state=present permanent=true'
手动重新加载规则:ansible all -m shell -a 'firewalld --reload'
自动生效规则:ansible all -m firewalld -a 'port=80/tcp zone=public state=present permanent=true immediate=true'
# unarchive 模块
可以解压缩文件到目标目录,支持 .zip
, .tar.gz
, .tar.bz2
等格式
src 要解压缩的文件路径,可以是控制节点上的文件,也可以是远程主机上的文件
dest 解压后的目标路径
remote_src 如果设置为 yes,表示源文件位于受控节点,而不是控制节点
copy 当 remote_src 为 no 时,表示是否将文件从控制节点复制到受控节点再解压缩
creates 用来指定一个文件或目录,只有在这个文件或目录不存在时才会执行解压操作
extra_opts 解压时传递给 tar 的额外选项(适用于 .tar 文件)
list_files 如果设置为 yes,则只列出压缩包内的文件,而不进行解压
exclude 解压时排除指定的文件
group 设置解压文件的组
owner 设置解压文件的所有者
2
3
4
5
6
7
8
9
10
unarchive 模块案例
从控制节点解压本地文件到远程主机:ansible all -m unarchive -a "src=./files/jdk-8u161-linux-x64.tar.gz dest=/opt/"
从受控节点解压远程文件:ansible all -m unarchive -a "src=/tmp/myapp.zip dest=/var/www/ remote_src=yes"
解压并排除某些文件:ansible all -m unarchive -a "src=./files/myapp.tar.gz dest=/opt/myapp/ exclude='*.log'"
检查解压文件是否已经存在:ansible all -m unarchive -a "src=./files/myapp.tar.gz dest=/opt/myapp/ creates=/opt/myapp/index.html"
# ping 模块
测试 Ansible 控制节点与受控节点之间的连通性
并不是真正的网络层 ping
命令,而是用于验证 Ansible 能够通过 SSH 或其他配置的连接方式与远程主机成功通信
ping
模块不需要任何特殊参数,只有以下可选的内容:
data 自定义返回的数据,默认为 pong,可以通过指定其他内容来验证通信
ansible all -m ping -a "data='hello world'"
测试所有受控节点的连接:ansible all -m ping
指定自定义的返回消息:ansible all -m ping -a "data='hello world'"
ping
模块非常适合在运行 Ansible 剧本之前,用来快速检查主机的连通性,确保 SSH 连接正常