Ansible 2.2:替换模块 - 用于查找不匹配变量的正则表达式

Ansible 2.2 : Replace module - Regexp expression to find not matching variable

我正在尝试修改文件中的日志记录级别(存在于多行中)。为此,我使用 Ansible 2.2 的替换模块如下:

- replace: 
    dest: log.xml
    regexp: '<level value=(?!"{{ log_level }}")'
    replace: '<level value="{{ log_level }}"'

我的问题是它找到了正确的行,但它没有替换旧值。 例如 log_level 的结果:INFO 和旧值等于 WARN

 <level value="INFO""WARN"/>

预期结果:

 <level value="INFO"/>

有没有办法正确设置正则表达式以删除旧值?

这应该适合你:

- replace: 
    dest: log.xml
    regexp: '<level value=(?!"{{ log_level }}").*/>'
    replace: '<level value="{{ log_level }}"/>'

如果没有 .*,您只匹配(和替换)<level value=,后面没有 "{{ log_level }}",但不匹配后面的部分。