自动化运维工具-Ansible ad-hoc(模块)
Ansible ad-hoc
一、ad-hoc概述
1.什么ad-hoc
ad-hoc简而言之就是"临时命令",执行完即结束,并不会保存
2.使用场景
比如在多台机器上查看某个进程是否启动,或拷贝指定文件到本地,等等
临时使用的命令,一次使用
3.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 >>
total used free shared buff/cache available
Mem: 1982 143 1688 9 150 1668
Swap: 1023 0 1023
web02 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 1982 142 1684 9 155 1666
Swap: 1023 0 1023
4.ad-hoc结果返回颜色
绿色: 代表被管理端主机没有被修改
黄色: 代表被管理端主机发现变更
红色: 代表出现了故障,注意查看提示
5.ad-hoc常用模块
command # 执行shell命令(不支持管道等特殊字符)
shell # 执行shell命令
scripts # 执行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 yum
#3.查看模块参数
[root@m01 ~]# ansible-doc -s yum
二、Ansible 命令模块
Ansible常用模块
command模块(Ansible默认模块)
command 模块可以帮助我们在远程主机上执行命令。
注意:使用 command 模块在远程主机中执行命令时,不会经过远程主机的 shell 处理,在使用 command 模块时,如果需要执行的命令中含有重定向、管道符等操作时,这些符号也会失效,比如”<”, “>”, “|”, “;” 和 “&” 这些符号,如果你需要这些功能,可以参考后面介绍的 shell 模块。
参数
- Chdir:执行命令前,切换到目录。
- Creates:当该文件存在时,则不执行该步骤。
- Removes:当该文件存在时,则执行该步骤。
案例
[root@localhost ~]# ansible web01 -m command -a "chdir=/opt ls"
172.16.1.101 | CHANGED | rc=0 >>
phpMyAdmin-5.1.1-all-languages
[root@localhost ~]# ansible web01 -m command -a "chdir=/opt creates=/opt/phpMyAdmin-5.1.1-all-languages ls"
172.16.1.101 | SUCCESS | rc=0 >>
skipped, since /opt/phpMyAdmin-5.1.1-all-languages exists
[root@localhost ~]# ansible web01 -m command -a "chdir=/opt creates=/opt/phpMyAdmin-5.1.1-all-languages mkdir test"
172.16.1.101 | SUCCESS | rc=0 >>
skipped, since /opt/phpMyAdmin-5.1.1-all-languages exists
缺点
不支持特殊字符。
shell模块
shell 模块可以帮助我们在远程主机上执行命令。与 command 模块不同的是,shell 模块在远程主机中执行命令时,会经过远程主机上的
/bin/sh
程序处理。
参数
- Chdir:执行命令前,切换到目录。
- Creates:当该文件存在时,则不执行该步骤。
- Removes:当该文件不存在时,则不执行该步骤。
- executable参数:默认情况下,shell 模块会调用远程主机中的 /bin/sh 去执行对应的命令,通常情况下,远程主机中的默认 shell 都是 bash。如果你想要使用其他类型的 shell 执行命令,则可以使用此参数指定某种类型的 shell 去执行对应的命令。指定 shell 文件时,需要使用绝对路径。
案例
[root@localhost ~]# ansible web01 -m shell -a "chdir=/opt ls"
172.16.1.101 | CHANGED | rc=0 >>
phpMyAdmin-5.1.1-all-languages
test
[root@master ~]# ansible web -m shell -a "executable=/bin/sh ps -ef | awk '{print \$1}'"
script模块
script 模块可以帮助我们在远程主机上执行 ansible 管理主机上的脚本,也就是说,脚本一直存在于 ansible 管理主机本地,不需要手动拷贝到远程主机后再执行。
参数
- Chdir:执行命令前,切换到目录。
- Creates:当该文件存在时,则不执行该步骤。
- Removes:当该文件存在时,则执行该步骤。
案例
[root@localhost ~]# ansible web01 -m script -a "chdir=/opt ./test.sh"
172.16.1.101 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 172.16.1.101 closed.\r\n",
"stderr_lines": [
"Shared connection to 172.16.1.101 closed."
],
"stdout": "total 4\r\ndrwxr-xr-x. 4 root root 56 Aug 26 23:37 .\r\ndr-xr-xr-x. 17 root root 224 Aug 21 19:09 ..\r\ndrwxrwxrwx. 13 nginx nginx 4096 Aug 22 20:17 phpMyAdmin-5.1.1-all-languages\r\ndrwxr-xr-x. 2 root root 6 Aug 26 23:37 test\r\n",
"stdout_lines": [
"total 4",
"drwxr-xr-x. 4 root root 56 Aug 26 23:37 .",
"dr-xr-xr-x. 17 root root 224 Aug 21 19:09 ..",
"drwxrwxrwx. 13 nginx nginx 4096 Aug 22 20:17 phpMyAdmin-5.1.1-all-languages",
"drwxr-xr-x. 2 root root 6 Aug 26 23:37 test"
]
}
yum模块
yum 模块可以帮助我们在远程主机上通过 yum 源管理软件包。
参数
- name参数:必须参数,用于指定需要管理的软件包,比如 nginx。
- state参数:用于指定软件包的状态 ,默认值为present。
- present:表示确保软件包已经安装。
- installed 与present 等效
- latest 表示安装 yum 中最新的版本
- absent 和 removed 等效,表示删除对应的软件包。
- disable_gpg_check参数:用于禁用对 rpm 包的公钥 gpg 验证。默认值为 no,表示不禁用验证,设置为 yes 表示禁用验证,即不验证包,直接安装。
- enablerepo参数:用于指定安装软件包时临时启用的 yum 源。
- disablerepo参数:用于指定安装软件包时临时禁用的 yum 源。
案例
ansible ansible-demo3 -m yum -a 'name=nginx disable_gpg_check=yes'
ansible ansible-demo3 -m yum -a 'name=nginx state=present disable_gpg_check=yes'
ansible ansible-demo3 -m yum -a 'name=nginx state=installed disable_gpg_check=yes'
ansible ansible-demo3 -m yum -a 'name=nginx state=latest disable_gpg_check=yes'
ansible ansible-demo3 -m yum -a 'name=nginx state=absent'
ansible ansible-demo3 -m yum -a 'name=nginx state=removed'
ansible ansible-demo3 -m yum -a 'name=telnet disable_gpg_check=yes enablerepo=epel'
ansible ansible-demo3 -m yum -a 'name=telnet disable_gpg_check=yes disablerepo=ngins-statle'
yum_repository 模块
yum_repository 模块可以帮助我们管理远程主机上的 yum 仓库。
参数
- name参数:必须参数,用于指定要操作的唯一的仓库ID,也就是”.repo”配置文件中每个仓库对应的”中括号”内的仓库ID。
- baseurl参数:此参数用于设置 yum 仓库的 baseurl。
- description参数:此参数用于设置仓库的注释信息,也就是”.repo”配置文件中每个仓库对应的”name字段”对应的内容。
- file参数:此参数用于设置仓库的配置文件名称,即设置”.repo”配置文件的文件名前缀,在不使用此参数的情况下,默认以 name 参数的仓库ID作为”.repo”配置文件的文件名前缀,同一个”.repo” 配置文件中可以存在多个 yum 源。
- enabled参数:此参数用于设置是否激活对应的 yum 源,此参数默认值为 yes,表示启用对应的 yum 源,设置为 no 表示不启用对应的 yum 源。
- gpgcheck参数:此参数用于设置是否开启rpm包验证功能,默认值为no,表示不启用包验证,设置为 yes 表示开启包验证功能。
- state参数:默认值为 present,当值设置为 absent 时,表示删除对应的 yum 源。
案例
[root@ansible-manager ~]# ansible ansible-demo3 -m yum_repository -a 'name=aliEpel description="alibaba EPEL" baseurl=https://mirrors.aliyun.com/epel/$releasever\Server/$basearch/'
ansible-demo3 | SUCCESS => {
"changed": true,
"repo": "aliEpel",
"state": "present"
}
ansible db -m yum_repository -a "name=local baseurl=https://mirrors.aliyun.com/pypi/simple/ description=简介 file=local enabled=no gpgcheck=no state=absent"
copy模块
copy 模块的作用就是拷贝文件(拷贝到远程主机)。
常用参数
- src参数 :用于指定需要copy的文件或目录。
- dest参数 :用于指定文件将被拷贝到远程主机的哪个目录中,dest为必须参数。
- content参数 :当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错。
- force参数 : 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变。
- backup参数 : 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机。
- owner参数 : 指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。
- group参数 : 指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错。
- mode参数 : 指定文件拷贝到远程主机后的权限,如果你想将权限设置为”rw-r--r--“,则可以使用mode=0644表示,如果你想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示。
案例
root@master ~]# ansible db -m copy -a "src=nginx_upstream_check_module-master.zip dest=/opt"
[root@master ~]# ansible db -m copy -a "content=Holle_World dest=/opt/index.html"
[root@master ~]# ansible db -m copy -a "src=nginx_upstream_check_module-master.zip dest=/opt backup=yes owner=nginx group=mysql mode=600"
[root@ansible-manager ~]# ansible ansible-demo3 -m copy -a "src=/testdir/copytest dest=/testdir/ mode=0640"
ansible-demo3 | SUCCESS => {
"changed": true,
"checksum": "a8d207d098d939cb0dc9df1f3a2b986d6d4499b2",
"dest": "/testdir/copytest",
"gid": 1000,
"group": "ding",
"mode": "0640",
"owner": "ding",
"path": "/testdir/copytest",
"secontext": "system_u:object_r:default_t:s0",
"size": 12,
"state": "file",
"uid": 1000
}
fetch模块
此模块可以将远程主机的文件拉取到本地主机的某一个目录下。
参数
- dest:指定拉取文件到本地以后,文件存放的位置
- src:指定从受管主机中拉取哪个文件
案例
ansible web01 -m fetch -a 'src=/opt/test/test dest=/opt/'
file模块
file 模块可以帮助我们完成一些对文件的基本操作。比如,创建文件或目录、删除文件或目录、修改文件权限等。
参数
- force:强制创建,需要在两种情况下强制创建软连接,一种是源文件不存在但之后会建立的情况,另一种是目标软连接已存在,需要先取消之前的软连接,然后在创建软连接,两种选项yes|no
- group: 定义文件目录属性
- mode:定义文件目录的权限
- owner:定义文件目录的属性
- path:必选项,定义文件目录的路径
- recurse: 递归的设置文件的属性,只对目录有效
- src:要被软连接的源文件的路径,只适用于state=link的情况
- dest:被连接到的路径,,只适用于state=link的情况
- state:状态
- directory:如果目录不存在,创建目录
- file:即使文件不存在,也不会被创建
- link:创建软连接
- hard:创建硬链接
- touch:如果文件不存在时候,则则会创建一个新文件,如存在文件目录,则更新最后修改时间
- absent:删除目录文件或者取消连接文件
案例
# 创建目录
[root@master ~]# ansible db -m file -a "path=/opt/test state=directory"
# 创建软连接
[root@master ~]# ansible db -m file -a "src=/opt/test dest=/opt/ttt state=link "
[root@master ~]# ansible db -m file -a "path=/opt/1.txt state=touch"
[root@master ~]# ansible db -m file -a "path=/opt/1.txt state=absent"
[root@master ~]# ansible db -m file -a "path=/opt/ttt state=absent"
root@master ~]# ansible db -m file -a "path=/opt/1.txt state=touch group=nginx owner=mysql mode=600"
# 强制创建软链接
[root@master ~]# ansible db -m file -a "src=/opt/2.txt dest=/opt/txt state=link force=yes"
# 递归设置权限
[root@master ~]# ansible db -m file -a "path=/opt/test group=mysql owner=nginx mode=700 recurse=yes"
文件做软连接 ansible -i ansiblepy.py test22 -m file -a "src=/root/aa dest=/root/ansTest/ttt state=link"
创建文件 ansible -i ansiblepy.py test22 -m file -a "path=/root/kk directory=touch"
创建目录 ansible -i ansiblepy.py test22 -m file -a "path=/root/kkk state=directory"
删除目录文件或者软连接(state=absent | directory) ansible -i ansiblepy.py test22 -m file -a "path=/root/kk state=absent"
get_url模块
用于将文件或软件从http、https或ftp下载到本地节点上或被管理机节点上
参数
- dest : 下载到哪里(绝对路径),如果目标是一个目录,就用服务器上面文件的名称,如果目标设置了名称就用目标设置的名称。
- owner:指定属主
- group:指定属组
- mode:指定权限、
- force : 如果yes,dest不是目录,将每次下载文件,如果内容改变,替换文件。如果no,则只有在目标不存在时才会下载该文件。
- sha256sum : 如果将SHA-256校验和传递给此参数,目标文件的摘要将在下载后计算,以确保其完整性
- url : HTTP,HTTPS或FTP URL(http | https | ftp)
- url_password : 用于HTTP基本认证的密码。 如果未指定url_username参数,则不会使用url_password参数。
- url_username : 用于HTTP基本认证的用户名。 对于允许空密码的站点,此参数可以不使用`url_password'使用。
- validate_certs :如果“no”,SSL证书将不会被验证。 这只能使用自签名证书在个人控制的网站上使用。
案例
# 下载promertheus
[root@master ~]# ansible db -m get_url -a "dest=/opt/ owner=mysql group=nginx mode=600 url=http://106.13.81.75/prometheus-2.25.0.linux-amd64.tar.gz"
# 增加sha256sum验证
[root@master ~]# ansible db -m get_url -a "dest=/opt/ owner=mysql group=nginx mode=600 url=http://106.13.81.75/prometheus-2.25.0.linux-amd64.tar.gz sha256sum=d163e41c56197425405e836222721ace8def3f120689fe352725fe5e3ba1a69d"
service模块
service 模块可以帮助我们管理远程主机上的服务。比如,启动或停止远程主机中的 nginx 服务。
参数
- name参数:此参数用于指定需要操作的服务名称,比如 nginx。
- state参数:此参数用于指定服务的状态,比如,我们想要启动远程主机中的 nginx,则可以将 state 的值设置为 started;如果想要停止远程主机中的服务,则可以将 state 的值设置为 stopped。此参数的可用值有 started、stopped、restarted、reloaded。
- enabled参数:此参数用于指定是否将服务设置为开机 启动项,设置为 yes 表示将对应服务设置为开机启动,设置为 no 表示不会开机启动。
案例
[root@master ~]# ansible db -m service -a "name=nginx state=started enabled=yes"
[root@ansible-manager ~]# ansible ansible-demo3 -m service -a "name=nginx state=started"
ansible-demo3 | SUCCESS => {
"changed": true,
"name": "nginx",
"state": "started",
"status": {
"ActiveEnterTimestampMonotonic": "0",
......
"WatchdogUSec": "0"
}
}
systemd模块
systemd
模块用于控制远程主机的systemd服务,说白了,就是Linux下的systemd命令。需要远程主机支持systemd
。用法和
service
模块基本相同。
参数
名称 | 必选 | 可选值 | 备注 |
---|---|---|---|
daemon_reload | no | yes /no |
在执行任何其他操作之前运行守护进程重新加载,以确保systemd已经读取其他更改 |
enabled | no | yes /no |
服务是否开机自动启动。enabled 和state 至少要有一个被定义 |
masked | no | yes /no |
是否将服务设置为masked状态,被mask的服务是无法启动的 |
name | yes | 服务名称 | |
state | no | started ,stopped ,restarted ,reloaded |
service最终操作后的状态 |
ansible剧本循环 (连续开启几个软件)
- name: "{{ item }}" ( 循环后的值,必须使用item )
- state: started (开启软件)
with_items : ( 循环体 )
- nginx
- php-fpm
案例
[root@centos7 ~]# ansible test -m systemd -a "name=httpd state=started"
192.168.31.66 | SUCCESS => {
"changed": true,
"name": "httpd",
"state": "started",
"status": {
。。。
[root@centos7 ~]# ansible test -m systemd -a "name=httpd state=stopped"
192.168.31.66 | SUCCESS => {
"changed": true,
"name": "httpd",
"state": "stopped",
"status": {
。。。
[root@centos7 ~]# ansible test -m systemd -a "name=httpd state=restarted"
192.168.31.66 | SUCCESS => {
"changed": true,
"name": "httpd",
"state": "started",
"status": {
。。。
[root@centos7 ~]# ansible test -m systemd -a "name=httpd state=reloaded"
192.168.31.66 | SUCCESS => {
"changed": true,
"name": "httpd",
"state": "started",
mount模块
挂载。
参数
- src : 挂载路径(NFS)
- path : 挂载的路径(挂载主机的路径)
- fstype : 挂载的类型
- opts:挂载权限 (defsults默认权限)
- state : 状态
- present --- 开机挂载,仅将挂载配置写入/etc/fstab
- mounted --- 挂载设备,并将配置写入/etc/fstab
- unmounted --- 卸载设备,不会清除/etc/fstab写入的配置
- absent --- 卸载设备,会清理/etc/fstab写入的配置(会删除目录,但是目录必须为空)
案例
# 挂载192.168.5.80:/data目录到test组中的主机
# ansible test -m mount -a "src=192.168.5.80:/data path=/data fstype=nfs opts=defaults state=mounted"
# 卸载,会直接删除/data目录,挂载的时候也不需要创建目标的/data目录
# ansible test -m mount -a "src=192.168.5.80:/data path=/data fstype=nfs opts=defaults state=absent"
unarchive 解压模块
解压复制远程主机上的压缩文件
参数
- copy:默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件
- src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no
- dest:远程主机上的目标路径
- mode:设置解压缩后的文件权限
案例
ansible db -m unarchive -a "src=node_exporter-1.1.2.linux-amd64.tar.gz dest=/opt/ mode=600 "
ansible db -m unarchive -a "src=/opt/prometheus-2.25.0.linux-amd64.tar.gz copy=no dest=/opt/ mode=600 "
# 在远程主机上解压文件并设置权限
ansible all -m unarchive -a 'src=/srv/tomcat8/apache-tomcat-8.0.29.tar.gz dest=/usr/local copy=no mode=0755'
# 解压ansible管理机上的压缩文件到远程主机并设置权限
ansible all -m unarchive -a "src=/tmp/install/zabbix-3.0.4.tar.gz dest=/tmp/ mode=0755 copy=yes"
cron模块
cron 模块可以帮助我们管理远程主机中的计划任务,功能相当于 crontab 命令。
参数
- minute参数:此参数用于设置计划任务中分钟设定位的值,比如,上述示例1中分钟设定位的值为5,即 minute=5,当不使用此参数时,分钟设定位的值默认为””。
- hour参数:此参数用于设置计划任务中小时设定位的值,比如,上述示例1中小时设定位的值为1,即 hour=1,当不使用此参数时,小时设定位的值默认为””。
- day参数:此参数用于设置计划任务中日设定位的值,当不使用此参数时,日设定位的值默认为””。
- month参数:此参数用于设置计划任务中月设定位的值,当不使用此参数时,月设定位的值默认为””。
- weekday参数:此参数用于设置计划任务中周几设定位的值,当不使用此参数时,周几设定位的值默认为”*”。
- user参数:此参数用于设置当前计划任务属于哪个用户,当不使用此参数时,默认为管理员用户。
- job参数:此参数用于指定计划的任务中需要实际执行的命令或者脚本,比如上例中的 “echo test” 命令。
- name参数:此参数用于设置计划任务的名称,计划任务的名称会在注释中显示,当不指定计划任务的名称时,ansible 会默认为计划任务加入注释,注释的内容为 #Ansible: None,假设指定计划任务的名称为 test,那么注释的内容为#Ansible: test,在一台机器中,计划任务的名称应该具有唯一性,方便我们以后根据名称修改或删除计划任务。
- special_time参数:在上述示例3与示例4中,计划任务的时间设定格式为 @reboot 或者@hourly。@reboot 表示重启时执行,@hourly 表示每小时执行一次,相当于设置成”0 0 * * *” ,这种@开头的时间设定格式则需要使用 special_time 参数进行设置,special_time 参数的可用值有 reboot(重启后)、yearly(每年)、annually(每年,与yearly相同)、monthly(每月)、weekly(每周)、daily(每天)、hourly(每时)。
- state参数:当计划任务有名称时,我们可以根据名称修改或删除对应的任务,当删除计划任务时,需要将 state 的值设置为 absent。
- backup参数:如果此参数的值设置为 yes,那么当修改或者删除对应的计划任务时,会先对计划任务进行备份,然后再对计划任务进行修改或者删除,cron 模块会在远程主机的 /tmp 目录下创建备份文件,以 crontab 开头并且随机加入一些字符,具体的备份文件名称会在返回信息的 backup_file 字段中看到,推荐将此此参数设置为 yes。
案例
[root@master ~]# ansible db -m cron -a "minute=5 hour=3 day=3 month=5 user=root job='echo Hello' name=job_test state=present "
[root@master ~]# ansible db -m cron -a "minute=5 hour=3 day=3 month=5 user=root job='echo World' name=job_test state=present backup=yes"
[root@master ~]# ansible db -m cron -a "minute=5 hour=*/2 day=3 month=5 user=root job='echo World' name=job_test state=present backup=yes"
[root@master ~]# ansible db -m cron -a "special_time=reboot user=root job='echo World' name=job_test state=present backup=yes"
[root@ansible-manager ~]# ansible ansible-demo3 -m cron -a " name='special time test' state=absent backup=yes "
ansible-demo3 | SUCCESS => {
"backup_file": "/tmp/crontabiaObgL",
"changed": true,
"envs": [],
"jobs": [
"crontab test",
"crontab day test"
]
}
[root@ansible-manager ~]# ansible ansible-demo3 -m cron -a " name='special time test' special_time=reboot job='echo test' "
ansible-demo3 | SUCCESS => {
"changed": true,
"envs": [],
"jobs": [
"crontab test",
"crontab day test",
"special time test"
]
}
selinux模块
配置 SELINUX 的策略, 需要重启机器
参数
- state :状态
- enforcing : 启用
- permissive : 临时关闭
- disabled : 禁用
案例
ansible all -m selinux -a 'state=disabled'
192.168.179.99 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"configfile": "/etc/selinux/config",
"msg": "",
"policy": "targeted",
"reboot_required": false,
"state": "disabled"
}
setup模块
参数
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_fqdn:仅显示主机名。
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个数(只显示总的个数)。
案例
#1.获取web01主机所有信息
[root@m01 ~]# ansible web01 -m setup
#2.获取主机IP
[root@m01 ~]# ansible web01 -m setup -a 'filter=ansible_default_ipv4'
#3.获取主机名
[root@m01 ~]# ansible web01 -m setup -a 'filter=ansible_fqdn'
web01 | SUCCESS => {
"ansible_facts": {
"ansible_fqdn": "www.baidu.com",
"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": 720,
"used": 252
},
"real": {
"free": 276,
"total": 972,
"used": 696
},
"swap": {
"cached": 0,
"free": 1023,
"total": 1023,
"used": 0
}
},
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}
mysql_db 模块
#名称:创建一个名为“bobdata”的新数据库
name: Create a new database with name 'bobdata'
mysql_db:
name: bobdata #库的名字
state:
present #创建库
import #导入数据库
dump #导出数据库
target: /tmp/dump.sql #导入或导出的数据库文件
#使用mysql_db的前提:需要安装MySQL-python(在DB端安装, yum install MySQL-python),安装的pymysql模块最主要的功能是让ansible能够操作mysql
mysql_user 模块
# name:创建名为“bob”、密码为“12345”的数据库用户,拥有所有数据库权限
name: Create database user with name 'bob' and password '12345' with all database privileges
mysql_user:
name: bob #用户名
host: 172.16.1.% #用户连接的主机
password: 12345 #用户密码
priv: '*.*:ALL' #用户权限
state:
present #创建用户
absent #删除用户
练习1:创建一个名为wordpress的数据库
ansible db -m mysql_db -a "name=wordpress state=present target=/root/discuz.sql login_host=172.16.1.51 login_user=root login_password=123456 login_port=3306"
GRANT ALL PRIVILEGES ON *.* TO 'root'@'db01' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
练习2:导出discuz数据库中所有的数据
# 导出(导出的内容在DB端)
ansible db -m mysql_db -a "name=discuz state=dump login_host=172.16.1.51 login_user=root login_password=123456 login_port=3306"
# 导入
ansible db -m mysql_db -a "name=discuz state=import target=/root/discuz.sql login_host=172.16.1.51 login_user=root login_password=123456 login_port=3306"
练习3:创建一个数据远程连接用户
ansible db -m mysql_user a "name=discuz host=% password=123456 priv=*.*:ALL state=present login_host=172.16.1.51 login_user=root login_password=123456 login_port=3306"