mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-06-29 03:30:22 -07:00
add special word '+value' to add_children/set_children in xml module (#8437)
Some checks failed
EOL CI / EOL Sanity (Ⓐ2.15) (push) Has been cancelled
EOL CI / EOL Units (Ⓐ2.15+py2.7) (push) Has been cancelled
EOL CI / EOL Units (Ⓐ2.15+py3.10) (push) Has been cancelled
EOL CI / EOL Units (Ⓐ2.15+py3.5) (push) Has been cancelled
EOL CI / EOL I (Ⓐ2.15+alpine3+py:azp/posix/1/) (push) Has been cancelled
EOL CI / EOL I (Ⓐ2.15+alpine3+py:azp/posix/2/) (push) Has been cancelled
EOL CI / EOL I (Ⓐ2.15+alpine3+py:azp/posix/3/) (push) Has been cancelled
EOL CI / EOL I (Ⓐ2.15+fedora37+py:azp/posix/1/) (push) Has been cancelled
EOL CI / EOL I (Ⓐ2.15+fedora37+py:azp/posix/2/) (push) Has been cancelled
EOL CI / EOL I (Ⓐ2.15+fedora37+py:azp/posix/3/) (push) Has been cancelled
nox / Run extra sanity tests (push) Has been cancelled
Some checks failed
EOL CI / EOL Sanity (Ⓐ2.15) (push) Has been cancelled
EOL CI / EOL Units (Ⓐ2.15+py2.7) (push) Has been cancelled
EOL CI / EOL Units (Ⓐ2.15+py3.10) (push) Has been cancelled
EOL CI / EOL Units (Ⓐ2.15+py3.5) (push) Has been cancelled
EOL CI / EOL I (Ⓐ2.15+alpine3+py:azp/posix/1/) (push) Has been cancelled
EOL CI / EOL I (Ⓐ2.15+alpine3+py:azp/posix/2/) (push) Has been cancelled
EOL CI / EOL I (Ⓐ2.15+alpine3+py:azp/posix/3/) (push) Has been cancelled
EOL CI / EOL I (Ⓐ2.15+fedora37+py:azp/posix/1/) (push) Has been cancelled
EOL CI / EOL I (Ⓐ2.15+fedora37+py:azp/posix/2/) (push) Has been cancelled
EOL CI / EOL I (Ⓐ2.15+fedora37+py:azp/posix/3/) (push) Has been cancelled
nox / Run extra sanity tests (push) Has been cancelled
* add special word '_value' to add_children/set_children in xml module * changelog fragment added * Update changelogs/fragments/8437-xml-children-value.yml Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com> * rebase * add integration test * fix result file of integration test --------- Co-authored-by: z1kk0 <anamleev@phoenixit.ru> Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
This commit is contained in:
parent
0dc1d9045b
commit
3a1ad01b1b
6 changed files with 88 additions and 1 deletions
2
changelogs/fragments/8437-xml-children-value.yml
Normal file
2
changelogs/fragments/8437-xml-children-value.yml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
minor_changes:
|
||||||
|
- xml - support adding value of children when creating with subnodes (https://github.com/ansible-collections/community.general/pull/8437).
|
|
@ -301,7 +301,9 @@ EXAMPLES = r"""
|
||||||
# Attributes
|
# Attributes
|
||||||
name: Scumm bar
|
name: Scumm bar
|
||||||
location: Monkey island
|
location: Monkey island
|
||||||
# Subnodes
|
# Value
|
||||||
|
+value: unreal
|
||||||
|
# Subnodes
|
||||||
_:
|
_:
|
||||||
- floor: Pirate hall
|
- floor: Pirate hall
|
||||||
- floor: Grog storage
|
- floor: Grog storage
|
||||||
|
@ -756,6 +758,7 @@ def child_to_element(module, child, in_type):
|
||||||
(key, value) = next(iteritems(child))
|
(key, value) = next(iteritems(child))
|
||||||
if isinstance(value, MutableMapping):
|
if isinstance(value, MutableMapping):
|
||||||
children = value.pop('_', None)
|
children = value.pop('_', None)
|
||||||
|
child_value = value.pop('+value', None)
|
||||||
|
|
||||||
node = etree.Element(key, value)
|
node = etree.Element(key, value)
|
||||||
|
|
||||||
|
@ -765,6 +768,9 @@ def child_to_element(module, child, in_type):
|
||||||
|
|
||||||
subnodes = children_to_nodes(module, children)
|
subnodes = children_to_nodes(module, children)
|
||||||
node.extend(subnodes)
|
node.extend(subnodes)
|
||||||
|
|
||||||
|
if child_value is not None:
|
||||||
|
node.text = child_value
|
||||||
else:
|
else:
|
||||||
node = etree.Element(key)
|
node = etree.Element(key)
|
||||||
node.text = value
|
node.text = value
|
||||||
|
|
|
@ -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">2</beer><beer alcohol="0.3" name="Harvest Pumpkin Ale">5</beer></beers>
|
||||||
|
<rating subjective="true">10</rating>
|
||||||
|
<website>
|
||||||
|
<mobilefriendly/>
|
||||||
|
<address>http://tastybeverageco.com</address>
|
||||||
|
</website>
|
||||||
|
</business>
|
|
@ -0,0 +1,3 @@
|
||||||
|
GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
SPDX-FileCopyrightText: Ansible Project
|
|
@ -62,6 +62,7 @@
|
||||||
- include_tasks: test-set-attribute-value.yml
|
- include_tasks: test-set-attribute-value.yml
|
||||||
- include_tasks: test-set-children-elements.yml
|
- include_tasks: test-set-children-elements.yml
|
||||||
- include_tasks: test-set-children-elements-level.yml
|
- include_tasks: test-set-children-elements-level.yml
|
||||||
|
- include_tasks: test-set-children-elements-value.yml
|
||||||
- include_tasks: test-set-element-value.yml
|
- include_tasks: test-set-element-value.yml
|
||||||
- include_tasks: test-set-element-value-empty.yml
|
- include_tasks: test-set-element-value-empty.yml
|
||||||
- include_tasks: test-pretty-print.yml
|
- include_tasks: test-pretty-print.yml
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
---
|
||||||
|
# Copyright (c) Ansible Project
|
||||||
|
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
- name: Setup test fixture
|
||||||
|
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: &children
|
||||||
|
- beer:
|
||||||
|
alcohol: "0.5"
|
||||||
|
name: 90 Minute IPA
|
||||||
|
+value: "2"
|
||||||
|
- beer:
|
||||||
|
alcohol: "0.3"
|
||||||
|
name: Harvest Pumpkin Ale
|
||||||
|
+value: "5"
|
||||||
|
register: set_children_elements_value
|
||||||
|
|
||||||
|
- name: Add trailing newline
|
||||||
|
shell: echo "" >> /tmp/ansible-xml-beers.xml
|
||||||
|
|
||||||
|
- name: Compare to expected result
|
||||||
|
copy:
|
||||||
|
src: results/test-set-children-elements-value.xml
|
||||||
|
dest: /tmp/ansible-xml-beers.xml
|
||||||
|
check_mode: true
|
||||||
|
diff: true
|
||||||
|
register: comparison
|
||||||
|
|
||||||
|
- name: Test expected result
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- set_children_elements_value is changed
|
||||||
|
- comparison is not changed # identical
|
||||||
|
|
||||||
|
|
||||||
|
- name: Set child elements (again)
|
||||||
|
xml:
|
||||||
|
path: /tmp/ansible-xml-beers.xml
|
||||||
|
xpath: /business/beers
|
||||||
|
set_children: *children
|
||||||
|
register: set_children_again
|
||||||
|
|
||||||
|
- name: Compare to expected result
|
||||||
|
copy:
|
||||||
|
src: results/test-set-children-elements-value.xml
|
||||||
|
dest: /tmp/ansible-xml-beers.xml
|
||||||
|
check_mode: true
|
||||||
|
diff: true
|
||||||
|
register: comparison
|
||||||
|
|
||||||
|
- name: Test expected result
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- set_children_again is not changed
|
||||||
|
- comparison is not changed # identical
|
Loading…
Add table
Add a link
Reference in a new issue