使用replace模块的ansible任务运行正常,但不替换字符串

时间:2020-09-25 15:24:18

标签: ansible

我正在使用ansible查找和替换模块的组合来更改某些xml文件中的字符串。任务运行正常,但未替换字符串。

这是任务的样子:

- name: Find common module config files
  find:
    paths: "/etc/app/common/"
    patterns: "*.xml"
  register: commonConfigs

- name: Set compress to false in common modules
  become: yes
  replace:
    path: "{{item.path}}"
    regexp: "<compress>true"
    replace: "<compress>false"
  with_items: "{{ commonConfigs.files }}"

我认为可能是regexp的问题,所以我尝试了/<compress>true/g,但这也无济于事。 如果对这里的一些术语感到困惑,我对ansible这样的道歉还是很陌生的。 谢谢您的帮助

编辑:

这是xml的一部分

<appConfig>
  <ui>
    <compress>true</compress>
  </ui>
<appConfig>

1 个答案:

答案 0 :(得分:2)

在没有xml文件示例的情况下,我的猜测是由于缩进,当前搜索的字符串实际上并未从行首开始。

此外,您还应该清除行尾并将其写回以确保您不会松动任何东西:

regexp: "(\s+<compress>)true(.*)"
replace: "\1false\2"

同时,当有一个xml module可以精确用于该文件时,我不会依靠replace在xml文件中进行此类更改。