Ansible xml 将值放在底部的新节点中,而不是修改现有节点
Ansible xml puts value in new node at bottom instead of modifying existing node
我正在尝试使用 jboss standalone.xml 文件,尝试在部署时针对不同的环境对其进行自定义。在我的 xml 中,我有:
<server xmlns="urn:jboss:domain:1.2">
<extensions></extensions>
<system-properties> </system-properties>
<management> </management>
<profile>
<subsystem xmlns="urn:jboss:domain:logging:1.1"></subsystem>
<subsystem xmlns="urn:jboss:domain:configadmin:1.1"></subsystem>
<subsystem xmlns="urn:jboss:domain:datasources:1.1">
<datasources>
<xa-datasource use-ccm="true" pool-name='MyPoolname'>
<xa-datasource-property name="URL"> </xa-datasource-property>
<xa-datasource-property name="Password"> </xa-datasource-property>
<xa-datasource-property name="User"> </xa-datasource-property>
</xa-datasource>
</datasources>
</subsystem>
</profile>
</server>
在上面xml中,我想用config_vars结构中包含的值替换DB连接的URL
我的剧本看起来像:
tasks:
- name: "Update the DB endpoint in {{item.jboss_folder}}"
become: yes
become_user: root
xml:
path: "/opt/{{item.jboss_folder}}/standalone/configuration/standalone.xml"
namespaces:
svr: "urn:jboss:domain:1.2"
ss: "urn:jboss:domain:datasources:1.0"
xpath: "/svr:server/profile/ss:subsystem/ss:datasources/ss:xa-datadource[@pool-name='MyPoolname']/ss:xa-datasource-property[@name='URL']"
value: 'mysql://{{item.db_endpoint}}:3306/{{item.db_name}}'
loop: "{{config_vars}}"
结果 xml 如下所示:
<?xml version='1.0' encoding='UTF-8'?>
<server xmlns="urn:jboss:domain:1.2">
<extensions/>
<system-properties> </system-properties>
<management> </management>
<profile>
<subsystem xmlns="urn:jboss:domain:logging:1.1"/>
<subsystem xmlns="urn:jboss:domain:configadmin:1.1"/>
<subsystem xmlns="urn:jboss:domain:datasources:1.1">
<datasources>
<xa-datasource use-ccm="true" pool-name="MyPoolname">
<xa-datasource-property name="URL"> </xa-datasource-property>
<xa-datasource-property name="Password"> </xa-datasource-property>
<xa-datasource-property name="User"> </xa-datasource-property>
</xa-datasource>
</datasources>
</subsystem>
</profile>
<profile><ns0:subsystem xmlns:ns0="urn:jboss:domain:datasources:1.0"><ns0:datasources><ns0:xa-datadource pool-name="MyPoolname"><ns0:xa-datasource-property name="URL">mysql://<whatever-my-db-is>:3306/prod</ns0:xa-datasource-property></ns0:xa-datadource></ns0:datasources></ns0:subsystem></profile></server>
出现了一个新的配置文件标签,其中的子标签类似于 <ns0:...>
。是什么让它创建新节点而不是查找 xpath 位置并分配值,为什么它发明了新的(不存在的)命名空间名称?
xpath遗漏错误
原文:
/svr:server/profile/ss:subsystem/ss:datasources/ss:xa-datadource[@pool-name='MyPoolname']/ss:xa-datasource-property[@name='URL']
需要:
/svr:server/svr:profile/ss:subsystem/ss:datasources/ss:xa-datadource[@pool-name='MyPoolname']/ss:xa-datasource-property[@name='URL']
我正在尝试使用 jboss standalone.xml 文件,尝试在部署时针对不同的环境对其进行自定义。在我的 xml 中,我有:
<server xmlns="urn:jboss:domain:1.2">
<extensions></extensions>
<system-properties> </system-properties>
<management> </management>
<profile>
<subsystem xmlns="urn:jboss:domain:logging:1.1"></subsystem>
<subsystem xmlns="urn:jboss:domain:configadmin:1.1"></subsystem>
<subsystem xmlns="urn:jboss:domain:datasources:1.1">
<datasources>
<xa-datasource use-ccm="true" pool-name='MyPoolname'>
<xa-datasource-property name="URL"> </xa-datasource-property>
<xa-datasource-property name="Password"> </xa-datasource-property>
<xa-datasource-property name="User"> </xa-datasource-property>
</xa-datasource>
</datasources>
</subsystem>
</profile>
</server>
在上面xml中,我想用config_vars结构中包含的值替换DB连接的URL 我的剧本看起来像:
tasks:
- name: "Update the DB endpoint in {{item.jboss_folder}}"
become: yes
become_user: root
xml:
path: "/opt/{{item.jboss_folder}}/standalone/configuration/standalone.xml"
namespaces:
svr: "urn:jboss:domain:1.2"
ss: "urn:jboss:domain:datasources:1.0"
xpath: "/svr:server/profile/ss:subsystem/ss:datasources/ss:xa-datadource[@pool-name='MyPoolname']/ss:xa-datasource-property[@name='URL']"
value: 'mysql://{{item.db_endpoint}}:3306/{{item.db_name}}'
loop: "{{config_vars}}"
结果 xml 如下所示:
<?xml version='1.0' encoding='UTF-8'?>
<server xmlns="urn:jboss:domain:1.2">
<extensions/>
<system-properties> </system-properties>
<management> </management>
<profile>
<subsystem xmlns="urn:jboss:domain:logging:1.1"/>
<subsystem xmlns="urn:jboss:domain:configadmin:1.1"/>
<subsystem xmlns="urn:jboss:domain:datasources:1.1">
<datasources>
<xa-datasource use-ccm="true" pool-name="MyPoolname">
<xa-datasource-property name="URL"> </xa-datasource-property>
<xa-datasource-property name="Password"> </xa-datasource-property>
<xa-datasource-property name="User"> </xa-datasource-property>
</xa-datasource>
</datasources>
</subsystem>
</profile>
<profile><ns0:subsystem xmlns:ns0="urn:jboss:domain:datasources:1.0"><ns0:datasources><ns0:xa-datadource pool-name="MyPoolname"><ns0:xa-datasource-property name="URL">mysql://<whatever-my-db-is>:3306/prod</ns0:xa-datasource-property></ns0:xa-datadource></ns0:datasources></ns0:subsystem></profile></server>
出现了一个新的配置文件标签,其中的子标签类似于 <ns0:...>
。是什么让它创建新节点而不是查找 xpath 位置并分配值,为什么它发明了新的(不存在的)命名空间名称?
xpath遗漏错误
原文:
/svr:server/profile/ss:subsystem/ss:datasources/ss:xa-datadource[@pool-name='MyPoolname']/ss:xa-datasource-property[@name='URL']
需要:
/svr:server/svr:profile/ss:subsystem/ss:datasources/ss:xa-datadource[@pool-name='MyPoolname']/ss:xa-datasource-property[@name='URL']