Ansible Module xml: Difference between revisions
Line 102: | Line 102: | ||
===<tt>add_children</tt>=== | ===<tt>add_children</tt>=== | ||
Add additional child element(s) to the element that matched <code>[[#xpath|xpath]]</code>. The elements to be added must be given in a list. Each item may be either a string (example: <code>children=ansible</code> to add an empty <code><ansible/></code> child or a hash where the key is an element name and the value is the element value. <code>[[#xpath|xpath]]</code> must be set if <code>add_children</code> is used. | Add additional child element(s) to the element that matched <code>[[#xpath|xpath]]</code>. The elements to be added must be given in a list. Each item may be either a string (example: <code>children=ansible</code> to add an empty <code><ansible/></code> child or a hash where the key is an element name and the value is the element value. <code>[[#xpath|xpath]]</code> must be set if <code>add_children</code> is used. | ||
<syntaxhighlight lang='yaml'> | |||
- name: test | |||
xml: | |||
file: test.xml | |||
xpath: /box | |||
add_children: | |||
- object: rectangle | |||
- object: ellipse | |||
</syntaxhighlight> | |||
This will modify the file and add the following content: | |||
<syntaxhighlight lang='xml'> | |||
<box> | |||
... | |||
<object>rectangle</object><object>ellipse</object></box> | |||
</syntaxhighlight> | |||
===<tt>set_children</tt>=== | ===<tt>set_children</tt>=== | ||
Revision as of 21:52, 4 July 2021
External
Internal
Overview
The plugin is named community.general.xml
and it offers functionality aimed at interacting with XML files, using XPath.
Example
<box>
<object name="A" color="red">square</child>
<object name="B" color="green">circle</child>
<object name="C" color="blue">triangle</child>
</box>
- name: XML manipulation
xml:
path: /tmp/test.xml # the file must exist
xpath: /box/object[@name='B']
Module Parameters
path (dest, file)
The path to the file to operate on. The file must exists, otherwise the module will fail, with a message similar to:
The target XML source '...' does not exist.
.
The parameter is required unless xmlstring
is provided.
- name: test
xml:
path: /tmp/test.xml # the file must exist
...
xpath
A valid XPath expression describing the file item(s) to manipulate. Operates on the document root, /, by default.
- name: test
xml:
...
xpath: /box/object[@name='B']
...
content
Specifies the kind of content we want to get from the matching XPath expression:
xpath
must be set.
attribute
The matches
result key contains a JSON document listing the matching elements and the value of all their attributes. The count
result key contains the number of matching elements.
- name: test
xml:
path: test.xml
xpath: /box/object[@name='B']
content: attribute
register: xpath_result
produces the following xpath_result.matches
:
[
{
"object": {
"color": "green",
"name": "B"
}
}
]
text
The matches
result key contains a JSON document listing the matching elements name and its element text. The count
result key contains the number of matching elements.
- name: test
xml:
path: test.xml
xpath: /box/object[@name='B']
content: text
register: xpath_result
produces the following xpath_result.matches
:
[
{
"object": "circle"
}
]
value
Configuration element useful when updating or deleting XML content. value
represents the desired state of the selected attribute. It could be either a string, or to unset a value, the Python None keyword (YAML Equivalent, null).
Elements default to no value (but present). Attributes default to an empty string.
attribute
The attribute to select when using parameter value
. This is a string, not prepended with @.
xmlstring
A string containing in-line XML content on which to operate. This parameter is required, unless path
is given.
Children Manipulation
Children can be added with add_children
or updated with set_children
:
add_children
Add additional child element(s) to the element that matched xpath
. The elements to be added must be given in a list. Each item may be either a string (example: children=ansible
to add an empty <ansible/>
child or a hash where the key is an element name and the value is the element value. xpath
must be set if add_children
is used.
- name: test
xml:
file: test.xml
xpath: /box
add_children:
- object: rectangle
- object: ellipse
This will modify the file and add the following content:
<box>
...
<object>rectangle</object><object>ellipse</object></box>
set_children
Use Cases
Query
Insertion
Update
Deletion
- name: Bump Java build heap size to {{build.jvm.heap_max}} MB
xml:
path: "{{ansible_env.PROJECT_ROOT}}/.idea/compiler.xml"
xpath: /project/component[@name='CompilerConfiguration']/option[@name='BUILD_PROCESS_HEAP_SIZE']
attribute: "value"
value: "{{build.jvm.heap_max}}"
- name: Set Eclipse as default compiler
xml:
path: "{{idea_path}}/.idea/compiler.xml"
xpath: /project/component[@name='CompilerConfiguration']/option[@name='DEFAULT_COMPILER']
attribute: "value"
value: "Eclipse"