Ansible:在配置文件中修改/添加多行的规范方法

问题描述 投票:0回答:1

我有来自预先存在的部署过程的配置文件。 (格式各异,但如果重要的话,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
ansible ansible-2.x
1个回答
0
投票

在配置文件中修改/添加多行的规范方法

对于变量文件

config.yml

item_1: dog1
item_2: bear2
item_3: cat1
item_4: bear4
item_5: bear5
arbitrary.param.name: 40

1) 一种选择是使用

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

2) 另一种方法是使用

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
© www.soinside.com 2019 - 2024. All rights reserved.