Ansible ad-hoc
一、ad-hoc概述
1.什么是ad-hoc
ad-hoc 相当于"远程临时执行命令",执行完即结束,并不会保存
2. 使用场景
比如在多台机器上查看某个进程是否启动,或拷贝指定文件到本地,等等
临时使用的命令,一次使用
3.ad-hoc模式的命令使用
# 珍贵的例子
`查看 web01 主机的内存使用率
[root@m01 ~]# ansible 'web01' -m shell -a 'free -m'
web01 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 972 169 595 7 207 653
Swap: 1023 0 1023
`查看 web_group 组所有成员的内存使用率
[root@m01 ~]# ansible 'web_group' -m shell -a 'free -m'
web01 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 972 169 594 7 207 652
Swap: 1023 0 1023
web03 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 972 173 681 7 117 666
Swap: 1023 0 1023
4.ad-hoc结果返回颜色
`绿色: 代表被管理端主机没有被修改
#黄色: 代表被管理端主机发现变更
'红色: 代表出现了故障,注意查看提示
'紫色':警告
5.ad-hoc常用模块
command # 执行shell命令(不支持管道等特殊字符)
shell # 执行shell命令
script # 远程执行shell脚本
yum_repository # 配置yum仓库
yum # 安装软件
copy # 变更配置文件
file # 创建目录或文件
service # 启动与停止服务
systemd # 启动与停止服务
mount # 挂载设备
cron # 定时任务
get_url #下载软件
firewalld #防火墙
selinux #selinux
setup #获取主机信息
6.Ansible帮助
#1.查看所有模块
[root@m01 ~]# Ansible-doc -l
#2.查看指定模块的用法
[root@m01 ~]# Ansible-doc copy
#3.查看模块参数
[root@m01 ~]# Ansible-doc -copy # q退出,勿用ctrl +c
二、Ansible ad-hoc命令模块
1.command 模块(不识别特殊符号)
#当Ansible没指定模板时默认使用的就是 command 模块
[root@m01 ~]# ansible 'web01' -m shell -a 'ifconfig eth1 '
web01 | CHANGED | rc=0 >>
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.1.107 netmask 255.255.240.0 broadcast 172.16.15.255
inet6 fe80::20c:29ff:fe3c:c631 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:3c:c6:31 txqueuelen 1000 (Ethernet)
RX packets 811 bytes 593174 (579.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 631 bytes 388910 (379.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#command 不识别特殊符号
#command 不支持管道符号
[root@m01 ~]# ansible 'web01' -m command -a "ifconfig eth1| awk 'NR==2{print$2}'"
web01 | FAILED | rc=1 >>
awk: Unknown host
ifconfig: `--help' gives usage information.non-zero return code
2.shell 模块
#支持特殊符号,但不支持$符合
# 注意有些特殊符号需要加转译符号
[root@m01 ~]# Ansible web01 -m shell -a 'ps -ef | grep nginx'
web01 | CHANGED | rc=0 >>
root 12680 12675 0 17:51 pts/0 00:00:00 /bin/sh -c ps -ef | grep nginx
root 12682 12680 0 17:51 pts/0 00:00:00 grep nginx
#获取主机信息,使用变量加转译符号
[root@m01 ~]# ansible 'web01' -m shell -a "ifconfig eth1| awk 'NR==2{print$2}'"
web01 | CHANGED | rc=0 >>
inet 172.16.1.107 netmask 255.255.240.0 broadcast 172.16.15.255
[root@m01 ~]# Ansible web01 -m shell -a "ifconfig eth1| awk 'NR==2 {print \$2}'"
web01 | CHANGED | rc=0 >>
172.16.1.107
[root@m01 ~]#
3.scripts 模块
[root@m01 ~]# vim linux12.sh
#! /bin/bash
touch /root/a.txt
#远程执行脚本
[root@m01 ~]# ansible web_group -m script -a 'linux.sh' #绝对路径
web01 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to web01 closed.\r\n",
"stderr_lines": [
"Shared connection to web01 closed."
],
"stdout": "",
"stdout_lines": []
}
#验证文件
[root@m01 ~]# ansible web_group -m shell -a 'ls -ld /a.txtdir'
web01 | CHANGED | rc=0 >>
-rw-r--r-- 1 root root 0 Apr 16 10:37 /root/1.txt
#重新在执行脚本(继续创建文件,然后会报错,因为已经有该文件)