简介

前面说过ansible使用过程中无非是通过ansible AD-Hoc的指令,或者是执行ansible -playbook预先编写的配置文件,但是归根结底就是操作各个模块来实现我们想要的功能,因此了解和学习相应的ansible模块是必然的。

根据官方的分类,将模块按功能分类为:云模块、命令模块、数据库模块、文件模块、资产模块、消息模块、监控模块、网络模块、通知模块、包管理模块、源码控制模块、系统模块、单元模块、web设施模块、windows模块 ,具体可以参看官方页面。官方文档。下面我们就说些常用的模块。

常用模块

1. command模块

在远程主机上执行shell命令,此为默认模块,可以忽略-m选项,(不支持管道 | )

参数选项含义
chdirchdir /opt执行ansible切换到指定目录
createscreates=/data/file如果文件存在,则跳过执行
removesremoves=/data/file如果文件存在则执行删除

示例1:chdir切换目录执行shell命令;

[root@clinet test1]# ansible web -m command -a 'chdir=/home/uos  pwd'10.10.10.134 | CHANGED | rc=0 >>/home/uos10.10.10.135 | CHANGED | rc=0 >>/home/uos[root@clinet test1]# 

示例2:creates,如果/opt/file1文件存在则跳过后面的命令,不执行。

##134上存在/opt/file1 文件[root@clinet test1]# ansible web -m command -a 'creates=/opt/file1   chdir=/home/uos pwd'10.10.10.134 | SUCCESS | rc=0 >>skipped, since /opt/file1 exists10.10.10.135 | CHANGED | rc=0 >>/home/uos[root@clinet test1]# 

示例3:removes,如果/opt/file1 文件存在,则执行后端命令

##134上存在/opt/file1 文件[root@clinet test1]# ansible web -m command -a 'removes=/opt/file1   chdir=/home/uos pwd'10.10.10.135 | SUCCESS | rc=0 >>skipped, since /opt/file1 does not exist10.10.10.134 | CHANGED | rc=0 >>/home/uos[root@clinet test1]# 

2. shell模块

功能:在远程主机上执行shell命令,支持管道等特殊符号的操作。

参数选项含义
chdirchdir=/opt执行ansible的时候切换到指定目录
createscteates=/opt/file1文件存在则跳过执行
removesremoves=/opt/file文件存在,则执行

示例1: 通过shell命令过滤被控端主机的ip地址

[root@clinet test1]# ansible web -m shell -a "ifconfig ens33 |awk 'NR==2'"10.10.10.134 | CHANGED | rc=0 >>        inet 10.10.10.134  netmask 255.255.255.0  broadcast 10.10.10.25510.10.10.135 | CHANGED | rc=0 >>        inet 10.10.10.135  netmask 255.255.255.0  broadcast 10.10.10.255[root@clinet test1]# 

3. script模块

功能:在被控节点,运行ansible主机的脚本

示例1:在ansible主机上编写xhz.sh脚本,然后推送至被控端进行执行。

root@clinet test1]# ansible web -m script -a './xhz.sh'10.10.10.135 | CHANGED => {    "changed": true,     "rc": 0,     "stderr": "Shared connection to 10.10.10.135 closed.\r\n",     "stderr_lines": [        "Shared connection to 10.10.10.135 closed."    ],     "stdout": "total 0\r\n",     "stdout_lines": [        "total 0"    ]}10.10.10.134 | CHANGED => {    "changed": true,     "rc": 0,     "stderr": "Shared connection to 10.10.10.134 closed.\r\n",     "stderr_lines": [        "Shared connection to 10.10.10.134 closed."    ],     "stdout": "total 0\r\n",     "stdout_lines": [        "total 0"    ]}[root@clinet test1]# 

4. yum模块

功能:管理操作系统的软件包

参数选项含义
namehttpd,nginx….指定软件包的名称或URL
statepresent(默认,安装软件),absent(卸载软件)指定yum对应的方法
enablerepo

epel,base….

运行从哪些仓库获取软件
diablerepo

epel,base

禁止从哪些仓库获取软件
excludekernel排除某些软件包
download_onlyyes,no仅下载软件包,不安装

示例1:安装当前最新的nginx软件,已经安装则不会再安装。

[root@clinet test1]# ansible web -m yum -a 'name=nginx state=present'

示例2:安装最新的apache软件,指定使用epel源安装

[root@clinet test1]# ansible web -m yum -a 'name=nginx state=present enablerepo=epel'

示例3:通过公网URL安装rpm软件

[root@clinet test1]# ansible web -m yum -a 'name=https://xxxx.rpm  state=present'

示例4:更新apache软件,存在新版本才会更新

[root@clinet test1]# ansible web -m yum -a 'name=httpd state=latest'

示例5:更新所有的软件包,内核包除外。

[root@clinet test1]# ansible web -m yum -a 'name=httpd state=latest exclude=kernel'

示例6:卸载apache软件

[root@clinet test1]# ansible web -m yum -a 'name=httpd state=absent'

5. copy模块

功能:从ansible主控端复制文件到远程主机

参数选项含义
src复制本地目下的文件到远程主机
dest文件复制到远程主机的绝对路径
ownerroot(default)文件复制到远程主机并设置属主
grouproot(default)文件复制到远程主机设置属组
modefile=644,directory=755文件复制到远程主机,并设置权限
backupyes备份被修改前的配置文件
content新建文件并给文件添加内容

示例1:将本地的index.html文件推送到远程主机

[root@clinet test1]# ansible web -m copy -a 'src=./index.html dest=/usr/share/nginx/html owner=root group=root mode=644'

示例2:往文件中写内容,,远程主机上有该同名文件就先备份,没有的话就直接创建(content参数不能和src同时使用,且dest不能为目录)

ansible web -m copy -a 'dest=/usr/share/nginx/html/index.html  owner=root group=root mode=644 backup=yes content="xhz123"'

6. file模块

功能:为被控端创建文件或目录,设定权限属性

参数选项含义
path指定远程主机的路径
recurseyes递归方式,可以批量授权
statetouch,directory,link,absent

touch:创建文件

directory:创建目录

link:软连接

absent:删除

ownerroot(defult)远程主机创建文件或目录的属主
grouproot(default)远程主建创建文件或目录的属组
modefile=644,directory=755设定权限

示例1:创建文件,并设定属主,属组和权限

ansible web -m file -a 'path=/tmp/foot.txt state=touch owner=uos group=uos mode=777'

示例2:创建目录,并设定属主,属组和权限

##在多级目录下创建目录或者文件的时候,只要前几级目录不存在,就会递归创建,同时权限与设置的一样ansible web -m file -a 'path=/tmp/xhz/ansible state=directory owner=uos group=uos mode=755'

示例3:递归修改权限。

ansible web  -m file -a 'path=/tmp/xhz state=directory owner=uos group=uos mode=777 recurse=yes'

示例4:创建连接,并设定属主,属组和权限

ansible web -m file -a 'src=/root/xhz dest=/tmp/xhz/ansible/flf  state=link owner=uos group=uos'

7. lineinfile模块

功能:修改或删除文件内容,与sed命令类似。

参数选项含义
path指定要操作的文件
regexp使用正则表达式匹配对应的行
line修改为新的内容
insertafter将文本插入到指定行之后
insertbefore将文本插入到指定行之前
stateabsent,present(default)删除指定的文本时,state=absent
backrefsyes,no支持后向引用,当未匹配到内容时候,则不操作文件
backupyes,no操作文件前是否备份
createyes。no当文件不存在时,是否创建

示例1:将selinux修改为disabled状态

ansible web -m lineinfile -a 'path=/etc/selinux/config line=SELINUX=disabled regexp="^SEKINUX=" backup=yes backrefs=yes'

示例2:删除/etc/selinux/config文件中以#开头的行

ansible web -m lineinfile -a 'path=/etc/selinux/config state=absent regexp="^#" backup=yes backrefs=yes'

示例3:替换/etc/hosts文件中以127.0.0.1的行为 127.0.0.1 route.xhz.com

ansible 10.10.10.134 -m lineinfile -a 'path=/etc/hosts regexp="^127\.0\.0\.1" line="127.0.0.1  route.xhz.com" backup=yes backrefs=yes'

示例4:在/etc/resolv.conf 文件中添加114.114.114.114的DNS

ansible web -m lineinfile -a 'path=/etc/resolv.conf insertafter="^nameserver 10.10.10.2$" line="nameserver 114.114.114.114"    backup=yes'

8. get_url模块

功能:通过互联网下载软件至被控端本地

参数选项含义
urlhttp,https资源文件在互联网的具体位置
dest文件下载保存位置的绝对路径
mode文件下载后的权限
checksummd5,sha256对下载资源进行校验
timeout10(default)url请求超时时间

示例1:下载互联网的包到本地

ansible web -m get_url -a 'url="https://cdimage.uniontech.com/device/iso-tailor_2.1.6-1_all.deb" dest=/tmp mode=755 timeout=15'

示例2:下载互联网的包到本地,并进行校验

ansible web -m get_url -a 'url="https://cdimage.uniontech.com/device/iso-tailor_2.1.6-1_all.deb" dest=/tmp mode=755 timeout=15 checksum=md5:a68aa1e0eec9da42005732d354a30cf0'

9. systemd模块

功能:管理服务启动和停止,与service模块用法一致。

参数选项含义
namehttps,nginx….指定服务名称
state

started:启动

stopped:停止

restarted:重启

reloaded:重置

enabledyes,no允许服务是否开机自启

示例1: 启动nginx服务,并设置开机自启

ansible web -m systemd -a 'name=nginx state=started enabled=yes'

10. group模块

功能:管理被控端的用户组

参数选项含义
name指定创建的组名
gid为组设置可选gid
state

present(default):创建组,

absent:删除组

是否在远程主机上创建组
systemyes,no(default)是否创建系统组

示例1:创建news组,组id设置为999

ansible web -m group -a 'name=news gid=9999 state=present'

示例2:删除news组

ansible web -m group -a 'name=news state=absent'

11. user模块

功能:管理被控端用户

参数选项含义
name创建或删除的用户名
udi为用户设置uid
group为用户设置属组
groups为用户设置附加组
shell为用户设置登录shell
create_homeyes(default),no为用户创建家目录
state

present(default):创建,

absent:删除

创建或删除用户
removeyes,no(default)删除用户相关联的目录,只有当state=absent时才生效
generate_ssh_keyyes,no(default)为相关用户生成ssh秘钥,不会覆盖现有的ssh秘钥
ssh_key_bits2048指定ssh加密秘钥的位数
ssh_key_file.ssh/id_rsa(default)指定ssh key文件名,当文件路径为相对路径时,默认为家目录,可以指定为绝对路径来指定保存位置

示例1:创建joh用户,uid为1040,属组为adm

ansible web -m user -a 'name=joh uid=1040 group=adm'

示例2:创建lisa用户,shell为/sbin/nologin,添加两个附加组bin,sys

ansible web -m user -a 'name=lisa state=present shell=/sbin/nologin groups=bin,sys'

示例3:创建jsm用户,为其添加123作为登录密码,并创建家目录

ansible web -m user -a 'name=jsm state=present password=jsDCEOEt1Y6CQ'

注意:

这里的password的参数是进行加密后的,在ansible中,使用user创建用户不可以使用明文密码。

推荐加密方式:(使用python普通加密)

import crypt

crypt.crypt(‘123′,’456’) ##123为密码,456为加盐字符串

示例4:删除用户

ansible web -m user -a 'name=jsm state=absent remove=yes'

12. cron模块

功能:管理被控端计划任务。

参数选项含义
name定时任务基本描述
job定时任务执行的命令
minute(Default)0-99分,默认为*
hour(default)0-13时,默认为*
day(default)1-31日,默认为*
month(default)1-12月,默认为*
weekday(default)0-6周,默认为*

示例1:添加定时任务,每分钟执行一次 * * * * * ls -l >> /tmp/ls.txt

ansible web -m cron -a 'name=cron01 job="ls -l >> /tmp/ls.txt"'

示例2:添加定时任务,每天凌晨2点和5点执行一次* 2,5 * * * ls -l >> /tmp/ls.txt

ansible web -m cron -a 'name=cron01 job="ls -l >> /tmp/ls.txt" minute=0 hour=2,5'

示例3:取消任务

ansible web -m cron -a 'name=cron01 job="ls -l >> /tmp/ls.txt" minute=0 hour=2,5 disabled=yes'

13. mount模块

功能:管理被控端的挂载设备。

参数选项含义
src远程主机共享目录
path本地挂载的路径
fstypexfs,nfs….文件系统类型
optsdefaults,ro….挂参数载iazaug
statepresent,absent,mounted,unmounted挂载状态

示例1:将10.10.10.136上的nfs共享目录,挂载到10.10.10.134的/data目录上,并实现开机自动挂载。

ansible 10.10.10.134  -m mount -a 'src=10.10.10.136:/data/xhz path=/data fstype=nfs opts=defaults state=mounted'[root@route data]# [root@route data]# [root@route data]# df -hT Filesystem              Type      Size  Used Avail Use% Mounted ondevtmpfs                devtmpfs  899M     0  899M   0% /devtmpfs                   tmpfs     910M     0  910M   0% /dev/shmtmpfs                   tmpfs     910M  9.6M  901M   2% /runtmpfs                   tmpfs     910M     0  910M   0% /sys/fs/cgroup/dev/mapper/centos-root xfs        39G  2.7G   36G   7% //dev/sda1               xfs      1014M  183M  832M  18% /boot/dev/mapper/centos-home xfs        19G   33M   19G   1% /hometmpfs                   tmpfs     182M     0  182M   0% /run/user/010.10.10.136:/data/xhz  nfs4       39G  2.6G   36G   7% /data[root@route data]# [root@route data]# [root@route data]# cat /etc/fstab 10.10.10.136:/data/xhz /data nfs defaults 0 0[root@route data]# 

实例2:临时卸载nfs的共享目录,但是不清理/etc/fstab

ansible 10.10.10.135  -m mount -a 'src=10.10.10.136:/data/xhz path=/data fstype=nfs opts=defaults state=unmounted'

示例3:永久卸载nfs共享目录,清理/etc/fstab

ansible 10.10.10.135  -m mount -a 'src=10.10.10.136:/data/xhz path=/data fstype=nfs opts=defaults state=absent'

注意:

state的几种状态:

present:不挂载,检查nfs的联通性。

mounted:挂载,并写入/etc/fstab

unmounted:临时卸载,不清理/etc/fstab

absent:永久卸载,清理/etc/fstab

14:. hostname模块

功能:管理被控端的主机名

示例1:设置主机名为route.xhz.com

ansible 10.10.10.134 -m hostname -a 'name=route.xhz.com'

15. archive模块

功能:打包与压缩

参数选项含义
path要压缩的文件或目录
dest压缩后的文件
formatbz2,gz,tar,xz,zip指定打包压缩的格式

示例1:将/var/log压缩为gz格式后保存在/tmp目录下

ansible 10.10.10.134 -m archive -a 'path=/var/log  dest=/tmp/log.tar.gz  format=gz'##其他格式ansible 10.10.10.134 -m archive -a 'path=/var/log  dest=/tmp/log.zip  format=zip'ansible 10.10.10.134 -m archive -a 'path=/var/log  dest=/tmp/log.tar  format=tar'ansible 10.10.10.134 -m archive -a 'path=/var/log  dest=/tmp/log.tar.bz2  format=bz2'

16. unarcive模块

功能:解压缩

参数选项含义
src压缩包所在的路径
dest解压到指定位置
remote_srcyes,no(默认)

yes:要解压的包在被控端

no:要解压的包在控制端

示例1: 解压被控端/tmp/log.zip文件,解压到/data目录(zip文件需要在被控端)

ansible 10.10.10.134 -m unarchive -a 'src=/tmp/log.zip dest=/data remote_src=yes'

示例2:解压控制端/data/log.tar.gz文件,解压到被控端的/data下面(tar.gz在控制端)

ansible 10.10.10.134 -m unarchive -a 'src=/data/log.tar.gz  dest=/data remote_src=no'

17. selinux模块

功能:管理selinux防火墙

参数选项含义
stateenforcing,permissive,disabled

示例1:设置selinux为enforcing

ansible web -m selinux -a 'state=enforcing'

结束语:

ansible的模块有上百个,上面我们只说了极小部分常用的模块,更多模块使用可以查看官网的详细信息。模块的理解和使用时必然的,这将为我们后面ansible-playbook的编写打下夯实的基础。