2、Ansible ad-hoc

版权声明:原创作品,谢绝转载!否则将追究法律责任。

当你的才华还撑不起你的野心的时候,你就应该静下心来学习。
当你的能力还驾驭不了你的目标的时候,你就应该沉下心来历练。
问问自己,想要怎样的人生。

 

【1.什么是ad-hoc?】

ad-hoc简而言之就是“临时命令”,执行完即结束,并不会保存

【ad-hoc模式的使用场景】

比如在多台机器上查看某个进程是否启动,或拷贝指定文件到本地,等等

【ad-hoc模式的命令使用】

#批量查看磁盘信息
[root@m01 ~]# ansible web_group ‐m command ‐a 'df ‐h' ‐i ./hosts 
web02 | CHANGED | rc=0 >>
文件系统	  容量	 已用	 可用   已用%  挂载点
/dev/sda3	 18G	      1.1G	 17G	       6%	    /
devtmpfs	 981M	  0	      981M	  0%	    /dev
tmpfs	 992M	  0	      992M	  0%	    /dev/shm
tmpfs	 992M	  9.5M	 982M	  1%	    /run
tmpfs	 992M	  0	      992M	 0%	    /sys/fs/cgroup
/dev/sda1	 1014M	  124M	 891M	 13%    /boot
tmpfs	 199M	  0	     199M	 0%	   /run/user/0

web01 | CHANGED | rc=0 >>
文件系统   容量	 已用	 可用     已用%    挂载点
/dev/sda3	  18G	 1.1G	 17G	      6%	      /
devtmpfs	  981M	 0	      981M	 0%	      /dev
tmpfs	  992M	 0	      992M	 0%	      /dev/shm
tmpfs	  992M	 9.5M	 982M	 1%	      /run
tmpfs	  992M	 0	      992M	 0%	      /sys/fs/cgroup
/dev/sda1	  1014M	 124M	 891M	 13%	      /boot
tmpfs	  199M	 0	     199M	 0%	      /run/user/0

#批量查看内存信息
[root@m01 ~]# ansible web_group ‐m command ‐a 'free ‐m' ‐i ./hosts 
web01 | CHANGED | rc=0 >>

【ad-hoc结果返回颜色】

绿色: 代表被管理端主机没有被修改

黄色: 代表被管理端主机发现变更

红色:  代表出现了故障,注意查看提示

【ad-hoc常用模块】

command                # 执行shell命令(不支持管道等特殊字符)
shell                  # 执行shell命令
scripts                # 执行shell脚本
yum_repository         # 配置yum仓库
yum                    # 安装软件copy # 变更配置文件
file                   # 建立目录或文件
service                # 启动与停止服务
mount                  # 挂载设备
cron                   # 定时任务
get_url                #下载软件
firewalld              #防火墙
selinux                #selinux

Ansible-doc帮助手册

[root@m01 ~]# ansible‐doc ‐l        # 查看所有模块说明 
[root@m01 ~]# ansible‐doc copy      # 查看指定模块方法 
[root@m01 ~]# ansible‐doc ‐s copy   #  查看指定模块参数


Ansible命令模块

【command】

# 默认模块, 执行命令
[root@m01 ~]# ansible web_group ‐a "hostname"

【shell】

# 如果需要一些管道操作,则使用shell
[root@m01 ~]# ansible web_group ‐m shell ‐a "ps ‐ef|grep nginx" ‐f  50

【script】

# 编写脚本
[root@m01 ~]# vim /root/yum.sh
#!/usr/bin/bash
yum install ‐y vsftpd

#在本地运行模块,等同于在远程执行,不需要将脚本文件进行推送目标主机执行 [root@m01 ~]# ansible web_group ‐m script ‐a  "/root/yum.sh"


Ansible软件管理模块

【yum】

[root@m01 ~]# ansible web_group ‐m yum ‐a "name=httpd  state=present"
name
httpd                           #指定要安装的软件包名称
file://                         #指定本地安装路径(yum localinstall 本地rpm包)
http://                         #指定yum源(从远程仓库获取rpm包)
state                           #指定使用yum的方法
installed,present               #安装软件包
removed,absent                  #移除软件包
latest                          #安装最新软件包
[root@m01 ~]# ansible‐doc yum
exclude=kernel*,foo*            #排除某些包
list=ansible                    #类似于yum list查看是否可以安装
disablerepo="epel,ol7_latest"   #禁用指定的yum仓库
download_only=true              #只下载不安装 yum install d


【yum_repository】

#添加yum仓库
[root@m01 ~]# ansible web_group ‐m yum_repository ‐a "name=kirin_epel description=EPEL baseurl=https://download.fedoraproject.org/pub/epel/$releasever/$basearch/"  ‐i ./hosts

#仓库名和配置文件名不同
[root@m01 ~]# ansible web_group ‐m yum_repository ‐a 'name=kirin_epel description=EPEL file=test_kirin baseurl=https://download.fedoraproject.org/pub/base/$releasever/$basearch/ gpgcheck=no' ‐i ./hosts

#添加mirrorlist
[root@m01 ~]# ansible web_group ‐m yum_repository ‐a 'name=kirin_epel description=EPEL file=test_kirin baseurl=https://download.fedoraproject.org/pub/base/$releasever/$basearch/ gpgcheck=no  mirrorlist=http://mirrorlist.repoforge.org/el7/mirrors‐rpmforge  enabled=no' ‐i
./hosts

#删除yum仓库及文件
[root@m01 ~]# ansible web_group ‐m yum_repository ‐a 'name=kirin_epel file=test_kirin state=absent' ‐i ./hosts

#开起gpgcheck
[root@m01 ~]# ansible web_group ‐m yum_repository ‐a 'name=kirin_epel description=EPEL file=test_kirin baseurl=https://download.fedoraproject.org/pub/base/$releasever/$basearch/ gpgcheck=yes  gpgkey=http://mirrors.aliyun.com/centos/RPM‐GPG‐KEY‐CentOS‐7'  ‐i ./hosts

name	    #指定仓库名,如果没有file则为仓库文件名 
baseurl	    #指定yum源
gpgcheck  	#指定检查秘钥
no 
yes
enabled	    #是否启用仓库 
no 
yes


Ansible文件管理模块

对于文件管理,我们在学习Linux基础的时候,就学习了很多命令,比如创建,删除,移动,拷贝,下载…等 生产场景,统一配置管理


【copy】

# 推送文件模块
[root@m01 ~]# ansible web_group ‐m copy ‐a "src=/etc/passwd dest=/tmp/kirin.txt"

# 在推送覆盖远程端文件前,对远端已有文件进行备份,按照时间信息备份
[root@m01 ~]# ansible web_group ‐m copy ‐a "src=/etc/passwd dest=/tmp/kirin.txt backup=yes"

# 直接向远端文件内写入数据信息,并且会覆盖远端文件内原有数据信息
[root@m01 ~]# ansible web_group ‐m copy ‐a "content='kirin' dest=/tmp/kirin.txt"

src           #推送数据的源文件信息
dest          #推送数据的目标路径
backup        #对推送传输过去的文件,进行备份
content       #直接批量在被管理端文件中添加内容
group         #将本地文件推送到远端,指定文件属组信息
owner         #将本地文件推送到远端,指定文件属主信息
mode          #将本地文件推送到远端,指定文件权限信息

【file】

[root@m01 ~]# ansible web_group ‐m file ‐a "path=/tmp/kirin_dir state=directory"
[root@m01 ~]# ansible web_group ‐m file ‐a "path=/tmp/kirin_file state=touch mode=0555
owner=root group=root"
[root@m01 ~]# ansible web_group ‐m file ‐a "src=/tmp/kirin_dir path=/tmp/kirin_dir_link
state=link"

[root@m01 ~]# ansible web_group ‐m file ‐a "path=/tmp/kirin_dir state=directory
owner=kirin group=kirin mode=0700 recurse=yes"

path                   #指定远程主机目录或文件信息
recurse                #递归授权
    state
      directory        #在远端创建目录
      touch            #在远端创建文件
      link             #link或hard表示创建链接文件
      absent           #表示删除文件或目录
      mode             #设置文件或目录权限
      owner            #设置文件或目录属主信息
      group            #设置文件或目录属组信息

【get_url】

[root@m01 ~]# ansible web_group ‐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' ‐i ./hosts

url          #指定下载地址
dest         #指定下载的目录
mode         #指定权限
checksum     #校验加密算法 
md5
sha256


Ansible服务管理模块

【service、systemd】

#启动crond并加入开机自启
[root@m01 ~]# ansible web_group ‐m service ‐a "name=crond state=started enabled=yes"

#停止crond并删除开机自启
[root@m01 ~]# ansible web_group ‐m service ‐a "name=crond state=stoped enabled=no"

name            # 定义要启动服务的名称
state           # 指定服务状态
started         #启动服务
stopped         #停止服务
restarted       #重启服务
reloaded        #重载服务
enabled         #开机自启


Ansible用户管理模块

Ansible管理用户与组,通常使用user、group模块

【group】

[root@m01 ~]# ansible web_group ‐m group ‐a "name=kirin gid=888"

name                #指定创建的组名
gid                 #指定组的gid
   state
     absent         #移除远端主机的组
     present        #创建远端主机的组(默认)

【user】

创建用户指定uid和gid,不创建家目录也不允许登陆
[root@m01 ~]# ansible web_group ‐m user ‐a "name=kirin uid=888 group=888
shell=/sbin/nologin create_home=false"

#创建用户并生成秘钥对
[root@m01 ~]# ansible web_group ‐m user ‐a "name=kirin uid=888 group=root shell=/bin/bash
generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa" ‐i ./hosts
web01 | CHANGED => {
      "ansible_facts": {
      "discovered_interpreter_python": "/usr/bin/python"
      },
      "changed": true,
      "comment": "","create_home": true,
      "group": 0,
      "home": "/home/kirin",
      "name": "kirin",
      "shell": "/bin/bash",
"ssh_fingerprint": "2048 SHA256:WEMHCpSjxxqFwlzrCk1FqrPqeq6N/SHxL1gFTSqHlGM ansible‐generated on web01 (RSA)",
"ssh_key_file": "/home/kirin/.ssh/id_rsa",
"ssh_public_key": "ssh‐rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDRx+bCYGh4FqpKoPzyXrR8ef9GwoY6l6QEFQ0+XPynR22fd9Lbs1eUxWDm5aH4
ZO8sPaI8a5xmj88Sipwl0FxlQTjD2X/vreZNEDbwFWrbZ24VvPkfPSSWBh5SxLH6pJt8pGQpPVWuLRMx6yOOxRB1hh9b
GFzQNg5z8xqzeogTOoI7cxSFZVuUb5affNj8H5mCw2nAvblV+HNhRzbMlwr+9/EWcCWHDnlVYcELHXjpNJcyGB3VFOu1
MPkmLaSTcaB73O0eRvZQkYMBePKJC44tvjHihGhvCk9rzh8qvzHxvMgoMD/+0uKAlIwEvOyfAczb7fxllU0rDtbyPtjb
uLsR ansible‐generated on web01",
      "state": "present",
      "system": false,
      "uid": 888
}
web02 | CHANGED => {
     "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
     },
     "changed": true,
     "comment": "",
     "create_home": true,
     "group": 0,
     "home": "/home/kirin",
     "name": "kirin",
     "shell": "/bin/bash",
     "ssh_fingerprint": "2048 SHA256:IepfOosi2Xm8kfr4nOPAhG3fec6o8kpMnJ0/RwN+0F8 ansible‐generated on web02 (RSA)",
     "ssh_key_file": "/home/kirin/.ssh/id_rsa",
     "ssh_public_key": "ssh‐rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDEcO9iDKg4X8ya/y9E0eDelAFMp/rxiDSzW31r+REawaQyF4oywcdIagpz0MTg
2BeF2WdaYUmHmtmSTfSOMif26+R1FLcL9f9NYu3io/0388jukcTfyN02diXWgqoKtt4Gbm8Bq8sWE4tX/FSYl42fG6bX
1AyDSMzzB7ERr2AD/Y9KuKt7cEXDinGjqTFEXw6+x1wBHpotkUisYiZCci+1Nx4YSznVRBveZTlpxMUYmKgwkUXQIt+R
oOYzjgD++0md8O7lwJGgODZkahlrf2pOQnmpS4isLi9or4N+DVnqD+cXb/RjgJzPIJZYazgRY3vtAU9DDqm5i049x/Vx
EqFj ansible‐generated on web02",
     "state": "present",
     "system": false,
     "uid": 888
}

#将明文密码进行hash加密,然后进行用户创建
[root@m01 ~]# ansible web_group ‐m debug ‐a "msg={{ 'kirin' | password_hash('sha512',
'salt') }}" ‐i ./hosts
web01 | SUCCESS => {
      "msg":
"$6$salt$gaWhNcZweYlKQcLU1CqyY/UbYqIeUffVz6ESj87aMNfMX.xYBx0Z.67wzLN/hkkxmNut7SvkksPZ2Zlrse98m/"
}
web02 | SUCCESS => {
     "msg":
"$6$salt$gaWhNcZweYlKQcLU1CqyY/UbYqIeUffVz6ESj87aMNfMX.xYBx0Z.67wzLN/hkkxmNut7SvkksPZ2Zlrse98m/"
}

#创建用户
[root@m01 ~]# ansible web_group ‐m user ‐a 'name=kirin1
password=$6$salt$gaWhNcZweYlKQcLU1CqyY/UbYqIeUffVz6ESj87aMNfMX.xYBx0Z.67wzLN/hkkxmNut7SvkksPZ2Zlrse98m/ create_home=true shell=/bin/bash' ‐i ./hosts

uid               #指定用户的uid
group             #指定用户组名称
groups            #指定附加组名称
password          #给用户添加密码(单引号)
shell             #指定用户登录shell
create_home       #是否创建家目录


Ansible定时任务模块

【cron】

# 正常使用crond服务
[root@m01 ~]# crontab ‐l
* * * * * /bin/sh /server/scripts/yum.sh

# 使用ansible添加一条定时任务
[root@m01 ~]# ansible web_group ‐m cron ‐a "minute=* hour=* day=* month=* weekday=* job='/bin/sh /server/scripts/test.sh'"
[root@m01 ~]# ansible web_group ‐m cron ‐a "job='/bin/sh /server/scripts/test.sh'"

# 设置定时任务注释信息,防止重复,name设定
[root@m01 ~]# ansible web_group ‐m cron ‐a "name='cron01' job='/bin/sh /server/scripts/test.sh'"

# 删除相应定时任务
[root@m01 ~]# ansible web_group ‐m cron ‐a "name='ansible cron02' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh' state=absent"

# 注释相应定时任务,使定时任务失效
[root@m01 scripts]# ansible web_group ‐m cron ‐a "name='ansible cron01' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh' disabled=no"


Ansible防火墙模块

【selinux】

#修改配置文件关闭selinux,必须重启
[root@m01 ~]# ansible web_group ‐m selinux ‐a 'state=disabled' ‐i ./hosts
[WARNING]: SELinux state temporarily changed from 'enforcing' to 'permissive'. State change will take effect next reboot.

web01 | CHANGED => {
     "ansible_facts": {
     "discovered_interpreter_python": 
     "/usr/bin/python"
     },
     "changed": true,
     "configfile": "/etc/selinux/config",
     "msg": "Config SELinux state changed from 'enforcing' to 'disabled'",
     "policy": "targeted",
     "reboot_required": true,
     "state": "disabled"
}
web02 | CHANGED => {
     "ansible_facts": {
     "discovered_interpreter_python": "/usr/bin/python"
     },
     "changed": true,
     "configfile": "/etc/selinux/config",
     "msg": "Config SELinux state changed from 'enforcing' to 'disabled'",
     "policy": "targeted",
     "reboot_required": true,
     "state": "disabled"
     }

#临时关闭
[root@m01 ~]# ansible web_group ‐m shell ‐a 'setenforce 0' ‐i ./hosts
web02 | CHANGED | rc=0 >>
web01 | CHANGED | rc=0 >>

[root@m01 ~]# ansible web_group ‐m shell ‐a 'getenforce' ‐i ./hosts
web02 | CHANGED | rc=0 >>
Permissive

web01 | CHANGED | rc=0 >>
Permissive

【firewalld】

[root@m01 ~]# ansible web_group ‐m firewalld ‐a 'service=http permanent=yes state=enabled' ‐ i ./hosts
[root@m01 ~]# ansible web_group ‐m firewalld ‐a "service=http immediate=yes permanent=yes
state=enabled" ‐i ./hosts

[root@m01 ~]# ansible web_group ‐m firewalld ‐a "port=8080‐8090/tcp immediate=yes
permanent=yes state=enabled" ‐i ./hosts

service          #指定开放或关闭的服务名称
port             #指定开放或关闭的端口
permanent        #是否添加永久生效
state            #开启或者关闭
enabled
disabled

zone            #指定配置某个区域
rich_rule       #配置辅规则
masquerade      #开启地址伪装
immediate       #临时生效
source          #指定来源IP

iptables模块

iptables    -t filter  -I INPUT  -s 10.0.0.0/24   -p tcp   --dport 3306    -j DROP 
iptables    -t filter  -I INPUT  -s 10.0.0.0/24   -p tcp   --dport 3306    -j DROP 
-m iptables action=insert -a table=filter  chain=INPUT  source=10.0.0.0/24 protocol=tcp 
destination_port=3306   jump=DROP
action append(默认)/insert 
  664 ansible  172.16.1.51 -i hosts   -m iptables -a ' table=filter action=insert chain=INPUT 
source=10.0.0.0/24 protocol=tcp destination_port=3306   jump=DROP'
  666 ansible  172.16.1.51 -i hosts   -m iptables -a ' table=filter action=insert chain=INPUT 
source=172.16.1.61 protocol=tcp destination_port=3306   jump=DROP'
  669 ansible  172.16.1.51 -i hosts   -m iptables -a ' table=filter action=insert chain=INPUT 
source=172.16.1.61 protocol=tcp destination_port=3306   jump=DROP state=absent'


-m iptables
-a
table                     #-t
action                    #默认是append追加-A insert插入-I
chain                     #指定链
source                    #-s 指定源ip   ※※※※※
destination               #-d 指定目标ip
protocal                  #-p 指定协议
source_port               #--sport指定源端口
destination_port          #--dport指定目标端口 ※※※※
jump                      #-j DROP/ACCEPT 
state                     #present(默认,添加规则)   absent(删除)


#这可以使用nginx db01 backup nfs 
#ansible ad-hoc练习案例
# nfs01 
1.安装nginx服务            #yum_repository/yum
2.编写简单网页测试内容 #copy content
3.启动服务不加入开机自启    #systemd/service 
4.放行对应的端口 #iptables 

1.安装nginx服务
#yum_repository
ansible 172.16.1.31  -i hosts   -m yum_repository  -a  'name=nginx description="nginx repo" 
baseurl=http://nginx.org/packages/centos/7/x86_64/ enabled=yes gpgcheck=no state=present'
#yum
[root@m01 ~]# ansible 172.16.1.31 -i hosts   -m yum -a 'name=nginx state=installed'

2.编写简单网页测试内容
ansible 172.16.1.31  -i hosts   -m copy -a 'content="backup.kirin.com" 
dest=/usr/share/nginx/html/index.html '

3.启动服务不加入开机自启    #systemd/service 
[root@m01 ~]# ansible 172.16.1.31 -i hosts   -m systemd -a 'name=nginx state=started enabled=yes'

4.放行对应的端口 #iptables 
[root@m01 ~]# ansible 172.16.1.31 -i hosts   -m iptables -a 'table=filter action=append chain=INPUT 
protocol=tcp destination_port=80   jump=ACCEPT'

磁盘挂载模块

mount挂载模块

#在backup服务器上安装nfs
#配置
#创建目录 修改所有者
#启动服务并开机自启动
#backup上面进行挂载(本地测试)
#web服务器进行挂载

#在backup服务器上安装nfs
ansible 172.16.1.41 -i hosts    -m yum  -a 'name=nfs-utils state=present'

##配置
cat /etc/exports
/data-lidao/   172.16.1.0/24(rw,all_squash)  #默认压缩为nfsnobody用户
ansible 172.16.1.41  -i hosts   -m copy   -a 'content="/data-lidao/   172.16.1.0/24(rw,all_squash)" 
dest=/etc/exports backup=yes'

#创建目录 修改所有者
[root@m01 ~]# ansible 172.16.1.41 -m file -a 'path=/data-lidao/ owner=nfsnobody group=nfsnobody 
state=directory ' -i hosts 

#启动服务并开机自启动
ansible  172.16.1.41 -i hosts   -m service  -a 'name=rpcbind state=started enabled=yes'
ansible  172.16.1.41 -i hosts   -m service  -a 'name=nfs state=started enabled=yes'
#backup上面进行挂载(本地测试)
ansible  172.16.1.41 -i hosts   -m mount  -a 'src=172.16.1.41:/data-lidao/ path=/mnt/ fstype=nfs 
state=mounted'

#web服务器进行挂载
挂载到web服务器的 /code/upload/img
[root@m01 ~]# ansible web -i hosts -m mount   -a 'src=172.16.1.41:/data-lidao   path=/code/upload/img 
fstype=nfs state=mounted'
 
#10.0.0.7作为nfs服务端,10.0.0.8作为nfs客户端挂载
[root@m01 ~]# ansible web01 -m yum -a 'name=nfs-utils state=present' -i ./hosts
[root@m01 ~]# ansible web01 -m file -a 'path=/data state=directory' -i ./hosts
[root@m01 ~]# ansible web01 -m copy -a 'content="/data 172.16.1.0/24(rw,sync,no_all_squash)" 
dest=/etc/exports' -i ./hosts 
[root@m01 ~]# ansible web01 -m systemd -a "name=nfs state=started enabled=yes" -i ./hosts

#配置挂载
[root@m01 ~]# ansible web02 -m mount -a "src=172.16.1.7:/data path=/data fstype=nfs opts=defaults 
state=present"
[root@m01 ~]# ansible web02 -m mount -a "src=172.16.1.7:/data path=/data fstype=nfs opts=defaults 
state=mounted"
[root@m01 ~]# ansible web02 -m mount -a "src=172.16.1.7:/data path=/data fstype=nfs opts=defaults 
state=unmounted"
[root@m01 ~]# ansible web02 -m mount -a "src=172.16.1.7:/data path=/data fstype=nfs opts=defaults 
state=absent"


-m mount 
-a
src                指定源
path               指定目标 挂载点
fstype             指定文件系统类型 nfs 
state 
present            # 仅修改配置     开机挂载,仅将挂载配置写入/etc/fstab
mounted            # 挂载+修改配置   挂载设备,并将配置写入/etc/fstab
unmounted          # 卸载设备,不会清除/etc/fstab写入的配置
absent             # 卸载设备,会清理/etc/fstab写入的配置
remounted          #重新挂载

Ansible主机信息模块

为什么要讲这个模块?

做过自动化的小伙伴会觉得这个模块非常实用

在公司中总会有一些需求

比如:

1.根据不同主机不同IP创建对应IP的目录

2.根据不同主机不同主机名创建对应主机名的目录

3.自动化运维平台需要自动获取到主机的IP地址,内存信息,磁盘信息,主机名…等

4.如果安装数据库,分配内存为物理内存的80%,此时有3台不同物理内存的机器2G、4G、16G

写一个playbook的情况下,我需要获取到对应主机的内存并作出计算,写判断。


【setup 】

1.查看所有详细信息

[root@m01 ~]# ansible web01 ‐m setup
web01 | SUCCESS => {
    "ansible_facts": {
    "ansible_all_ipv4_addresses": [
    "10.0.0.7"
],
"ansible_all_ipv6_addresses": [
  "fe80::20c:29ff:fef8:9880"
],
   "ansible_apparmor": {
   "status": "disabled"
 },
 "ansible_architecture": "x86_64",
 "ansible_bios_date": "04/13/2018",
 "ansible_bios_version": "6.00",
 "ansible_cmdline": {
 "BOOT_IMAGE": "/vmlinuz‐3.10.0‐862.el7.x86_64",
 "LANG": "en_US.UTF‐8",
 "biosdevname": "0",
 "net.ifnames": "0",
 "quiet": true,
 "rhgb": true,
 "ro": true,
 "root": "UUID=7348b9b1‐f2a7‐46c6‐bede‐4f22224dc168"
 },
"ansible_date_time": {
    "date": "2019‐09‐10",
    "day": "10",
    "epoch": "1568115243",
    "hour": "19",
    "iso8601": "2019‐09‐10T11:34:03Z",
    "iso8601_basic": "20190910T193403218395",
    "iso8601_basic_short": "20190910T193403",
    "iso8601_micro": "2019‐09‐10T11:34:03.218468Z",
    "minute": "34",
    "month": "09",
    "second": "03",
    "time": "19:34:03",
    "tz": "CST","tz_offset": "+0800",
    "weekday": "星期二",
    "weekday_number": "2",
    "weeknumber": "36",
    "year": "2019"
  },
 "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:f8:98:80",
 "mtu": 1500,
 "netmask": "255.255.255.0",
 "network": "10.0.0.0",
 "type": "ether"
 },
"ansible_default_ipv6": {},
"ansible_device_links": {
  "ids": {
  "sr0": [
  "ata 
‐VMware_Virtual_IDE_CDROM_Drive_00000000000000000001"
…………

2.获取IP地址

[root@m01 ~]# 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:f8:98:80",
      "mtu": 1500,
      "netmask": "255.255.255.0",
      "network": "10.0.0.0",
      "type": "ether"
   },
   "discovered_interpreter_python": "/usr/bin/python"
  },
  "changed": false
}

3.获取主机名

[root@m01 ~]# ansible web01 ‐m setup ‐a 'filter=ansible_fqdn'
web01 | SUCCESS => {
      "ansible_facts": {
         "ansible_fqdn": "web01",
         "discovered_interpreter_python": "/usr/bin/python"
   },
   "changed": false
}

4.获取内存信息

[root@m01 ~]# ansible web01 ‐m setup ‐a 'filter=ansible_memory_mb'
web01 | SUCCESS => {
      "ansible_facts": {
         "ansible_memory_mb": {
             "nocache": {
                "free": 1622, 
                "used": 360
             },
             "real": {
               "free": 1068,
               "total": 1982,
               "used": 914
            },
            "swap": {
            "cached": 0,
             "free": 1023,
             "total": 1023,
             "used": 0
          }
       },
       "discovered_interpreter_python": "/usr/bin/python"
   },
   "changed": false
}

5.获取磁盘信息

web01 | SUCCESS => {
     "ansible_facts": {
        "ansible_memory_mb": {
           "nocache": {
              "free": 1622,
              "used": 360
     },
     "real": { 
     "free": 1068,
     "total": 1982,
     "used": 914
    },
     "swap": {
       "cached": 0,
       "free": 1023,
       "total": 1023,
       "used": 0
    }
    },
   "discovered_interpreter_python": 
   "/usr/bin/python"
   },
   "changed": false
}

[root@m01 ~]# ansible_devices^C
[root@m01 ~]# ansible web01 ‐m setup ‐a 'filter=ansible_devices'

web01 | SUCCESS => {
     "ansible_facts": {
     "ansible_devices": {
        "sda": {
        "holders": [],
        "host": "SCSI storage controller: LSI Logic / Symbios Logic 53c1030 PCI‐X
Fusion‐MPT Dual Ultra320 SCSI (rev 01)",
        "links": {
        "ids": [],
        "labels": [],
        "masters": [],
        "uuids": []
     },
     "model": "VMware Virtual S",
     "partitions": {
     "sda1": {
     "holders": [],
     "links": {
     "ids": [],
     "labels": [],
     "masters": [],
     "uuids": [
"8e547355‐994a‐4bad‐a941‐da93f4f1cdfd"
   ]
   },
   "sectors": "2097152",
   "sectorsize": 512,
   "size": "1.00 GB",
   "start": "2048",
   "uuid": "8e547355‐994a‐4bad‐a941‐da93f4f1cdfd"
   },
   "sda2": {
   "holders": [],
   "links": {
   "ids": [],
…………

6.其他信息参数

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个数(只显示总的个数)。

此处匹配规则 支持通配符,后面我们在使用playbook的时候,会针对这些内置变量参考使用。

posted @ 2022-04-12 21:38  kirin(麒麟)  阅读(109)  评论(0编辑  收藏  举报
Δ