From 7503875ed7156c29d233a2a573ce53dc67b3c035 Mon Sep 17 00:00:00 2001 From: James Cammarata Date: Tue, 9 Aug 2016 07:47:29 -0500 Subject: [PATCH] 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. --- lib/ansible/playbook/base.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/lib/ansible/playbook/base.py b/lib/ansible/playbook/base.py index c18dcb2aed3..ca6ad67c17f 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