From b14e1359642e17daf769ca39fa01e644135191f0 Mon Sep 17 00:00:00 2001 From: Huang Haibin Date: Wed, 28 Feb 2018 03:44:35 +0800 Subject: Move extsys from newton to common Change-Id: I30ad2ed3a43bcb0ef569bb25d3e51a9ab49ea48a Issue-ID: MULTICLOUD-138 Signed-off-by: Huang Haibin --- share/common/msapi/__init__.py | 10 +++++ share/common/msapi/extsys.py | 98 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 share/common/msapi/__init__.py create mode 100644 share/common/msapi/extsys.py (limited to 'share/common') diff --git a/share/common/msapi/__init__.py b/share/common/msapi/__init__.py new file mode 100644 index 00000000..387c54c2 --- /dev/null +++ b/share/common/msapi/__init__.py @@ -0,0 +1,10 @@ +# Copyright (c) 2017-2018 Wind River Systems, Inc. +# +# 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. diff --git a/share/common/msapi/extsys.py b/share/common/msapi/extsys.py new file mode 100644 index 00000000..99824ef2 --- /dev/null +++ b/share/common/msapi/extsys.py @@ -0,0 +1,98 @@ +# Copyright (c) 2017-2018 Wind River Systems, Inc. +# +# 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. + +import json +import logging +import re + +from common.exceptions import VimDriverNewtonException +from common.utils import restcall + + +logger = logging.getLogger(__name__) + +def get_vim_by_id(vim_id): + + cloud_owner,cloud_region_id = decode_vim_id(vim_id) + + if cloud_owner and cloud_region_id: + retcode, content, status_code = \ + restcall.req_to_aai("/cloud-infrastructure/cloud-regions/cloud-region/%s/%s?depth=1" + % (cloud_owner,cloud_region_id),"GET") + if retcode != 0: + logger.error("Status code is %s, detail is %s.", status_code, content) + raise VimDriverNewtonException( + "Failed to query VIM with id (%s:%s,%s)." % (vim_id,cloud_owner,cloud_region_id), + status_code, content) + tmp_viminfo = json.JSONDecoder().decode(content) + + #assume esr-system-info-id is composed by {cloud-owner} _ {cloud-region-id} +# retcode2,content2,status_code2 = \ +# restcall.req_to_aai(("/cloud-infrastructure/cloud-regions/cloud-region/%(owner)s/%(region)s" +# "/esr-system-info-list/esr-system-info/%(owner)s_%(region)s" % { +# "owner": cloud_owner, "region": cloud_region_id}), "GET") +# if retcode2 != 0: +# logger.error("Status code is %s, detail is %s.", status_code, content) +# raise VimDriverNewtonException( +# "Failed to query ESR system with id (%s:%s,%s)." % (vim_id,cloud_owner,cloud_region_id), +# status_code2, content2) +# tmp_authinfo = json.JSONDecoder().decode(content2) + tmp_authinfo = tmp_viminfo['esr-system-info-list']['esr-system-info'][0] if tmp_viminfo else None + + #convert vim information + if tmp_viminfo and tmp_authinfo: + viminfo = {} + viminfo['vimId'] = vim_id + viminfo['resource-version'] = tmp_viminfo.get('resource-version') + viminfo['cloud_owner'] = cloud_owner + viminfo['cloud_region_id'] = cloud_region_id + viminfo['type'] = tmp_viminfo.get('cloud-type') + viminfo['name'] = tmp_viminfo.get('complex-name') + viminfo['version'] = tmp_viminfo.get('cloud-region-version') + viminfo['cloud_extra_info'] = tmp_viminfo.get('cloud-extra-info') + viminfo['cloud_epa_caps'] = tmp_viminfo.get('cloud-epa-caps') + + viminfo['userName'] = tmp_authinfo['user-name'] + viminfo['password'] = tmp_authinfo['password'] + viminfo['domain'] = tmp_authinfo.get('cloud-domain') + viminfo['url'] = tmp_authinfo.get('service-url') + viminfo['tenant'] = tmp_authinfo.get('default-tenant') + viminfo['cacert'] = tmp_authinfo.get('ssl-cacert') + viminfo['insecure'] = tmp_authinfo.get('ssl-insecure') + + return viminfo + return None + +def delete_vim_by_id(vim_id): + cloud_owner, cloud_region_id = decode_vim_id(vim_id) + if cloud_owner and cloud_region_id: + #get the vim info + viminfo = get_vim_by_id(vim_id) + if not viminfo or not viminfo['resource-version']: + return 0 + + retcode, content, status_code = \ + restcall.req_to_aai("/cloud-infrastructure/cloud-regions/cloud-region/%s/%s?resource-version=%s" + % ( cloud_owner, cloud_region_id, viminfo['resource-version']), "DELETE") + if retcode != 0: + logger.error("Status code is %s, detail is %s.", status_code, content) + raise VimDriverNewtonException( + "Failed to delete VIM in AAI with id (%s:%s,%s)." % (vim_id,cloud_owner,cloud_region_id), + status_code, content) + return 0 + # return non zero if failed to decode cloud owner and region id + return 1 + +def decode_vim_id(vim_id): + m = re.search(r'^([0-9a-zA-Z-]+)_([0-9a-zA-Z_-]+)$', vim_id) + cloud_owner, cloud_region_id = m.group(1), m.group(2) + return cloud_owner, cloud_region_id + -- cgit 1.2.3-korg