Ansible replace模块复制替换值

Ansible replace模块复制替换值,replace,ansible,duplicates,netplan,Replace,Ansible,Duplicates,Netplan,问题:Ansible 2.9将在替换模块的“替换:”字段中重复条目 要更改的文件(/etc/netplan/50 cloud init.yaml): 代码: 结果: 如果原始文件只有一个条目,如“-10.10.8.110”,则“之后”和“之前”之间的章节将被替换。但是,如果再次运行,Expansable将复制条目 再次运行脚本后,文件内容将如下所示: network: ethernets: ens160: addresses: - 10.10.8.11

问题:Ansible 2.9将在替换模块的“替换:”字段中重复条目

要更改的文件(/etc/netplan/50 cloud init.yaml):

代码:

结果:

  • 如果原始文件只有一个条目,如“-10.10.8.110”,则“之后”和“之前”之间的章节将被替换。但是,如果再次运行,Expansable将复制条目
再次运行脚本后,文件内容将如下所示:

network:
ethernets:
    ens160:
        addresses:
        - 10.10.8.112/24
        gateway4: 10.10.8.1
        nameservers:
            addresses:
            - 10.10.8.110
            - 10.10.8.111
            search:
            - server.com
        optional: true
            - 10.10.8.110
            - 10.10.8.111
            search:
            - server.com
        optional: true
version: 2
我相信这与幂等性有关,并且可以用正则表达式来修正。然而,我不知道如何做到这一点。我要做的就是始终替换介于after和before之间的所有值


我怎样才能做到这一点呢?

我不会指望在
之前
之后
,而是构建一个与我要查找的内容完全匹配的regexp,并替换为反向引用。类似以下内容(不是性感而是功能性的)


-名称:调整yaml文件
替换:
路径:/etc/netplan/50-cloud-init.yaml
regexp:>-
(^\s*名称服务器:\n\s*地址:\n)[\s\s]*(版本:2)$
替换:|-
\g-10.10.8.110
- 10.10.8.111
搜索:
-server.com
可选:true\g
同时,请注意,由于您的文件是yaml,因此有其他方法可以更简单地修改数据(
合并
对象等)

- name: Check yaml has correct DNS values
  hosts: guest
  gather_facts: yes
  become: yes

  tasks:
          - name: Adjust yaml file
            replace:
              path: /etc/netplan/50-cloud-init.yaml
              after: '                addresses:'
              before: '    version: 2'
              regexp: '^(.+)$'
              replace: '                - 10.10.8.110\n                - 10.10.8.111\n                search:\n                - server.com\n            optional: true'
network:
ethernets:
    ens160:
        addresses:
        - 10.10.8.112/24
        gateway4: 10.10.8.1
        nameservers:
            addresses:
            - 10.10.8.110
            - 10.10.8.111
            search:
            - server.com
        optional: true
            - 10.10.8.110
            - 10.10.8.111
            search:
            - server.com
        optional: true
version: 2