Ansible

Ansible替換:正則表達式/替換跨越多行?

  • April 22, 2022

在ansible中,我想替換它:

 <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>

下面的下一個範例顯示如何替換整個sadmin部分

   - replace:
       path: test.xml
       regexp: '(<sadmin>[\s\S]*)</sadmin>'
       replace: |-
         <sadmin>
           <user>user1@somedomain</user>
           <user>user2@somedomain</user>
           <user>user3@somedomain</user>
         </sadmin>

引用自:https://serverfault.com/questions/966428