blockinfile模块
ansible模块 - blockinfile模块
教程每周二、四、六更新
blockinfile 是 Ansible 的一个非常实用的模块,和单行替换模块 lineinfile 类似,但是可以帮助我们在文件中插入一段文本。这段文本是被标记过的,也就是,我们在这段文本上做了记号,以便在以后的操作中可以通过”标记”找到这段文本,然后修改或者删除它。官方文档:https://docs.ansible.com/ansible/latest/collections/ansible/builtin/blockinfile_module.html常用参数:参数 | 是否可选/默认值 | 说明 |
---|---|---|
path | 必须 | 指定要操作的文件(ansible 2.3 版本以前,这个选项是dest或name,现在统一用path) |
backup | 可选/no | 是否在修改文件之前对文件进行备份 |
block | 此参数用于指定我们想要操作的那”一段文本”,此参数有一个别名叫”content”,使用content或block的作用是相同的。 | |
marker | 可选/# {mark} ANSIBLE MANAGED BLOCK | 假如我们想要在指定文件中插入一段文本,ansible会自动为这段文本添加两个标记,一个开始标记,一个结束标记,默认情况下,开始标记为# BEGIN ANSIBLE MANAGED BLOCK,结束标记为# END ANSIBLE MANAGED BLOCK, 我们可以使用marker参数自定义”标记”。比如,marker=#{mark}test ,这样设置以后,开始标记变成了# BEGIN test,结束标记变成了# END test,没错,{mark}会自动被替换成开始标记和结束标记中的BEGIN和END,我们也可以插入很多段文本,为不同的段落添加不同的标记,下次通过对应的标记即可找到对应的段落。 |
state | 可选/present | 默认情况下,我们会将指定的一段文本”插入”到文件中,如果对应的文件中已经存在对应标记的文本,默认会更新对应段落,在执行插入操作或更新操作时,state的值为present,如果对应的文件中已经存在对应标记的文本并且将state的值设置为absent,则表示从文件中删除对应标记的段落。 |
insertafter | 可选/EOF | 在插入一段文本时,默认会在文件的末尾插入文本,如果你想要将文本插入在某一行的后面,可以使用此参数指定对应的行,也可以使用正则表达式(python正则),表示将文本插入在符合正则表达式的行的后面。如果有多行文本都能够匹配对应的正则表达式,则以最后一个满足正则的行为准,此参数的值还可以设置为EOF,表示将文本插入到文档末尾。 |
insertbefore | 可选/ | 在插入一段文本时,默认会在文件的末尾插入文本,如果你想要将文本插入在某一行的前面,可以使用此参数指定对应的行,也可以使用正则表达式(python正则),表示将文本插入在符合正则表达式的行的前面。如果有多行文本都能够匹配对应的正则表达式,则以最后一个满足正则的行为准,此参数的值还可以设置为BOF,表示将文本插入到文档开头。 |
create | 可选/no | 当要操作的文件并不存在时,是否创建对应的文件。 |
validate | 修改文件之前进行校验;使用“%s”表示path参数指定的需要修改的文件 |
准备实战文件:
[root@m01 ~]# ansible com -m copy -a 'src=/etc/sysconfig/network-scripts/ifcfg-ens33 dest=/data/ifcfg-ens33'
# 登陆web01节点查看文件是否已经在/data目录下了,并查看内容
[root@web01 ~]# cat /data/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=16d2cd29-5a42-4d84-91ba-eef9ac8e212a
DEVICE=ens33
ONBOOT=yes
IPADDR=10.0.0.11
PREFIX=24
GATEWAY=10.0.0.2
DNS1=223.5.5.5
实例讲解:# 配置ip地址信息
[root@m01 ~]# ansible com -m blockinfile -a 'path=/data/ifcfg-ens33 block="IPADDR=10.0.0.11\nPREFIX=24\nGATEWAY=10.0.0.2\nDNS1=223.5.5.5"'
# 删除刚才配置的信息
[root@m01 ~]# ansible com -m blockinfile -a 'path=/data/ifcfg-ens33 block="IPADDR=10.0.0.11\nPREFIX=24\nGATEWAY=10.0.0.2\nDNS1=223.5.5.5" state=absent'
再来看一个haproxy配置文件修改的实例:
# 准备一个配置文件
[root@m01 data]# cat haproxy.cfg
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
frontend main *:5000
acl url_static path_beg -i /static /images /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js
use_backend static if url_static
default_backend app
backend static
balance roundrobin
server static 127.0.0.1:4331 check
backend app
balance roundrobin
server app1 127.0.0.1:5001 check
server app2 127.0.0.1:5002 check
server app3 127.0.0.1:5003 check
server app4 127.0.0.1:5004 check
# 在该文件的最后添加如下内容:
listen dashboard
bind 10.0.0.80:10010
balance source
option tcpka
option httpchk
option tcplog
server ctl 10.0.0.81:6579 check inter 2000 rise 2 fall 5
# 先把文件推动到远程主机
[root@m01 data]# ansible com -m copy -a 'src=/data/haproxy.cfg dest=/data/'
# 对远程文件进行修改
[root@m01 data]# ansible com -m blockinfile -a 'path=/data/haproxy.cfg marker="# {mark} ANSIBLE MANAGED BLOCK for dashboard" content="listen dashboard\n bind 10.0.0.80:10010\n balance source\n option tcpka\n option httpchk\n option tcplog\n server ctl 10.0.0.81:6579 check inter 2000 rise 2 fall 5"'
# 登陆一个远程主机看效果
[root@web01 data]# cat haproxy.cfg
......
backend app
balance roundrobin
server app1 127.0.0.1:5001 check
server app2 127.0.0.1:5002 check
server app3 127.0.0.1:5003 check
server app4 127.0.0.1:5004 check
# BEGIN ANSIBLE MANAGED BLOCK for dashboard
listen dashboard
bind 10.0.0.80:10010
balance source
option tcpka
option httpchk
option tcplog
server ctl 10.0.0.81:6579 check inter 2000 rise 2 fall 5
# END ANSIBLE MANAGED BLOCK for dashboard
雷哥开通了抖音(云计算雷哥)和微信视频号,求关注!!!和大家一起学习 技术!
推荐阅读
《一站式教程之集群架构》:
看完本文有收获?请分享给更多人
推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!
Cloud研习社
为Linux云计算零基础同学服务,致力于打造一套完整的linux云计算教程。包括新手学习路线、linux、存储、集群架构以及Docker,K8S,DevOps等
公众号
收录于合集 #一站式教程
215个上一篇ansible模块 - lineinfile模块