summaryrefslogtreecommitdiffstats
path: root/test/integration/targets/inventory_cache/plugins/inventory/cache_host.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/integration/targets/inventory_cache/plugins/inventory/cache_host.py')
-rw-r--r--test/integration/targets/inventory_cache/plugins/inventory/cache_host.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/test/integration/targets/inventory_cache/plugins/inventory/cache_host.py b/test/integration/targets/inventory_cache/plugins/inventory/cache_host.py
new file mode 100644
index 0000000..628aba1
--- /dev/null
+++ b/test/integration/targets/inventory_cache/plugins/inventory/cache_host.py
@@ -0,0 +1,56 @@
+# Copyright (c) 2021 Ansible Project
+# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
+
+from __future__ import (absolute_import, division, print_function)
+__metaclass__ = type
+
+DOCUMENTATION = '''
+ inventory: cache_host
+ short_description: add a host to inventory and cache it
+ description: add a host to inventory and cache it
+ extends_documentation_fragment:
+ - inventory_cache
+ options:
+ plugin:
+ required: true
+ description: name of the plugin (cache_host)
+'''
+
+from ansible.plugins.inventory import BaseInventoryPlugin, Cacheable
+import random
+
+
+class InventoryModule(BaseInventoryPlugin, Cacheable):
+
+ NAME = 'cache_host'
+
+ def verify_file(self, path):
+ if not path.endswith(('cache_host.yml', 'cache_host.yaml',)):
+ return False
+ return super(InventoryModule, self).verify_file(path)
+
+ def parse(self, inventory, loader, path, cache=None):
+ super(InventoryModule, self).parse(inventory, loader, path)
+ self._read_config_data(path)
+
+ cache_key = self.get_cache_key(path)
+ # user has enabled cache and the cache is not being flushed
+ read_cache = self.get_option('cache') and cache
+ # user has enabled cache and the cache is being flushed
+ update_cache = self.get_option('cache') and not cache
+
+ host = None
+ if read_cache:
+ try:
+ host = self._cache[cache_key]
+ except KeyError:
+ # cache expired
+ update_cache = True
+
+ if host is None:
+ host = 'testhost{0}'.format(random.randint(0, 50))
+
+ self.inventory.add_host(host, 'all')
+
+ if update_cache:
+ self._cache[cache_key] = host