2017-06-18 40 views
0

我想用jenkins config.xml替換特定的標籤。該文件看起來像:Ansible - 用jinja模板替換特定的XML標籤

<?xml version='1.0' encoding='UTF-8'?> 
<hudson> 
    <disabledAdministrativeMonitors/> 
    <version>1.0</version> 
    <numExecutors>2</numExecutors> 
    <mode>NORMAL</mode> 
    <useSecurity>true</useSecurity> 
    <authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/> 
    <securityRealm class="hudson.security.SecurityRealm$None"/> 
    <disableRememberMe>false</disableRememberMe> 
    ... 
</hudson> 

替換的內容是神社模板,應更換標籤<securityRealm .../>即使等價形式存在<securityRealm>...</<securityRealm>


編輯:對於一個詳細的解釋什麼我想要做。

我有一個jinja模板,代表了一段XML配置。假設這是模板:

<securityRealm class="hudson.security.SecurityRealm$Specific"/> 
    <customTag1>{{ valueOne }}</customTag1> 
    <customTag2>{{ valueTwo }}</customTag2> 
</securityRealm> 

所以最終結果如下所示。

<?xml version='1.0' encoding='UTF-8'?> 
<hudson> 
    <disabledAdministrativeMonitors/> 
    <version>1.0</version> 
    <numExecutors>2</numExecutors> 
    <mode>NORMAL</mode> 
    <useSecurity>true</useSecurity> 
    <authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/> 
    <securityRealm class="hudson.security.SecurityRealm$Specific"/> 
    <customTag1>anyConfig</customTag1> 
    <customTag2>anotherValue</customTag2> 
    </securityRealm> 
    <disableRememberMe>false</disableRememberMe> 
    ... 
</hudson> 
+0

我不清楚jinja模板是如何工作的。你能展示一個模板的例子和最終的xml文件嗎? –

+0

有一個叫做lineinfile的模塊來替換。或者,您可以使用shell模塊調用sed命令。 –

+0

有一個用於XML操作的第三方模塊:https://github.com/cmprescott/ansible-xml – techraf

回答

-1

需要在3個步驟中做到這一點。首先,將模板複製到目標主機。然後將文件的內容複製到​​3210,替換預期的行。這裏有一個例子:

--- 

- hosts: all 
    tasks: 

    - template: 
     src: templatefile 
     dest: /tmp/templatefile 

    - shell: cat /tmp/templatefile 
     register: data 

    - replace: 
     dest: /path/to/config.xml 
     regexp: '<securityRealm class=.*/>' 
     replace: "{{ data }}" 

... 
+0

有趣的解決方法,你是否有正確的正則表達式來取代自身的標籤呢? – user1791139

+0

@ user1791139我已經更改了您在問題中所做更改的正則表達式。 – GMaster

+0

兩個備註: 1.正則表達式只匹配,但我也要替換 ... 2. data.stdout;) 但是,我們感謝接近最終決議。 – user1791139