我有来自预先存在的部署过程的配置文件。 (格式各异,但如果重要的话,java.properties 文件包含其中的大部分。)
我需要在这些文件中更改(如果相应的属性存在)或添加(如果不存在)多个属性。
但是,我无法控制预先存在的文件的创建。它们是在外部创建的,我想要修改的变量分散在文件的各个行中。
看起来
blockinfile
在这里没有用,因为它似乎适用于连续的属性块(这是正确的吗?)
这是否意味着我需要使用多个
lineinfile
声明(或者使用 with_items
循环,如下所示:ansible: lineinfile 多行?)?
或者有没有更好更规范的方法来处理这个问题。
例如,考虑以下预先存在的文件。
config.item_1=bear1
config.item_2=bear2
config.item_3=bear3
config.item_4=bear4
config.item_5=bear5
我只想将config.item1,config.item_3修改为(dog1,cat1)。我还想添加 config.任意.param.name=40 结果:
config.item_1=dog1
config.item_2=bear2
config.item_3=cat1
config.item_4=bear4
config.item_5=bear5
config.arbitrary.param.name=40
在配置文件中修改/添加多行的规范方法
对于变量文件
config.yml
item_1: dog1
item_2: bear2
item_3: cat1
item_4: bear4
item_5: bear5
arbitrary.param.name: 40
template
模块 – 将文件模板输出到目标主机 和模板文件 java.properties.j2
config.item_1={{ config.item_1 }}
config.item_2={{ config.item_2 }}
config.item_3={{ config.item_3 }}
config.item_4={{ config.item_4 }}
config.item_5={{ config.item_5 }}
config.arbitrary.param.name={{ config['arbitrary.param.name'] }}
一个最小的示例手册
---
- hosts: localhost
become: false
gather_facts: false
tasks:
- include_vars:
file: config.yml
name: config
- template:
src: java.properties.j2
dest: java.properties
将生成包含内容的
java.properties
文件的输出
config.item_1=dog1
config.item_2=bear2
config.item_3=cat1
config.item_4=bear4
config.item_5=bear5
config.arbitrary.param.name=40
ini_file
模块 – 调整 INI 文件中的设置
一个最小的示例手册
---
- hosts: localhost
become: false
gather_facts: false
tasks:
- include_vars:
file: config.yml
name: config
- debug:
msg: "{{ item }}"
loop: "{{ config | dict2items }}"
- ini_file:
path: java.properties
option: "config.{{ item.key }}"
value: "{{ item.value }}"
loop: "{{ config | dict2items }}"
将生成包含内容的
java.properties
文件的输出
config.item_1 = dog1
config.item_2 = bear2
config.item_3 = cat1
config.item_4 = bear4
config.item_5 = bear5
config.arbitrary.param.name = 40