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/ansible-xml