diff options
author | James Cammarata <jimi@sngx.net> | 2016-08-09 07:47:29 -0500 |
---|---|---|
committer | James Cammarata <jimi@sngx.net> | 2016-08-09 08:57:21 -0500 |
commit | 7503875ed7156c29d233a2a573ce53dc67b3c035 (patch) | |
tree | 4a0f43f2463bccba999fe822c9096c8ccc830d7f | |
parent | 375f7c515a399eeaf9551f79b89bb1978fe8662a (diff) | |
download | ansible-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.py | 15 |
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 |