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
    }