ansible 模块:blockinfile
1. 简介
blockinfile 是 Ansible 的一个非常实用的模块,和单行替换模块 lineinfile 类似,但是可以帮助我们在文件中插入一段文本。
2. 常用参数
path
参数:必须指定的参数。和 file 模块的 path 参数一样,指定要操作的文件。别名:dest, destfile, name。state
参数:确保段落存在(state=present)或者不存在(state=absent)。默认值为state=present
,会将指定的一段文本插入到文件中,如果文件中已经存在标记的文本,默认会更新对应段落。如果state=absent
,则表示从文件中删除对应标记的段落。marker
参数:默认值"# {mark} ANSIBLE MANAGED BLOCK"
。我们想要在指定文件中插入一段文本,Ansible 会自动为这段文本添加两个标记,一个开始标记,一个结束标记,默认情况下,开始标记为# BEGIN ANSIBLE MANAGED BLOCK
,结束标记为# END ANSIBLE MANAGED BLOCK
。我们可以使用 marker 参数自定义标记,比如marker = #{mark}test
,这样开始标记变成了# BEGIN test
,结束标记变成了# END test
。{mark}
变量会自动被替换成开始标记中的 marker_begin 和结束标记中的 marker_end,如果使用没有{mark}变量的自定义标记,可能会导致重复插入。marker_begin
参数:设置 marker 参数的开始标记中的{mark}变量。默认值"BEGIN"。marker_end
参数:设置 marker 参数的结束标记中的{mark}变量。默认值"END"。block
参数:指定一段需要操作的文本。如果没有 block 参数或者参数的值为空,则移除文本块,效果等同于state = absent
。别名:content。insertafter
参数:插入段落(state=present)时使用。值为 EOF 或者正则表达式,默认值为 EOF,表示End Of File
,插入到文件的末尾。如果设置为正则表达式,默认将文本插入到正则表达式匹配的最后一行之后。如果设置为正则表达式,但是没有匹配到任何行,则插入到文件末尾。insertbefore
参数:插入段落(state=present
)时使用。值为BOF
或者正则表达式,默认值为 BOF,表示Begin Of File
,插入到文件的开头。如果设置为正则表达式,默认将文本插入到正则表达式匹配的最后一行之前。如果设置为正则表达式,但是没有匹配到任何行,则插入到文件开头。validate
参数:修改文件之前进行校验。使用“%s”
表示 path 参数指定的需要修改的文件。file
模块的所有参数,常用的有:backup
:是否在修改文件之前对文件进行备份。create
:yes:当要操作的文件不存在时,创建对应的文件;默认为 no:当要操作的文件不存在时,语句报错。mode
:文件的属性。owner
:文件的属主。group
:文件的属组。
3. 示例
3.1 修改 SSHD 配置文件禁止 ansible-agent 用户使用密码登录:
3.2 在 Debian/Ubuntu 网络配置文件/etc/network/interfaces 中添加网卡 eth0 的配置信息:
3.3 备份/etc/ssh/ssh_config 文件,并在文件末尾插入./local/ssh_config 文件的内容,最后使用/usr/sbin/sshd -T -f /etc/ssh/ssh_config 命令校验:
3.4 在 HTML 文件/var/www/html/index.html 的"<body>"之后插入自定义标记的内容:
3.5 移除在 HTML 文件/var/www/html/index.html 中的添加的内容:
3.6 在/etc/hosts 文件中添加解析记录:
版权声明: 本文为 InfoQ 作者【ghostwritten】的原创文章。
原文链接:【http://xie.infoq.cn/article/fc809c8736d7f32d445cadf5d】。文章转载请联系作者。
评论