New module: Support manipulating XML files (#25323)

* Import original unmodified upstream version

This is another attempt to get the xml module upstream.
https://github.com/cmprescott/ansible-xml/

This is the original file from upstream,
without commit 1e7a3f6b6e2bc01aa9cebfd80ac5cd4555032774

* Add additional changes required for upstreaming

This PR includes the following changes:

- Clean up of DOCUMENTATION
- Rename "ensure" parameter to "state" parameter (kept alias)
- Added EXAMPLES
- Remove explicit type-case using str() for formatting
- Clean up AnsibleModule parameter handling
- Retained Python 2.4 compatibility
- PEP8 compliancy
- Various fixes as suggested by abadger during first review

This fixes cmprescott/ansible-xml#108

* Added original integration tests

There is some room for improvement wrt. idempotency and check-mode
testing.

* Some tests depend on lxml v3.0alpha1 or higher

We are now expecting lxml v2.3.0 or higher.
We skips tests if lxml is too old.

Plus small fix.

* Relicense to GPLv3+ header

All past contributors have agreed to relicense this module to GPLv2+, and GPLv3 specifically.

See: https://github.com/cmprescott/ansible-xml/issues/113

This fixes cmprescott/ansible-xml#73

* Fix small typo in integration tests

* Python 3 support

This PR also includes:
- Python 3 support
- Documentation fixes
- Check-mode fixes and improvements
- Bugfix in check-mode support
- Always return xmlstring, even if there's no change
- Check for lxml 2.3.0 or newer

* Add return values

* Various fixes after review
This commit is contained in:
Dag Wieers 2017-08-09 05:21:03 +02:00 committed by Toshio Kuratomi
commit 6874ba23ff
61 changed files with 2003 additions and 0 deletions

View file

@ -0,0 +1,14 @@
<?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>
<beer>Окское</beer></beers>
<rating subjective="true">10</rating>
<website>
<mobilefriendly/>
<address>http://tastybeverageco.com</address>
</website>
</business>

View file

@ -0,0 +1,14 @@
<?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>
<beer>Old Rasputin</beer></beers>
<rating subjective="true">10</rating>
<website>
<mobilefriendly/>
<address>http://tastybeverageco.com</address>
</website>
</business>

View file

@ -0,0 +1,14 @@
<?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>
<beer>Natty Lite</beer><beer>Miller Lite</beer><beer>Coors Lite</beer></beers>
<rating subjective="true">10</rating>
<website>
<mobilefriendly/>
<address>http://tastybeverageco.com</address>
</website>
</business>

View file

@ -0,0 +1,14 @@
<?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>
<beer name="Окское" type="экстра"/></beers>
<rating subjective="true">10</rating>
<website>
<mobilefriendly/>
<address>http://tastybeverageco.com</address>
</website>
</business>

View file

@ -0,0 +1,14 @@
<?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>
<beer name="Ansible Brew" type="light"/></beers>
<rating subjective="true">10</rating>
<website>
<mobilefriendly/>
<address>http://tastybeverageco.com</address>
</website>
</business>

View file

@ -0,0 +1,32 @@
<?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>
<beer color="red">George Killian's Irish Red</beer>
<beer origin="CZ" color="blonde">Pilsner Urquell</beer>
</beers>
<rating subjective="true">10</rating>
<website>
<mobilefriendly/>
<address>http://tastybeverageco.com</address>
<validxhtml validateon=""/>
</website>
<phonenumber>555-555-1234</phonenumber>
<owner dob="1976-04-12">
<name>
<last>Smith</last>
<first>John</first>
<middle>Q</middle>
</name>
</owner>
<website_bis>
<validxhtml validateon=""/>
</website_bis>
<testnormalelement>xml tag with no special characters</testnormalelement>
<test-with-dash>xml tag with dashes</test-with-dash>
<test-with-dash.and.dot>xml tag with dashes and dots</test-with-dash.and.dot>
<test-with.dash_and.dot_and-underscores>xml tag with dashes, dots and underscores</test-with.dash_and.dot_and-underscores>
</business>

View file

@ -0,0 +1,14 @@
<?xml version='1.0' encoding='UTF-8'?>
<business xmlns="http://test.business" xmlns:attr="http://test.attribute" type="bar">
<name>Tasty Beverage Co.</name>
<beers xmlns="http://test.beers">
<beer>Rochefort 10</beer>
<beer>St. Bernardus Abbot 12</beer>
<beer>Schlitz</beer>
<beer>Old Rasputin</beer></beers>
<rating xmlns="http://test.rating" attr:subjective="true">10</rating>
<website xmlns="http://test.website">
<mobilefriendly/>
<address>http://tastybeverageco.com</address>
</website>
</business>

View file

@ -0,0 +1,14 @@
<?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>

View file

@ -0,0 +1,15 @@
<?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>
<beer>Old Rasputin</beer>
</beers>
<rating subjective="true">10</rating>
<website>
<mobilefriendly/>
<address>http://tastybeverageco.com</address>
</website>
</business>

View file

@ -0,0 +1,14 @@
<?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>10</rating>
<website>
<mobilefriendly/>
<address>http://tastybeverageco.com</address>
</website>
</business>

View file

@ -0,0 +1,13 @@
<?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>
<website>
<mobilefriendly/>
<address>http://tastybeverageco.com</address>
</website>
</business>

View file

@ -0,0 +1,14 @@
<?xml version='1.0' encoding='UTF-8'?>
<business xmlns="http://test.business" xmlns:attr="http://test.attribute" type="bar">
<name>Tasty Beverage Co.</name>
<beers xmlns="http://test.beers">
<beer>Rochefort 10</beer>
<beer>St. Bernardus Abbot 12</beer>
<beer>Schlitz</beer>
</beers>
<rating xmlns="http://test.rating">10</rating>
<website xmlns="http://test.website">
<mobilefriendly/>
<address>http://tastybeverageco.com</address>
</website>
</business>

View file

@ -0,0 +1,13 @@
<?xml version='1.0' encoding='UTF-8'?>
<business xmlns="http://test.business" xmlns:attr="http://test.attribute" type="bar">
<name>Tasty Beverage Co.</name>
<beers xmlns="http://test.beers">
<beer>Rochefort 10</beer>
<beer>St. Bernardus Abbot 12</beer>
<beer>Schlitz</beer>
</beers>
<website xmlns="http://test.website">
<mobilefriendly/>
<address>http://tastybeverageco.com</address>
</website>
</business>

View file

@ -0,0 +1,14 @@
<?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="нет">10</rating>
<website>
<mobilefriendly/>
<address>http://tastybeverageco.com</address>
</website>
</business>

View file

@ -0,0 +1,14 @@
<?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="false">10</rating>
<website>
<mobilefriendly/>
<address>http://tastybeverageco.com</address>
</website>
</business>

View file

@ -0,0 +1,11 @@
<?xml version='1.0' encoding='UTF-8'?>
<business type="bar">
<name>Tasty Beverage Co.</name>
<beers>
<beer alcohol="0.5" name="90 Minute IPA"><Water liter="0.2" quantity="200g"/><Starch quantity="10g"/><Hops quantity="50g"/><Yeast quantity="20g"/></beer><beer alcohol="0.3" name="Harvest Pumpkin Ale"><Water liter="0.2" quantity="200g"/><Hops quantity="25g"/><Yeast quantity="20g"/></beer></beers>
<rating subjective="true">10</rating>
<website>
<mobilefriendly/>
<address>http://tastybeverageco.com</address>
</website>
</business>

View file

@ -0,0 +1,11 @@
<?xml version='1.0' encoding='UTF-8'?>
<business type="bar">
<name>Tasty Beverage Co.</name>
<beers>
<beer>Окское</beer><beer>Невское</beer></beers>
<rating subjective="true">10</rating>
<website>
<mobilefriendly/>
<address>http://tastybeverageco.com</address>
</website>
</business>

View file

@ -0,0 +1,11 @@
<?xml version='1.0' encoding='UTF-8'?>
<business type="bar">
<name>Tasty Beverage Co.</name>
<beers>
<beer>90 Minute IPA</beer><beer>Harvest Pumpkin Ale</beer></beers>
<rating subjective="true">10</rating>
<website>
<mobilefriendly/>
<address>http://tastybeverageco.com</address>
</website>
</business>

View file

@ -0,0 +1,14 @@
<?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></address>
</website>
</business>

View file

@ -0,0 +1,14 @@
<?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">пять</rating>
<website>
<mobilefriendly/>
<address>http://tastybeverageco.com</address>
</website>
<rating>пять</rating></business>

View file

@ -0,0 +1,14 @@
<?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">5</rating>
<website>
<mobilefriendly/>
<address>http://tastybeverageco.com</address>
</website>
<rating>5</rating></business>

View file

@ -0,0 +1,14 @@
<?xml version='1.0' encoding='UTF-8'?>
<business xmlns="http://test.business" xmlns:attr="http://test.attribute" type="bar">
<name>Tasty Beverage Co.</name>
<beers xmlns="http://test.beers">
<beer>Rochefort 10</beer>
<beer>St. Bernardus Abbot 12</beer>
<beer>Schlitz</beer>
</beers>
<rating xmlns="http://test.rating" attr:subjective="false">10</rating>
<website xmlns="http://test.website">
<mobilefriendly/>
<address>http://tastybeverageco.com</address>
</website>
</business>

View file

@ -0,0 +1,14 @@
<?xml version='1.0' encoding='UTF-8'?>
<business xmlns="http://test.business" xmlns:attr="http://test.attribute" type="bar">
<name>Tasty Beverage Co.</name>
<beers xmlns="http://test.beers">
<beer>Rochefort 10</beer>
<beer>St. Bernardus Abbot 12</beer>
<beer>Schlitz</beer>
</beers>
<rating xmlns="http://test.rating" attr:subjective="true">11</rating>
<website xmlns="http://test.website">
<mobilefriendly/>
<address>http://tastybeverageco.com</address>
</website>
</business>