diff --git a/lib/ansible/modules/files/xml.py b/lib/ansible/modules/files/xml.py
index 4c4a83b0cd7..0712fe38053 100644
--- a/lib/ansible/modules/files/xml.py
+++ b/lib/ansible/modules/files/xml.py
@@ -21,7 +21,8 @@ module: xml
short_description: Manage bits and pieces of XML files or strings
description:
- A CRUD-like interface to managing bits of XML files.
-- You might also be interested in a brief tutorial from U(http://www.w3schools.com/xpath/).
+- You might also be interested in a brief tutorial from U(http://www.w3schools.com/xpath/)
+ and U(https://developer.mozilla.org/en-US/docs/Web/XPath).
version_added: '2.4'
options:
path:
@@ -101,6 +102,7 @@ requirements:
- lxml >= 2.3.0
notes:
- Use the C(--check) and C(--diff) options when testing your expressions.
+- The diff output is automatically pretty-printed, so may not reflect the actual file content, only the file structure.
- This module does not handle complicated xpath expressions, so limit xpath selectors to simple expressions.
- Beware that in case your XML elements are namespaced, you need to use the C(namespaces) parameter.
- Namespaces prefix should be used for all children of an element where namespace is defined, unless another namespace is defined for them.
@@ -233,7 +235,7 @@ from distutils.version import LooseVersion
from io import BytesIO
try:
- from lxml import etree
+ from lxml import etree, objectify
HAS_LXML = True
except ImportError:
HAS_LXML = False
@@ -256,6 +258,12 @@ _RE_SPLITSUBLAST = re.compile("^(.*)/(" + _NSIDENT + ")\\[(.*)\\]$")
_RE_SPLITONLYEQVALUE = re.compile("^(.*)/text\\(\\)=" + _XPSTR + "$")
+def has_changed(doc):
+ orig_obj = etree.tostring(objectify.fromstring(etree.tostring(orig_doc)))
+ obj = etree.tostring(objectify.fromstring(etree.tostring(doc)))
+ return (orig_obj != obj)
+
+
def do_print_match(module, tree, xpath, namespaces):
match = tree.xpath(xpath, namespaces=namespaces)
match_xpaths = []
@@ -535,34 +543,6 @@ def set_target(module, tree, xpath, namespaces, attribute, value):
finish(module, tree, xpath, namespaces, changed)
-def pretty(module, tree):
- xml_string = etree.tostring(tree, xml_declaration=True, encoding='UTF-8', pretty_print=module.params['pretty_print'])
-
- result = dict(
- changed=False,
- )
-
- if module.params['path']:
- xml_file = module.params['path']
- xml_content = open(xml_file)
- try:
- if xml_string != xml_content.read():
- result['changed'] = True
- if not module.check_mode:
- if module.params['backup']:
- result['backup_file'] = module.backup_local(module.params['path'])
- tree.write(xml_file, xml_declaration=True, encoding='UTF-8', pretty_print=module.params['pretty_print'])
- finally:
- xml_content.close()
-
- elif module.params['xmlstring']:
- result['xmlstring'] = xml_string
- if xml_string != module.params['xmlstring']:
- result['changed'] = True
-
- module.exit_json(**result)
-
-
def get_element_text(module, tree, xpath, namespaces):
if not is_node(tree, xpath, namespaces):
module.fail_json(msg="Xpath %s does not reference a node!" % xpath)
@@ -633,27 +613,56 @@ def children_to_nodes(module=None, children=[], type='yaml'):
return [child_to_element(module, child, type) for child in children]
+def pretty(module, tree):
+ xml_string = etree.tostring(tree, xml_declaration=True, encoding='UTF-8', pretty_print=module.params['pretty_print'])
+
+ result = dict(
+ changed=False,
+ )
+
+ if module.params['path']:
+ xml_file = module.params['path']
+ xml_content = open(xml_file)
+ try:
+ if xml_string != xml_content.read():
+ result['changed'] = True
+ if not module.check_mode:
+ if module.params['backup']:
+ result['backup_file'] = module.backup_local(module.params['path'])
+ tree.write(xml_file, xml_declaration=True, encoding='UTF-8', pretty_print=module.params['pretty_print'])
+ finally:
+ xml_content.close()
+
+ elif module.params['xmlstring']:
+ result['xmlstring'] = xml_string
+ # NOTE: Modifying a string is not considered a change !
+ if xml_string != module.params['xmlstring']:
+ result['changed'] = True
+
+ module.exit_json(**result)
+
+
def finish(module, tree, xpath, namespaces, changed=False, msg="", hitcount=0, matches=tuple()):
result = dict(
actions=dict(xpath=xpath, namespaces=namespaces, state=module.params['state']),
- changed=changed,
+ changed=has_changed(tree),
count=hitcount,
matches=matches,
msg=msg,
)
- if changed and module._diff:
- result['diff'] = dict(
- before=etree.tostring(orig_doc, xml_declaration=True, encoding='UTF-8', pretty_print=module.params['pretty_print']),
- after=etree.tostring(tree, xml_declaration=True, encoding='UTF-8', pretty_print=module.params['pretty_print']),
- )
-
- if module.params['path'] and not module.check_mode:
- if module.params['backup']:
- result['backup_file'] = module.backup_local(module.params['path'])
+ if result['changed']:
+ if module._diff:
+ result['diff'] = dict(
+ before=etree.tostring(orig_doc, xml_declaration=True, encoding='UTF-8', pretty_print=True),
+ after=etree.tostring(tree, xml_declaration=True, encoding='UTF-8', pretty_print=True),
+ )
- tree.write(module.params['path'], xml_declaration=True, encoding='UTF-8', pretty_print=module.params['pretty_print'])
+ if module.params['path'] and not module.check_mode:
+ if module.params['backup']:
+ result['backup_file'] = module.backup_local(module.params['path'])
+ tree.write(module.params['path'], xml_declaration=True, encoding='UTF-8', pretty_print=module.params['pretty_print'])
if module.params['xmlstring']:
result['xmlstring'] = etree.tostring(tree, xml_declaration=True, encoding='UTF-8', pretty_print=module.params['pretty_print'])
@@ -741,9 +750,8 @@ def main():
module.fail_json(msg="Error while parsing document: %s (%s)" % (xml_file or 'xml_string', e))
# Ensure we have the original copy to compare
- if module._diff:
- global orig_doc
- orig_doc = copy.deepcopy(doc)
+ global orig_doc
+ orig_doc = copy.deepcopy(doc)
if print_match:
do_print_match(module, doc, xpath, namespaces)
diff --git a/test/integration/targets/xml/tasks/main.yml b/test/integration/targets/xml/tasks/main.yml
index e189c558139..e992990a28b 100644
--- a/test/integration/targets/xml/tasks/main.yml
+++ b/test/integration/targets/xml/tasks/main.yml
@@ -35,34 +35,35 @@
when: lxml_xpath_attribute_result_attrname
block:
- - include: test-add-children-elements.yml
- - include: test-add-children-from-groupvars.yml
- - include: test-add-children-with-attributes.yml
- - include: test-add-element-implicitly.yml
- - include: test-count.yml
- - include: test-mutually-exclusive-attributes.yml
- - include: test-remove-attribute.yml
- - include: test-remove-element.yml
- - include: test-set-attribute-value.yml
- - include: test-set-children-elements.yml
- - include: test-set-children-elements-level.yml
- - include: test-set-element-value.yml
- - include: test-set-element-value-empty.yml
- - include: test-pretty-print.yml
- - include: test-pretty-print-only.yml
- - include: test-add-namespaced-children-elements.yml
- - include: test-remove-namespaced-attribute.yml
- - include: test-set-namespaced-attribute-value.yml
- - include: test-set-namespaced-element-value.yml
- - include: test-get-element-content.yml
- - include: test-xmlstring.yml
- - include: test-children-elements-xml.yml
+ - include_tasks: test-add-children-elements.yml
+ - include_tasks: test-add-children-from-groupvars.yml
+ - include_tasks: test-add-children-with-attributes.yml
+ - include_tasks: test-add-element-implicitly.yml
+ - include_tasks: test-count.yml
+ - include_tasks: test-mutually-exclusive-attributes.yml
+ - include_tasks: test-remove-attribute.yml
+ - include_tasks: test-remove-element.yml
+ - include_tasks: test-set-attribute-value.yml
+ - include_tasks: test-set-children-elements.yml
+ - include_tasks: test-set-children-elements-level.yml
+ - include_tasks: test-set-element-value.yml
+ - include_tasks: test-set-element-value-empty.yml
+ - include_tasks: test-pretty-print.yml
+ - include_tasks: test-pretty-print-only.yml
+ - include_tasks: test-add-namespaced-children-elements.yml
+ - include_tasks: test-remove-namespaced-attribute.yml
+ - include_tasks: test-set-namespaced-attribute-value.yml
+ - include_tasks: test-set-namespaced-element-value.yml
+ - include_tasks: test-set-namespaced-children-elements.yml
+ - include_tasks: test-get-element-content.yml
+ - include_tasks: test-xmlstring.yml
+ - include_tasks: test-children-elements-xml.yml
# Unicode tests
- - include: test-add-children-elements-unicode.yml
- - include: test-add-children-with-attributes-unicode.yml
- - include: test-set-attribute-value-unicode.yml
- - include: test-count-unicode.yml
- - include: test-get-element-content.yml
- - include: test-set-children-elements-unicode.yml
- - include: test-set-element-value-unicode.yml
+ - include_tasks: test-add-children-elements-unicode.yml
+ - include_tasks: test-add-children-with-attributes-unicode.yml
+ - include_tasks: test-set-attribute-value-unicode.yml
+ - include_tasks: test-count-unicode.yml
+ - include_tasks: test-get-element-content.yml
+ - include_tasks: test-set-children-elements-unicode.yml
+ - include_tasks: test-set-element-value-unicode.yml
diff --git a/test/integration/targets/xml/tasks/test-add-children-elements-unicode.yml b/test/integration/targets/xml/tasks/test-add-children-elements-unicode.yml
index 59c688c9150..8ad91501c38 100644
--- a/test/integration/targets/xml/tasks/test-add-children-elements-unicode.yml
+++ b/test/integration/targets/xml/tasks/test-add-children-elements-unicode.yml
@@ -1,15 +1,29 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-beers.xml'
+ src: fixtures/ansible-xml-beers.xml
dest: /tmp/ansible-xml-beers.xml
+
- name: Add child element
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/beers
add_children:
- - beer: "Окское"
+ - beer: Окское
+ register: add_children_elements_unicode
+
+ - name: Compare to expected result
+ copy:
+ src: results/test-add-children-elements-unicode.xml
+ dest: /tmp/ansible-xml-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-add-children-elements-unicode.xml /tmp/ansible-xml-beers.xml
+ assert:
+ that:
+ - add_children_elements_unicode.changed == true
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-add-children-elements-unicode.xml /tmp/ansible-xml-beers.xml
diff --git a/test/integration/targets/xml/tasks/test-add-children-elements.yml b/test/integration/targets/xml/tasks/test-add-children-elements.yml
index 1f9d02629bf..8d9b06866d8 100644
--- a/test/integration/targets/xml/tasks/test-add-children-elements.yml
+++ b/test/integration/targets/xml/tasks/test-add-children-elements.yml
@@ -1,15 +1,29 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-beers.xml'
+ src: fixtures/ansible-xml-beers.xml
dest: /tmp/ansible-xml-beers.xml
+
- name: Add child element
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/beers
add_children:
- - beer: "Old Rasputin"
+ - beer: Old Rasputin
+ register: add_children_elements
+
+ - name: Compare to expected result
+ copy:
+ src: results/test-add-children-elements.xml
+ dest: /tmp/ansible-xml-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-add-children-elements.xml /tmp/ansible-xml-beers.xml
+ assert:
+ that:
+ - add_children_elements.changed == true
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-add-children-elements.xml /tmp/ansible-xml-beers.xml
diff --git a/test/integration/targets/xml/tasks/test-add-children-from-groupvars.yml b/test/integration/targets/xml/tasks/test-add-children-from-groupvars.yml
index a5142773419..e062de8d149 100644
--- a/test/integration/targets/xml/tasks/test-add-children-from-groupvars.yml
+++ b/test/integration/targets/xml/tasks/test-add-children-from-groupvars.yml
@@ -1,14 +1,28 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-beers.xml'
+ src: fixtures/ansible-xml-beers.xml
dest: /tmp/ansible-xml-beers.xml
+
- name: Add child element
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/beers
- add_children: "{{ bad_beers }}"
+ add_children: '{{ bad_beers }}'
+ register: add_children_from_groupvars
+
+ - name: Compare to expected result
+ copy:
+ src: results/test-add-children-from-groupvars.xml
+ dest: /tmp/ansible-xml-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-add-children-from-groupvars.xml /tmp/ansible-xml-beers.xml
+ assert:
+ that:
+ - add_children_from_groupvars.changed == true
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-add-children-from-groupvars.xml /tmp/ansible-xml-beers.xml
diff --git a/test/integration/targets/xml/tasks/test-add-children-with-attributes-unicode.yml b/test/integration/targets/xml/tasks/test-add-children-with-attributes-unicode.yml
index 9696543818e..d4a2329f69e 100644
--- a/test/integration/targets/xml/tasks/test-add-children-with-attributes-unicode.yml
+++ b/test/integration/targets/xml/tasks/test-add-children-with-attributes-unicode.yml
@@ -1,17 +1,31 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-beers.xml'
+ src: fixtures/ansible-xml-beers.xml
dest: /tmp/ansible-xml-beers.xml
+
- name: Add child element
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/beers
add_children:
- - beer:
- name: Окское
- type: экстра
+ - beer:
+ name: Окское
+ type: экстра
+ register: add_children_with_attributes_unicode
+
+ - name: Compare to expected result
+ copy:
+ src: results/test-add-children-with-attributes-unicode.xml
+ dest: /tmp/ansible-xml-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-add-children-with-attributes-unicode.xml /tmp/ansible-xml-beers.xml
+ assert:
+ that:
+ - add_children_with_attributes_unicode.changed == true
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-add-children-with-attributes-unicode.xml /tmp/ansible-xml-beers.xml
diff --git a/test/integration/targets/xml/tasks/test-add-children-with-attributes.yml b/test/integration/targets/xml/tasks/test-add-children-with-attributes.yml
index 11e6af97140..91e92637fc2 100644
--- a/test/integration/targets/xml/tasks/test-add-children-with-attributes.yml
+++ b/test/integration/targets/xml/tasks/test-add-children-with-attributes.yml
@@ -1,22 +1,35 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-beers.xml'
+ src: fixtures/ansible-xml-beers.xml
dest: /tmp/ansible-xml-beers.xml
+
- name: Add child element
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/beers
add_children:
- - beer:
- name: Ansible Brew
- type: light
+ - beer:
+ name: Ansible Brew
+ type: light
+ register: add_children_with_attributes
+
+ - name: Compare to expected result
+ copy:
+ src: results/test-add-children-with-attributes.xml
+ dest: /tmp/ansible-xml-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
# NOTE: This test may fail if lxml does not support predictable element attribute order
# So we filter the failure out for these platforms (e.g. CentOS 6)
# The module still works fine, we simply are not comparing as smart as we should.
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-add-children-with-attributes.xml /tmp/ansible-xml-beers.xml
- register: diff
- failed_when: diff.rc != 0 and lxml_predictable_attribute_order
+ assert:
+ that:
+ - add_children_with_attributes.changed == true
+ - comparison.changed == false # identical
+ when: lxml_predictable_attribute_order
+ #command: diff -u {{ role_path }}/results/test-add-children-with-attributes.xml /tmp/ansible-xml-beers.xml
diff --git a/test/integration/targets/xml/tasks/test-add-element-implicitly.yml b/test/integration/targets/xml/tasks/test-add-element-implicitly.yml
index 0ef714ee197..db674ba4fc0 100644
--- a/test/integration/targets/xml/tasks/test-add-element-implicitly.yml
+++ b/test/integration/targets/xml/tasks/test-add-element-implicitly.yml
@@ -1,62 +1,118 @@
---
- name: Setup test fixture
- copy: src={{ role_path }}/fixtures/ansible-xml-beers.xml dest=/tmp/ansible-xml-beers-implicit.xml
+ copy:
+ src: fixtures/ansible-xml-beers.xml
+ dest: /tmp/ansible-xml-beers-implicit.xml
+
- name: Add a phonenumber element to the business element. Implicit mkdir -p behavior where applicable
- xml: file=/tmp/ansible-xml-beers-implicit.xml xpath=/business/phonenumber value=555-555-1234
+ xml:
+ file: /tmp/ansible-xml-beers-implicit.xml
+ xpath: /business/phonenumber
+ value: 555-555-1234
- name: Add a owner element to the business element, testing implicit mkdir -p behavior 1/2
- xml: file=/tmp/ansible-xml-beers-implicit.xml xpath=/business/owner/name/last value=Smith
+ xml:
+ file: /tmp/ansible-xml-beers-implicit.xml
+ xpath: /business/owner/name/last
+ value: Smith
- name: Add a owner element to the business element, testing implicit mkdir -p behavior 2/2
- xml: file=/tmp/ansible-xml-beers-implicit.xml xpath=/business/owner/name/first value=John
+ xml:
+ file: /tmp/ansible-xml-beers-implicit.xml
+ xpath: /business/owner/name/first
+ value: John
- name: Add a validxhtml element to the website element. Note that ensure is present by default and while value defaults to null for elements, if one doesn't specify it we don't know what to do.
- xml: file=/tmp/ansible-xml-beers-implicit.xml xpath=/business/website/validxhtml
+ xml:
+ file: /tmp/ansible-xml-beers-implicit.xml
+ xpath: /business/website/validxhtml
- name: Add an empty validateon attribute to the validxhtml element. This actually makes the previous example redundant because of the implicit parent-node creation behavior.
- xml: file=/tmp/ansible-xml-beers-implicit.xml xpath=/business/website/validxhtml/@validateon
+ xml:
+ file: /tmp/ansible-xml-beers-implicit.xml
+ xpath: /business/website/validxhtml/@validateon
- name: Add an empty validateon attribute to the validxhtml element. Actually verifies the implicit parent-node creation behavior.
- xml: file=/tmp/ansible-xml-beers-implicit.xml xpath=/business/website_bis/validxhtml/@validateon
+ xml:
+ file: /tmp/ansible-xml-beers-implicit.xml
+ xpath: /business/website_bis/validxhtml/@validateon
- name: Add an attribute with a value
- xml: file=/tmp/ansible-xml-beers-implicit.xml xpath=/business/owner/@dob='1976-04-12'
+ xml:
+ file: /tmp/ansible-xml-beers-implicit.xml
+ xpath: /business/owner/@dob='1976-04-12'
- name: Add an element with a value, alternate syntax
- xml: file=/tmp/ansible-xml-beers-implicit.xml xpath="/business/beers/beer/text()=\"George Killian's Irish Red\"" # note the quote within an XPath string thing
+ xml:
+ file: /tmp/ansible-xml-beers-implicit.xml
+ xpath: /business/beers/beer/text()="George Killian's Irish Red" # note the quote within an XPath string thing
- name: Add an element without special characters
- xml: file=/tmp/ansible-xml-beers-implicit.xml xpath=/business/testnormalelement value="xml tag with no special characters" pretty_print=true
+ xml:
+ file: /tmp/ansible-xml-beers-implicit.xml
+ xpath: /business/testnormalelement
+ value: xml tag with no special characters
+ pretty_print: yes
- name: Add an element with dash
- xml: file=/tmp/ansible-xml-beers-implicit.xml xpath=/business/test-with-dash value="xml tag with dashes" pretty_print=true
+ xml:
+ file: /tmp/ansible-xml-beers-implicit.xml
+ xpath: /business/test-with-dash
+ value: xml tag with dashes
+ pretty_print: yes
- name: Add an element with dot
- xml: file=/tmp/ansible-xml-beers-implicit.xml xpath=/business/test-with-dash.and.dot value="xml tag with dashes and dots" pretty_print=true
+ xml:
+ file: /tmp/ansible-xml-beers-implicit.xml
+ xpath: /business/test-with-dash.and.dot
+ value: xml tag with dashes and dots
+ pretty_print: yes
- name: Add an element with underscore
- xml: file=/tmp/ansible-xml-beers-implicit.xml xpath=/business/test-with.dash_and.dot_and-underscores value="xml tag with dashes, dots and underscores" pretty_print=true
+ xml:
+ file: /tmp/ansible-xml-beers-implicit.xml
+ xpath: /business/test-with.dash_and.dot_and-underscores
+ value: xml tag with dashes, dots and underscores
+ pretty_print: yes
- name: Add an attribute on a conditional element
- xml: file=/tmp/ansible-xml-beers-implicit.xml xpath="/business/beers/beer[text()=\"George Killian's Irish Red\"]/@color='red'"
+ xml:
+ file: /tmp/ansible-xml-beers-implicit.xml
+ xpath: /business/beers/beer[text()="George Killian's Irish Red"]/@color='red'
- name: Add two attributes on a conditional element
- xml: file=/tmp/ansible-xml-beers-implicit.xml xpath="/business/beers/beer[text()=\"Pilsner Urquell\" and @origin='CZ']/@color='blonde'"
+ xml:
+ file: /tmp/ansible-xml-beers-implicit.xml
+ xpath: /business/beers/beer[text()="Pilsner Urquell" and @origin='CZ']/@color='blonde'
- name: Add a owner element to the business element, testing implicit mkdir -p behavior 3/2 -- complex lookup
- xml: file=/tmp/ansible-xml-beers-implicit.xml xpath=/business/owner/name[first/text()='John']/middle value=Q
+ xml:
+ file: /tmp/ansible-xml-beers-implicit.xml
+ xpath: /business/owner/name[first/text()='John']/middle
+ value: Q
- name: Pretty Print this!
- xml: file=/tmp/ansible-xml-beers-implicit.xml pretty_print=True
+ xml:
+ file: /tmp/ansible-xml-beers-implicit.xml
+ pretty_print: yes
+
+- name: Compare to expected result
+ copy:
+ src: results/test-add-element-implicitly.yml
+ dest: /tmp/ansible-xml-beers-implicit.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-add-element-implicitly.yml /tmp/ansible-xml-beers-implicit.xml
+ assert:
+ that:
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-add-element-implicitly.yml /tmp/ansible-xml-beers-implicit.xml
-#
-# Now we repeat the same, just to ensure proper use of namespaces
-#
+# Now we repeat the same, just to ensure proper use of namespaces
- name: Add a phonenumber element to the business element. Implicit mkdir -p behavior where applicable
xml:
file: /tmp/ansible-xml-beers-implicit.xml
@@ -112,21 +168,21 @@
- name: Add an element with a value, alternate syntax
xml:
file: /tmp/ansible-xml-beers-implicit.xml
- xpath: "/business/a:beers/a:beer/text()=\"George Killian's Irish Red\"" # note the quote within an XPath string thing
+ xpath: /business/a:beers/a:beer/text()="George Killian's Irish Red" # note the quote within an XPath string thing
namespaces:
a: http://example.com/some/namespace
- name: Add an attribute on a conditional element
xml:
file: /tmp/ansible-xml-beers-implicit.xml
- xpath: "/business/a:beers/a:beer[text()=\"George Killian's Irish Red\"]/@a:color='red'"
+ xpath: /business/a:beers/a:beer[text()="George Killian's Irish Red"]/@a:color='red'
namespaces:
a: http://example.com/some/namespace
- name: Add two attributes on a conditional element
xml:
file: /tmp/ansible-xml-beers-implicit.xml
- xpath: "/business/a:beers/a:beer[text()=\"Pilsner Urquell\" and @a:origin='CZ']/@a:color='blonde'"
+ xpath: /business/a:beers/a:beer[text()="Pilsner Urquell" and @a:origin='CZ']/@a:color='blonde'
namespaces:
a: http://example.com/some/namespace
@@ -142,8 +198,8 @@
xml:
file: /tmp/ansible-xml-beers-implicit.xml
xpath: /business/testnormalelement
- value: "xml tag with no special characters"
- pretty_print: true
+ value: xml tag with no special characters
+ pretty_print: yes
namespaces:
a: http://example.com/some/namespace
@@ -152,8 +208,8 @@
xml:
file: /tmp/ansible-xml-beers-implicit.xml
xpath: /business/test-with-dash
- value: "xml tag with dashes"
- pretty_print: true
+ value: xml tag with dashes
+ pretty_print: yes
namespaces:
a: http://example.com/some/namespace
@@ -161,8 +217,8 @@
xml:
file: /tmp/ansible-xml-beers-implicit.xml
xpath: /business/test-with-dash.and.dot
- value: "xml tag with dashes and dots"
- pretty_print: true
+ value: xml tag with dashes and dots
+ pretty_print: yes
namespaces:
a: http://example.com/some/namespace
@@ -170,10 +226,12 @@
xml:
file: /tmp/ansible-xml-beers-implicit.xml
xpath: /business/test-with.dash_and.dot_and-underscores
- value: "xml tag with dashes, dots and underscores"
- pretty_print: true
+ value: xml tag with dashes, dots and underscores
+ pretty_print: yes
namespaces:
a: http://example.com/some/namespace
- name: Pretty Print this!
- xml: file=/tmp/ansible-xml-beers-implicit.xml pretty_print=True
+ xml:
+ file: /tmp/ansible-xml-beers-implicit.xml
+ pretty_print: yes
diff --git a/test/integration/targets/xml/tasks/test-add-namespaced-children-elements.yml b/test/integration/targets/xml/tasks/test-add-namespaced-children-elements.yml
index 09974c8e796..25eca47f5b1 100644
--- a/test/integration/targets/xml/tasks/test-add-namespaced-children-elements.yml
+++ b/test/integration/targets/xml/tasks/test-add-namespaced-children-elements.yml
@@ -1,9 +1,10 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-namespaced-beers.xml'
+ src: fixtures/ansible-xml-namespaced-beers.xml
dest: /tmp/ansible-xml-namespaced-beers.xml
+
- name: Add namespaced child element
xml:
path: /tmp/ansible-xml-namespaced-beers.xml
@@ -12,7 +13,20 @@
bus: http://test.business
ber: http://test.beers
add_children:
- - beer: "Old Rasputin"
+ - beer: Old Rasputin
+ register: add_namespaced_children_elements
+
+ - name: Compare to expected result
+ copy:
+ src: results/test-add-namespaced-children-elements.xml
+ dest: /tmp/ansible-xml-namespaced-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-add-namespaced-children-elements.xml /tmp/ansible-xml-namespaced-beers.xml
+ assert:
+ that:
+ - add_namespaced_children_elements.changed == true
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-add-namespaced-children-elements.xml /tmp/ansible-xml-namespaced-beers.xml
diff --git a/test/integration/targets/xml/tasks/test-children-elements-xml.yml b/test/integration/targets/xml/tasks/test-children-elements-xml.yml
index 4350bcaab6b..f4a3c3d582b 100644
--- a/test/integration/targets/xml/tasks/test-children-elements-xml.yml
+++ b/test/integration/targets/xml/tasks/test-children-elements-xml.yml
@@ -1,16 +1,30 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-beers.xml'
+ src: fixtures/ansible-xml-beers.xml
dest: /tmp/ansible-xml-beers.xml
+
- name: Add child element with xml format
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/beers
input_type: xml
add_children:
- - "Old Rasputin"
+ - 'Old Rasputin'
+ register: children_elements
+
+ - name: Compare to expected result
+ copy:
+ src: results/test-add-children-elements.xml
+ dest: /tmp/ansible-xml-beers.xml
+ check_mode: yes
+ diff: yes·
+ register: comparison
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-add-children-elements.xml /tmp/ansible-xml-beers.xml
+ assert:
+ that:
+ - children_elements.changed == true
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-add-children-elements.xml /tmp/ansible-xml-beers.xml
diff --git a/test/integration/targets/xml/tasks/test-count-unicode.yml b/test/integration/targets/xml/tasks/test-count-unicode.yml
index 17444f4ff42..47a806bf98a 100644
--- a/test/integration/targets/xml/tasks/test-count-unicode.yml
+++ b/test/integration/targets/xml/tasks/test-count-unicode.yml
@@ -1,13 +1,19 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-beers-unicode.xml'
+ src: fixtures/ansible-xml-beers-unicode.xml
dest: /tmp/ansible-xml-beers-unicode.xml
+
- name: Count child element
xml:
path: /tmp/ansible-xml-beers-unicode.xml
xpath: /business/beers/beer
- count: true
+ count: yes
register: beers
- failed_when: beers.count != 2
+
+ - name: Test expected result
+ assert:
+ that:
+ - beers.changed == false
+ - beers.count == 2
diff --git a/test/integration/targets/xml/tasks/test-count.yml b/test/integration/targets/xml/tasks/test-count.yml
index acaf8ff1ae5..cbc97e323c5 100644
--- a/test/integration/targets/xml/tasks/test-count.yml
+++ b/test/integration/targets/xml/tasks/test-count.yml
@@ -1,13 +1,19 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-beers.xml'
+ src: fixtures/ansible-xml-beers.xml
dest: /tmp/ansible-xml-beers.xml
+
- name: Add child element
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/beers/beer
- count: true
+ count: yes
register: beers
- failed_when: beers.count != 3
+
+ - name: Test expected result
+ assert:
+ that:
+ - beers.changed == false
+ - beers.count == 3
diff --git a/test/integration/targets/xml/tasks/test-get-element-content-unicode.yml b/test/integration/targets/xml/tasks/test-get-element-content-unicode.yml
index 0658c6c49f0..73ae96674fb 100644
--- a/test/integration/targets/xml/tasks/test-get-element-content-unicode.yml
+++ b/test/integration/targets/xml/tasks/test-get-element-content-unicode.yml
@@ -1,21 +1,32 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-beers-unicode.xml'
+ src: fixtures/ansible-xml-beers-unicode.xml
dest: /tmp/ansible-xml-beers-unicode.xml
+
- name: Get element attributes
xml:
path: /tmp/ansible-xml-beers-unicode.xml
xpath: /business/rating
- content: 'attribute'
+ content: attribute
register: get_element_attribute
- failed_when: get_element_attribute.matches[0]['rating'] is not defined or get_element_attribute.matches[0]['rating']['subjective'] != 'да'
+
+ - name: Test expected result
+ assert:
+ that:
+ - get_element_attribute.changed == false
+ - get_element_attribute.matches[0]['rating'] is defined and get_element_attribute.matches[0]['rating']['subjective'] == 'да'
- name: Get element text
xml:
path: /tmp/ansible-xml-beers-unicode.xml
xpath: /business/rating
- content: 'text'
+ content: text
register: get_element_text
- failed_when: get_element_text.matches[0]['rating'] != 'десять'
+
+ - name: Test expected result
+ assert:
+ that:
+ - get_element_text.changed == false
+ - get_element_text.matches[0]['rating'] == 'десять'
diff --git a/test/integration/targets/xml/tasks/test-get-element-content.yml b/test/integration/targets/xml/tasks/test-get-element-content.yml
index 3546be00271..893003eec7b 100644
--- a/test/integration/targets/xml/tasks/test-get-element-content.yml
+++ b/test/integration/targets/xml/tasks/test-get-element-content.yml
@@ -1,21 +1,32 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-beers.xml'
+ src: fixtures/ansible-xml-beers.xml
dest: /tmp/ansible-xml-beers.xml
+
- name: Get element attributes
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/rating
- content: 'attribute'
+ content: attribute
register: get_element_attribute
- failed_when: get_element_attribute.matches[0]['rating'] is not defined or get_element_attribute.matches[0]['rating']['subjective'] != 'true'
+
+ - name: Test expected result
+ assert:
+ that:
+ - get_element_attribute.changed == false
+ - get_element_attribute.matches[0]['rating'] is defined and get_element_attribute.matches[0]['rating']['subjective'] == 'true'
- name: Get element text
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/rating
- content: 'text'
+ content: text
register: get_element_text
- failed_when: get_element_text.matches[0]['rating'] != '10'
+
+ - name: Test expected result
+ assert:
+ that:
+ - get_element_text.changed == false
+ - get_element_text.matches[0]['rating'] == '10'
diff --git a/test/integration/targets/xml/tasks/test-mutually-exclusive-attributes.yml b/test/integration/targets/xml/tasks/test-mutually-exclusive-attributes.yml
index a3769f6902c..3f24b0ac840 100644
--- a/test/integration/targets/xml/tasks/test-mutually-exclusive-attributes.yml
+++ b/test/integration/targets/xml/tasks/test-mutually-exclusive-attributes.yml
@@ -1,15 +1,22 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-beers.xml'
+ src: fixtures/ansible-xml-beers.xml
dest: /tmp/ansible-xml-beers.xml
+
- name: Specify both children to add and a value
xml:
path: /tmp/ansible-xml-beers.xml
add_children:
- - child01
- - child02
+ - child01
+ - child02
value: conflict!
register: module_output
- failed_when: "module_output.failed == 'false'"
+ ignore_errors: yes
+
+ - name: Test expected result
+ assert:
+ that:
+ - module_output.changed == false
+ - module_output.failed == true
diff --git a/test/integration/targets/xml/tasks/test-pretty-print-only.yml b/test/integration/targets/xml/tasks/test-pretty-print-only.yml
index cd8d52e0cfe..54511f2b0c9 100644
--- a/test/integration/targets/xml/tasks/test-pretty-print-only.yml
+++ b/test/integration/targets/xml/tasks/test-pretty-print-only.yml
@@ -2,10 +2,24 @@
- name: Setup test fixture
shell: cat {{ role_path }}/fixtures/ansible-xml-beers.xml | sed 's/^[ ]*//g' > /tmp/ansible-xml-beers.xml
+
- name: Pretty print without modification
xml:
path: /tmp/ansible-xml-beers.xml
- pretty_print: True
+ pretty_print: yes
+ register: pretty_print_only
+
+ - name: Compare to expected result
+ copy:
+ src: results/test-pretty-print-only.xml
+ dest: /tmp/ansible-xml-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-pretty-print-only.xml /tmp/ansible-xml-beers.xml
+ assert:
+ that:
+ - pretty_print_only.changed == true
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-pretty-print-only.xml /tmp/ansible-xml-beers.xml
diff --git a/test/integration/targets/xml/tasks/test-pretty-print.yml b/test/integration/targets/xml/tasks/test-pretty-print.yml
index dd63f26a72f..88b618b25d9 100644
--- a/test/integration/targets/xml/tasks/test-pretty-print.yml
+++ b/test/integration/targets/xml/tasks/test-pretty-print.yml
@@ -1,16 +1,30 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-beers.xml'
+ src: fixtures/ansible-xml-beers.xml
dest: /tmp/ansible-xml-beers.xml
+
- name: Pretty print
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/beers
- pretty_print: True
+ pretty_print: yes
add_children:
- - beer: "Old Rasputin"
+ - beer: Old Rasputin
+ register: pretty_print
+
+ - name: Compare to expected result
+ copy:
+ src: results/test-pretty-print.xml
+ dest: /tmp/ansible-xml-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-pretty-print.xml /tmp/ansible-xml-beers.xml
+ assert:
+ that:
+ - pretty_print.changed == true
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-pretty-print.xml /tmp/ansible-xml-beers.xml
diff --git a/test/integration/targets/xml/tasks/test-remove-attribute.yml b/test/integration/targets/xml/tasks/test-remove-attribute.yml
index 6af599b9846..9aa395e6665 100644
--- a/test/integration/targets/xml/tasks/test-remove-attribute.yml
+++ b/test/integration/targets/xml/tasks/test-remove-attribute.yml
@@ -1,14 +1,28 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-beers.xml'
+ src: fixtures/ansible-xml-beers.xml
dest: /tmp/ansible-xml-beers.xml
+
- name: Remove '/business/rating/@subjective'
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/rating/@subjective
- ensure: absent
+ state: absent
+ register: remove_attribute
+
+ - name: Compare to expected result
+ copy:
+ src: results/test-remove-attribute.xml
+ dest: /tmp/ansible-xml-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-remove-attribute.xml /tmp/ansible-xml-beers.xml
+ assert:
+ that:
+ - remove_attribute.changed == true
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-remove-attribute.xml /tmp/ansible-xml-beers.xml
diff --git a/test/integration/targets/xml/tasks/test-remove-element.yml b/test/integration/targets/xml/tasks/test-remove-element.yml
index f8edd734b1a..f2e20ea2208 100644
--- a/test/integration/targets/xml/tasks/test-remove-element.yml
+++ b/test/integration/targets/xml/tasks/test-remove-element.yml
@@ -1,14 +1,28 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-beers.xml'
+ src: fixtures/ansible-xml-beers.xml
dest: /tmp/ansible-xml-beers.xml
+
- name: Remove '/business/rating'
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/rating
- ensure: absent
+ state: absent
+ register: remove_element
+
+ - name: Compare to expected result
+ copy:
+ src: results/test-remove-element.xml
+ dest: /tmp/ansible-xml-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-remove-element.xml /tmp/ansible-xml-beers.xml
+ assert:
+ that:
+ - remove_element.changed == true
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-remove-element.xml /tmp/ansible-xml-beers.xml
diff --git a/test/integration/targets/xml/tasks/test-remove-namespaced-attribute.yml b/test/integration/targets/xml/tasks/test-remove-namespaced-attribute.yml
index 19f41a08275..36682b22025 100644
--- a/test/integration/targets/xml/tasks/test-remove-namespaced-attribute.yml
+++ b/test/integration/targets/xml/tasks/test-remove-namespaced-attribute.yml
@@ -1,9 +1,10 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-namespaced-beers.xml'
+ src: fixtures/ansible-xml-namespaced-beers.xml
dest: /tmp/ansible-xml-namespaced-beers.xml
+
- name: Remove namespaced '/bus:business/rat:rating/@attr:subjective'
xml:
path: /tmp/ansible-xml-namespaced-beers.xml
@@ -13,7 +14,20 @@
ber: http://test.beers
rat: http://test.rating
attr: http://test.attribute
- ensure: absent
+ state: absent
+ register: remove_namespaced_attribute
+
+ - name: Compare to expected result
+ copy:
+ src: results/test-remove-namespaced-attribute.xml
+ dest: /tmp/ansible-xml-namespaced-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-remove-namespaced-attribute.xml /tmp/ansible-xml-namespaced-beers.xml
+ assert:
+ that:
+ - remove_element.changed == true
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-remove-namespaced-attribute.xml /tmp/ansible-xml-namespaced-beers.xml
diff --git a/test/integration/targets/xml/tasks/test-remove-namespaced-element.yml b/test/integration/targets/xml/tasks/test-remove-namespaced-element.yml
index 5be96af5a69..be78af68037 100644
--- a/test/integration/targets/xml/tasks/test-remove-namespaced-element.yml
+++ b/test/integration/targets/xml/tasks/test-remove-namespaced-element.yml
@@ -1,9 +1,10 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-namespaced-beers.xml'
+ src: fixtures/ansible-xml-namespaced-beers.xml
dest: /tmp/ansible-xml-namespaced-beers.xml
+
- name: Remove namespaced '/bus:business/rat:rating'
xml:
path: /tmp/ansible-xml-namespaced-beers.xml
@@ -13,7 +14,20 @@
ber: http://test.beers
rat: http://test.rating
attr: http://test.attribute
- ensure: absent
+ state: absent
+ register: remove_namespaced_element
+
+ - name: Compare to expected result
+ copy:
+ src: results/test-remove-element.xml
+ dest: /tmp/ansible-xml-namespaced-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-remove-element.xml /tmp/ansible-xml-namespaced-beers.xml
+ assert:
+ that:
+ - remove_namespaced_element.changed == true
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-remove-element.xml /tmp/ansible-xml-namespaced-beers.xml
diff --git a/test/integration/targets/xml/tasks/test-set-attribute-value-unicode.yml b/test/integration/targets/xml/tasks/test-set-attribute-value-unicode.yml
index e6ab507e76e..dabf72a1b7e 100644
--- a/test/integration/targets/xml/tasks/test-set-attribute-value-unicode.yml
+++ b/test/integration/targets/xml/tasks/test-set-attribute-value-unicode.yml
@@ -1,16 +1,29 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-beers.xml'
+ src: fixtures/ansible-xml-beers.xml
dest: /tmp/ansible-xml-beers.xml
+
- name: Set '/business/rating/@subjective' to 'нет'
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/rating
attribute: subjective
- value: "нет"
+ value: нет
+ register: set_attribute_value_unicode
+
+ - name: Compare to expected result
+ copy:
+ src: results/test-set-attribute-value-unicode.xml
+ dest: /tmp/ansible-xml-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-set-attribute-value-unicode.xml /tmp/ansible-xml-beers.xml
- changed_when: False
+ assert:
+ that:
+ - set_attribute_value_unicode.changed == true
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-set-attribute-value-unicode.xml /tmp/ansible-xml-beers.xml
diff --git a/test/integration/targets/xml/tasks/test-set-attribute-value.yml b/test/integration/targets/xml/tasks/test-set-attribute-value.yml
index ad6a041dd9d..2aa39fe22fd 100644
--- a/test/integration/targets/xml/tasks/test-set-attribute-value.yml
+++ b/test/integration/targets/xml/tasks/test-set-attribute-value.yml
@@ -1,16 +1,29 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-beers.xml'
+ src: fixtures/ansible-xml-beers.xml
dest: /tmp/ansible-xml-beers.xml
+
- name: Set '/business/rating/@subjective' to 'false'
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/rating
attribute: subjective
- value: "false"
+ value: 'false'
+ register: set_attribute_value
+
+ - name: Compare to expected result
+ copy:
+ src: results/test-set-attribute-value.xml
+ dest: /tmp/ansible-xml-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-set-attribute-value.xml /tmp/ansible-xml-beers.xml
- changed_when: False
+ assert:
+ that:
+ - set_attribute_value.changed == true
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-set-attribute-value.xml /tmp/ansible-xml-beers.xml
diff --git a/test/integration/targets/xml/tasks/test-set-children-elements-level.yml b/test/integration/targets/xml/tasks/test-set-children-elements-level.yml
index 4cd0168aa17..f90cc573a7e 100644
--- a/test/integration/targets/xml/tasks/test-set-children-elements-level.yml
+++ b/test/integration/targets/xml/tasks/test-set-children-elements-level.yml
@@ -1,14 +1,17 @@
---
- name: Setup test fixture
- command: cp {{ role_path }}/fixtures/ansible-xml-beers.xml /tmp/ansible-xml-beers.xml
+ copy:
+ src: fixtures/ansible-xml-beers.xml
+ dest: /tmp/ansible-xml-beers.xml
+
- name: Set child elements
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/beers
- set_children:
+ set_children: &children
- beer:
- name: "90 Minute IPA"
+ name: 90 Minute IPA
alcohol: "0.5"
_:
- Water:
@@ -21,7 +24,7 @@
- Yeast:
quantity: 20g
- beer:
- name: "Harvest Pumpkin Ale"
+ name: Harvest Pumpkin Ale
alcohol: "0.3"
_:
- Water:
@@ -31,41 +34,41 @@
quantity: 25g
- Yeast:
quantity: 20g
+ register: set_children_elements_level
+
+ - name: Compare to expected result
+ copy:
+ src: results/test-set-children-elements-level.xml
+ dest: /tmp/ansible-xml-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-set-children-elements-level.xml /tmp/ansible-xml-beers.xml
+ assert:
+ that:
+ - set_children_elements_level.changed == true
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-set-children-elements-level.xml /tmp/ansible-xml-beers.xml
- - name: Set child elements
+
+ - name: Set child elements (again)
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/beers
- set_children:
- - beer:
- name: "90 Minute IPA"
- alcohol: "0.5"
- _:
- - Water:
- quantity: 200g
- liter: "0.2"
- - Starch:
- quantity: 10g
- - Hops:
- quantity: 50g
- - Yeast:
- quantity: 20g
- - beer:
- name: "Harvest Pumpkin Ale"
- alcohol: "0.3"
- _:
- - Water:
- quantity: 200g
- liter: "0.2"
- - Hops:
- quantity: 25g
- - Yeast:
- quantity: 20g
+ set_children: *children
register: set_children_again
- - fail:
- msg: "Setting children is not idempotent!"
- when: set_children_again.changed
+ - name: Compare to expected result
+ copy:
+ src: results/test-set-children-elements-level.xml
+ dest: /tmp/ansible-xml-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
+
+ - name: Test expected result
+ assert:
+ that:
+ - set_children_again.changed == false
+ - comparison.changed == false # identical
diff --git a/test/integration/targets/xml/tasks/test-set-children-elements-unicode.yml b/test/integration/targets/xml/tasks/test-set-children-elements-unicode.yml
index cdb9da6bc1b..240b894ac7a 100644
--- a/test/integration/targets/xml/tasks/test-set-children-elements-unicode.yml
+++ b/test/integration/targets/xml/tasks/test-set-children-elements-unicode.yml
@@ -1,27 +1,46 @@
---
- name: Setup test fixture
- command: cp {{ role_path }}/fixtures/ansible-xml-beers.xml /tmp/ansible-xml-beers.xml
+ copy:
+ src: fixtures/ansible-xml-beers.xml
+ dest: /tmp/ansible-xml-beers.xml
+
- name: Set child elements
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/beers
- set_children:
- - beer: "Окское"
- - beer: "Невское"
+ set_children: &children
+ - beer: Окское
+ - beer: Невское
+ register: set_children_elements_unicode
+
+ - name: Compare to expected result
+ copy:
+ src: results/test-set-children-elements-unicode.xml
+ dest: /tmp/ansible-xml-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-set-children-elements-unicode.xml /tmp/ansible-xml-beers.xml
+ assert:
+ that:
+ - set_children_elements_unicode.changed == true
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-set-children-elements-unicode.xml /tmp/ansible-xml-beers.xml
- - name: Set child elements
- xml:
- path: /tmp/ansible-xml-beers.xml
- xpath: /business/beers
- set_children:
- - beer: "Окское"
- - beer: "Невское"
- register: set_children_again
- - fail:
- msg: "Setting children is not idempotent!"
- when: set_children_again.changed
+ - name: Compare to expected result
+ copy:
+ src: results/test-set-children-elements-unicode.xml
+ dest: /tmp/ansible-xml-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
+
+ - name: Test expected result
+ assert:
+ that:
+ - set_children_again.changed == false
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-set-children-elements-unicode.xml /tmp/ansible-xml-beers.xml
diff --git a/test/integration/targets/xml/tasks/test-set-children-elements.yml b/test/integration/targets/xml/tasks/test-set-children-elements.yml
index a7ec6436685..7b0f3247ad2 100644
--- a/test/integration/targets/xml/tasks/test-set-children-elements.yml
+++ b/test/integration/targets/xml/tasks/test-set-children-elements.yml
@@ -1,27 +1,53 @@
---
- name: Setup test fixture
- command: cp {{ role_path }}/fixtures/ansible-xml-beers.xml /tmp/ansible-xml-beers.xml
+ copy:
+ src: fixtures/ansible-xml-beers.xml
+ dest: /tmp/ansible-xml-beers.xml
+
- name: Set child elements
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/beers
- set_children:
- - beer: "90 Minute IPA"
- - beer: "Harvest Pumpkin Ale"
+ set_children: &children
+ - beer: 90 Minute IPA
+ - beer: Harvest Pumpkin Ale
+ register: set_children_elements
+
+ - name: Compare to expected result
+ copy:
+ src: results/test-set-children-elements.xml
+ dest: /tmp/ansible-xml-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-set-children-elements.xml /tmp/ansible-xml-beers.xml
+ assert:
+ that:
+ - set_children_elements.changed == true
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-set-children-elements.xml /tmp/ansible-xml-beers.xml
- - name: Set child elements
+
+ - name: Set child elements (again)
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/beers
- set_children:
- - beer: "90 Minute IPA"
- - beer: "Harvest Pumpkin Ale"
+ set_children: *children
register: set_children_again
- - fail:
- msg: "Setting children is not idempotent!"
- when: set_children_again.changed
+ - name: Compare to expected result
+ copy:
+ src: results/test-set-children-elements.xml
+ dest: /tmp/ansible-xml-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
+
+ - name: Test expected result
+ assert:
+ that:
+ - set_children_again.changed == false
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-set-children-elements.xml /tmp/ansible-xml-beers.xml
diff --git a/test/integration/targets/xml/tasks/test-set-element-value-empty.yml b/test/integration/targets/xml/tasks/test-set-element-value-empty.yml
index 0f5a73938f3..5814803cb74 100644
--- a/test/integration/targets/xml/tasks/test-set-element-value-empty.yml
+++ b/test/integration/targets/xml/tasks/test-set-element-value-empty.yml
@@ -1,14 +1,28 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-beers.xml'
+ src: fixtures/ansible-xml-beers.xml
dest: /tmp/ansible-xml-beers.xml
- - name: Set /business/website/address to empty string.
+
+ - name: Set '/business/website/address' to empty string.
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/website/address
value: ''
+ register: set_element_value_empty
+
+ - name: Compare to expected result
+ copy:
+ src: results/test-set-element-value-empty.xml
+ dest: /tmp/ansible-xml-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-set-element-value-empty.xml /tmp/ansible-xml-beers.xml
+ assert:
+ that:
+ - set_element_value_empty.changed == true
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-set-element-value-empty.xml /tmp/ansible-xml-beers.xml
diff --git a/test/integration/targets/xml/tasks/test-set-element-value-unicode.yml b/test/integration/targets/xml/tasks/test-set-element-value-unicode.yml
index 4e13808a2fa..c3a40b7d934 100644
--- a/test/integration/targets/xml/tasks/test-set-element-value-unicode.yml
+++ b/test/integration/targets/xml/tasks/test-set-element-value-unicode.yml
@@ -1,37 +1,43 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-beers.xml'
+ src: fixtures/ansible-xml-beers.xml
dest: /tmp/ansible-xml-beers.xml
+
- name: Add 2nd '/business/rating' with value 'пять'
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business
add_children:
- - rating: "пять"
+ - rating: пять
- name: Set '/business/rating' to 'пять'
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/rating
- value: "пять"
+ value: пять
register: set_element_first_run
- name: Set '/business/rating' to 'false'... again
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/rating
- value: "пять"
+ value: пять
register: set_element_second_run
- - name: Test expected result
- command: diff -u {{ role_path }}/results/test-set-element-value-unicode.xml /tmp/ansible-xml-beers.xml
- changed_when: no
+ - name: Compare to expected result
+ copy:
+ src: results/test-set-element-value-unicode.xml
+ dest: /tmp/ansible-xml-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
- - name: Test registered 'changed' on run 1 and unchanged on run 2
+ - name: Test expected result
assert:
that:
- - set_element_first_run.changed
- - not set_element_second_run.changed
-...
+ - set_element_first_run.changed == true
+ - set_element_second_run.changed == false
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-set-element-value-unicode.xml /tmp/ansible-xml-beers.xml
diff --git a/test/integration/targets/xml/tasks/test-set-element-value.yml b/test/integration/targets/xml/tasks/test-set-element-value.yml
index 07e6d6a24aa..dbd070f1398 100644
--- a/test/integration/targets/xml/tasks/test-set-element-value.yml
+++ b/test/integration/targets/xml/tasks/test-set-element-value.yml
@@ -1,37 +1,43 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-beers.xml'
+ src: fixtures/ansible-xml-beers.xml
dest: /tmp/ansible-xml-beers.xml
+
- name: Add 2nd '/business/rating' with value '5'
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business
add_children:
- - rating: "5"
+ - rating: '5'
- name: Set '/business/rating' to '5'
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/rating
- value: "5"
+ value: '5'
register: set_element_first_run
- - name: Set '/business/rating' to 'false'... again
+ - name: Set '/business/rating' to '5'... again
xml:
path: /tmp/ansible-xml-beers.xml
xpath: /business/rating
- value: "5"
+ value: '5'
register: set_element_second_run
- - name: Test expected result
- command: diff -u {{ role_path }}/results/test-set-element-value.xml /tmp/ansible-xml-beers.xml
- changed_when: no
+ - name: Compare to expected result
+ copy:
+ src: results/test-set-element-value.xml
+ dest: /tmp/ansible-xml-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
- - name: Test registered 'changed' on run 1 and unchanged on run 2
+ - name: Test expected result
assert:
that:
- - set_element_first_run.changed
- - not set_element_second_run.changed
-...
+ - set_element_first_run.changed == true
+ - set_element_second_run.changed == false
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-set-element-value.xml /tmp/ansible-xml-beers.xml
diff --git a/test/integration/targets/xml/tasks/test-set-namespaced-attribute-value.yml b/test/integration/targets/xml/tasks/test-set-namespaced-attribute-value.yml
index 1201abb4c95..e0086efe3ad 100644
--- a/test/integration/targets/xml/tasks/test-set-namespaced-attribute-value.yml
+++ b/test/integration/targets/xml/tasks/test-set-namespaced-attribute-value.yml
@@ -1,9 +1,10 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-namespaced-beers.xml'
+ src: fixtures/ansible-xml-namespaced-beers.xml
dest: /tmp/ansible-xml-namespaced-beers.xml
+
- name: Set namespaced '/bus:business/rat:rating/@attr:subjective' to 'false'
xml:
path: /tmp/ansible-xml-namespaced-beers.xml
@@ -14,8 +15,20 @@
rat: http://test.rating
attr: http://test.attribute
attribute: attr:subjective
- value: "false"
+ value: 'false'
+ register: set_namespaced_attribute_value
+
+ - name: Compare to expected result
+ copy:
+ src: results/test-set-namespaced-attribute-value.xml
+ dest: /tmp/ansible-xml-namespaced-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-set-namespaced-attribute-value.xml /tmp/ansible-xml-namespaced-beers.xml
- changed_when: no
+ assert:
+ that:
+ - set_namespaced_attribute_value.changed == true
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-set-namespaced-attribute-value.xml /tmp/ansible-xml-namespaced-beers.xml
diff --git a/test/integration/targets/xml/tasks/test-set-namespaced-children-elements.yml b/test/integration/targets/xml/tasks/test-set-namespaced-children-elements.yml
new file mode 100644
index 00000000000..e55bb2836c5
--- /dev/null
+++ b/test/integration/targets/xml/tasks/test-set-namespaced-children-elements.yml
@@ -0,0 +1,54 @@
+---
+ - name: Setup test fixture
+ copy:
+ src: fixtures/ansible-xml-namespaced-beers.xml
+ dest: /tmp/ansible-xml-namespaced-beers-xml.xml
+
+ - name: Set child elements
+ xml:
+ path: /tmp/ansible-xml-namespaced-beers-xml.xml
+ xpath: /bus:business/ber:beers
+ namespaces:
+ bus: http://test.business
+ ber: http://test.beers
+ set_children:
+ - beer: 90 Minute IPA
+ - beer: Harvest Pumpkin Ale
+
+ - name: Copy state after first set_children
+ copy:
+ src: /tmp/ansible-xml-namespaced-beers.xml
+ dest: /tmp/ansible-xml-namespaced-beers-1.xml
+
+ - name: Set child elements again
+ xml:
+ path: /tmp/ansible-xml-namespaced-beers-xml.xml
+ xpath: /bus:business/ber:beers
+ namespaces:
+ bus: http://test.business
+ ber: http://test.beers
+ set_children:
+ - beer: 90 Minute IPA
+ - beer: Harvest Pumpkin Ale
+ register: set_children_again
+
+ - name: Copy state after second set_children
+ copy:
+ src: /tmp/ansible-xml-namespaced-beers.xml
+ dest: /tmp/ansible-xml-namespaced-beers-2.xml
+
+ - name: Compare to expected result
+ copy:
+ src: /tmp/ansible-xml-namespaced-beers-1.xml
+ dest: /tmp/ansible-xml-namespaced-beers-2.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
+ #command: diff /tmp/ansible-xml-namespaced-beers-1.xml /tmp/ansible-xml-namespaced-beers-2.xml
+
+ - name: Test expected result
+ assert:
+ that:
+ - set_children_again.changed == false # idempotency
+ - set_namespaced_attribute_value.changed == true
+ - comparison.changed == false # identical
diff --git a/test/integration/targets/xml/tasks/test-set-namespaced-element-value.yml b/test/integration/targets/xml/tasks/test-set-namespaced-element-value.yml
index 80b4e3b5433..f77d7537e93 100644
--- a/test/integration/targets/xml/tasks/test-set-namespaced-element-value.yml
+++ b/test/integration/targets/xml/tasks/test-set-namespaced-element-value.yml
@@ -1,9 +1,10 @@
---
- name: Setup test fixture
copy:
- src: '{{ role_path }}/fixtures/ansible-xml-namespaced-beers.xml'
+ src: fixtures/ansible-xml-namespaced-beers.xml
dest: /tmp/ansible-xml-namespaced-beers.xml
+
- name: Set namespaced '/bus:business/rat:rating' to '11'
xml:
path: /tmp/ansible-xml-namespaced-beers.xml
@@ -13,7 +14,7 @@
rat: http://test.rating
attr: http://test.attribute
xpath: /bus:business/rat:rating
- value: "11"
+ value: '11'
register: set_element_first_run
- name: Set namespaced '/bus:business/rat:rating' to '11' again
@@ -25,15 +26,21 @@
rat: http://test.rating
attr: http://test.attribute
xpath: /bus:business/rat:rating
- value: "11"
+ value: '11'
register: set_element_second_run
- - name: Test expected result
- command: diff -u {{ role_path }}/results/test-set-namespaced-element-value.xml /tmp/ansible-xml-namespaced-beers.xml
- changed_when: no
+ - name: Compare to expected result
+ copy:
+ src: results/test-set-namespaced-element-value.xml
+ dest: /tmp/ansible-xml-namespaced-beers.xml
+ check_mode: yes
+ diff: yes
+ register: comparison
+ #command: diff -u {{ role_path }}/results/test-set-namespaced-element-value.xml /tmp/ansible-xml-namespaced-beers.xml
- - name: Test registered 'changed' on run 1 and unchanged on run 2
+ - name: Test expected result
assert:
that:
- - set_element_first_run.changed
- - not set_element_second_run.changed
+ - set_element_first_run.changed == true
+ - set_element_second_run.changed == false
+ - comparison.changed == false # identical
diff --git a/test/integration/targets/xml/tasks/test-xmlstring.yml b/test/integration/targets/xml/tasks/test-xmlstring.yml
index 4ae642fd571..4e80c45fa4e 100644
--- a/test/integration/targets/xml/tasks/test-xmlstring.yml
+++ b/test/integration/targets/xml/tasks/test-xmlstring.yml
@@ -1,31 +1,74 @@
---
- - name: Read from xmlstring
+ # NOTE: Jinja2 templating eats trailing newlines
+ - name: Read from xmlstring (not using pretty_print)
xml:
xmlstring: "{{ lookup('file', '{{ role_path }}/fixtures/ansible-xml-beers.xml') }}"
- pretty_print: True
+ xpath: .
register: xmlresponse
-
- - name: Write result to file
+
+
+ - name: Compare to expected result
+ copy:
+ content: "{{ xmlresponse.xmlstring }}\n"
+ dest: '{{ role_path }}/results/test-pretty-print-only.xml'
+ check_mode: yes
+ diff: yes
+ register: comparison
+
+ - name: Test expected result
+ assert:
+ that:
+ - xmlresponse.changed == false
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-pretty-print-only.xml /tmp/ansible-xml-beers.xml
+
+
+ # NOTE: Jinja2 templating eats trailing newlines
+ - name: Read from xmlstring (using pretty_print)
+ xml:
+ xmlstring: "{{ lookup('file', '{{ role_path }}/fixtures/ansible-xml-beers.xml') }}"
+ pretty_print: yes
+ register: xmlresponse
+
+ - name: Compare to expected result
copy:
- dest: /tmp/ansible-xml-beers.xml
- content: "{{ xmlresponse.xmlstring }}"
+ content: '{{ xmlresponse.xmlstring }}'
+ dest: '{{ role_path }}/results/test-pretty-print-only.xml'
+ check_mode: yes
+ diff: yes
+ register: comparison
+ # FIXME: This change is related to the newline added by pretty_print
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-pretty-print-only.xml /tmp/ansible-xml-beers.xml
+ assert:
+ that:
+ - xmlresponse.changed == true
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-pretty-print-only.xml /tmp/ansible-xml-beers.xml
+
+ # NOTE: Jinja2 templating eats trailing newlines
- name: Read from xmlstring
xml:
xmlstring: "{{ lookup('file', '{{ role_path }}/fixtures/ansible-xml-beers.xml') }}"
xpath: /business/beers
- pretty_print: True
+ pretty_print: yes
add_children:
- - beer: "Old Rasputin"
+ - beer: Old Rasputin
register: xmlresponse_modification
- - name: Write result to file
+ - name: Compare to expected result
copy:
- dest: /tmp/ansible-xml-beers.xml
- content: "{{ xmlresponse_modification.xmlstring }}"
+ content: '{{ xmlresponse_modification.xmlstring }}'
+ dest: '{{ role_path }}/results/test-pretty-print.xml'
+ check_mode: yes
+ diff: yes
+ register: comparison
+ # FIXME: This change is related to the newline added by pretty_print
- name: Test expected result
- command: diff -u {{ role_path }}/results/test-pretty-print.xml /tmp/ansible-xml-beers.xml
+ assert:
+ that:
+ - xmlresponse_modification.changed == true
+ - comparison.changed == false # identical
+ #command: diff -u {{ role_path }}/results/test-pretty-print.xml /tmp/ansible-xml-beers.xml