avoid caching invetnory sources in loader (#38242)
* fix inventory plugin source caching - avoid caching invetnory sources in loader in base - same fix for yaml plugin - idem for 'auto' plugin fixes #37162 * fix mock dataloader func sig
This commit is contained in:
parent
399cba1c84
commit
886c4edfb9
5 changed files with 7 additions and 6 deletions
|
@ -172,7 +172,9 @@ class BaseInventoryPlugin(AnsiblePlugin):
|
||||||
|
|
||||||
config = {}
|
config = {}
|
||||||
try:
|
try:
|
||||||
config = self.loader.load_from_file(path)
|
# avoid loader cache so meta: refresh_inventory can pick up config changes
|
||||||
|
# if we read more than once, fs cache should be good enough
|
||||||
|
config = self.loader.load_from_file(path, cache=False)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise AnsibleParserError(to_native(e))
|
raise AnsibleParserError(to_native(e))
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ class InventoryModule(BaseInventoryPlugin):
|
||||||
return super(InventoryModule, self).verify_file(path)
|
return super(InventoryModule, self).verify_file(path)
|
||||||
|
|
||||||
def parse(self, inventory, loader, path, cache=True):
|
def parse(self, inventory, loader, path, cache=True):
|
||||||
config_data = loader.load_from_file(path)
|
config_data = loader.load_from_file(path, cache=False)
|
||||||
|
|
||||||
plugin_name = config_data.get('plugin')
|
plugin_name = config_data.get('plugin')
|
||||||
|
|
||||||
|
|
|
@ -104,8 +104,7 @@ class InventoryModule(BaseFileInventoryPlugin):
|
||||||
self._filename = path
|
self._filename = path
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Read in the hosts, groups, and variables defined in the
|
# Read in the hosts, groups, and variables defined in the inventory file.
|
||||||
# inventory file.
|
|
||||||
if self.loader:
|
if self.loader:
|
||||||
(b_data, private) = self.loader._get_file_contents(path)
|
(b_data, private) = self.loader._get_file_contents(path)
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -91,7 +91,7 @@ class InventoryModule(BaseFileInventoryPlugin):
|
||||||
super(InventoryModule, self).parse(inventory, loader, path)
|
super(InventoryModule, self).parse(inventory, loader, path)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
data = self.loader.load_from_file(path)
|
data = self.loader.load_from_file(path, cache=False)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise AnsibleParserError(e)
|
raise AnsibleParserError(e)
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ class DictDataLoader(DataLoader):
|
||||||
self._build_known_directories()
|
self._build_known_directories()
|
||||||
self._vault_secrets = None
|
self._vault_secrets = None
|
||||||
|
|
||||||
def load_from_file(self, path, unsafe=False):
|
def load_from_file(self, path, cache=True, unsafe=False):
|
||||||
path = to_text(path)
|
path = to_text(path)
|
||||||
if path in self._file_mapping:
|
if path in self._file_mapping:
|
||||||
return self.load(self._file_mapping[path], path)
|
return self.load(self._file_mapping[path], path)
|
||||||
|
|
Loading…
Reference in a new issue