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