summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Cammarata <jimi@sngx.net>2016-08-09 07:47:29 -0500
committerJames Cammarata <jimi@sngx.net>2016-08-09 08:57:21 -0500
commit7503875ed7156c29d233a2a573ce53dc67b3c035 (patch)
tree4a0f43f2463bccba999fe822c9096c8ccc830d7f
parent375f7c515a399eeaf9551f79b89bb1978fe8662a (diff)
downloadansible-7503875ed7156c29d233a2a573ce53dc67b3c035.tar.gz
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.
-rw-r--r--lib/ansible/playbook/base.py15
1 files changed, 10 insertions, 5 deletions
diff --git a/lib/ansible/playbook/base.py b/lib/ansible/playbook/base.py
index c18dcb2aed..ca6ad67c17 100644
--- a/lib/ansible/playbook/base.py
+++ b/lib/ansible/playbook/base.py
@@ -60,10 +60,13 @@ class Base:
# flags and misc. settings
_environment = FieldAttribute(isa='list')
_no_log = FieldAttribute(isa='bool')
- _always_run = FieldAttribute(isa='bool')
- _run_once = FieldAttribute(isa='bool')
- _ignore_errors = FieldAttribute(isa='bool')
- _check_mode = FieldAttribute(isa='bool')
+ _always_run = FieldAttribute(isa='bool')
+ _run_once = FieldAttribute(isa='bool')
+ _ignore_errors = FieldAttribute(isa='bool')
+ _check_mode = FieldAttribute(isa='bool')
+
+ # other internal params
+ _finalized = False
# param names which have been deprecated/removed
DEPRECATED_ATTRIBUTES = [
@@ -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