一、file 模块
file模块可以帮助我们完成一些对文件的基本操作, 比如:创建文件或目录、删除文件或目录、修改文件权限等
1. 模块参数
参数 | 用法 |
---|---|
path | 必须参数,用于指定要操作的文件或目录,在之前版本的ansible中,使用dest参数或者name参数指定要操作的文件或目录,为了兼容之前的版本,使用dest或name也可以 |
state | 此参数非常灵活,此参数对应的值需要根据情况设定,比如,当我们需要在远程主机中创建一个目录的时候,我们需要使用path参数指定对应的目录路径。假设:我想要在远程主机上创建/testdir/a/b目录,那么我则需要设置path=/testdir/a/b,但是,我们无法从"/testdir/a/b"这个路径看出b是一个文件还是一个目录,ansible也同样无法单单从一个字符串就知道你要创建文件还是目录。所以,我们需要通过state参数进行说明,当我们想要创建的/testdir/a/b是一个目录时,需要将state的值设置为directory,"directory"为目录之意, 当它与path结合,ansible就能知道我们要操作的目标是一个目录,同理,当我们想要操作的/testdir/a/b是一个文件时,则需要将state的值设置为touch,当我们想要创建软链接文件时,需将state设为link,想要创建硬链接文件时,需要将state设置为hard,当我们想要删除一个文件时(删除时不用区分目标是文件、目录、还是链接),则需要将state的值设置为absent,“absent” 为缺席之意,当我们想让操作的目标"缺席"时,就表示我们想要删除目标。 |
src | 当state设置为link或者hard时,表示我们想要创建一个软链或者硬链,所以,我们必须指明软链或硬链链接的哪个文件,通过src参数即可指定链接源 |
force | 当state=link的时候,可配合此参数强制创建链接文件,当force=yes时,表示强制创建链接文件,不过强制创建链接文件分为两种情况:情况一:当你要创建的链接文件指向的源文件并不存在时,使用此参数,可以先强制创建出链接文件。情况二:当你要创建链接文件的目录中已经存在与链接文件同名的文件时,将force设置为yes,会将同名文件覆盖为链接文件,相当于删除同名文件,创建链接文件。情况三:当你要创建链接文件的目录中已经存在与链接文件同名的文件,并且链接文件指向的源文件也不存在,这时会强制替换同名文件为链接文件。 |
owner | 用于指定被操作文件的属主,属主对应的用户必须在远程主机中存在,否则会报错。 |
group | 用于指定被操作文件的属组,属组对应的组必须在远程主机中存在,否则会报错。 |
mode | 用于指定被操作文件的权限,比如,如果想要将文件权限设置t为rw-r-x—,则可以使用mode=650进行设置,或者使用mode=0650,效果也是相同的,如果你想要设置特殊权限,比如为二进制文件设置suid,则可以使用mode=4700 |
recurse | 当要操作的文件为目录,将recurse设置为yes,可以递归的修改目录中文件的属性 |
2. 应用
- 在目标主机建立目录然后在ansible主机创建文件
再次执行上述命令会改变文件的时间戳!!!
- 创建目录
- 软连接
- 硬连接
- force参数
- 删除远程主机的文件
- 创建文件属主文件
- 创建文件属组
当文件存在时再次执行会改变时间戳!!!
- 创建属主/组的目录
- 改权限
可以改变原来存在的文件和目录,也可改变新建的
- 递归创建目录
二、blockinfile 模块
blockinfile模块可以帮助我们在指定的文件中插入"一段文本",这段文本是被标记过的,换句话说就是,我们在这段文本.上做了记号,以便在以后的操作中可以通过"标记"找到这段文本,然后修改或者删除它
1. 模块参数
参数 | 用法 |
---|---|
path | 必须参数,指定要操作的文件 |
block | 此参数用于指定我们想要操作的那"一段文本,此参数有一个别名叫"content",使用content或block的作用是相同的 |
marker | 假如我们想要在指定文件中插入一段文本,ansible会自动为这段文本添加两个标记,一个开始标记,一个结束标记,默认情况下,开始标记为# BEGIN ANSIBLE MANAGED BLOCK,结束标记为# END ANSIBLE MANAGED BLOCK,我们可以使用marker,参数自定义"标记",比如,marker=#{ mark}test这样设置以后,开始标记变成了# BEGIN test,结束标记变成了# END test,没错, {mark}会自动被替换成开始标记和结束标记中的BEGIN和END,我们也可以插入很多段文本,为不同的段落添加不同的标记,下次通过对应的标记即可找到对应的段落 |
state | state参数有两个可选值,present与absent,默认情况下,我们会将指定的一段文本"插入"到文件中,如果对应的文件中已经存在对应标记的文本,状认会更新对应段落,在执行插入操作或更新操作时,state的值为present,默认值就是present, 如果对应的文件中已经存在对应标记的文本并且将state的值设置为absent,则表示从文件中删除对应标记的段落 |
insertafter | 在插入一段文本时,默认会在文件的末尾插入文本,如果你想要将文本插入在某一行的后面,可以使用此参数指定对应的行,也可以使用正则表达式(python正则),表示将文本插入在符合正则表达式的行的后面,如果有多行文本都能够匹配对应的正则表达式,则以最后一个满足正则的行为准,此参数的值还可以设置为EOF,表示将文本插入到文档末尾. |
insertbefore | 在插入一段文本时,默认会在文件的末尾插入文本,如果你想要将文本插入在某一行的前面, 可以使用此参数指定对应的行,也可以使用正则表达式(python正则),表示将文本插入在符合正则表达式的行的前面,如果有多行文本都能够匹配对应的正则表达式,则以最后一个满足正则的行为准,此参数的值还可以设为BOF,表示将文本插入到文档开头。 |
backup | 是否在修改文件之前对文件进行备份。 |
create | 当要操作的文件并不存在时,是否创建对应的文件 |
2. 应用
- 在文件末尾添加内容
- 自定义标记
再次执行
- 改变添加的内容时
- 删除添加自定义的内容 --> 方式一,block=“ ”
- 删除添加自定义的内容 --> 方式二 ,state=absent
- 在文件开头添加内容
- 匹配正则表达式添加内容
- 在文件末尾添加内容
- 在文件指定位置插入内容
- 标记不变,改变标记里面的内容并备份
- 创建不存在的文件,并插入内容
三、lineinfile 模块
我们可以借助lineinfile模块,确保"某一行文本"存在于指定的文件中,或者确保从文件中删除指定的"文本" (即确保指定的文本不存在于文件中),还可以根据正则表达式,替换"某一行文本"。
1. 模块参数
参数 | 用法 |
---|---|
path | 必须参数,指定要操作的文件。 |
line | 使用此参数指定文本内容。 |
regexp | 使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除。 |
state | 当想要删除对应的文本时,需要将state参数的值设置为absent, absent为缺席之意,表示删除, .state的积认值为present |
insertafter | 借助insertafter参数可以将文本插入到“指定的行”之后,insertafter参数的值可以设置为EOF或者正则表达式,EOF为End Of File之意,表示插入到文档的末尾,默认情况下insertafter的值为EOF,如果将insertafter的值设置为正则表达式,表示将文本插入到匹配到正则的行之后,如果正则没有匹配到任何行,则插入到文件末尾 |
insertbefore | 借助insertbefore参数可以将文本插入到“指定的行”之前,insertbefore参数的值 可以设置为BOF或者正则表达式,BOF为Begin Of File之意,表示插入到文档的开头,如果将insertbefore的值设置为正则表达式,表示将文本插入到匹配到正则的行之前,如果正则没有匹配到任何行,则插入到文件末尾 |
backup | 是否在修改文件之前对文件进行备份。 |
create | 当要操作的文件并不存在时,是否创建对应的文件。 |
2. 应用
- 在远程主机中所指定的文件插入内容
- 替换
使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换
- 删除
当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除。