Ansible 2.5.5 - 'replace' 模块中的 before 属性不起作用

Ansible 2.5.5 - before attribute in 'replace' module not working

我试图仅替换特定字符串后的第一次出现。然而,ansible 总是会匹配所有的匹配项。这是文件:

这是我的 ansible 任务:

    - name: Update minPoolSize for CWTxDataSource dataSource
      replace:
        dest: "{{ op_db_path }}"
        after: ".*CWTxDataSourceXA"
        regexp: "^.*minPoolSize=.*$"
        replace: '        <connectionManager maxPoolSize="750" minPoolSize="20" />'
        backup: yes
    <dataSource jndiName="CWTxDataSource">
        <connectionManager maxPoolSize="750" minPoolSize="1" />
    </dataSource>

    <dataSource jndiName="UMDataSource">
        <connectionManager maxPoolSize="750" minPoolSize="1" />
    </dataSource>

在上面的示例中,两个 connectionManager 标签都会更新,这不是预期的行为吗?如何更新我的 regexp 以仅更新第一场比赛?我尝试了 replace 模块中的 before 选项作为解决方法,但由于某种原因它对我不起作用。

我在 ansible 文档中找到了以下行:

# Prior to Ansible 2.7.10, using before and after in combination did the opposite of what was intended.

因此,为了让我使用 after before 作为解决方法,我不得不反转它们的值:

    - name: Update minPoolSize for CWTxDataSource dataSource
      # after / before values are reversed in ansible < 2.7
      replace:
        path: "{{ op_db_path }}"
        before: 'jndiName="CWTxDataSource"'
        after: "</dataSource>"
        regexp: 'minPoolSize="\d+"'
        replace: 'minPoolSize="{{ CWTxDS_minPoolSize }}"'

请注意 after before 值没有实际意义,但它有效!