# replace the endpoint with MultiCloud's proxy
import re
endpoint_url = endpoint["url"]
-# m = re.search(r'^http[s]*://([0-9.]+:[0-9]+)[/]*([0-9a-zA-Z/._-]*)$', endpoint_url)
- m = re.search(r'^(http[s]?://[0-9.]+:[0-9]+)(/([0-9a-zA-Z/._-]+)$)?', endpoint_url)
+ real_prefix = None
+ real_suffix = None
+# m = re.search(r'^(http[s]?://[0-9.]+:[0-9]+)(/([0-9a-zA-Z/._-]+)$)?', endpoint_url)
+ m = re.search(r'^(http[s]?://[0-9.]+[0-9:]*)(/([0-9a-zA-Z/._-]+)$)?', endpoint_url)
if m:
real_prefix = m.group(1)
real_suffix = m.group(3)
-
+# else:
+# m = re.search(r'^(http[s]?://[0-9.]+)(/([0-9a-zA-Z/._-]+)$)?', endpoint_url)
+# if m:
+# real_prefix = m.group(1)
+# real_suffix = m.group(2)
+ if real_prefix:
# populate metadata_catalog
one_catalog['prefix'] = real_prefix
one_catalog['suffix'] = real_suffix if real_suffix else ''
# endpoint["url"] = re.sub(r"^http([s]*)://([0-9.]+):([0-9]+)",
# multicould_namespace + "/%s/" % vimid + item["type"],
# endpoint["url"])
+ else:
+ #something wrong
+ pass
endpoint["url"] = endpoint_url
def __init__(self):
self.proxy_prefix = MULTICLOUD_PREFIX
+ self._logger = logger
def post(self, request, vimid=""):
- logger.debug("identityV3--post::> %s" % request.data)
+ self._logger.debug("identityV3--post::> %s" % request.data)
sess = None
resp = None
resp_body = None
#update the catalog
tmp_auth_data['token']['catalog'], tmp_metadata_catalog = update_catalog(vimid, tmp_auth_data['token']['catalog'], self.proxy_prefix)
- VimDriverUtils.update_token_cache(vim, sess, tmp_auth_token, tmp_auth_state, json.dumps(tmp_metadata_catalog))
+ tmp_auth_token = VimDriverUtils.update_token_cache(vim, sess, tmp_auth_token, tmp_auth_state, json.dumps(tmp_metadata_catalog))
resp = Response(headers={'X-Subject-Token': tmp_auth_token}, data=tmp_auth_data, status=status.HTTP_201_CREATED)
return resp
return Response(data={'error': e.content}, status=e.status_code)
except HttpError as e:
- logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+ self._logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
return Response(data=e.response.json(), status=e.http_status)
except Exception as e:
- logger.error(traceback.format_exc())
+ self._logger.error(traceback.format_exc())
return Response(data={'error': str(e)},
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def __init__(self):
self.proxy_prefix = MULTICLOUD_PREFIX
+ self._logger = logger
def get(self, request, vimid=""):
- logger.debug("Catalog--get::data> %s" % request.data)
-# logger.debug("Catalog--get::META> %s" % request.META)
+ self._logger.debug("Catalog--get::data> %s" % request.data)
+# self._logger.debug("Catalog--get::META> %s" % request.META)
try:
# prepare request resource to vim instance
#get token:
except VimDriverNewtonException as e:
return Response(data={'error': e.content}, status=e.status_code)
except HttpError as e:
- logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+ self._logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
return Response(data=e.response.json(), status=e.http_status)
except Exception as e:
- logger.error(traceback.format_exc())
+ self._logger.error(traceback.format_exc())
return Response(data={'error': str(e)},
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
class Services(APIView):
+ def __init__(self):
+ self._logger = logger
+
def head(self, request, vimid="", servicetype="", requri=""):
- logger.debug("Services--head::META> %s" % request.META)
- logger.debug("Services--head::data> %s" % request.data)
- logger.debug("Services--head::vimid, servicetype, requri> %s,%s,%s"
+ self._logger.debug("Services--head::META> %s" % request.META)
+ self._logger.debug("Services--head::data> %s" % request.data)
+ self._logger.debug("Services--head::vimid, servicetype, requri> %s,%s,%s"
% (vimid, servicetype, requri))
try:
except VimDriverNewtonException as e:
return Response(data={'error': e.content}, status=e.status_code)
except HttpError as e:
- logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+ self._logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
return Response(data=e.response.json(), status=e.http_status)
except Exception as e:
- logger.error(traceback.format_exc())
+ self._logger.error(traceback.format_exc())
return Response(data={'error': str(e)},
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def get(self, request, vimid="", servicetype="", requri=""):
- logger.debug("Services--get::META> %s" % request.META)
- logger.debug("Services--get::data> %s" % request.data)
- logger.debug("Services--get::vimid, servicetype, requri> %s,%s,%s"
+ self._logger.debug("Services--get::META> %s" % request.META)
+ self._logger.debug("Services--get::data> %s" % request.data)
+ self._logger.debug("Services--get::vimid, servicetype, requri> %s,%s,%s"
% (vimid, servicetype, requri))
try:
# prepare request resource to vim instance
proxy_prefix = None
suffix = None
if servicetype and metadata_catalog:
-# logger.error("metadata_catalog:%s" % metadata_catalog)
+# self._logger.error("metadata_catalog:%s" % metadata_catalog)
metadata_catalog = json.loads(metadata_catalog)
service_metadata = metadata_catalog.get(servicetype, None)
if service_metadata:
except VimDriverNewtonException as e:
return Response(data={'error': e.content}, status=e.status_code)
except HttpError as e:
- logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+ self._logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
return Response(data=e.response.json(), status=e.http_status)
except Exception as e:
- logger.error(traceback.format_exc())
+ self._logger.error(traceback.format_exc())
return Response(data={'error': str(e)},
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def post(self, request, vimid="", servicetype="", requri=""):
- logger.debug("Services--post::META> %s" % request.META)
- logger.debug("Services--post::data> %s" % request.data)
- logger.debug("Services--post::vimid, servicetype, requri> %s,%s,%s"
+ self._logger.debug("Services--post::META> %s" % request.META)
+ self._logger.debug("Services--post::data> %s" % request.data)
+ self._logger.debug("Services--post::vimid, servicetype, requri> %s,%s,%s"
% (vimid, servicetype, requri))
try:
# prepare request resource to vim instance
proxy_prefix = None
suffix = None
if servicetype and metadata_catalog:
-# logger.error("metadata_catalog:%s" % metadata_catalog)
+# self._logger.error("metadata_catalog:%s" % metadata_catalog)
metadata_catalog = json.loads(metadata_catalog)
service_metadata = metadata_catalog.get(servicetype, None)
if service_metadata:
except VimDriverNewtonException as e:
return Response(data={'error': e.content}, status=e.status_code)
except HttpError as e:
- logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+ self._logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
return Response(data=e.response.json(), status=e.http_status)
except Exception as e:
- logger.error(traceback.format_exc())
+ self._logger.error(traceback.format_exc())
return Response(data={'error': str(e)},
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def put(self, request, vimid="", servicetype="", requri=""):
- logger.debug("Services--put::META> %s" % request.META)
- logger.debug("Services--put::data> %s" % request.data)
- logger.debug("Services--put::vimid, servicetype, requri> %s,%s,%s"
+ self._logger.debug("Services--put::META> %s" % request.META)
+ self._logger.debug("Services--put::data> %s" % request.data)
+ self._logger.debug("Services--put::vimid, servicetype, requri> %s,%s,%s"
% (vimid, servicetype, requri))
try:
# prepare request resource to vim instance
proxy_prefix = None
suffix = None
if servicetype and metadata_catalog:
-# logger.error("metadata_catalog:%s" % metadata_catalog)
+# self._logger.error("metadata_catalog:%s" % metadata_catalog)
metadata_catalog = json.loads(metadata_catalog)
service_metadata = metadata_catalog.get(servicetype, None)
if service_metadata:
except VimDriverNewtonException as e:
return Response(data={'error': e.content}, status=e.status_code)
except HttpError as e:
- logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+ self._logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
return Response(data=e.response.json(), status=e.http_status)
except Exception as e:
- logger.error(traceback.format_exc())
+ self._logger.error(traceback.format_exc())
return Response(data={'error': str(e)},
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def patch(self, request, vimid="", servicetype="", requri=""):
- logger.debug("Services--patch::META> %s" % request.META)
- logger.debug("Services--patch::data> %s" % request.data)
- logger.debug("Services--patch::vimid, servicetype, requri> %s,%s,%s"
+ self._logger.debug("Services--patch::META> %s" % request.META)
+ self._logger.debug("Services--patch::data> %s" % request.data)
+ self._logger.debug("Services--patch::vimid, servicetype, requri> %s,%s,%s"
% (vimid, servicetype, requri))
try:
# prepare request resource to vim instance
proxy_prefix = None
suffix = None
if servicetype and metadata_catalog:
-# logger.error("metadata_catalog:%s" % metadata_catalog)
+# self._logger.error("metadata_catalog:%s" % metadata_catalog)
metadata_catalog = json.loads(metadata_catalog)
service_metadata = metadata_catalog.get(servicetype, None)
if service_metadata:
except VimDriverNewtonException as e:
return Response(data={'error': e.content}, status=e.status_code)
except HttpError as e:
- logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+ self._logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
return Response(data=e.response.json(), status=e.http_status)
except Exception as e:
- logger.error(traceback.format_exc())
+ self._logger.error(traceback.format_exc())
return Response(data={'error': str(e)},
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def delete(self, request, vimid="", servicetype="", requri=""):
- logger.debug("Services--delete::META> %s" % request.META)
- logger.debug("Services--delete::data> %s" % request.data)
- logger.debug("Services--delete::vimid, servicetype, requri> %s,%s,%s"
+ self._logger.debug("Services--delete::META> %s" % request.META)
+ self._logger.debug("Services--delete::data> %s" % request.data)
+ self._logger.debug("Services--delete::vimid, servicetype, requri> %s,%s,%s"
% (vimid, servicetype, requri))
try:
# prepare request resource to vim instance
proxy_prefix = None
suffix = None
if servicetype and metadata_catalog:
-# logger.error("metadata_catalog:%s" % metadata_catalog)
+# self._logger.error("metadata_catalog:%s" % metadata_catalog)
metadata_catalog = json.loads(metadata_catalog)
service_metadata = metadata_catalog.get(servicetype, None)
if service_metadata:
except VimDriverNewtonException as e:
return Response(data={'error': e.content}, status=e.status_code)
except HttpError as e:
- logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+ self._logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
return Response(data=e.response.json(), status=e.http_status)
except Exception as e:
- logger.error(traceback.format_exc())
+ self._logger.error(traceback.format_exc())
return Response(data={'error': str(e)},
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
'''
Backward compatible API for /v2.0/tenants
'''
+
+ def __init__(self):
+ self._logger = logger
+
def get(self, request, vimid="", servicetype="identity", requri='projects'):
- logger.debug("GetTenants--get::META> %s" % request.META)
- logger.debug("GetTenants--get::data> %s" % request.data)
- logger.debug("GetTenants--get::vimid, servicetype, requri> %s,%s,%s"
+ self._logger.debug("GetTenants--get::META> %s" % request.META)
+ self._logger.debug("GetTenants--get::data> %s" % request.data)
+ self._logger.debug("GetTenants--get::vimid, servicetype, requri> %s,%s,%s"
% (vimid, servicetype, requri))
tmp_auth_token = request.META.get('HTTP_X_AUTH_TOKEN', None)
username=vim["userName"],
password=vim["password"],
project_id=tenantid)
+ elif '/identity' in vim["url"]:
+ auth = keystone_v3.Password(auth_url=vim["url"]+"/v3",
+ username=vim["userName"],
+ password=vim["password"],
+ project_id=tenantid)
elif tenant_name:
if '/v2' in vim["url"]:
auth = keystone_v2.Password(auth_url=vim["url"],
project_name=tenant_name,
user_domain_name=vim["domain"],
project_domain_name=vim["domain"])
+ elif '/identity' in vim["url"]:
+ auth = keystone_v3.Password(auth_url=vim["url"]+"/v3",
+ username=vim["userName"],
+ password=vim["password"],
+ project_name=tenant_name,
+ user_domain_name=vim["domain"],
+ project_domain_name=vim["domain"])
else:
#something wrong
@staticmethod
- def update_token_cache(vim, session, old_token, auth_state, metadata=None):
+ def update_token_cache(vim, session, token, auth_state, metadata=None):
'''
cache the auth_state as well as metadata_catalog
:param vim:
:param session:
- :param old_token:
+ :param token:
:param auth_state:
:param matadata:
:return:
'''
- metadata_key = "meta_%s" % old_token
+ if metadata == None: #do not update token any more
+ return token
- if not metadata:
- metadata = cache.get(metadata_key)
- if not metadata:
- #something wrong since metadata is neither inputted, nor cached previously. but ignore temporarily
- pass
-
- tmp_auth_token = session.get_token()
- #check if need to update token:auth_state mapping
- if tmp_auth_token != old_token:
- cache.delete(old_token)
- cache.delete(metadata_key)
- metadata_key = "meta_%s" % tmp_auth_token
+ metadata_key = "meta_%s" % token
- elif not cache.get(old_token):
+ if not cache.get(token):
# store the auth_state, memcached
# set expiring in 1 hour
- cache.set(tmp_auth_token, auth_state, 3600)
+ cache.set(token, auth_state, 3600)
cache.set(metadata_key, metadata, 3600)
- #return new token
- return tmp_auth_token
+ return token
+
@staticmethod
def replace_a_key(dict_obj, keypair, reverse=False):