[FactCache] define first_order_merge method (#55781)

* Add first_order_merge method

Add test for updating a key that already exists

* changelog
This commit is contained in:
Sloane Hertel 2019-06-10 14:34:06 -04:00 committed by GitHub
parent 1e6edf2ccc
commit 598a058afe
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 0 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- fact_cache - Define the first_order_merge method for the legacy FactCache.update(key, value).

View file

@ -58,6 +58,19 @@ class FactCache(MutableMapping):
""" Flush the fact cache of all keys. """ """ Flush the fact cache of all keys. """
self._plugin.flush() self._plugin.flush()
def first_order_merge(self, key, value):
host_facts = {key: value}
try:
host_cache = self._plugin.get(key)
if host_cache:
host_cache.update(value)
host_facts[key] = host_cache
except KeyError:
pass
super(FactCache, self).update(host_facts)
def update(self, *args): def update(self, *args):
""" """
Backwards compat shim Backwards compat shim

View file

@ -117,6 +117,12 @@ class TestFactCache(unittest.TestCase):
"Unable to load the facts cache plugin.*json.*", "Unable to load the facts cache plugin.*json.*",
FactCache) FactCache)
def test_update_legacy_key_exists(self):
self.cache['cache_key'] = {'key': 'value', 'key2': 'value2'}
self.cache.update('cache_key', {'key': 'updatedvalue'})
assert self.cache['cache_key']['key'] == 'updatedvalue'
assert self.cache['cache_key']['key2'] == 'value2'
class TestAbstractClass(unittest.TestCase): class TestAbstractClass(unittest.TestCase):