Ansible之blockinfile模块和lineinfile模块


blockinfile模块和lineinfile模块

一、blockinfile模块概述

blockinfile模块用来在文件中插入文本块,插入的文本块会有一个标记,方便修改和删除

二、blockinfile模块常用参数

参数名 描述信息
path 操作的文件对象
block 也可用content,指定内容。
marker 使用marker参数自定义”标记”,方便我们通过对应的标记找到对应的内容
state 默认是present,state=absent,则表示从文件中删除对应标记的内容。
backup 在修改文件之前是否对文件进行备份,默认是no.
create 当要操作的文件并不存在时,是否创建对应的文件。

三、范例

1、创建/tmp/test文件,并初始化文件内容hello world

[root@node1 ~]# ansible group1 -m raw -a 'echo "hello world">/tmp/test'
192.168.8.122 | CHANGED | rc=0 >>
Shared connection to 192.168.8.122 closed.
[root@node1 ~]# ansible group1 -m raw -a 'cat tmp/test'
192.168.8.122 | CHANGED | rc=0 >>
hello world

2、使用marker插入文本“start httpd、stop httpd \restart httpd”,插入文本内容使用 httpd server进行标记。

[root@node1 ~]# ansible group1 -m blockinfile -a 'path=/tmp/test block="start httpd \n stop ttpd \n restart httpd " marker="#{mark} httpd server"'

192.168.8.122 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "msg": "Block inserted"
}
[root@node1 ~]# ansible group1 -m raw -a 'cat tmp/test'           
192.168.8.122 | CHANGED | rc=0 >>
hello world
#BEGIN httpd server
start httpd 
 stop ttpd 
 restart httpd 
#END httpd server

3、删http server标记的文本内容

[root@node1 ~]# ansible group1 -m blockinfile -a 'path=/tmp/test state=absent marker="#{mark} httpd server" '                                                                  
192.168.8.122 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "msg": "Block removed"
}
[root@node1 ~]# ansible test -m raw -a 'cat tmp/test'                                   
192.168.8.122 | CHANGED | rc=0 >>
hello world
Shared connection to 192.168.8.122 closed.

一、lineinfile模块概述

lineinfile模块和blockinfile模块功能类似,对文件行进行操作,默认添加文件是在行尾。

二、line模块常用参数

参数名 描述信息
path 操作的文件对象
line 指定行内容。
state 默认值为present,state=absent表示删除。
backup 是否在修改文件之前对文件进行备份。
insertbefore 插在匹配值之前
insertafter 插在匹配值之后,在该该选项不写的情况下默认插在文本最后
create 当要操作的文件并不存在时,是否创建对应的文件。

三、范例

1、添加"这是测试行"到/tmp/test文件中,如果不指定位置,默认是在末尾添加。

oot@node1 ~]# ansible group1 -m lineinfile -a 'path=/tmp/test line="这是测试行" '    
192.168.8.122 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "backup": "", 
    "changed": true, 
    "msg": "line added"
}
[root@node1 ~]# ansible test -m raw -a 'cat tmp/test'                           
192.168.8.122 | CHANGED | rc=0 >>
hello world
这是测试行
Shared connection to 192.168.8.122 closed.

2、使用insertbefore指定插入到"hello world"行之前,insertafter则相反。

[root@node1 ~]# ansible test -m lineinfile -a 'path=/tmp/test line="这是测试行-行首" insertbefore="hello world" '
192.168.8.122 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "backup": "", 
    "changed": true, 
    "msg": "line added"
}
[root@node1 ~]# ansible test -m raw -a 'cat tmp/test'                                   
192.168.8.122 | CHANGED | rc=0 >>
这是测试行-行首
hello world
这是测试行
Shared connection to 192.168.8.122 closed.