Ansible常用模块

Posted yxf-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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"

以上是关于Ansible常用模块的主要内容,如果未能解决你的问题,请参考以下文章

Ansible概述及常用命令模块

Ansible------Ansible概述,搭建,常用模块介绍

Ansible playbooks入门和编写规范Ansible Playbooks常用模块介绍常用模块集合

Ansible playbooks入门和编写规范Ansible Playbooks常用模块介绍常用模块集合

ansible常用基础模块

ansible常用模块