X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=plugins%2FOpenStack%2Fcommon.py;h=8769312d69dff6665347731deb720167467c4bb6;hb=refs%2Fchanges%2F01%2F5701%2F1;hp=d706456471c2977b0c09049a95e623b180fba15f;hpb=f6064437ba352d7fee6b4a7a4e7cb2582ef5cd32;p=osm%2FMON.git diff --git a/plugins/OpenStack/common.py b/plugins/OpenStack/common.py index d706456..8769312 100644 --- a/plugins/OpenStack/common.py +++ b/plugins/OpenStack/common.py @@ -1,6 +1,28 @@ -"""Common methods for the Aodh Sender/Receiver.""" +# Copyright 2017 Intel Research and Development Ireland Limited +# ************************************************************* -import logging as log +# This file is part of OSM Monitoring module +# All Rights Reserved to Intel Corporation + +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +# For those usages not covered by the Apache License, Version 2.0 please +# contact: helena.mcgough@intel.com or adrian.hoban@intel.com +## +"""Common methods for the OpenStack plugins.""" +import json + +import logging from keystoneclient.v3 import client @@ -8,8 +30,9 @@ from plugins.OpenStack.settings import Config import requests -# from keystoneauth1.identity.v3 import AuthMethod -# from keystoneclient.service_catalog import ServiceCatalog +__author__ = "Helena McGough" + +log = logging.getLogger(__name__) class Common(object): @@ -18,25 +41,53 @@ 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, tenant_id): + 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 with the following exception: %s", - exc) + log.warn("Authentication failed: %s", exc) + self._auth_token = None return self._auth_token @@ -49,7 +100,7 @@ class Common(object): endpoint_type='internalURL', region_name='RegionOne') except Exception as exc: - log.warning("Failed to retreive endpoint for Aodh due to: %s", + log.warning("Failed to retreive endpoint for service due to: %s", exc) return None @@ -61,26 +112,28 @@ class Common(object): headers = {'X-Auth-Token': auth_token, 'Content-type': 'application/json'} # perform request and return its result - response = None + 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 == "post": - response = requests.post( - 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: - log.warn("Invalid request type") - - except Exception as e: - log.warn("Exception thrown on request", e) - + 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