Vultr: Introduce the Vultr inventory plugin (#44400)

This commit introduce the Vultr inventory plugin.
This commit is contained in:
Yanis Guenane 2018-08-23 23:14:26 +02:00 committed by René Moser
commit 72d4880b85
2 changed files with 165 additions and 12 deletions

View file

@ -14,6 +14,7 @@ from ansible.module_utils.urls import fetch_url
VULTR_API_ENDPOINT = "https://api.vultr.com"
VULTR_USER_AGENT = 'Ansible Vultr'
def vultr_argument_spec():
@ -49,7 +50,7 @@ class Vultr:
try:
config = self.read_env_variables()
config.update(self.read_ini_config())
config.update(Vultr.read_ini_config(self.module.params.get('api_account')))
except KeyError:
config = {}
@ -79,7 +80,7 @@ class Vultr:
# Headers to be passed to the API
self.headers = {
'API-Key': "%s" % self.api_config['api_key'],
'User-Agent': "Ansible Vultr",
'User-Agent': VULTR_USER_AGENT,
'Accept': 'application/json',
}
@ -93,9 +94,8 @@ class Vultr:
return env_conf
def read_ini_config(self):
ini_group = self.module.params.get('api_account')
@staticmethod
def read_ini_config(ini_group):
paths = (
os.path.join(os.path.expanduser('~'), '.vultr.ini'),
os.path.join(os.getcwd(), 'vultr.ini'),
@ -236,12 +236,14 @@ class Vultr:
self.module.fail_json(msg="Could not find %s with %s: %s" % (resource, key, value))
def normalize_result(self, resource):
fields_to_remove = set(resource.keys()) - set(self.returns.keys())
for field in fields_to_remove:
resource.pop(field)
@staticmethod
def normalize_result(resource, schema, remove_missing_keys=True):
if remove_missing_keys:
fields_to_remove = set(resource.keys()) - set(schema.keys())
for field in fields_to_remove:
resource.pop(field)
for search_key, config in self.returns.items():
for search_key, config in schema.items():
if search_key in resource:
if 'convert_to' in config:
if config['convert_to'] == 'int':
@ -263,9 +265,9 @@ class Vultr:
def get_result(self, resource):
if resource:
if isinstance(resource, list):
self.result[self.namespace] = [self.normalize_result(item) for item in resource]
self.result[self.namespace] = [Vultr.normalize_result(item, self.returns) for item in resource]
else:
self.result[self.namespace] = self.normalize_result(resource)
self.result[self.namespace] = Vultr.normalize_result(resource, self.returns)
return self.result