使用 ansible 将两行替换为三行

使用 ansible 将两行替换为三行

我正在更换我们的 DNS 服务器。作为此操作的一部分,我们需要更新静态配置的服务器接口的 DNS 条目。但是,我遇到了一个问题。接口当前定义了 2 个条目,我想用 3 个条目替换它们。

此剧本使用 演示了该问题replace。它将替换 DNS1 和 DNS2,但无法添加 DNS3。lineinfile有类似的问题。

---
- hosts: canary
  vars:
   nameservers: [ '', 192.0.2.1, 192.0.2.2, 192.0.2.3 ]
  tasks:
  - name: nameservers
    replace:
     path: /etc/sysconfig/network-scripts/ifcfg-{{ansible_default_ipv4.interface}}
     replace: \1="{{ item.1 }}"
     regexp: (DNS{{ item.0 }}).+
    with_indexed_items:
    - "{{ nameservers }}" 
    when: ansible_distribution == "CentOS" and "nameservers" not in group_names
    tags:
    - debug

答案1

有什么问题lineinfile
如果存在行正则表达式,则将替换行;否则将添加新行。

---
- hosts: localhost
  gather_facts: no
  vars:
    srv_list: [192.168.0.1, 192.168.0.2, 192.168.0.3]
  tasks:
    - lineinfile:
        dest: /tmp/dns_test
        regexp: ^DNS{{ item.0+1 }}
        line: DNS{{ item.0+1 }}={{ item.1 }}
      with_indexed_items: "{{ srv_list }}"

如果文件中存在相应值,则此代码将替换DNS<N>为相应值srv_list;如果文件中未定义具有此类索引的 DNS,则添加新行。

相关内容