ansible模块 - blockinfile模块

Cloud研习社 Cloud研习社 2023-03-30 07:31 发表于山东

收录于合集

#一站式教程215个

#linux199个

#ansible17个

#云计算186个

#计算机175个

ansible unarchive模块解压 ansible blockinfile模块_正则

ansible unarchive模块解压 ansible blockinfile模块_正则_02

教程每周二、四、六更新

ansible unarchive模块解压 ansible blockinfile模块_正则表达式_03

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