Linux Ansible将文本追加到INI文件特定部分的行中

Linux Ansible将文本追加到INI文件特定部分的行中,linux,ansible,Linux,Ansible,我想知道是否有一种方法可以使用Ansible将文本附加到文件某个部分的行尾,下面的示例将说明我想做什么: 想象这样一个文件: [section01] path = /home/section01 read only = yes list = yes uid = apache gid = apache hosts deny = 0.0.0.0/0.0.0.0 hosts allow = mexico,usa,canada [section02] path = /home/section02 re

我想知道是否有一种方法可以使用Ansible将文本附加到文件某个部分的行尾,下面的示例将说明我想做什么:

想象这样一个文件:

[section01]
path = /home/section01
read only = yes
list = yes
uid = apache
gid = apache
hosts deny = 0.0.0.0/0.0.0.0
hosts allow = mexico,usa,canada

[section02]
path = /home/section02
read only = yes
list = yes
uid = apache
gid = apache
hosts deny = 0.0.0.0/0.0.0.0
hosts allow = mexico,usa,canada

[section03]
path = /home/section03
read only = yes
list = yes
uid = apache
gid = apache
hosts deny = 0.0.0.0/0.0.0.0
hosts allow = mexico,usa,canada
我想在[section02]中的host_allow上添加“巴西”以获取此“新文件”


正如@Dan Farrell在评论中提到的,您最好生成整个文件,因为部分更新可能不可靠且有问题

但是,您也可以使用来完成此任务

您可以创建一个模板文件(例如
file.ini
),其中包含以下内容(为了简洁起见,删除了其他块)。此文件将包含完整的INI文件内容

[section02]
path = /home/section02
read only = yes
list = yes
uid = apache
gid = apache
hosts deny = 0.0.0.0/0.0.0.0
hosts allow = {{allow_hosts}}
然后,在playbook中,将任务添加到此文件的模板

- name: Template INI file
  template: 
    dest: "/path/to/some/file.ini" 
    src: file.ini 
    mode: 664 
    owner: root 
    group: root
实例化playbook时,可以通过
extra-vars
传递允许的主机的完整列表

ansible playbook-i hosts--extra vars=“allow_hosts=墨西哥、美国、加拿大、巴西”我的playbook.yml


但是,只有在运行playbook时知道所有允许的主机时,这才适用于您。

我通常告诉我的队友使用ansible生成“整个文件”,因为我找到了更新文件正确部分的解决方案,当暴露在意外的文件内容中时,往往不可靠。一些系统允许您在多个文件中分解配置,从而简化了这一过程。
- name: Template INI file
  template: 
    dest: "/path/to/some/file.ini" 
    src: file.ini 
    mode: 664 
    owner: root 
    group: root