задача ansible с использованием модуля replace выполняется нормально, но строки не заменяются

#ansible

#ansible

Вопрос:

Я использую комбинацию модулей ansible find и replace для изменения строки в некоторых 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:

Без примера вашего XML-файла я предполагаю, что ваша искомая строка фактически не начинается с начала строки из-за отступа.

Кроме того, вы также должны очистить конец строки и записать его обратно, чтобы убедиться, что вы ничего не потеряли:

 regexp: "(s <compress>)true(.*)"
replace: "1false2"
  

Между тем, я бы не стал полагаться на replace внесение таких изменений в XML-файл, когда есть xml модуль, который вы можете использовать именно для этого.