Add new 'unsafe' YAML constructor
This commit is contained in:
parent
b2c0abe998
commit
8bc2d3be9c
1 changed files with 12 additions and 1 deletions
|
@ -22,6 +22,7 @@ __metaclass__ = type
|
|||
from yaml.constructor import Constructor, ConstructorError
|
||||
from yaml.nodes import MappingNode
|
||||
from ansible.parsing.yaml.objects import AnsibleMapping, AnsibleSequence, AnsibleUnicode
|
||||
from ansible.vars.unsafe_proxy import wrap_var
|
||||
|
||||
try:
|
||||
from __main__ import display
|
||||
|
@ -72,7 +73,7 @@ class AnsibleConstructor(Constructor):
|
|||
|
||||
return mapping
|
||||
|
||||
def construct_yaml_str(self, node):
|
||||
def construct_yaml_str(self, node, unsafe=False):
|
||||
# Override the default string handling function
|
||||
# to always return unicode objects
|
||||
value = self.construct_scalar(node)
|
||||
|
@ -80,6 +81,9 @@ class AnsibleConstructor(Constructor):
|
|||
|
||||
ret.ansible_pos = self._node_position_info(node)
|
||||
|
||||
if unsafe:
|
||||
ret = wrap_var(ret)
|
||||
|
||||
return ret
|
||||
|
||||
def construct_yaml_seq(self, node):
|
||||
|
@ -88,6 +92,9 @@ class AnsibleConstructor(Constructor):
|
|||
data.extend(self.construct_sequence(node))
|
||||
data.ansible_pos = self._node_position_info(node)
|
||||
|
||||
def construct_yaml_unsafe(self, node):
|
||||
return self.construct_yaml_str(node, unsafe=True)
|
||||
|
||||
def _node_position_info(self, node):
|
||||
# the line number where the previous token has ended (plus empty lines)
|
||||
# Add one so that the first line is line 1 rather than line 0
|
||||
|
@ -121,3 +128,7 @@ AnsibleConstructor.add_constructor(
|
|||
AnsibleConstructor.add_constructor(
|
||||
u'tag:yaml.org,2002:seq',
|
||||
AnsibleConstructor.construct_yaml_seq)
|
||||
|
||||
AnsibleConstructor.add_constructor(
|
||||
u'!unsafe',
|
||||
AnsibleConstructor.construct_yaml_unsafe)
|
||||
|
|
Loading…
Reference in a new issue