ansible 对文件内容的操作
ansible lineinfile
lineinfile
该模块是操作文件中的每一行内容,他是按照行为单位的,和下面的replace
模块并不冲突。
修改匹配行,如果不存在就会添加
1 | tasks: |
把 SELINUX=
这个开头的行直接替换成SELINUX=enforcing
不管后面是什么,直接替换整行内容。
删除文件中的行
1 | - name: 确保sudoers配置中没有wheel组。 |
在匹配行前添加一行内容,并确保插入成功
1 | - name: Ensure the default Apache port is 8080 |
在匹配行后添加一行内容,并确保插入成功
1 | - name: Ensure we have our own comment added to /etc/services |
修改文件并更改权限
1 | - name: Replace a localhost entry with our own |
文件存在就添加一行内容,如果内容存在就不会添加(多次执行不会重复添加)
1 | - name: add a line |
ansible replace(非核心模块)
replace
模块可以根据我们指定的正则表达式替换匹配到的字符串,文件中所有被匹配到的字符串都会被替换,和lineinfile
不同的地方是replace
只会替换正则表达式匹配到的内容,而lineinfile
是替换正则表达式匹配到行的内容。
常用参数
- path: 文件路径,我们要替换那个文件内的内容,必须
- regexp:正则表达式,必要参数
- replace: 替换成的内容
替换文件内容
1 | tasks: |
注释 Apache 配置文件1
注释 Apache 配置文件/etc/apache2/sites-available/default.conf
中NameVirtualHost [*]
行之后的所有内容:
1 | - name: Replace after the expression till the end of the file (requires Ansible >= 2.4) |
注释 Apache 配置文件2
注释 Apache 配置文件/etc/apache2/sites-available/default.conf
中# live site config
行之前的所有内容:
1 | - name: Replace before the expression till the begin of the file (requires Ansible >= 2.4) |
注释 Apache 配置文件3
注释 Apache 配置文件/etc/apache2/sites-available/default.conf
中<VirtualHost [*]>
行和</VirtualHost>
行之间的内容:
1 | # Prior to Ansible 2.7.10, using before and after in combination did the opposite of what was intended. |
修改/etc/apache/ports文件并校验:
1 | - name: Supports a validate command |
ansible blockinfile
和lineinfile
有点类似,他可以帮助我们在文件中插入一段文本。
常用参数
-
path: 要操作的文件名称
-
state:present 确保段落存在,absent 确保段落不存在,默认值为 present,会将指定的一段文本插入到文件中,乳沟文件中已经存在标记的文本,会重新更改;absent 删除对应的段落
-
marker:才操作的段落中添加标记信息。默认值为"# {mark} ANSIBLE MANAGED BLOCK"
我们想要在指定文件中插入一段文本,Ansible 会自动为这段文本添加两个标记,一个开始标记,一个结束标记,默认情况下,开始标记为
# BEGIN ANSIBLE MANAGED BLOCK
,结束标记为# END ANSIBLE MANAGED BLOCK
。{mark}
变量会自动被替换成开始标记中的marker_begin
和结束标记中的marker_end
,如果使用没有{mark}
变量的自定义标记,可能会导致重复插入。 -
marker_begin: 设置 marker 参数的开始标记中的 {mark}变量,默认值为“BEGIN”
-
marker_end: 设置 marker 参数的结束标记中的 {mark}变量,默认值为“END”
-
block: 指定一段要操作的文本,如果没有 block 参数或者参数的值为空,则移除文本块,等同于 state=absent.
-
insertafter: 在匹配后添加。
值为
EOF
或者正则表达式,默认值为EOF
,表示End Of File
,插入到文件的末尾。如果设置为正则表达式,默认将文本插入到正则表达式匹配的最后一行之后。
如果设置为正则表达式,但是没有匹配到任何行,则插入到文件末尾。
-
insertbefore: 在匹配前添加
插入段落(state=present)时使用。
值为
BOF
或者正则表达式,默认值为BOF
,表示Begin Of File
,插入到文件的开头。如果设置为正则表达式,默认将文本插入到正则表达式匹配的最后一行之前。
如果设置为正则表达式,但是没有匹配到任何行,则插入到文件开头。
-
backup: 操作前是否备份
在文件最后添加多行
1 | tasks: |
备份文件
备份/etc/ssh/ssh_config文件,并在文件末尾插入./local/ssh_config文件的内容,最后使用/usr/sbin/sshd -T -f /etc/ssh/ssh_config命令校验:
1 | tasks: |
在/etc/hosts文件中添加解析记录:
1 | tasks: |