上一篇博客学习了ansible的copy模块和file模块。
今天来学习其他两个文件操作模块blockinfile和lineinfile模块:

blockifile:

ansible mount模块参数 ansible tar模块_mysql


以上是它的模块参数介绍

下面我们来具体实验:

<1>ansible test177 -m blockinfile -a 'path=/opt/testfile block="systemctl start mysqlnsystemctl start httpd"'

以上这条命令表示我们在177的opt下的testfile文件中加入了两条文字

来看一下177中是否有收到

ansible mount模块参数 ansible tar模块_bash_02


命令中的path指明了受管主机的路径,后面的block指明了我们需要添加的文本内容

那么我们有时候想要换掉BEGIN和END后面的内容,应该使用mark,类似于这样:

ansible test177 -m blockinfile -a 'path=/opt/testfile block="systemctl start mysqlnsystemctl start httpd" marker="#{mark} serivce to start" '

ansible mount模块参数 ansible tar模块_bash_03


ansible test177 -m blockinfile -a 'path=/opt/testfile block="systemctl start mysql" marker="#{mark} service tostart"'

这条命令相当于更新文本块中的内容而不是插入新的内容,改变后结果如下:

ansible mount模块参数 ansible tar模块_bash_04


那么删除我们BEGIN和END中间的文本块该如何操作呢,我们执行以下命令:

ansible test177 -m blockinfile -a 'path=/opt/testfile marker="#{mark} service tostart" state=absent'

ansible mount模块参数 ansible tar模块_数据库_05


默认情况下文本的插入是先来后到,比方说我再文件里面插入了一段文字,第二次我再往里面插入不同文字的时候默认是跟在第一次的文字后面,但ansible可以指定文字插入的位置,比如说我想要插入到文件的开头:

ansible test177 -m blockinfile -a 'path=/opt/testfile block="I LOVE YOU" marker="#{mark} zhuzhu" insertbefore=BOF'

表示在testfile的开头加入zhuzhu模块,模块内容是I LOVE YOU只需要在命令后面添加‘insertbefore=BOF就行了’

ansible mount模块参数 ansible tar模块_ansible mount模块参数_06


那么插入到结尾,只需要添加‘insertafter=EOF’就行了

ansible mount模块参数 ansible tar模块_mysql_07


我在受管机上添加了一个简单的.sh脚本文件

ansible test177 -m blockinfile -a 'path=/opt/test.sh block="i love you" marker="#{mark} test" insertafter="^#!/bin/bash"'

以上的命令表示将test模块对应的文本i love you 加入到#!/bin/bash后面,#!/bin/bash可以换做其他任何文字,不一定是脚本文件

假设我要往文件里面插入一段文本,但是又希望源文件能有个备份,以免出现问题后有冗余的地步:
ansible test177 -m blockinfile -a 'path=/opt/test.sh marker="#{mark} test" state=absent backup=yes'

删除文件中的test模块,将源文件进行备份

ansible mount模块参数 ansible tar模块_bash_08


备份的文件名是源文件名加备份时候的时间戳如果我想在受管主机上创建一个它原来不存在的文件,如果存在就默认不创建,顺便在里面出入一段文本:

ansible test177 -m blockinfile -a 'path=/opt/sazhuo block="lovenlove" marker="#{mark} test" create=yes'

ansible mount模块参数 ansible tar模块_mysql_09


ansible mount模块参数 ansible tar模块_数据库_10

lineinfile:

参数:

ansible mount模块参数 ansible tar模块_mysql_11


ansible mount模块参数 ansible tar模块_mysql_12


我在受管主机的文件中添加了一段这样的话

如果我想插入一行文本,且文本如果存在于这段文本中,默认不添加,

如果不存在则添加到文本的最后一行

ansible mount模块参数 ansible tar模块_ansible mount模块参数_13


ansible mount模块参数 ansible tar模块_mysql_14


ansible mount模块参数 ansible tar模块_源文件_15


上图中的命令表示匹配正则将ha开头的行替换成参数line中的内容,但是如果匹配超过两行,就只替换匹配到的最后一行,如果没有匹配到那就把line的内容添加到文本的最后一行

ansible mount模块参数 ansible tar模块_ansible mount模块参数_16


那么,如果我没有匹配到任何一行,我又不想让文件默认加到我文本的最后一行:

ansible test177 -m lineinfile -a 'path=/opt/testfile regexp="^hai" line="xixixi" backrefs=yes'

ansible mount模块参数 ansible tar模块_ansible mount模块参数_17


如果我想要删除文本中的某行或者一模一样的多行,我也可以正则

ansible mount模块参数 ansible tar模块_数据库_18


ansible mount模块参数 ansible tar模块_数据库_19


其他的几个参数都跟blockeinfile的相同就不一一举例了,明天继续