X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_mon%2Fplugins%2FOpenStack%2Fcommon.py;h=e5a70f981ce2f04844e5a1a4e32f86b0b6396fbe;hb=5154baa6fd0a33b46ef5fedb0e954c96f82fae03;hp=8c9094c39a2c8b0baac5ea642660114c9b26fa8b;hpb=effeb7c52a650308e47ef3eb0ded8315f21f9cba;p=osm%2FMON.git diff --git a/osm_mon/plugins/OpenStack/common.py b/osm_mon/plugins/OpenStack/common.py index 8c9094c..e5a70f9 100644 --- a/osm_mon/plugins/OpenStack/common.py +++ b/osm_mon/plugins/OpenStack/common.py @@ -21,14 +21,13 @@ ## """Common methods for the OpenStack plugins.""" import json - import logging +import requests +import yaml from keystoneclient.v3 import client -from osm_mon.plugins.OpenStack.settings import Config - -import requests +from osm_mon.core.auth import AuthManager __author__ = "Helena McGough" @@ -40,73 +39,48 @@ class Common(object): def __init__(self): """Create the common instance.""" - self._auth_token = None - self._ks = None - self.openstack_url = None - self.user = None - self.password = None - self.tenant = None - - def _authenticate(self, message=None): - """Authenticate and/or renew the authentication token.""" - if self._auth_token is not None: - return self._auth_token - - if message is not None: - values = json.loads(message.value)['access_config'] - self.openstack_url = values['openstack_site'] - self.user = values['user'] - self.password = values['password'] - self.tenant = values['vim_tenant_name'] - - try: - # try to authenticate with supplied access_credentials - self._ks = client.Client(auth_url=self.openstack_url, - username=self.user, - password=self.password, - tenant_name=self.tenant) - self._auth_token = self._ks.auth_token - log.info("Authenticating with access_credentials from SO.") - return self._auth_token - except Exception as exc: - log.warn("Authentication failed with access_credentials: %s", - exc) - - else: - log.info("Access_credentials were not sent from SO.") - - # If there are no access_credentials or they fail use env variables - try: - cfg = Config.instance() - self._ks = client.Client(auth_url=cfg.OS_AUTH_URL, - username=cfg.OS_USERNAME, - password=cfg.OS_PASSWORD, - tenant_name=cfg.OS_TENANT_NAME) - log.info("Authenticating with environment varialbles.") - self._auth_token = self._ks.auth_token - except Exception as exc: - - log.warn("Authentication failed: %s", exc) - - self._auth_token = None + self.auth_manager = AuthManager() - return self._auth_token - - def get_endpoint(self, service_type): + @staticmethod + def get_auth_token(vim_uuid): + """Authenticate and/or renew the authentication token.""" + auth_manager = AuthManager() + creds = auth_manager.get_credentials(vim_uuid) + ks = client.Client(auth_url=creds.url, + username=creds.user, + password=creds.password, + tenant_name=creds.tenant_name) + return ks.auth_token + + @staticmethod + def get_endpoint(service_type, vim_uuid): """Get the endpoint for Gnocchi/Aodh.""" - try: - return self._ks.service_catalog.url_for( - service_type=service_type, - endpoint_type='internalURL', - region_name='RegionOne') - except Exception as exc: - log.warning("Failed to retreive endpoint for service due to: %s", - exc) - return None - - @classmethod - def _perform_request(cls, url, auth_token, - req_type=None, payload=None, params=None): + auth_manager = AuthManager() + creds = auth_manager.get_credentials(vim_uuid) + ks = client.Client(auth_url=creds.url, + username=creds.user, + password=creds.password, + tenant_name=creds.tenant_name) + endpoint_type = 'publicURL' + region_name = 'RegionOne' + if creds.config is not None: + try: + config = json.loads(creds.config) + except ValueError: + config = yaml.safe_load(creds.config) + if 'endpoint_type' in config: + endpoint_type = config['endpoint_type'] + if 'region_name' in config: + region_name = config['region_name'] + + return ks.service_catalog.url_for( + service_type=service_type, + endpoint_type=endpoint_type, + region_name=region_name) + + @staticmethod + def perform_request(url, auth_token, + req_type=None, payload=None, params=None): """Perform the POST/PUT/GET/DELETE request.""" # request headers headers = {'X-Auth-Token': auth_token, @@ -115,17 +89,17 @@ class Common(object): if req_type == "put": response = requests.put( url, data=payload, headers=headers, - timeout=1) + timeout=10) elif req_type == "get": response = requests.get( - url, params=params, headers=headers, timeout=1) + url, params=params, headers=headers, timeout=10) elif req_type == "delete": response = requests.delete( - url, headers=headers, timeout=1) + url, headers=headers, timeout=10) else: response = requests.post( url, data=payload, headers=headers, - timeout=1) + timeout=10) # Raises exception if there was an error try: