Add from_yaml_all to support multi document yaml strings (#43037)
* Support multi-doc yaml in the from_yaml filter * Most automatic method of handling multidoc * Only use safe_load_all * Implement separate filter * Update plugin docs and changelog
This commit is contained in:
parent
19dc267e4c
commit
d27de6acd9
3 changed files with 28 additions and 0 deletions
5
changelogs/fragments/from_yaml_all_filter_plugin.yaml
Normal file
5
changelogs/fragments/from_yaml_all_filter_plugin.yaml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
minor_changes:
|
||||||
|
- Added the from_yaml_all filter to parse multi-document yaml strings.
|
||||||
|
Refer to the appropriate entry which as been added to user_guide
|
||||||
|
playbooks_filters.rst document.
|
|
@ -47,6 +47,22 @@ for example::
|
||||||
- set_fact:
|
- set_fact:
|
||||||
myvar: "{{ result.stdout | from_json }}"
|
myvar: "{{ result.stdout | from_json }}"
|
||||||
|
|
||||||
|
|
||||||
|
.. versionadded:: 2.7
|
||||||
|
|
||||||
|
To parse multi-document yaml strings, the ``from_yaml_all`` filter is provided.
|
||||||
|
The ``from_yaml_all`` filter will return a generator of parsed yaml documents.
|
||||||
|
|
||||||
|
for example::
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- shell: cat /some/path/to/multidoc-file.yaml
|
||||||
|
register: result
|
||||||
|
- debug:
|
||||||
|
msg: '{{ item }}'
|
||||||
|
loop: '{{ result.stdout | from_yaml_all | list }}'
|
||||||
|
|
||||||
|
|
||||||
.. _forcing_variables_to_be_defined:
|
.. _forcing_variables_to_be_defined:
|
||||||
|
|
||||||
Forcing Variables To Be Defined
|
Forcing Variables To Be Defined
|
||||||
|
|
|
@ -210,6 +210,12 @@ def from_yaml(data):
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
def from_yaml_all(data):
|
||||||
|
if isinstance(data, string_types):
|
||||||
|
return yaml.safe_load_all(data)
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
@environmentfilter
|
@environmentfilter
|
||||||
def rand(environment, end, start=None, step=None, seed=None):
|
def rand(environment, end, start=None, step=None, seed=None):
|
||||||
if seed is None:
|
if seed is None:
|
||||||
|
@ -600,6 +606,7 @@ class FilterModule(object):
|
||||||
'to_yaml': to_yaml,
|
'to_yaml': to_yaml,
|
||||||
'to_nice_yaml': to_nice_yaml,
|
'to_nice_yaml': to_nice_yaml,
|
||||||
'from_yaml': from_yaml,
|
'from_yaml': from_yaml,
|
||||||
|
'from_yaml_all': from_yaml_all,
|
||||||
|
|
||||||
# path
|
# path
|
||||||
'basename': partial(unicode_wrap, os.path.basename),
|
'basename': partial(unicode_wrap, os.path.basename),
|
||||||
|
|
Loading…
Reference in a new issue