mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-05-14 13:09:11 -07:00
inventory/vultr: Few minor improvements (#44622)
This commit is contained in:
parent
34c582287a
commit
9869f378fd
1 changed files with 12 additions and 15 deletions
|
@ -31,7 +31,7 @@ DOCUMENTATION = r'''
|
||||||
env:
|
env:
|
||||||
- name: VULTR_API_KEY
|
- name: VULTR_API_KEY
|
||||||
hostname:
|
hostname:
|
||||||
description: Field to match the hostname
|
description: Field to match the hostname. Note v4_main_ip corresponds to the main_ip field returned from the API and name to label.
|
||||||
type: string
|
type: string
|
||||||
default: v4_main_ip
|
default: v4_main_ip
|
||||||
choices:
|
choices:
|
||||||
|
@ -54,7 +54,7 @@ from ansible.plugins.inventory import BaseInventoryPlugin
|
||||||
from ansible.module_utils.six.moves import configparser
|
from ansible.module_utils.six.moves import configparser
|
||||||
from ansible.module_utils.urls import open_url
|
from ansible.module_utils.urls import open_url
|
||||||
from ansible.module_utils._text import to_native
|
from ansible.module_utils._text import to_native
|
||||||
from ansible.module_utils.vultr import Vultr, VULTR_USER_AGENT
|
from ansible.module_utils.vultr import Vultr, VULTR_API_ENDPOINT, VULTR_USER_AGENT
|
||||||
|
|
||||||
|
|
||||||
SCHEMA = {
|
SCHEMA = {
|
||||||
|
@ -105,7 +105,7 @@ def _load_conf(path, account):
|
||||||
|
|
||||||
|
|
||||||
def _retrieve_servers(api_key):
|
def _retrieve_servers(api_key):
|
||||||
api_url = 'https://api.vultr.com/v1/server/list'
|
api_url = '%s/v1/server/list' % VULTR_API_ENDPOINT
|
||||||
|
|
||||||
try:
|
try:
|
||||||
response = open_url(
|
response = open_url(
|
||||||
|
@ -113,11 +113,9 @@ def _retrieve_servers(api_key):
|
||||||
http_agent=VULTR_USER_AGENT,
|
http_agent=VULTR_USER_AGENT,
|
||||||
)
|
)
|
||||||
servers_list = json.loads(response.read())
|
servers_list = json.loads(response.read())
|
||||||
if not servers_list:
|
|
||||||
return []
|
|
||||||
|
|
||||||
return [server for id, server in servers_list.items()]
|
return servers_list.values() if servers_list else []
|
||||||
except ValueError as e:
|
except ValueError:
|
||||||
raise AnsibleError("Incorrect JSON payload")
|
raise AnsibleError("Incorrect JSON payload")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise AnsibleError("Error while fetching %s: %s" % (api_url, to_native(e)))
|
raise AnsibleError("Error while fetching %s: %s" % (api_url, to_native(e)))
|
||||||
|
@ -130,16 +128,13 @@ class InventoryModule(BaseInventoryPlugin):
|
||||||
super(InventoryModule, self).parse(inventory, loader, path)
|
super(InventoryModule, self).parse(inventory, loader, path)
|
||||||
self._read_config_data(path=path)
|
self._read_config_data(path=path)
|
||||||
|
|
||||||
api_account = self.get_option('api_account') or 'default'
|
conf = _load_conf(self.get_option('api_config'), self.get_option('api_account'))
|
||||||
conf = _load_conf(self.get_option('api_config'), api_account)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
api_key = self.get_option('api_key') or conf.get('key')
|
api_key = self.get_option('api_key') or conf.get('key')
|
||||||
except Exception as e:
|
except Exception:
|
||||||
raise AnsibleError('Could not find an API key. Check the configuration files.')
|
raise AnsibleError('Could not find an API key. Check inventory file and Vultr configuration files.')
|
||||||
|
|
||||||
hostname_preference = self.get_option('hostname') or 'v4_main_ip'
|
|
||||||
|
|
||||||
|
hostname_preference = self.get_option('hostname')
|
||||||
for server in _retrieve_servers(api_key):
|
for server in _retrieve_servers(api_key):
|
||||||
server = Vultr.normalize_result(server, SCHEMA)
|
server = Vultr.normalize_result(server, SCHEMA)
|
||||||
for group in ['region', 'os']:
|
for group in ['region', 'os']:
|
||||||
|
@ -148,4 +143,6 @@ class InventoryModule(BaseInventoryPlugin):
|
||||||
|
|
||||||
for attribute, value in server.items():
|
for attribute, value in server.items():
|
||||||
self.inventory.set_variable(server['name'], attribute, value)
|
self.inventory.set_variable(server['name'], attribute, value)
|
||||||
self.inventory.set_variable(server['name'], 'ansible_host', server[hostname_preference])
|
|
||||||
|
if hostname_preference != 'name':
|
||||||
|
self.inventory.set_variable(server['name'], 'ansible_host', server[hostname_preference])
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue