1.Ansible Ad-hoc基础
1.1 什么是ad-hoc?
- ad-hoc简而言之就是“临时命令”,执行完即结束,并不会保存
1.2 ad-hoc模式的使用场景
- 比如在多台机器上查看某个进程是否启动,或拷贝指定文件到本地,等等
1.3 ad-hoc模式的命令使用
• root@ansible 20:31:06 ~ # ansible all -m command -a 'free -h' -i test.txt
10.0.0.7 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 972M 514M 172M 39M 284M 275M
Swap: 2.0G 0B 2.0G
1.4 ad-hoc结果返回颜色
- 绿色: 代表被管理端主机没有被修改 黄色: 代表被管理端主机发现变更 红色: 代表出现了故障,注意查看提示
1.5 ad-hoc常用模块
模块 | 含义 |
command | 执行shell命令(不支持管道等特殊字符) |
shell | 执行shell命令 |
script | 执行shell脚本 |
yum_repository | 配置yum仓库 |
yum | 安装软件 |
copy | 变更配置文件:拷贝,吸入 |
template | 拷贝 ,可以解析传输文件内的变量 |
file | 建立目录或文件 |
systemd | 启动与停止服务 |
mount | 挂载设备 |
cron | 定时任务 |
get_url | 下载软件安装包/压缩包 |
archive | 压缩文件/目录 |
unarchive | 解压缩文件 |
ignore_errors: yes | 执行报错,跳过执行下一模块 |
firewalld | 防火墙【使用systemd进行关闭禁止开机运行】 |
selinux | 关闭selinux |
1.6 Ansible-doc帮助手册
• # 查看所有模块说明
root@ansible 20:36:48 ~ # ansible-doc -l
# 查看指定模块方法 【在第行模式输入/EXA,即可查看用法案例】
root@ansible 20:37:22 ~ # ansible-doc copy
# 查看指定模块参数
root@ansible 20:39:03 ~ # ansible-doc -s copy
2.Ansible Ad-huc的常用模块详解
2.1 Ansible命令模块
1. command模块 【不支持管道】
• 用来执行shell命令 但是不建议使用命令模块
• 语法结构:主机/组 -m command -a '具体执行的命令'
• # 查看WEB02内存使用情况
root@ansible 20:43:36 ~ # ansible WEB02 -m command -a 'free -h'
WEB02 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 972M 523M 80M 39M 368M 267M
Swap: 2.0G 264K 2.0G
2. shell模块 【支持管道】
• 具体执行shell命令
• 语法结构:ansible 主机/组 -m shell -a '具体执行的命令'
• # 查看WEB02的网卡信息eth0
root@ansible 20:50:53 ~ # ansible WEB02 -m shell -a 'ip a|grep eth0'
WEB02 | CHANGED | rc=0 >>
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 10.0.0.8/24 brd 10.0.0.255 scope global eth0
3. script模块
• 执行shell脚本 脚本需要在Ansible主机端
• 语法结构:ansible 主机/组 -m shell -a '具体执行的脚本'
• # 创建一个简单的脚本
root@ansible 20:46:48 ~ # cat pwd.sh
pwd
root@ansible 20:57:31 ~ # chmod +x pwd.sh
root@ansible 20:57:43 ~ # ll
total 12
-rwxr-xr-x 1 root root 4 Jul 4 12:15 pwd.sh
# WEB02执行这个脚本
root@ansible 21:05:33 ~ # ansible WEB02 -m script -a "/root/pwd.sh"
WEB02 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 10.0.0.8 closed.\r\n",
"stderr_lines": [
"Shared connection to 10.0.0.8 closed."
],
"stdout": "/root\r\n",
"stdout_lines": [
"/root"
]
}
2.2 Ansible软件管理模块
1. yum_repository模块
• 配置nginx的yum仓库
• # 配置yum仓库
root@ansible 21:05:38 ~ # ansible web01 -m yum_repository -a 'name=nginx description=nginx stable repo baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/ enabled=yes gpgcheck=no'
name=nginx # 指定仓库的名称
description=nginx stable repo # 描述仓库的信息 随意
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ # 仓库的url地址
enabled=yes # yes为开启这个仓库 no为关闭这个仓库
gpgcheck=no # 指定检查秘钥,yes为检验,no不检验
1.配置web02的nginx的yum仓库
root@ansible 15:11:16 ~ # ansible web01 -m yum_repository -a 'name=nginx description=nginx stable repo baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/ enabled=yes gpgcheck=no'
root@web02 15:37:47 ~ # cat /etc/yum.repos.d/nginx.repo
[nginx]
name = nginx stable repo
baseurl = http://nginx.org/packages/centos/$releasever/$basearch/
enabled = 1
gpgcheck = 0
2. yum模块
• 安装服务或者软件
• 语法结构:ansible 主机/组 -m yum -a '软件名字 状态'
• # 安装:lrzsz命令
root@ansible 21:05:38 ~ # ansible web01 -m yum -a 'name=lrzsz state=present'
name # 软件的名称或者服务的名称
state # 状态
present # 表示安装软件 安装默认的版本
absent # 表示卸载软件
latest # 表示安装最新的版本
1.为web01安装lrzsz命令
root@ansible 21:05:38 ~ # ansible web01 -m yum -a 'name=lrzsz state=present'
2.3 Ansible文件管理模块
- 对于文件管理,我们在学习Linux基础的时候,就学习了很多命令,比如创建,删除,移动,拷贝,下载…等
1. copy模块
• 推送文件
• 语法结构:ansible 主机/组 -m copy -a 'src=./oldboy源文件 dest=/opt/目标目录'
• 0.语法结构
ansible lnmp -m copy -a 'src=test.txt dest=/root/test.txt owner=root group=root mode=0600 backup=yes'
copy # 模块名称
src=test.txt # 源文件/目录(目录下有文件)
dest=/root/test.txt # 目标的路径,支持改名
owner=root # 属主
group=root # 属组
mode=0600 # 权限
backup=yes # 如果客户端存在该文件是否先备份 然后在拷贝(文件中必须存在内容)
content="web01..." # 将内容直接写入到目标主机文件
1.复制当前的test.txt 到目标主机的/root目录下
root@ansible 21:44:05 ~ # ansible WEB02 -m copy -a 'src=test.txt dest=/root/'
root@web02 21:43:03 ~ # ll
total 267512
-rw-r--r-- 1 root root 9 Jul 4 21:43 test.txt
2.将content中的字符串写入到目标主机的test.txt文件中
root@ansible 21:45:14 ~ # ansible WEB02 -m copy -a 'content="web01..." dest=/root/test.txt'
root@web02 21:47:37 ~ # cat test.txt
web01...
3.WEB02的/root已经有rest.txt,在拷贝过去一次,并备份原来的
root@ansible 21:58:11 ~ # ansible WEB02 -m copy -a 'content="123" dest=/root/test backup=yes'
root@web02 21:57:10 ~ # ll
total 267516
-rw-r--r-- 1 root root 3 Jul 4 21:59 test
-rw-r--r-- 1 root root 4 Jul 4 21:58 test.42511.2022-07-04@21:59:17~
4.拷贝当前的oldboy目录到目标主机的/root目录下 【拷贝的目录下必须有文件】
root@ansible 22:05:40 ~ # mkdir oldboy
root@ansible 22:05:40 ~ # mv 1.txt oldboy
root@ansible 22:05:40 ~ # ansible WEB02 -m copy -a 'src=oldboy dest=/root/'
root@web02 22:05:53 ~ # ll
total 267516
drwxr-xr-x 2 root root 19 Jul 4 22:05 oldboy
5.复制test目录到目标主机的oldboy目录下 如果oldboy目录不存在 则自动创建
root@ansible 22:28:28 ~ # ansible WEB01 -m copy -a 'src=./test dest=/root/oldboy'
root@web01 22:29:19 ~ # tree oldboy
oldboy
└── test
└── 1.txt
2. file模块
• 建立目录或文件
• 语法结构:ansible 主机/组 -m file -a 'path=/root/oldboy.txt 创建文件'
• 0.语法结构
ansible web01 -m file -a 'path=/root/oldboy.txt state=touch owner=apache group=apache'
file # 模块名称
path= /etc/foo.conf # 文件路径
owner=root # 属主
group=root # 属组
mode=0644 # 权限
state=touch # 创建普通文件
state=directory # 创建目录
state=absent # 删除文件或目录
1.创建普通文件oldboy.txt 属主apache 属组Apache
root@ansible 22:12:29 ~ # ansible WEB01 -m file -a 'path=/root/oldboy.txt state=touch owner=apache group=apache'
root@web01 21:55:24 ~ # ll
total 318612
-rw-r--r-- 1 apache apache 0 Jul 4 22:12 oldboy.txt
2.创建目录 test1 属主root 属组apache权限 777
root@ansible 22:12:45 ~ # ansible WEB01 -m file -a 'path=/root/test1 state=directory owner=root group=apache mode=777'
root@web01 22:12:58 ~ # ll
total 318612
drwxrwxrwx 2 root apache 6 Jul 4 22:14 test1
3.递归创建目录test1/test2/test3 属主root 属组apache权限 777
root@ansible 22:16:23 ~ # ansible WEB01 -m file -a 'path=/root/test1/test2/test3 state=directory owner=root group=apache mode=777'
root@web01 22:16:49 ~ # tree test1
test1
└── test2
└── test3
4.递归删除目标主机WEB01的/oldboy/目录
root@ansible 22:28:54 ~ # ansible WEB01 -m file -a 'path=/root/oldboy/ state=absent'
root@web01 22:29:30 ~ # ll
# 发现WEB01的/root/下的oldboy目录已经被删除
5.删除目标主机WEB01的/root/1.txt文件
root@ansible 22:32:36 ~ # ansible WEB01 -m file -a 'path=/root/1.txt state=absent'
root@web01 22:35:11 ~ # ll
# 发现WEB01的/root/下的1.txt已经被删除
6.通过ansible在客户端web01和web02的/root/目录下创建以主机名称命名的目录
root@ansible 22:32:36 ~ # ansible webservers -m file -a 'path=/root/`hostname` state=directory'
root@web01 16:38:34 ~ # ll
total 339984
drwxr-xr-x 2 root root 6 Jul 5 16:49 `hostmame`
# 因为没有设置变量所以`hostmame`无法正常显示主机名称
3. get_url模块
• 下载软件安装包
• 语法结构:语法结构:ansible 主机/组 -m get_url -a 'url=https://mirrors.aliyun.com/01.rpm 下载地址 dest=/tmp 存放目录 mode=0644 文件权限'
• 0.语法结构
ansible WEB01 -m get_url -a 'url=https://mirrors.aliyun.com/zabbix/zabbix/3.4/rhel/7/x86_64/zabbix-agent-3.4.0-1.el7.x86_64.rpm dest/tmp mode=0644'
get_url # 模块名称
url= # 指定下载地址
dest=/tmp # 指定下载的目录
mode=0644 # 指定权限
1.下载wordpress安装包到web01的/root/目录下
# wordpress下载连接:https://cn.wordpress.org/latest-zh_CN.tar.gz
root@ansible 09:44:22 ~ # ansible WEB01 -m get_url -a 'url=https://cn.wordpress.org/latest-zh_CN.tar.gz dest=/root/'
root@web01 10:49:56 ~ # ll
total 339984
-rw-r--r-- 1 root root 21881579 Jul 5 10:49 wordpress-6.0-zh_CN.tar.gz # 下载成功
4. archive模块
• 压缩文件
• 语法结构:ansible 主机/组 -m archive -a 'path=/root/oldboy 要压缩的文件或目录 dest=/root/passwd.tar.gz 压缩后的文件及存放的位置 '
• 0.语法结构
ansible web01 -m archive -a 'path=/root/oldboy dest=/root/max.tar.gz'
archive # 模块名称
path=/root/oldboy # 要压缩的文件或目录
dest=/root/max.tar.gz # 压缩后的文件及存放的位置
format=gz # 指定压缩类型,包括:bz2、gz(默认)、tar、xz、zip
owner=root # 指定属主
group=root # 指定属组
mode=0644 # 指定权限
remove=yes # 是否删除源文件,默认为no
1.将目标主机web01的/root/oldboy打包到/opt/目录下命名为haha.tar.gz
root@ansible 15:05:40 ~ # ansible WEB01 -m archive -a 'path=/root/oldboy dest=/opt/haha.tar.gz'
root@web01 15:08:28 ~ # ll /opt/
total 4
-rw-r--r-- 1 root root 148 Jul 5 15:08 haha.tar.gz
2.将目标主机web01的/root/oldboy/max.txt打包到/opt/目录下命名为hehe.tar.gz
root@ansible 15:08:42 ~ # ansible WEB01 -m archive -a 'path=/root/oldboy/max.txt dest=/opt/hehe.tar.gz'
root@web01 15:09:09 ~ # ll /opt/
total 8
-rw-r--r-- 1 root root 148 Jul 5 15:08 haha.tar.gz
-rw-r--r-- 1 root root 40 Jul 5 15:11 hehe.tar.gz # 压缩包内为
•
# 注意:在被控制端单独压缩文件后,压缩包为空,无法完成解压,所以在进行压缩式,最好带着父级目录一起压缩
5. unarchive模块
• 解压缩
• 语法结构:ansible 主机/组 -m unarchive -a 'scr=/opt/haha.tar.gz dest=/root/ 存放目录
• 0.语法机构
ansible WEB01 -m unarchive -a 'src=/opt/haha.tar.gz dest=/root/ remote_src=yes'
unarchive # 模块名称
src=/opt/haha.tar.gz # 要解压的软件包路径
dest=/root/ # 解压到目标位置,需要是一个目录
remote_src=yes # yes:要解压的包在被控端 no:要解压的包在控制端
owner=root # 指定属主
group=root # 指定属组
mode=0644 # 指定权限
1.将目标主机web01的/opt/haha.tar.gz解压到/root/目录下
root@ansible 15:17:26 ~ # ansible WEB01 -m unarchive -a 'src=/opt/haha.tar.gz dest=/root/ remote_src=yes'
root@web01 15:40:36 ~ # tree oldboy
oldboy
└── max.txt
2.将本地的/root/max.tar.gz解压到目标主机web01的/opt/下
root@ansible 15:46:02 ~ # tar tf max.tar.gz
./oldboy/
./oldboy/1.txt
root@ansible 15:17:26 ~ # ansible WEB01 -m unarchive -a 'src=/root/max.tar.gz dest=/opt/'
root@web01 15:47:59 opt # tree oldboy
oldboy
└── 1.txt
# 如果压缩包在被控制端,需要在命令中加:remote_src=yes,
# 如果压缩包在控制端,则默认不加:remote_src=no,
2.4 Ansible服务管理模块
1. systemd模块
• 启动与停止服务
• 语法结构:ansible 主机/组 -m systemd -a 'name=httpd服务名称 state=started服务执行动作 enabled=yes是否自启'
• 0.语法结构
ansible WEB01 -m systemd -a 'name=nginx state=started enabled=yes'
systemd # 模块名称
state=started # 执行动作
stopped
restarted
reloaded
name=nginx # 服务名称
enabled=yes # 是否自启
1.关闭目标主机WEB01的nginx服务 禁止开机自动运行
root@ansible 22:49:04 ~ # ansible WEB01 -m systemd -a 'name=nginx state=stopped enabled=no'
root@web01 22:49:26 ~ # netstat -tnulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
# WEB01的nginx服务以停止
2.启动目标主机WEB01的nginx服务 加入开机自动运行
root@ansible 22:48:21 ~ # ansible WEB01 -m systemd -a 'name=nginx state=started enabled=yes'
root@web01 22:45:33 ~ # netstat -tnulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 44521/nginx: master
2.5 Ansible用户管理模块
- Ansible管理用户与组,通常使用user、group模块
1. group模块
• 创建和删除用户组
• 语法结构:ansible 主机/组 -m group -a 'name=oldboy用户名 gid=888组id state=present添加组'
• 0.语法结构
ansible WEB01 -m group -a "name=iverson gid=888 state=present"
group # 模块名称
name=oldoy # 用户名
gid=888 # 组id
state=present # 创建组
state=absent # 删除组
1.创建组id为888的用户iverson
root@ansible 08:20:50 ~ # ansible WEB01 -m group -a 'name=iverson gid=888 state=present'
2.删除组id为888的用户iverson
root@ansible 08:21:17 ~ # ansible WEB01 -m group -a 'name=iverson gid=888 state=absent'
2. user模块
• 创建用户,并指定uid和gid
• 语法结构:ansible 主机/组 -m user -a 'name=oldboy用户名 uid=888用户id group=www属于组 shell=/sbin/nologin 不允许登录 create_home=no不创建家目录’
• 0.语法结构
ansible web_group -m user -a "name=iverson uid=888 group=iverson shell=/sbin/nologin create_home=no"
user # 模块名称
name # 用户名
uid # 用户的唯一标识
gid # gid
shell=/sbin/nologin # 指定解释器/不允许用户登录
create_home=false # 是否创建家目录 yes no
password # 给用户添加密码(单引号)
state=absent # 删除用户
1.创建一个iverson用户,uid为888 gid为888,不允许登录,不创建家目录
# 创建用户之前需要先创建gid
root@ansible 08:20:50 ~ # ansible WEB01 -m group -a 'name=iverson gid=888 state=present' 创建组id
root@ansible 08:38:01 ~ # ansible WEB01 -m user -a 'name=iverson uid=888 group=iverson shell=/sbin/nologin create_home=no'
root@web01 08:18:30 ~ # id iverson
uid=888(iverson) gid=888(iverson) groups=888(iverson)
2.删除用户iverson
root@ansible 08:38:01 ~ # ansible WEB01 -m user -a 'name=iverson state=absent'
root@web01 09:46:05 ~ # id iverson
id: iverson: no such user # 用户已删除
2.6 Ansible磁盘挂载模块
1. mount模块
• 磁盘挂载
• 语法结构:ansible 主机/组 -m mount -a 'src=172.16.1.31:/data 挂载目标目录 path=/data 挂载本地目录 fstype=nfs 挂载类型 state=mounted 挂载并开机自动挂载'
• 0.语法结构
ansible webservers -m mount -a 'src=172.16.1.31:/data path=/mnt fstype=nfs state=mounted'
mount # 模块名称
path=/mnt # 挂载本地目录
src=172.16.1.31:/data # 挂载的目标目录:本地磁盘或者NFS
fstype=nfs # 挂载类型
state=present # 不挂载 只写入开机自动挂载
state=mounted # 挂载并且写入开机自动启动fstab
state=absent # 卸载并且删除开机自动启动fstab
state=unmounted # 只卸载 不删除开机自动挂载fstab
常用参数:
mounted # 挂载 并且写入开机自动挂载
absent # 卸载
1.将web01和web02的/mnt目录挂载到nfs的/data/目录
1)安装NFS
root@ansible 08:38:01 ~ # ansible nfs -m yum -a 'name=nfs-utils state=present'
2)配置NFS
root@ansible 08:38:01 ~ # ansible nfs -m copy -a 'content="/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)" dest=/etc/exports'
3)根据配置文件创建必要信息:
# 创建uid 666 gid666 不创建家目录不允许登录的www用户
root@ansible 08:38:01 ~ # ansible nfs -m group -a 'name=www gid=666'
root@ansible 08:38:01 ~ # ansible nfs -m user -a 'name=www uid=666 group=www create_home=no shell=/sbin/nologin'
# 创建/data目录
root@ansible 08:38:01 ~ # ansible nfs -m file -a 'path=/data state=directory owner=www group=www'
4)启动NFS
root@ansible 08:38:01 ~ # ansible nfs -m systemd -a 'name=nfs state=started enabled=yes'
5)NFS端检查cat /var/lib/nfs/etab
root@nfs 08:38:01 ~ # cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks, acl,no_pnfs,anonuid=666,anongid=666,sec=sys,secure,root_squash,all_squash)
6)客户端挂载
# web01和web02需要安装nfs-utils
root@ansible 08:38:01 ~ # ansible webservers -m yum -a 'name=nfs-utils state=present'
# 查看服务端共享的目录
root@ansible 08:38:01 ~ # ansible webservers -m shell -a 'showmount -e 172.16.1.31'
web02 | CHANGED | rc=0 >>
Export list for 172.16.1.31:
/data 172.16.1.0/24
web01 | CHANGED | rc=0 >>
Export list for 172.16.1.31:
/data 172.16.1.0/24
7)挂载到WEB01和WEB02的/mnt目录下
root@ansible 08:38:01 ~ # ansible webservers -m mount -a 'src=172.16.1.31:/data path=/mnt fstype=nfs state=mounted'
7)卸载挂载
root@ansible 08:38:01 ~ # ansible webservers -m mount -a 'src=172.16.1.31:/data path=/mnt fstype=nfs state=absent'
2.7 Ansible定时任务模块
1. cron模块
• 定时任务
• 语法结构:ansible 主机/组 -m cron -a 'name=ntpdate 任务名称 minute="*/5" 定时时间 job="/usr/sbin/ntpdate ntp1.aliyun.com"执行命令 '
• 0.语法结构
ansible lnmp -m cron -a 'name=ntpdate minute="*/5" job="/usr/sbin/ntpdate ntp1.aliyun.com"'
cron # 模块名称
name=ntpdate # 任务名称
minute="*/5" # 定时为没5分钟一次
job="/usr/sbin/ntpdate ntp1.aliyun.com" # 执行时间同步命令
state=absent # 删除定时任务
1.给目标主机WEBO1做定时任务:每5分钟进行1次时间同步 【两种方式】
# 安装ntpdata命令
root@ansible 16:04:50 ~ # ansible WEB01 -m yum -a 'name=ntpdate state=present'
root@ansible 16:04:50 ~ # ansible WEB01 -m cron -a 'name=ntpdate minute="*/5" job="/usr/sbin/ntpdate
ntp1.aliyun.com"'
root@ansible 16:04:50 ~ # ansible WEB01 -m cron -a 'name=ntpdate minute="*/5" job="ntpdate
ntp1.aliyun.com"'
root@web01 16:00:54 ~ # crontab -l
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#Ansible: ntpdate
*/5 * * * * ntpdate ntp1.aliyun.com
2.删除定时任务
root@ansible 16:04:50 ~ # ansible WEB01 -m cron -a 'name=ntpdate state=absent'
root@web01 16:37:42 ~ # crontab -l
# 定时任务已删除
2.8 Ansible防火墙模块
1. selinux模块
• 关闭selinux防火墙
• 语法结构:ansible 主机/组 -m selinux -a ' state=disabled执行状态 '
• 0.语法结构
ansible web02 -m selinux -a 'state=disabled'
selinux # 模块名称
state=disabled # 开启禁止启动
1.关闭ansible主机的selinux防火墙
# 查看防火墙状态
root@web02 15:10:32 ~ # getenforce
Disabled
# 开启防火墙,
root@web02 15:10:32 ~ # getenforce # 修改 /etc/selinux/config文件再重启
Enforcing
# 用ansible命令去关闭,关闭完了必须重启
root@ansible 15:11:26 ~ # ansible web02 -m selinux -a 'state=disabled'
root@ansible 15:11:26 ~ # ansible web02 -m shell -a 'reboot'
root@web02 15:10:32 ~ # getenforce
Disabled
# selinux防火墙已关闭
3.Ansible主机信息模块
• 主机信息模块setup用途
• 语法结构:ansible 主机/组 -m setup -a ' filter=执行参数 '
• 1.根据不同主机不同IP创建对应IP的目录
2.根据不同主机不同主机名创建对应主机名的目录
3.自动化运维平台需要自动获取到主机的IP地址,内存信息,磁盘信息,主机名…等
4.如果安装数据库,分配内存为物理内存的80%,此时有3台不同物理内存的机器2G、4G、16G
写一个playbook的情况下,我需要获取到对应主机的内存并作出计算,写判断。
----------------------------------------------------------------------------------------------------------
常用参数:
ansible_all_ipv4_addresses:仅显示ipv4的信息。
ansible_devices:仅显示磁盘设备信息。
ansible_distribution:显示是什么系统,例:centos,suse等。
ansible_distribution_major_version:显示是系统主版本。
ansible_distribution_version:仅显示系统版本。
ansible_machine:显示系统类型,例:32位,还是64位。
ansible_eth0:仅显示eth0的信息。
ansible_hostname:仅显示主机名。
ansible_kernel:仅显示内核版本。
ansible_lvm:显示lvm相关信息。
ansible_memtotal_mb:显示系统总内存。
ansible_memfree_mb:显示可用系统内存。
ansible_memory_mb:详细显示内存情况。
ansible_swaptotal_mb:显示总的swap内存。
ansible_swapfree_mb:显示swap内存的可用内存。
ansible_mounts:显示系统磁盘挂载情况。
ansible_processor:显示cpu个数(具体显示每个cpu的型号)。
ansible_processor_vcpus:显示cpu个数(只显示总的个数)。
3.1 获取客户端IP信息
• # 获取客户端IP信息
root@ansible 16:04:50 ~ # ansible WEB01 -m setup -a 'filter=ansible_default_ipv4'
WEB01 | SUCCESS => {
"ansible_facts": {
"ansible_default_ipv4": {
"address": "10.0.0.7",
"alias": "eth0",
"broadcast": "10.0.0.255",
"gateway": "10.0.0.2",
"interface": "eth0",
"macaddress": "00:0c:29:91:91:2e",
"mtu": 1500,
"netmask": "255.255.255.0",
"network": "10.0.0.0",
"type": "ether"
},
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}
3.2 获取客户端主机名称
• # 获取客户端主机名
root@ansible 16:44:15 ~ # ansible webservers -m setup -a 'filter=ansible_hostname'
10.0.0.7 | SUCCESS => {
"ansible_facts": {
"ansible_hostname": "web01",
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}
10.0.0.8 | SUCCESS => {
"ansible_facts": {
"ansible_hostname": "web02",
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}
3.3 获取客户端主机内存使用信息
• # 获取客户端主机内存使用信息
root@ansible 19:42:00 ~ # ansible web03 -m setup -a 'filter=ansible_memory_mb'
web03 | SUCCESS => {
"ansible_facts": {
"ansible_memory_mb": {
"nocache": {
"free": 796,
"used": 176
},
"real": {
"free": 445,
"total": 972,
"used": 527
},
"swap": {
"cached": 0,
"free": 1999,
"total": 1999,
"used": 0
}
},
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}