2017-06-18 61 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