summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorPilou <pierre-louis@libregerbil.fr>2018-06-18 19:54:38 +0200
committerMatt Clay <matt@mystile.com>2018-06-21 15:16:55 -0700
commitd95cf17dd478aaf77f07f37b335dfd9592e10483 (patch)
tree38ab2d7af2405a88dba103f573a069c9392bbf63 /lib
parent8ad8db42e3f5099f3f8ff41b67f9565fb8910f0f (diff)
downloadansible-d95cf17dd478aaf77f07f37b335dfd9592e10483.tar.gz
Scaleway inventory plugin: small improvements (#41642)
* scaleway inventory: token is mandatory * scaleway inventory: mention exception in error * scaleway inventory: remove print statement * scaleway inventory: options don't need to be attr * scaleway inventory: remove unused attr (cherry picked from commit 3e6c76fc2e6157487a254d42feb17c9673dd4987)
Diffstat (limited to 'lib')
-rw-r--r--lib/ansible/plugins/inventory/scaleway.py42
1 files changed, 18 insertions, 24 deletions
diff --git a/lib/ansible/plugins/inventory/scaleway.py b/lib/ansible/plugins/inventory/scaleway.py
index b8f9cd1859..3c8c051bb1 100644
--- a/lib/ansible/plugins/inventory/scaleway.py
+++ b/lib/ansible/plugins/inventory/scaleway.py
@@ -24,6 +24,7 @@ DOCUMENTATION = '''
description: Filter results on a specific tag
type: list
oauth_token:
+ required: True
description: Scaleway OAuth token.
env:
# in order of precedence
@@ -51,6 +52,7 @@ from ansible.errors import AnsibleError
from ansible.plugins.inventory import BaseInventoryPlugin
from ansible.module_utils.scaleway import SCALEWAY_LOCATION
from ansible.module_utils.urls import open_url
+from ansible.module_utils._text import to_native
def _fetch_information(token, url):
@@ -58,8 +60,8 @@ def _fetch_information(token, url):
response = open_url(url,
headers={'X-Auth-Token': token,
'Content-type': 'application/json'})
- except Exception:
- raise AnsibleError("Error while fetching %s" % url)
+ except Exception as e:
+ raise AnsibleError("Error while fetching %s: %s" % (url, to_native(e)))
try:
raw_json = json.loads(response.read())
@@ -79,12 +81,6 @@ def _build_server_url(api_endpoint):
class InventoryModule(BaseInventoryPlugin):
NAME = 'scaleway'
- def __init__(self):
- super(InventoryModule, self).__init__()
-
- self.token = None
- self.config_data = None
-
def verify_file(self, path):
return "scaleway" in path
@@ -103,39 +99,34 @@ class InventoryModule(BaseInventoryPlugin):
self.inventory.set_variable(server_id, "tags", server_info["tags"])
self.inventory.set_variable(server_id, "ipv4", server_info["public_ip"]["address"])
- def _get_zones(self):
- config_zones = self.get_option("regions")
+ def _get_zones(self, config_zones):
return set(SCALEWAY_LOCATION.keys()).intersection(config_zones)
- def _get_tags(self):
- return self.get_option("tags")
-
- def match_groups(self, server_info):
+ def match_groups(self, server_info, tags):
server_zone = server_info["location"]["zone_id"]
server_tags = server_info["tags"]
# If no filtering is defined, all tags are valid groups
- if self._get_tags() is None:
+ if tags is None:
return set(server_tags).union((server_zone,))
- matching_tags = set(server_tags).intersection(self._get_tags())
+ matching_tags = set(server_tags).intersection(tags)
if not matching_tags:
return set()
else:
return matching_tags.union((server_zone,))
- def do_zone_inventory(self, zone):
+ def do_zone_inventory(self, zone, token, tags):
self.inventory.add_group(zone)
zone_info = SCALEWAY_LOCATION[zone]
url = _build_server_url(zone_info["api_endpoint"])
- all_servers = _fetch_information(url=url, token=self.token)
+ all_servers = _fetch_information(url=url, token=token)
for server_info in all_servers:
- groups = self.match_groups(server_info)
- print(groups)
+ groups = self.match_groups(server_info, tags)
server_id = server_info["id"]
for group in groups:
@@ -145,8 +136,11 @@ class InventoryModule(BaseInventoryPlugin):
def parse(self, inventory, loader, path, cache=True):
super(InventoryModule, self).parse(inventory, loader, path)
- self.config_data = self._read_config_data(path=path)
- self.token = self.get_option("oauth_token")
+ self._read_config_data(path=path)
+
+ config_zones = self.get_option("regions")
+ tags = self.get_option("tags")
+ token = self.get_option("oauth_token")
- for zone in self._get_zones():
- self.do_zone_inventory(zone=zone)
+ for zone in self._get_zones(config_zones):
+ self.do_zone_inventory(zone=zone, token=token, tags=tags)