Ansible常用模块
一、commands相关模块
1、commands模块
command模块包含如下选项:
creates:一个文件名,当该文件存在,则该命令不执行,反正,则执行。
free_form:要执行的linux指令
chdir:在执行指令之前,先切换到该指定的目录
removes:一个文件名,当该文件存在时,则该选项执行,反之,不执行。
注意:commands模块的执行,在远程主机上,需要有python环境的支持。
该模块通过-a跟上要执行的命令可以直接执行,不过命令里如果有带有特殊字符("<", ">", "|", "&"等)那么则执行不成功。
2、shell 模块
在远程节点上执行命令,用法和command一样,不过shell模块执行命令的时候使用的是/bin/sh,所以shell模块可以执行任何命令。
ansible 172.16.213.233 -m shell -a 'ps-ef|grepsshd'
ansible 172.16.213.233 -m shell -a 'sh/tmp/install.sh >/tmp/install.log'
上面这个命令是执行远程机器上的脚本,脚本路径为/tmp/install.sh(远程主机上的脚本,非本机的),然后将执行命令的结果存放在远程主机路径/tmp/install.log中,注意在进行保存文件的时候,写上全路径,否则就会保存在登录之后的默认路径中。
官方上说,command用起来更安全,更有可预知性。
3、raw模块
raw模块功能类似与前面说的command、shell能够完成的操作,raw也都能完成。不同的是,raw模块不需要远程主机上的python环境。
ansible要执行自动化操作,需要管理机上装ansible,客户机上也需要安装python,如果客户机上没有安装python模块,那么command、shell模块将无法工作,而
raw却可以正常工作,因此,如果有的机器是没有装python,或者说安装的python版本在python2.4以下,就可以使用raw模块来装python、python-simplejson等。
如果有些机器压根就装不了python的话(比如交换机,路由器等),那么,直接用raw模块是最好的选择。
举例:
ansible 172.16.213.233 -m raw -a "ps-ef|grepsshd|awk'{print \$2}' "
ansible 172.16.213.107 -m raw -a "yum -y install python26" -k
raw模块和comand、shell模块不同的还有:raw没有chdir、creates、removes参数
[root@localhostansible]# ansible 172.16.213.157 -m command -a 'chdir=/tmptouch test1.txt' -k
[root@localhostansible]# ansible 172.16.213.157 -m shell -a 'chdir=/tmptouch test2.txt' -k
[root@localhostansible]# ansible 172.16.213.157 -m raw -a 'chdir=/tmptouch test3.txt' -k
4、script模块
script模块是将管理端的shell脚本拷贝到被管理的远程主机上执行,其原理是先将shell复制到远程主机,再在远程主机上执行,此模块的执行,也不需要远程主机上的python环境。
ansible 172.16.213.233 -m script -a 'sh/tmp/install1.sh >/tmp/install.log'
脚本/tmp/install1.sh在管理端本机上,script 模块执行的时候将脚本传送到远程的172.16.213.233主机中,然后执行这个脚本,同时,将执行的输出日志文件保存在远程主机对应的路径/tmp/install.log下,这里保存日志文件的时候,最好用全路径。
二、其他模块
1、ping模块
测试主机是否是通的,用法很简单,不涉及参数:
[root@361way ~]# ansible 172.16.213.170-m ping
172.16.213.170 | SUCCESS => {
"changed": false,
"ping": "pong"
}
2、file模块
file模块主要用于远程主机上的文件操作,file模块包含如下选项:
force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归的设置文件的属性,只对目录有效
src:要被链接的源文件的路径,只应用于state=link的情况
dest:被链接到的目标路径,只应用于state=link的情况
state:有如下几个选项:
directory:表示目录,如果目录不存在,则创建目录。
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件。
使用示例:
ansible 172.16.213.233 -m file -a "path=/mnt/abc123 state=directory"
ansible 172.16.213.233 -m file -a "path=/mnt/abc123 owner=nobody group=nobody mode=0644 recurse=yes"
ansible 172.16.213.233 -m file -a "path=/mnt/syncfile.txt owner=sshdgroup=sshdmode=0644"
ansible 172.16.213.233 -m file -a "path=/mnt/syncfile.txt mode=0444"
ansible 172.16.213.233 -m file -a "src=/etc/ssh/sshd_configdest=/mnt/sshd_configowner=sshdstate=link"
ansible 172.16.213.233 -m file -a "path=/tmp/backup.tar.gz state=absent"
ansible 172.16.213.233 -m file -a "path=/tmp/ansibletempstate=touch"
3、copy模块
Copy模块用于复制文件到远程主机,copy模块包含如下选项:
backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
content:用于替代"src",可以直接设定指定文件的值
dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
directory_mode:递归的设定目录的权限,默认为系统默认权限
force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
others:所有的file模块里的选项都可以在这里使用
src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
copy模块举例:
ansible 172.16.213.233 -m copy -a 'src=/etc/sudoersdest=/app/sudoersowner=root group=root mode=440 backup=yes'
ansible 172.16.213.233 -m copy -a "src=/etc/sudoersdest=/app/sudoersvalidate='visudo-cf%s'"
ansible 172.16.213.233 -m copy -a 'src=/etc/yum dest=/app/ owner=root group=root directory_mode=644'
ansible 172.16.213.233 -m copy -a 'src=/etc/yum/ dest=/app/bakowner=root group=root directory_mode=644'
4、service模块
用于管理远程主机上的服务,该模块包含如下选项:
enabled:是否开机启动yes|no
name:必选项,服务名称
pattern:定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行
sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟
state:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)
使用示例:
ansible172.16.213.233 -m service -a "name=httpdstate=started"
ansible172.16.213.233 -m service -a "name=httpdenabled=yes"
5、cron模块
用于管理计划任务,包含如下选项:
backup:对远程主机上的原任务计划内容修改之前做备份
cron_file:用来指定一个计划任务文件,也就是将计划任务写到远程主机上/etc/cron.d目录下,创建一个文件对应的计划任务。
day:日(1-31,*,*/2,……)
hour:小时(0-23,*,*/2,……)
minute:分钟(0-59,*,*/2,……)
month:月(1-12,*,*/2,……)
weekday:周(0-7,*,……)
job:要执行的任务,依赖于state=present
name:定义定时任务的描述信息
special_time:特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时)
state:确认该任务计划是创建还是删除,有两个值可选,分别是present和absent,present表示创建定时任务,absent表示删除定时任务,默认为present。
user:以哪个用户的身份执行job指定的任务。
使用示例:
ansible172.16.213.233 -m cron-a 'name="job for reboot" special_time=reboot job="/data/bootservice.sh"'
ansible172.16.213.233 -m cron-a 'name="yum autoupdate" weekday="6" minute=20 hour=1 user="root" job="yum -y update"'
ansible172.16.213.233 -m cron-a 'backup="True" name="autobackup" weekday="6" minute=30 hour=1 user="root" job="/home/ixdba/backup.sh"'
ansible172.16.213.233 -m cron-a 'name="checkhttp" minute=30 hour=12 user="root" job="/home/ixdba/check_http.sh" cron_file="check_http_for_ansible" '
ansible172.16.213.233 -m cron-a 'name="yum autoupdate" state=absent'
6、yum模块
使用yum包管理器来管理软件包,其选项有:
config_file:yum的配置文件
disable_gpg_check:关闭gpg_check
disablerepo:不启用某个源
enablerepo:启用某个源
name:要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径
state:表示要安装还是删除软件包,要安装软件包,可选择present(安装)、installed(安装)、latest(安装最新版本),删除软件包可选择absent、removed。
示例如下:
ansible172.16.213.77 -m yum -a "name=redisstate=installed"
ansible172.16.213.77 -m yum -a "name=redisstate=removed"
ansible172.16.213.77 -m yum -a "name=redisstate=latest enablerepo=epel"
ansible172.16.213.77 -m yum -a " name=http://mirrors.aliyun.com/centos/7.4.1708/os/x86_64/Packages/bash-4.2.46-28.el7.x86_64.rpm state=present "
7、user模块与group模块
user模块是请求的是useradd, userdel, usermod三个指令,goup模块请求的是groupadd, groupdel, groupmod三个指令。
name # 指定用户名
group # 指定用户的主组
groups # 指定附加组,如果指定为('groups=')表示删除所有组。
shell # 指定默认shell
state #设置帐号状态,不指定为默认为present,表示创建,指定值为absent表示删除
remove #当使用状态为state=absent时使用,类似于userdel--remove选项。
示例:
ansible172.16.213.77 -m user -a "name=testuser1"
ansible172.16.213.77 -m user -a "name=testuser2 groups=admins,developers" //添加用户时,同时添加附组
ansible172.16.213.77 -m user -a "name=testuser3 state=absent remove=yes" //删除用户的同时,删除用记家目录
批量修改用户密码:
echo "123456" | opensslpasswd-1 -salt $(< /dev/urandomtr-dc '[:alnum:]' | head -c 32) -stdin
$1$yjJ74Wid$x0QUaaHzA8EwWU2kG6SRB1
ansible172.16.213.77 -m user -a 'name=testuser1 password="$1$Kklap7y3$3AYJdqrcmZUMt9W2/MYE4." '
-1:表示采用的是MD5加密算法。
-salt:指定salt值。在使用加密算法进行加密时,即使密码一样,salt不一样,所计算出来的hash值也不一样,除非密码一样,salt值也一样,计算出来的hash值才一样。
"< /dev/urandomtr-dc '[:alnum:]' | head -c 32"产生一个随机的salt。
passwd的值不能是明文,passwd关键字后面应该是密文,且密文将被保存在/etc/shadow文件中。
8、synchronize模块
此模块通过调用rsync进行文件或目录同步。
archive:归档,相当于同时开启recursive(递归),links,perms,itmes,owner,group,-D选项都为yes,默认该选项为开启
checksum:跳过检测sum值,默认关闭
compress:是不开启压缩,默认开启
copy_links:复制链接文件,默认为no,注意后面还有一个links参数
delete:删除不存在的文件,默认为no
dest:目录路径
dest_prot:默认为22,ssh协议
mode:push和pull模块,push模块的话,一般用于从本机向远程主机上传文件,pull模式用于从远程主机上拉取文件
示例:
ansible172.16.213.77 -m synchronize -a 'src=/mnt/a dest=/tmp'
ansible172.16.213.77 -m synchronize -a 'mode=pull src=/mnt/a dest=/tmp
9、setup模块
setup模块,主要用于获取主机信息,在playbooks里经常会用到的一个参数gather_facts就与该模块相关。setup模块下经常使用的一个参数是filter参数,具体使用示例如下(由于输出结果较多,这里只列命令不写结果):
[root@linux~]# ansible172.16.213.77 -m setup -a 'filter=ansible_*_mb' //查看主机内存信息
[root@linux~]# ansible172.16.213.77 -m setup -a 'filter=ansible_em[1-2]' //查看地接口为em1-2的网卡信息
[root@linux~]# ansible all -m setup --tree /tmp/facts //将所有主机的信息输入到/tmp/facts目录下,每台主机的信息输入到主机名文件中(/etc/ansible/hosts里的主机名)
10、get_url模块
该模块主要用于从http、ftp、https服务器上下载文件(类似于wget),主要有如下选项:
sha256sum:下载完成后进行sha256 check;
timeout:下载超时时间,默认10s
url:下载的URL
url_password、url_username:主要用于需要用户名密码进行验证的情况
use_proxy:表示使用代理,代理需事先在环境变更中定义
示例:
ansible172.16.213.77 -m get_url-a "url=http://172.16.213.157/Python-2.7.14.tgz dest=/mnt/python-2.7.14.tgz"