cmprescott.xml
ansible-xml
Moduł Ansible do manipulacji fragmentami plików XML oraz ciągami XML. Moduł ten jest obecnie w wersji deweloperskiej Ansible. Ma zostać wydany w wersji Ansible 2.4.0 w połowie września. Wszystkie problemy należy zgłaszać do ansible.
Instalacja
- Ten moduł wymaga Pythonowych powiązań do biblioteki
libxml
w wersji 2.3 lub nowszej. Zwykle znajduje się w pakiecie o nazwiepython-lxml
. Zainstaluj za pomocąapt-get install python-lxml
,yum install python-lxml
lubpip install lxml
. - Ten moduł NIE jest dołączony do Ansible w wersji 2.3 i starszych. Zainstaluj go za pomocą
git clone https://github.com/cmprescott/ansible-xml.git
, lubansible-galaxy install cmprescott.xml
. Prawidłowe ścieżki instalacji to: katalog biblioteki w playbooku, katalog ról w playbooku i dodanie do playbooku, lub ścieżki modułów Ansible.
Uwagi
- Oryginalny moduł stworzony przez @github_rhinception.
- W dniu 2015-05-05, @tbielawa przekazał projekt do @cmprescott w celu rozwiązania problemu #16.
- W dniu 2017-08-08, ten moduł został scalony do Ansible.
- Oprogramowanie jest dostępne na zasadach licencji GPLv3.
- Cześć, mamy testy jednostkowe!
Co to jest XPath?
"XPath używa wyrażeń ścieżkowych do wyboru węzłów lub zbiorów węzłów w dokumencie XML. Węzeł jest wybierany przez podążanie ścieżką lub krokami."
W skrócie, to składnia, która pozwala na wybór określonych, lub zbioru, elementów lub atrybutów w pliku XML.
Dowiedz się więcej w sieci Mozilla Developer Network
Testy jednostkowe
W tym repozytorium znajdują się również Testy jednostkowe. Odnies się do nich, oprócz konfiguracji Travis-CI, jeśli potrzebujesz więcej przykładów.
Przykłady
Dany plik XML:
<?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>
Usuń atrybut subjective
z elementu rating:
xml:
path: /foo/bar.xml
xpath: /business/rating/@subjective
state: absent
Ustaw wartość rating na 11:
xml:
path: /foo/bar.xml
xpath: /business/rating
value: 11
Zlicz węzły piw:
xml:
path: /foo/bar.xml
xpath: /business/beers/beer
count: yes
register: hits
debug:
var: hits.count
Dodaj element phonenumber
do elementu business
. Domyślne zachowanie mkdir -p
tam, gdzie jest to stosowane (rodzicowskie węzły XML tworzone automatycznie):
xml:
path: /foo/bar.xml
xpath: /business/phonenumber
value: 555-555-1234
Dodaj kilka nowych piw do elementu beers, przy założeniu, że istnieje plik vars.yaml z:
new_beers:
- beer: "Old Rasputin"
- beer: "Old Motor Oil"
- beer: "Old Curmudgeon"
Wówczas składnia playbooka wyglądałaby następująco:
xml:
path: /foo/bar.xml
xpath: /business/beers
add_children: '{{ new_beers }}'
To samo, ale w jednej linijce:
xml:
path: /foo/bar.xml
xpath: /business/beers
add_children:
- beer: "Old Rasputin"
- beer: "Old Motor Oil"
- beer: "Old Curmudgeon"
Dodaj element validxhtml
do elementu website
. Zauważ, że state
domyślnie wynosi present
, a value
domyślnie wynosi null
dla elementów. Wynik to coś w rodzaju
<website><validxhtml />...</website>
:
xml:
path: /foo/bar.xml
xpath: /business/website/validxhtml
Dodaj pusty atrybut validatedon
do elementu validxhtml
. To właściwie sprawia, że ostatni przykład jest zbędny z powodu domyślnego tworzenia rodzica. Wizualizacja wyniku to coś w rodzaju
<website><validxhtml validatedon='' />...</website>
:
xml:
path: /foo/bar.xml
xpath: /business/website/validxhtml/@validatedon
(1/2) Usuń wszystkie dzieci z elementu website:
xml:
path: /foo/bar.xml
xpath: /business/website/*
state: absent
(2/2) Usuń wszystkie dzieci z elementu website:
xml:
path: /foo/bar.xml
xpath: /business/website
children: []
Pytanie? Jeśli masz <beers><child01 /><child02 /></beers>
Co się stanie, jeśli wpiszesz:
xml:
path: /foo/bar.xml
xpath: /beers
value
domyślnie wynosi element, więc ten zapis usunie elementy dzieci.
ansible-galaxy install cmprescott.xml