#发文福利#
- [root@s40 tmp]# tail kahn.conf
- <value>nginx</value>
- <description>my nginx config!</description>
- </property>
-
- <property>
- <name>address</name>
- <value>shanghai.china</value>
- </property>
-
- </configuration>
- <property1>
- <name1>kahn.config</name>
- <value1>hahahaha.hello world!</value>
- </property1>
- ---
-
- - hosts: all
- gather_facts: no
- ignore_unreachable: yes
- tasks:
- - name: debug 1
- debug:
- msg: "hello , newgroup"
-
- - name: 往xml里插入一段配置信息
- blockinfile:
- path: /opt/tmp/hdfs-site.xml
- insertbefore: ""
- block: |
- <property1>
- <name1>kahn.config</name>
- <value1>hahahaha.hello world!</value>
- </property1>
- marker: "#{mark} my marker kahn..."
- state: present
- notify:
- - handler1
-
- handlers:
- - name: handler1
- command: /bin/bash -c "/usr/bin/sed -ie 's/<\/configuration>/\n<\/configuration>/g' /opt/tmp/kahn.conf"
说明:
1、insertbefore: "" 指定在 一行的前面插入新配置信息
2、marker: "#{mark} my marker kahn..." 指定自定义标记,注意#是linux下的注释,{mark}是固定写法,必须写。到时候再你的配置信息上下放会有标记开始和结束的信息,如#BEGIN my marker kahn...和#END my marker kahn...。为啥要加{mark},有这个标记,才能以后使用state: absent去删除块。
3、state: present 增加块。反之是state: absent,如果要删除块state: absent的前提是在增加的时候必须有marker: "#{mark}"是必不可少的。
4、notify: - handler1 是本次的拓展,自定义动作标签,当我们修改了配置文件后,就会触发将最后一行的替换掉为上面增加一个空行。(注意这是个迂回的方法,没能在ansible中找到给指定行增加空白行的方法。如果我们反反复复的这样弄的话,会在最后一行前产生多条空行)
执行结果如下:
- [root@s40 tmp]# tail kahn.conf
- <value>nginx</value>
- <description>my nginx config!</description>
- </property>
-
- <property>
- <name>address</name>
- <value>shanghai.china</value>
- </property>
-
- <property1>
- <name1>kahn.config</name>
- <value1>hahahaha.hello world!</value>
- </property1>
-
- </configuration>