cmprescott.xml
ansible-xml
Модуль Ansible для работы с частями XML файлов и строк. Этот модуль в настоящее время находится в версии разработки Ansible. Он должен быть выпущен как часть Ansible 2.4.0 в середине сентября. Все проблемы следует сообщать в ansible.
Установка
- Этот модуль требует Python-библиотеки для
libxmlверсии 2.3 или выше. Обычно это находится в пакетеpython-lxml. Установите с помощьюapt-get install python-lxml,yum install python-lxml, илиpip install lxml. - Этот модуль НЕ включен в Ansible v2.3 и ниже. Установите с помощью
git clone https://github.com/cmprescott/ansible-xml.git, илиansible-galaxy install cmprescott.xml. Допустимые пути установки: каталог библиотеки плейбука, каталог ролей плейбука и включение в плейбук, или путь модулей Ansible.
Примечания
- Исходный модуль создан @github_rhinception.
- 2015-05-05, @tbielawa передал проект @cmprescott для решения проблемы №16.
- 2017-08-08, этот модуль был объединен с Ansible.
- Этот софт доступен на условиях лицензии GPLv3.
- Приветствую, у нас есть модульные тесты!
Что такое XPath?
"XPath использует выражения пути для выбора узлов или наборов узлов в XML документе. Узел выбирается следуя пути или шагам."
По сути, это синтаксис, который позволяет вам выбирать конкретные или коллекции элементов или атрибутов в XML файле.
Узнайте больше на сайте Mozilla Developer Network
Модульные тесты
Также в этом репозитории имеются модульные тесты. Ознакомьтесь с ними, а также с конфигурацией Travis-CI, если вам нужны дополнительные примеры.
Примеры
Дано:
<?xml version='1.0' encoding='UTF-8'?>
<business type="bar">
<name>Tasty Beverage Co.</name>
<beers>
<beer>Rochefort 10</beer>
<beer>St. Bernardus Abbot 12</beer>
<beer>Schlitz</beer>
</beers>
<rating subjective="true">10</rating>
<website>
<mobilefriendly />
<address>http://tastybeverageco.com</address>
</website>
</business>
Удалить атрибут subjective из элемента оценки:
xml:
path: /foo/bar.xml
xpath: /business/rating/@subjective
state: absent
Установить рейтинг на 11:
xml:
path: /foo/bar.xml
xpath: /business/rating
value: 11
Получить количество узлов пив:
xml:
path: /foo/bar.xml
xpath: /business/beers/beer
count: yes
register: hits
debug:
var: hits.count
Добавить элемент phonenumber к элементу business (автоматическое создание родительских узлов, если необходимо):
xml:
path: /foo/bar.xml
xpath: /business/phonenumber
value: 555-555-1234
Добавить несколько новых видов пива в элемент beers, предполагая наличие файла vars.yaml с:
new_beers:
- beer: "Old Rasputin"
- beer: "Old Motor Oil"
- beer: "Old Curmudgeon"
Тогда синтаксис плейбука будет выглядеть так:
xml:
path: /foo/bar.xml
xpath: /business/beers
add_children: '{{ new_beers }}'
То же самое, но делать это в строке:
xml:
path: /foo/bar.xml
xpath: /business/beers
add_children:
- beer: "Old Rasputin"
- beer: "Old Motor Oil"
- beer: "Old Curmudgeon"
Добавить элемент validxhtml к элементу website. Обратите внимание, что state по умолчанию равен present, а value по умолчанию равен null для элементов. Результат будет что-то вроде <website><validxhtml />...</website>:
xml:
path: /foo/bar.xml
xpath: /business/website/validxhtml
Добавить пустой атрибут validatedon к элементу validxhtml. Это, на самом деле, делает последний пример избыточным из-за поведения автоматического создания родительского узла. Результат будет что-то вроде <website><validxhtml validatedon='' />...</website>:
xml:
path: /foo/bar.xml
xpath: /business/website/validxhtml/@validatedon
(1/2) Удалить всех детей из элемента website:
xml:
path: /foo/bar.xml
xpath: /business/website/*
state: absent
(2/2) Удалить всех детей из элемента website:
xml:
path: /foo/bar.xml
xpath: /business/website
children: []
Вопрос? Если у вас есть <beers><child01 /><child02 /></beers>
Что произойдет, если вы скажете:
xml:
path: /foo/bar.xml
xpath: /beers
value по умолчанию равен элементу, поэтому это удалит дочерние элементы.
ansible-galaxy install cmprescott.xml