使用 ansible 将数据插入配置文件的特定部分

使用 ansible 将数据插入配置文件的特定部分

我在使用ansible时遇到了一个特殊的问题。这个问题非常奇怪而且危险。我编写了一段代码,用于在文件的特定部分插入数据,即[database]在 say之后添加行/etc/cinder/cinder.conf

问题是我注意到有时它会在 tag 之后正确添加内容[database],但有时它会因为看到文件中的一行而感到困惑# put ur infore here for [database] ,并在其下方添加我们所需的行而不是实际应该放置的位置。

   - name: Adding Entries in "/etc/cinder/cinder.conf"
     lineinfile:
      dest: "/etc/cinder/cinder.conf"
      insertafter:  "{{ item.inserts }}"
      state: present
      line: "{{ item.lines }}"
     with_items:
      - { inserts: '\[database\]', lines: 'rpc_backend = rabbit' }

这种情况在生产环境中是相当危险的!如何正确添加数据?

答案1

为了避免在注释中匹配,请将正则表达式锚定到行的开头:

- { inserts: '^\[database\]', lines: 'rpc_backend = rabbit' }

答案2

您可以使用ini_file模块general collection

- name: Adding Entries in "/etc/cinder/cinder.conf"
  community.general.ini_file:
    path: "/etc/cinder/cinder.conf"
    section: database
    option: rpc_backend
    value: rabbit
    backup: true

要安装该集合,请运行

$ ansible-galaxy collection install community.general

或将其添加到requirements.yamlas

collections:
  - name: community.general
    version: 5.0.1

然后运行

$ ansible-galaxy install -r requirements.yaml

相关内容