X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=plugins%2FOpenStack%2Fcommon.py;h=8769312d69dff6665347731deb720167467c4bb6;hb=fe92f84dab8052613b18fbc40dfb12d8bc8721e0;hp=c892a302e73575ba82d27b81dd9bf1c7e191f304;hpb=375f07c018e209ae54391d4d0cb4898d4bdb79b4;p=osm%2FMON.git diff --git a/plugins/OpenStack/common.py b/plugins/OpenStack/common.py index c892a30..8769312 100644 --- a/plugins/OpenStack/common.py +++ b/plugins/OpenStack/common.py @@ -20,9 +20,9 @@ # contact: helena.mcgough@intel.com or adrian.hoban@intel.com ## """Common methods for the OpenStack plugins.""" +import json import logging -log = logging.getLogger(__name__) from keystoneclient.v3 import client @@ -32,6 +32,8 @@ import requests __author__ = "Helena McGough" +log = logging.getLogger(__name__) + class Common(object): """Common calls for Gnocchi/Aodh plugins.""" @@ -39,20 +41,48 @@ class Common(object): def __init__(self): """Create the common instance.""" self._auth_token = None - self._endpoint = None self._ks = None + self.openstack_url = None + self.user = None + self.password = None + self.tenant = None - def _authenticate(self): + 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: @@ -82,26 +112,28 @@ class Common(object): headers = {'X-Auth-Token': auth_token, 'Content-type': 'application/json'} # perform request and return its result + if req_type == "put": + response = requests.put( + url, data=payload, headers=headers, + timeout=1) + elif req_type == "get": + response = requests.get( + url, params=params, headers=headers, timeout=1) + elif req_type == "delete": + response = requests.delete( + url, headers=headers, timeout=1) + else: + response = requests.post( + url, data=payload, headers=headers, + timeout=1) + + # Raises exception if there was an error try: - if req_type == "put": - response = requests.put( - url, data=payload, headers=headers, - timeout=1) - elif req_type == "get": - response = requests.get( - url, params=params, headers=headers, timeout=1) - elif req_type == "delete": - response = requests.delete( - url, headers=headers, timeout=1) - else: - response = requests.post( - url, data=payload, headers=headers, - timeout=1) - - except Exception as e: - log.warn("Exception thrown on request", e) - if response is not None: - log.warn("Request resulted in %s code and %s response", - response.status_code, response.text) - + response.raise_for_status() + # pylint: disable=broad-except + except Exception: + # Log out the result of the request for debugging purpose + log.debug( + 'Result: %s, %d', + response.status_code, response.text) return response