#xml #ansible
#xml #ansible
Вопрос:
Я пытаюсь отредактировать файлы конфигурации для различных серверов, используя Ansible, и столкнулся с XML-документом, который имеет несколько атрибутов с одинаковым именем, где значение необходимо скорректировать в зависимости от состояния сервера. Сокращенный файл конфигурации выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<Document>
<properties>
<property name="daily.backup.filename">test.data.thin</property>
<property name="admin.ui.allow.manual.backup.download">false</property>
<property name="admin.ui.allow">false</property>
</properties>
</Document>
Этот конфигурационный файл будет иметь более 50 свойств с разными именами. Моя цель — настроить данные в пределах этого единственного свойства без использования модуля lineinfile.
В настоящее время я могу прочитать конкретное значение, которое мне нужно, но значение изменится, если порядок изменится.
- hosts: localhost
tasks:
- name: Read an element's attribute values
xml:
path: /tmp/test.xml
xpath: /Document/properties/property
content: text
register: xmlresp
- name: Show an attribute value
debug:
var: xmlresp.matches[2]
Теперь мне просто нужно иметь возможность записывать новую информацию для «admin.ui.allow.manual.backup.загрузить» свойство. Например, изменить содержимое на «true» или «True»
Ответ №1:
Чтобы получить значение внутри вашего конкретного элемента, вы можете быть намного более строгими в своем xpath:
- name: "Read an element's attribute values"
xml:
path: /tmp/test.xml
xpath: /Document/properties/property[@name='admin.ui.allow.manual.backup.download']
content: text
register: xmlresp
Аналогично, вы можете использовать тот же самый более строгий (одноэлементный) xpath для обновления содержимого вашего элемента, если это необходимо:
- name: Update element value if needed
xml:
path: /tmp/test.xml
xpath: /Document/properties/property[@name='admin.ui.allow.manual.backup.download']
value: "true"
Комментарии:
1. Еще раз на помощь. Я бы хотел, чтобы документация ( docs.ansible.com/ansible/latest/modules /… ) в модуле XML было это в качестве примера.
2. Вы можете найти примеры такого типа в любом документе / руководстве по xpath.