Ansible xml помещает значение в новый узел внизу вместо изменения существующего узла - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь работать с отдельным файлом jboss. 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 я хочу заменить URL-адрес соединения с БД значением, содержащимся в структуре config_vars. Моя книга воспроизведения выглядит так:

  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 и присваивать значение, и почему он изобретает это новое (и несуществующее) имя пространства имен?

1 Ответ

0 голосов
/ 24 марта 2020

Ошибка пропуска в 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']

...