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

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

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

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

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

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

模块二:fetch

作用:从远端主机群拉去一个文件
使用该模块必须要指定参数srcdest

//拉去远端的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:传过去之后的权限

ansible testA -m copy -a "src=/tmp/ddd.txt dest=/tmp/ backup=yes owner=root group=root mode=0644"

模块四: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'
上一篇:每日知识点20191107


下一篇:【DFS】引爆炸弹