天天看点

ansible常用模块知识汇总(一)

所有的模块都可以使用下面的命令查看参数:

ansible-doc -s 模块名  //查询某个模块的参数

ansible-doc -l   //查看所有模块
           

模块一:ping

ping模块用来检测主机群是否存活,连通。要用的参数比较少,常用的使用:

ansible test -m ping -uroot
//也可以不用-u指定用户
           

模块二:fetch

作用:从远端主机群拉去一个文件

使用该模块必须要指定参数src和dest:

//拉去远端的fstab文件到本地/tmp下
ansible test -m fetch -a "src=/etc/fstab dest=/tmp/"
           

来看下结果:

192.168.247.180 | SUCCESS => {
    "changed": false, //因为我自己之前拉过,已经存在了,所以不会改变
    "checksum": "b6b5928e637bd4fe64c1c97b0d04e78f8bb5c3f1", 
    "dest": "/tmp/192.168.247.180/etc/fstab", 在/tmp下生成一个主机目录,这样同时拉去多个就不会混淆
    "file": "/etc/fstab", 
    "md5sum": "beb1c2fe999a9d9a6ca3805e22d1253f"//会生成hash值,判断文件有没有改变的依据,如果你改动了文件,hash值不同就会覆盖
           

模块三:copy

作用:把本地主机的文件复制到远程主机,作用和fetch相反

常用参数:

src:源文件或目录

dest: 目标路径或文件

force:yes或者no,默认 yes。表示强制覆盖

backup:备份。当远程主机已经存在同名文件时,如果backup为yes表示先把远程文件备份,再复制。如果为no表示不备份直接复制。

owner:拷贝到远程主机后文件或者目录的属主

group:属组

mode:传过去之后的权限

模块四:file

作用:对文件和目录的相关操作,比如删除,创建,修改权限等。

常用参数:

path:要操作的目标文件,这里也可以理解为dest,必要参数。

state:指定对文件进行何种操作,常有的touch,directory,link,hard,absent。

src:该参数在创建软硬链接的时候需要指定指向哪个文件。

force:强制参数,文件不存在则生成,已存在则覆盖。

owner:指定文件的属主

group:属组

mode:指定权限

recurse:相当于chmod -R,递归修改目录中文件的属性。

示例:

创建文件
ansible testA -m file -a "path=/tmp/ddd.txt state=touch"
//创建文件,如果存在就会更新时间戳
           
创建目录
ansible testA -m file -a "path=/tmp state=directory"
           
给/tmp/a.txt做软链接指向/etc/passwd
ansible testA -m file -a "path=/tmp/a.txt src=/etc/passwd state=link"
           
硬链接
ansible testA -m file -a "path=/tmp/b.txt src=/etc/passwd state=hard"
           
删除/tmp/a.txt
ansible testA -m file -a "path=/tmp/a.txt state=absent"
           
修改文件的属主
ansible testA -m file -a "path=/tmp/aaab.txt owner=mysql"
           
修改权限
ansible testA -m file -a "path=/tmp/aaab.txt mode=0644"
           

模块五:blockinfile

作用:追加,更新文本内容

常用参数:

path:必须参数,指定要操作的文件

block:这里就是要追加等操作具体的内容。

marker:标记,对于ansible插入的内容,会有两行标记,分别在追加内容的上面和下面有begin和end。可以自定义标记。

state:present和absent。默认是前者追加插入,后者是删除追加的内容。

insertafter:插入时默认在放文本最后面,该参数指定添加在某一行后面,支持正则表达式。

backup:是否在修改文件之前先把文件进行备份

create:当操作文件不存在时,是否创建对应文件。

示例:

追加内容
ansible testA -m blockinfile -a 'path=/tmp/aaab.txt block="systemctl start httpd\nsystemctl stop httpd"'

//查看/tmp/aaab的内容
1111  //这个是插入之前的,下面是插入的内容
# BEGIN ANSIBLE MANAGED BLOCK
systemctl start httpd
systemctl stop httpd
# END ANSIBLE MANAGED BLOCK
           
不指定state,也可以删除追加的内容,block为空
ansible testA -m blockinfile -a 'path=/tmp/aaab.txt block=""'
           
自定义标记
ansible testA -m blockinfile -a 'path=/tmp/aaab.txt block="systemctl start httpd\nsystemctl stop httpd" marker="#{mark} service to start"'
//mark是个变量,就是标记中的begin和end

查看文本内容
1111
#BEGIN service to start
systemctl start httpd
systemctl stop httpd
#END service to start
           
absent删除追加的内容
ansible testA -m blockinfile -a 'path=/tmp/aaab.txt marker="#{mark} service to start" state=absent'
           
将追加内容放在开头
ansible testA -m blockinfile -a 'path=/tmp/aaab.txt block="2222" marker="#{mark} service to start" insertbefore=BOF'

查看文本内容
#BEGIN service to start
2222
#END service to start
1111
           

模块六:lineinfile

作用:确保某一行在指定文本中,或者确保从文本中删除,还可以正则表达式替换文本内容

path:必要参数,指定要操作的文件

line:指定操作的文本内容

regexp:使用正则表达式,当替换文本时如果有多行被匹配,默认替换最后一个匹配到的行,删除文本时,默认匹配到的全部删除。

state:默认present,还有一个absent删除。

backrefs:当使用正则的时候,如果没有匹配到默认在文本最后面追加该内容,使用该参数为yes后,则不追加。该参数还有一个分组的作用,yes时,line中就可以对regexp中的分组进行引用。

insertafter:指定插入的位置,EOF表示插入到末尾,如果设置成正则,就插入到该正则之后。

insertbefore:BOF为最前面,设置了正则的话,正则之前。该参数和上面的insertafter在backrefs为yes时无效。

backup:是否修改前备份

create:不存在时是否创建

示例:

在远程机器上创建一个实验用的文本

cat aaab.txt
1111
2222
aaa1
bbb1
           
确保某一行在文本中,如果存在不做任何操作,不存在则追加在最后面
ansible testA -m lineinfile -a 'path=/tmp/aaab.txt line="1111"'
//1111在文本中,所以文本不会有变化

ansible testA -m lineinfile -a 'path=/tmp/aaab.txt line="3333"'
//文本中没有3333,所以添加在文本的最后一行
           
替换。将文本中11开头的行替换成change,如果内有则添加到最后
ansible testA -m lineinfile -a 'path=/tmp/aaab.txt regexp="^11" line="change"'
           
使用backrefs。没有匹配到也不会追加。
ansible testA -m lineinfile -a 'path=/tmp/aaab.txt regexp="^4444" line="test" backrefs=yes'
           
删除所有change的行
ansible testA -m lineinfile -a 'path=/tmp/aaab.txt line="change" state=absent'