Mark playbook objects as finalized after post_validate

After post_validate() is called on an object, there should be no
need to continue looking up at parent attributes. This patch adds a
new flag (_finalized) which is set to True at the end of post_validate,
and getattr will not look beyond its own attributes from that point on.
pull/17019/head
James Cammarata 8 years ago
parent 375f7c515a
commit 7503875ed7

@ -65,6 +65,9 @@ class Base:
_ignore_errors = FieldAttribute(isa='bool')
_check_mode = FieldAttribute(isa='bool')
# other internal params
_finalized = False
# param names which have been deprecated/removed
DEPRECATED_ATTRIBUTES = [
'sudo', 'sudo_user', 'sudo_pass', 'sudo_exe', 'sudo_flags',
@ -118,7 +121,7 @@ class Base:
except AttributeError:
try:
value = self._attributes[prop_name]
if value is None:
if value is None and not self._finalized:
try:
if prop_name in self._cached_parent_attrs:
value = self._cached_parent_attrs[prop_name]
@ -421,6 +424,8 @@ class Base:
raise AnsibleParserError("the field '%s' has an invalid value, which appears to include a variable that is undefined."
" The error was: %s" % (name,e), obj=self.get_ds())
self._finalized = True
def serialize(self):
'''
Serializes the object derived from the base object into

Loading…
Cancel
Save