diff options
Diffstat (limited to 'lib/ansible/vars/manager.py')
-rw-r--r-- | lib/ansible/vars/manager.py | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/lib/ansible/vars/manager.py b/lib/ansible/vars/manager.py index 439f2d8beb..42f823beaa 100644 --- a/lib/ansible/vars/manager.py +++ b/lib/ansible/vars/manager.py @@ -622,7 +622,8 @@ class VariableManager: ''' Clears the facts for a host ''' - self._fact_cache.pop(hostname, None) + if hostname in self._fact_cache: + del self._fact_cache[hostname] def set_host_facts(self, host, facts): ''' @@ -632,16 +633,13 @@ class VariableManager: if not isinstance(facts, dict): raise AnsibleAssertionError("the type of 'facts' to set for host_facts should be a dict but is a %s" % type(facts)) - try: + if host.name not in self._fact_cache: + self._fact_cache[host.name] = facts + else: try: - # this is a cache plugin, not a dictionary - self._fact_cache.update({host.name: facts}) - except TypeError: - # this is here for backwards compatibilty for the time cache plugins were not 'dict compatible' self._fact_cache.update(host.name, facts) - display.deprecated("Your configured fact cache plugin is using a deprecated form of the 'update' method", version="2.12") - except KeyError: - self._fact_cache[host.name] = facts + except KeyError: + self._fact_cache[host.name] = facts def set_nonpersistent_facts(self, host, facts): ''' @@ -651,10 +649,13 @@ class VariableManager: if not isinstance(facts, dict): raise AnsibleAssertionError("the type of 'facts' to set for nonpersistent_facts should be a dict but is a %s" % type(facts)) - try: - self._nonpersistent_fact_cache[host.name].update(facts) - except KeyError: + if host.name not in self._nonpersistent_fact_cache: self._nonpersistent_fact_cache[host.name] = facts + else: + try: + self._nonpersistent_fact_cache[host.name].update(facts) + except KeyError: + self._nonpersistent_fact_cache[host.name] = facts def set_host_variable(self, host, varname, value): ''' |