В анзибле я бы хотел заменить это:
<sadmin>
<user>admin@localhost</user>
</sadmin>
с этим:
<sadmin>
<user>user1@somedomain</user>
<user>user2@somedomain</user>
<user>user3@somedomain</user>
</sadmin>
Я пробовал использовать модуль замены, но не знаю, может ли регулярное выражение охватывать несколько строк (как мне использовать необработанную нотацию Python для новых строк?). Я попробовал xml
модуль, но я не думаю, что это на самом деле XML-файл, поскольку он продолжал добавлять <?xml version='1.0' encoding='UTF-8'?>
заголовок в начало файла. Как я могу это сделать? Лучше использовать шаблон?
- name: add replacements to jabber config files
replace:
path : "/etc/jabberd2/{{ item.path }}"
regexp : "{{ item.regex }}"
replace: "{{ item.replace }}"
with_items:
- { path: 'muc.xml', regex: 'conference.localhost', replace: 'conference.mydomain' }
- { path: 'muc.xml', regex: '<sadmin>.*</sadmin>', replace: '<sadmin><user>user1@somedomain</user>\n<user>user2@somedomain</user></sadmin>' }
Представленная ниже игра делает то, что требуется.
- replace:
path: test.xml
regexp: '<user>admin@localhost<\/user>'
replace: |-
<user>user1@somedomain</user>
<user>user2@somedomain</user>
<user>user3@somedomain</user>
В следующем примере ниже показано, как заменить весь садмин раздел
- replace:
path: test.xml
regexp: '(<sadmin>[\s\S]*)</sadmin>'
replace: |-
<sadmin>
<user>user1@somedomain</user>
<user>user2@somedomain</user>
<user>user3@somedomain</user>
</sadmin>