ansible文件模块学习<5>

简介:

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

blockifile:

image
以上是它的模块参数介绍
下面我们来具体实验:
<1>ansible test177 -m blockinfile -a 'path=/opt/testfile block="systemctl start mysqlnsystemctl start httpd"'
以上这条命令表示我们在177的opt下的testfile文件中加入了两条文字
来看一下177中是否有收到
image
命令中的path指明了受管主机的路径,后面的block指明了我们需要添加的文本内容
那么我们有时候想要换掉BEGIN和END后面的内容,应该使用mark,类似于这样:
ansible test177 -m blockinfile -a 'path=/opt/testfile block="systemctl start mysqlnsystemctl start httpd" marker="#{mark} serivce to start" '
image
ansible test177 -m blockinfile -a 'path=/opt/testfile block="systemctl start mysql" marker="#{mark} service tostart"'
这条命令相当于更新文本块中的内容而不是插入新的内容,改变后结果如下:
image
那么删除我们BEGIN和END中间的文本块该如何操作呢,我们执行以下命令:
ansible test177 -m blockinfile -a 'path=/opt/testfile marker="#{mark} service tostart" state=absent'
image
默认情况下文本的插入是先来后到,比方说我再文件里面插入了一段文字,第二次我再往里面插入不同文字的时候默认是跟在第一次的文字后面,但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就行了’
image
那么插入到结尾,只需要添加‘insertafter=EOF’就行了
image
我在受管机上添加了一个简单的.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模块,将源文件进行备份
image
备份的文件名是源文件名加备份时候的时间戳

如果我想在受管主机上创建一个它原来不存在的文件,如果存在就默认不创建,顺便在里面出入一段文本:
ansible test177 -m blockinfile -a 'path=/opt/sazhuo block="lovenlove" marker="#{mark} test" create=yes'
image
image

lineinfile:

参数:
image
image
我在受管主机的文件中添加了一段这样的话
如果我想插入一行文本,且文本如果存在于这段文本中,默认不添加,
如果不存在则添加到文本的最后一行
image
image
image
上图中的命令表示匹配正则将ha开头的行替换成参数line中的内容,但是如果匹配超过两行,就只替换匹配到的最后一行,如果没有匹配到那就把line的内容添加到文本的最后一行
image
那么,如果我没有匹配到任何一行,我又不想让文件默认加到我文本的最后一行:
ansible test177 -m lineinfile -a 'path=/opt/testfile regexp="^hai" line="xixixi" backrefs=yes'
image
如果我想要删除文本中的某行或者一模一样的多行,我也可以正则
image
image
其他的几个参数都跟blockeinfile的相同就不一一举例了,明天继续

目录
相关文章
「译文」如何在 Ansible 中复制多个文件和目录
「译文」如何在 Ansible 中复制多个文件和目录
|
运维 Shell Linux
Ansible自动化运维工具之常用模块使用实战(5)
Ansible自动化运维工具之常用模块使用实战(5)
387 0
|
运维 Kubernetes 网络安全
Ansible自动化运维工具之主机管理与自定义配置文件(2)
Ansible自动化运维工具之主机管理与自定义配置文件(2)
143 0
|
网络协议 网络安全
Ansible模块介绍——防火墙模块
Ansible模块介绍——防火墙模块
267 0
|
3月前
|
缓存 Shell Linux
[ansible]常用内置模块
[ansible]常用内置模块
|
4月前
|
Shell 应用服务中间件 Linux
Ansible的常用模块
Ansible的常用模块
109 6
|
4月前
|
Shell 数据安全/隐私保护
Ansible Ad-hoc,命令执行模块
Ansible Ad-hoc,命令执行模块
44 1
|
4月前
|
运维 Linux 应用服务中间件
Linux之自动化运维工具ansible、ansible模块(2)
Linux之自动化运维工具ansible、ansible模块(2)
|
4月前
|
运维 Linux Shell
Linux之自动化运维工具ansible、ansible模块(1)
Linux之自动化运维工具ansible、ansible模块(1)
|
6月前
|
算法 安全 Linux
Ansible 中的copy 复制模块应用详解
Ansible 中的copy 复制模块应用详解
455 1