一、文件内容操作模块的参数介绍

1、blockinfile模块的参数

blockfile用来对受控主机上的某文件的进行一段文本的插入,该文本可以设置标记,这样方便下次对该标记过的文本进行更新或删除

path 指定受控主机上的文件的绝对路径
block 指要操作的文本,这个参数有个别名content,和block作用一样
marker 标记,插入文本的时候顺带插入标记,ansible会为之添加开始和结束标记,默认标记为
# BEGIN ANSIBLE MANAGED BLOCK 开始标记
# END ANSIBLE MANAGED BLOCK 结束标记
如果自己设置标记的字样,可以使用mark=#{mark} test,设置完之后效果就是
# BEGIN test# END test 也就是说,插入文本时,{mark}后的内容就是自己自定义的标记值,插入执行后,{mark}会自动改为BEGIN和END,有了标记,就可以快速找到自己之前插入的那段文本
state state有present与absent两个可选,默认是present,设置present的话,如果已经存在对应文本的标记,则进行更新,设置absent的话,如果会删除文件中对应的这个标记
insertafter 在插入一段文本时,默认会在文件的最末尾插入文本,如果你想要将文本插入在某一行的后面,可以使用此参数指定对应的行,也可以使用正则表达式(python正则),表示将文本插入在符合正则表达式的行的前面,如果有多行文本都能够匹配对应的正则表达式,则以最后一个满足正则的行为为准,此参数还可以设置为EOF,表示将文本插入到文档的开头
insertbefore 和insertafter对应理解,这个是想要将文本插入某一行的前面时使用,此参数可以指定为BOF,表示插入到文档开头
backup 是否在修改文件之前对文件进行备份
create 要操作的文件不存在时,是否创建对应的文件

2、lineinfile模块的参数

实现对受控主机上某文件的"指定文本"被确认存在、删除、替换

patch 指定受控主机上的文件绝对路径
line 使用这个参数指定文本
regexp 用正则表达式匹配对应的行,替换文本时,如果多行都能匹配,则最后面被匹配到的那行文本才会被替换;删除文本时,如果多行文本都能匹配,则这些行都会被删除
state 用在删除文本时,将此参数设置为absent
backrefs 默认情况下,当根据正则替换文本时,即使regexp参数中的正则存在分组,在line参数中也不能对正则中的分组进行引用,除非将backrefs参数的值设置为yes,backrefs=yes表示开启后向引用,这样,line参数中就能对regexp参数中的分组进行后向引用了,这样说不太容易明白,参考下面的示例命令比较直观一点,backrefs=yes除了能够开启后向引用功能,还有另一个作用,默认情况下,当使用正则表达式替换对应行时,如果正则没有匹配到任何的行,那么line对应的内容会被插入到文本的末尾,不过,如果使用了backrefs=yes,情况就不一样了,当使用正则表达式替换对应行时,同时设置了backrefs=yes,那么当正则没有匹配到任何的行时,则不会对文件进行任何操作,相当于保持原文件不变
insertafter 此参数可以将"指定文本"插入到"指定的行"之后,参考blockinfile里的insertafter参数,设置为EOF则在没有匹配到指定的行时,插入到文档末尾,如果使用了backrefs参数,这个insertafter参数就会被忽略
insertbefore 此参数可以将"指定文本"插入到"指定的行"之前,设置为BOF则在没有匹配到指定的行的时候,插入到文档末尾,如果使用了backrefs参数,这个insertafter参数会被忽略
backup 是否在修改文件的时候对文件进行备份
create 文件不存在时,是否创建对应的文件

注意这个lineinfile模块和blockinfile区别,blockinfile中的block意味着"块",也就是操作对象是一段文本,而mark标记是blockinfile的灵魂所在,后续可以根据标记值来对这块文本做的更新和删除的操作。而lineinfile适合更改文件内的某个"指定文本",也就是说操作对象是这个指定的文本。

我举个生动的例子辅助理解:blockinfile是校长,lineinfile是班主任,不过他们之前没有上下级和包含的关系,只是管理学生的方式不一样。校长给不同班级起名字(火箭班、快班、普通班、垃圾班等等),平时训斥同学不会直接指定某个同学的名字,而是这么讲:“垃圾班,你们班成绩也太差了吧,统统辍学吧,我们学校不收你们了!”。而班主任管理学生方式就不一样了,为了精准的保留各个班级里尖子生,只让真正的赖皮学生辍学,所以班主任会说:“张三,你成绩太差了,辍学吧!李四你成绩太差了,你走人吧,我新招生进来王五来代替你“,所以他们之间是"块"和"精准"的区别,各有各的好处

3、replace模块的参数

replace模块可以根据指定的正则表达式替换文件中的字符串,文件中所有被正则匹配到的字符串都会被替换掉

pach 要操作的文件的绝对路径,也可以使用dest、destfile、name这几个别名

regexp 指定一个python正则表达式,文件中与正则匹配的字符串都会被替换掉

replace 指定要换成什么字符串

backup 是否在修改文件之前做备份,设置为yes为开启

二、文件内容操作模块的验证与使用