此文章为「ansible笔记(2)之常用模块」的子文章。
今天写 Ansible 的时候遇到一个需求,需要往一个 INI 文件中添加内容并保证幂等性,本来第一反应是使用 lineinfile
模块,但我要插入的内容是多行的,使用 \n
时 lineinfile
模块给我转义了,导致插入操作达不到目标效果。
后面就看了下官网的模块索引突然就看到了这个 ini_file
模块,如其名,它就是专门用来操作 INI 文件的,下面列出它的常用属性与说明:
path
:要操作的 INI 文件路径,如果该文件不存在则会自动创建;section
:要操作的节(以中括号包裹起来的行);backup
:修改之前创建一个包含时间戳信息的备份文件,以便在不正确地破坏文件的情况下将其找回;create
:如果目标文件不存在,则自动创建,默认为yes
;owner
:设置文件属主;group
:设置文件属组;mode
:设置文件权限;no_extra_spaces
:让添加的属性行的等号(=
) 两边没有空格;option
:属性键;state
:可选值有present
和absent
,默认为present
,表示使目标文件存在;value
:属性值;
例 1:在客户机的 /tmp/
目录下创建一个 mysql.ini
文件,并初始化一个名为 mysqld
的节,该节下有一个属性 address
的值为 127.0.0.1
。
$ ansible all -m ini_file -a 'path=/tmp/mysql.ini section=mysqld option=address value=127.0.0.1'
$ cat /tmp/mysql.ini
[mysqld]
address = 127.0.0.1
例 2:修改例 1 中的 address
的值为 192.168.0.130
,并在修改之前进行备份。
$ ansible all -m ini_file -a 'path=/tmp/mysql.ini section=mysqld option=address value=192.168.0.130 backup=yes'
$ ls /tmp/mysql.ini*
/tmp/mysql.ini /tmp/mysql.ini.2928.2020-09-27@22:28:56~
例 3:在例 2 使用的文件内容的基础上添加一个 client
的节,并添加一个名为 server
的属性,其值为 db.zze.xyz
,该属性的 =
两边不留空格。
$ ansible all -m ini_file -a 'path=/tmp/mysql.ini section=client option=server value=db.zze.xyz backup=yes no_extra_spaces=yes'
$ cat /tmp/mysql.ini
[mysqld]
address = 192.168.0.130
[client]
server=db.zze.xyz
这里附上该模块的官方文档:
评论区