Ansible - XML пространства имен - PullRequest
1 голос
/ 14 января 2020

У меня есть следующее XML:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
   <servers>
     <server>
       <id>nexus-dev-snapshots</id>
       <username>user</username>
       <password>hahah</password>
     </server>
     <server>
        <id>nexus-dev-releases</id>
        <username>user</username>
        <password>hahah</password>
     </server>
   </servers>

   <pluginGroups></pluginGroups>
   <proxies></proxies>
   <mirrors></mirrors>
   <profiles></profiles>
</settings>

Я пытаюсь добавить новые элементы в зеркала с помощью ansible, но получаю сообщение об ошибке, что мой путь неверен, я Поверьте, как-то это связано с пространствами имен, потому что без них это работает. Буду признателен за помощь, спасибо.

 - name: Add a new mirror to the mirrors element
  hosts: localhost
  connection: local
  tasks:
    - name: Add new elements
      xml:
        path: settings.xml
        xpath: /xsi:settings/xsi:mirrors/xsi:mirror/xsi:id
        value: 1
        namespaces: 
          xmlns: http://maven.apache.org/SETTINGS/1.0.0
          xsi: http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd
      xml:
        path: settings.xml
        xpath: /xsi:settings/xsi:mirrors/xsi:mirror/xsi:name
        value: 2
        namespaces:
          xmlns: http://www.w3.org/2001/XMLSchema-instance 
          xsi: http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd
      xml:
        path: settings.xml
        xpath: /xsi:settings/xsi:mirrors/xsi:mirror/xsi:url
        value: 3
        namespaces: 
          xmlns: http://maven.apache.org/SETTINGS/1.0.0
          xsi: http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd

С конечным результатом:

<mirrors>
    <mirror>
      <id>1</id>
      <name>2</name>
      <url>3</url>
      <mirrorOf>*</mirrorOf>
    </mirror>
  </mirrors>

1 Ответ

2 голосов
/ 14 января 2020

Ваш документ находится в пространстве имен http://maven.apache.org/SETTINGS/1.0.0.

Ваши пути должны отражать, что

  tasks:
    - name: Add new elements
      xml:
        path: settings.xml
        xpath: /m:settings/m:mirrors/m:mirror/m:id
        value: 1
        namespaces: 
          m: http://maven.apache.org/SETTINGS/1.0.0 

В документе XML читается

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0">
  <!-- ... -->
</settings>

, что означает что элемент settings и все, что содержит, принадлежит http://maven.apache.org/SETTINGS/1.0.0 (за исключением того, что он явно объявил другое пространство имен, чего нет в вашем документе). Это называется «пространством имен по умолчанию».

Поскольку это пространство имен по умолчанию, у него нет префикса в XML. Но XPath обычно требует префикса для работы - и вы можете выбрать любой префикс и связать его с http://maven.apache.org/SETTINGS/1.0.0. Я выбрал m: для краткости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...