cmprescott.xml
ansible-xml
Módulo de Ansible para manipular partes de archivos y cadenas XML. Este módulo está actualmente en la versión de desarrollo de Ansible. Se espera que se libere como parte de Ansible 2.4.0 a mediados de septiembre. Por lo tanto, todos los problemas deben ser reportados a ansible.
Instalación
- Este módulo requiere enlaces de Python a
libxml
versión 2.3 o posterior. Usualmente, esto está en un paquete llamadopython-lxml
. Instálalo conapt-get install python-lxml
,yum install python-lxml
opip install lxml
. - Este módulo NO está incluido con Ansible v2.3 ni versiones anteriores. Instálalo con
git clone https://github.com/cmprescott/ansible-xml.git
, oansible-galaxy install cmprescott.xml
. Las rutas de instalación válidas son el directorio de bibliotecas del playbook, el directorio de roles del playbook e incluir en el playbook, o la ruta de los módulos de Ansible.
Notas
- Módulo original creado por @github_rhinception.
- El 2015-05-05, @tbielawa transfirió el proyecto a @cmprescott para resolver el problema #16.
- El 2017-08-08, este módulo se fusionó en Ansible.
- Este software está disponible bajo los términos de la licencia GPLv3.
- ¡Hola! Tenemos pruebas unitarias.
¿Qué es XPath?
"XPath utiliza expresiones de ruta para seleccionar nodos o conjuntos de nodos en un documento XML. El nodo se selecciona siguiendo una ruta o pasos."
Básicamente, es una sintaxis que te permite seleccionar un elemento específico o un conjunto de elementos o atributos en un archivo XML.
Aprende más en la Red de Desarrolladores de Mozilla
Pruebas Unitarias
También se incluyen en este repositorio Pruebas Unitarias. Consulta estas, además de la configuración de Travis-CI, si necesitas más ejemplos.
Ejemplos
Dado:
<?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>
Eliminar el atributo subjective
del elemento de calificación:
xml:
path: /foo/bar.xml
xpath: /business/rating/@subjective
state: absent
Establecer la calificación en 11
xml:
path: /foo/bar.xml
xpath: /business/rating
value: 11
Obtener la cantidad de nodos de cerveza
xml:
path: /foo/bar.xml
xpath: /business/beers/beer
count: yes
register: hits
debug:
var: hits.count
Agregar un elemento phonenumber
al elemento business
. Comportamiento implícito de mkdir -p
donde sea aplicable (los nodos XML padre se crean automáticamente).
xml:
path: /foo/bar.xml
xpath: /business/phonenumber
value: 555-555-1234
Agregar varias cervezas al elemento de cervezas, asumiendo un archivo vars.yaml con:
new_beers:
- beer: "Old Rasputin"
- beer: "Old Motor Oil"
- beer: "Old Curmudgeon"
Entonces la sintaxis del playbook se vería así:
xml:
path: /foo/bar.xml
xpath: /business/beers
add_children: '{{ new_beers }}'
Lo mismo, pero hacerlo en línea
xml:
path: /foo/bar.xml
xpath: /business/beers
add_children:
- beer: "Old Rasputin"
- beer: "Old Motor Oil"
- beer: "Old Curmudgeon"
Agregar un elemento validxhtml
al elemento website
. Ten en cuenta que state
es present
por defecto, y value
se establece en null
para los elementos. El resultado es algo como <website><validxhtml />...</website>
xml:
path: /foo/bar.xml
xpath: /business/website/validxhtml
Agregar un atributo vacío validatedon
al elemento validxhtml
. Esto hace que el último ejemplo sea redundante debido al comportamiento de creación implícita del nodo padre. El resultado es algo como <website><validxhtml validatedon='' />...</website>
xml:
path: /foo/bar.xml
xpath: /business/website/validxhtml/@validatedon
(1/2) Eliminar todos los hijos del elemento de website:
xml:
path: /foo/bar.xml
xpath: /business/website/*
state: absent
(2/2) Eliminar todos los hijos del elemento de website:
xml:
path: /foo/bar.xml
xpath: /business/website
children: []
Pregunta: Si tienes <beers><child01 /><child02 /></beers>
¿Qué pasa si dices:
xml:
path: /foo/bar.xml
xpath: /beers
value
se establece por defecto en un elemento, así que esto borrará los elementos hijos.
ansible-galaxy install cmprescott.xml