X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=plugins%2FOpenStack%2Fcommon.py;fp=plugins%2FOpenStack%2Fcommon.py;h=d706456471c2977b0c09049a95e623b180fba15f;hb=9b85b8b3b14d885651c7365d9cab9e0a58050596;hp=0000000000000000000000000000000000000000;hpb=73542e2465fb9233c1ff034927f34b365033bdcb;p=osm%2FMON.git diff --git a/plugins/OpenStack/common.py b/plugins/OpenStack/common.py new file mode 100644 index 0000000..d706456 --- /dev/null +++ b/plugins/OpenStack/common.py @@ -0,0 +1,86 @@ +"""Common methods for the Aodh Sender/Receiver.""" + +import logging as log + +from keystoneclient.v3 import client + +from plugins.OpenStack.settings import Config + +import requests + +# from keystoneauth1.identity.v3 import AuthMethod +# from keystoneclient.service_catalog import ServiceCatalog + + +class Common(object): + """Common calls for Gnocchi/Aodh plugins.""" + + def __init__(self): + """Create the common instance.""" + self._auth_token = None + self._endpoint = None + self._ks = None + + def _authenticate(self, tenant_id): + """Authenticate and/or renew the authentication token.""" + if self._auth_token is not None: + return self._auth_token + + 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) + self._auth_token = self._ks.auth_token + except Exception as exc: + + log.warn("Authentication failed with the following exception: %s", + exc) + self._auth_token = None + + return self._auth_token + + def get_endpoint(self, service_type): + """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 Aodh due to: %s", + exc) + return None + + @classmethod + def _perform_request(cls, 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, + 'Content-type': 'application/json'} + # perform request and return its result + response = None + 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) + + return response