mirror of https://github.com/ansible/ansible.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.9 KiB
Python
60 lines
1.9 KiB
Python
# Copyright (c) 2019 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 = '''
|
|
name: test
|
|
plugin_type: inventory
|
|
short_description: test inventory source
|
|
extends_documentation_fragment:
|
|
- inventory_cache
|
|
'''
|
|
|
|
from ansible.plugins.inventory import BaseInventoryPlugin, Cacheable
|
|
|
|
|
|
class InventoryModule(BaseInventoryPlugin, Cacheable):
|
|
|
|
NAME = 'test'
|
|
|
|
def populate(self, hosts):
|
|
for host in list(hosts.keys()):
|
|
self.inventory.add_host(host, group='all')
|
|
for hostvar, hostval in hosts[host].items():
|
|
self.inventory.set_variable(host, hostvar, hostval)
|
|
|
|
def get_hosts(self):
|
|
return {'host1': {'one': 'two'}, 'host2': {'three': 'four'}}
|
|
|
|
def parse(self, inventory, loader, path, cache=True):
|
|
super(InventoryModule, self).parse(inventory, loader, path)
|
|
|
|
self.load_cache_plugin()
|
|
|
|
cache_key = self.get_cache_key(path)
|
|
|
|
# cache may be True or False at this point to indicate if the inventory is being refreshed
|
|
# get the user's cache option
|
|
cache_setting = self.get_option('cache')
|
|
|
|
attempt_to_read_cache = cache_setting and cache
|
|
cache_needs_update = cache_setting and not cache
|
|
|
|
# attempt to read the cache if inventory isn't being refreshed and the user has caching enabled
|
|
if attempt_to_read_cache:
|
|
try:
|
|
results = self._cache[cache_key]
|
|
except KeyError:
|
|
# This occurs if the cache_key is not in the cache or if the cache_key expired, so the cache needs to be updated
|
|
cache_needs_update = True
|
|
|
|
if cache_needs_update:
|
|
results = self.get_hosts()
|
|
|
|
# set the cache
|
|
self._cache[cache_key] = results
|
|
|
|
self.populate(results)
|