summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorying.yunlong <ying.yunlong@zte.com.cn>2017-02-11 08:51:54 +0800
committerying.yunlong <ying.yunlong@zte.com.cn>2017-02-11 08:51:54 +0800
commitf75f0179e1529f2d3e9cb1bf88118a80d66150b7 (patch)
tree9752103c4352e53eedeb654ce06997ede0c9b5ca
parent1077b8afdec2d5c14febc96546de2f9125b41180 (diff)
Optimized code of GVNFM
Change-Id: Ib846c7311933e5766526201d95d598cee5032d53 Issue-Id: GVNFM-6 Signed-off-by: ying.yunlong <ying.yunlong@zte.com.cn>
-rw-r--r--lcm/lcm/nf/vnfs/urls.py14
-rw-r--r--lcm/lcm/nf/vnfs/views.py30
-rw-r--r--lcm/lcm/nf/vnfs/vnf_create/create_vnf_identifier.py45
-rw-r--r--lcm/lcm/nf/vnfs/vnf_create/inst_vnf.py51
-rw-r--r--lcm/lcm/pub/msapi/nfvolcm.py13
5 files changed, 71 insertions, 82 deletions
diff --git a/lcm/lcm/nf/vnfs/urls.py b/lcm/lcm/nf/vnfs/urls.py
index 4a64bdf6..d07dc4fd 100644
--- a/lcm/lcm/nf/vnfs/urls.py
+++ b/lcm/lcm/nf/vnfs/urls.py
@@ -15,21 +15,21 @@
from django.conf.urls import patterns, url
from rest_framework.urlpatterns import format_suffix_patterns
-from lcm.nf.vnfs.views import CreateVnfIdentifier, InstantiateVnf, DeleteVnfIdentifier, QueryMultipleVnf, TerminateVnf, \
- QuerySingleVnf, GetOperationStatus
+from lcm.nf.vnfs.views import CreateVnfIdentifier, InstantiateVnf, DeleteVnfIdentifier, QueryMultipleVnf,\
+ TerminateVnf, QuerySingleVnf, GetOperationStatus
urlpatterns = patterns('',
url(r'^gvnfmapi/lcm/v1/vnf_instances$', CreateVnfIdentifier.as_view()),
- url(r'^gvnfmapi/lcm/v1/vnf_instances/(?P<instanceId>[0-9a-zA-Z_-]+)/instantiate$', InstantiateVnf.as_view()),
+ url(r'^gvnfmapi/lcm/v1/vnf_instances/(?P<instanceId>[0-9a-zA-Z_-]+)/instantiate$',
+ InstantiateVnf.as_view()),
url(r'^gvnfmapi/lcm/v1/vnf_instances/(?P<instanceId>[0-9a-zA-Z_-]+)$',
DeleteVnfIdentifier.as_view()),
url(r'^gvnfmapi/lcm/v1/vnf_instances/(?P<instanceId>[0-9a-zA-Z_-]+)/terminate$',
TerminateVnf.as_view()),
url(r'^gvnfmapi/lcm/v1/vnf_instances$', QueryMultipleVnf.as_view()),
url(r'^gvnfmapi/lcm/v1/vnf_instances/(?P<instanceId>[0-9a-zA-Z_-]+)$', QuerySingleVnf.as_view()),
- url(
- r'^gvnfmapi/lcm/v1/vnf_lc_ops/(?P<vnfLcOpId>[0-9a-zA-Z_-]+)&responseId=(?P<responseId>[0-9a-zA-Z_-]+)$',
- GetOperationStatus.as_view()),
+ url(r'^gvnfmapi/lcm/v1/vnf_lc_ops/(?P<vnfLcOpId>[0-9a-zA-Z_-]+)&'
+ r'responseId=(?P<responseId>[0-9a-zA-Z_-]+)$', GetOperationStatus.as_view()),
)
-urlpatterns = format_suffix_patterns(urlpatterns) \ No newline at end of file
+urlpatterns = format_suffix_patterns(urlpatterns)
diff --git a/lcm/lcm/nf/vnfs/views.py b/lcm/lcm/nf/vnfs/views.py
index 1862b3cc..6dbdb73e 100644
--- a/lcm/lcm/nf/vnfs/views.py
+++ b/lcm/lcm/nf/vnfs/views.py
@@ -13,6 +13,7 @@
# limitations under the License.
import logging
+import traceback
from rest_framework import status
from rest_framework.response import Response
@@ -20,8 +21,8 @@ from rest_framework.views import APIView
from lcm.nf.vnfs.vnf_create.create_vnf_identifier import CreateVnf
from lcm.nf.vnfs.vnf_create.inst_vnf import InstVnf
+from lcm.pub.exceptions import NFLCMException
from lcm.pub.utils.jobutil import JobUtil
-from lcm.pub.utils.values import ignore_case_get
logger = logging.getLogger(__name__)
@@ -29,31 +30,24 @@ logger = logging.getLogger(__name__)
class CreateVnfIdentifier(APIView):
def post(self, request):
logger.debug("CreateVnfIdentifier--post::> %s" % request.data)
- data = {}
- data["vnfdId"] = ignore_case_get(request.data, "vnfdId")
- data["vnfInstanceName"] = ignore_case_get(request.data, "vnfInstanceName")
- data["vnfInstanceDescription"] = ignore_case_get(request.data, "vnfInstanceDescription")
try:
- self.nf_inst_id = CreateVnf(data).do_biz()
- except Exception as e:
+ nf_inst_id = CreateVnf(request.data).do_biz()
+ except NFLCMException as e:
+ logger.error(e.message)
return Response(data={'error': '%s' % e.message}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
- rsp = {"vnfInstanceId": self.nf_inst_id}
+ except Exception:
+ logger.error(traceback.format_exc())
+ return Response(data='unexpected exception', status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+ rsp = {"vnfInstanceId": nf_inst_id}
return Response(data=rsp, status=status.HTTP_201_CREATED)
class InstantiateVnf(APIView):
def post(self, request, instanceId):
logger.debug("InstantiateVnf--post::> %s" % request.data)
- data = {'flavourId': ignore_case_get(request.data, 'flavourId'),
- 'instantiationLevelId': ignore_case_get(request.data, 'instantiationLevelId'),
- 'extVirtualLinks': ignore_case_get(request.data, 'extVirtualLinks'),
- 'localizationLanguage': ignore_case_get(request.data, 'localizationLanguage'),
- 'additionalParams': ignore_case_get(request.data, 'additionalParams')}
- nf_inst_id = instanceId
- job_id = JobUtil.create_job('NF', 'INSTANTIATE', nf_inst_id)
+ job_id = JobUtil.create_job('NF', 'INSTANTIATE', instanceId)
JobUtil.add_job_status(job_id, 0, "INST_VNF_READY")
-
- InstVnf(data, nf_inst_id, job_id).start()
+ InstVnf(request.data, instanceId, job_id).start()
rsp = {"jobId": job_id}
return Response(data=rsp, status=status.HTTP_202_ACCEPTED)
@@ -85,4 +79,4 @@ class QuerySingleVnf(APIView):
class GetOperationStatus(APIView):
def get(self, request):
logger.debug("GetOperationStatus--get::> %s" % request.data)
- return Response(data='', status=status.HTTP_202_ACCEPTED) \ No newline at end of file
+ return Response(data='', status=status.HTTP_202_ACCEPTED)
diff --git a/lcm/lcm/nf/vnfs/vnf_create/create_vnf_identifier.py b/lcm/lcm/nf/vnfs/vnf_create/create_vnf_identifier.py
index b427e66b..96ab1633 100644
--- a/lcm/lcm/nf/vnfs/vnf_create/create_vnf_identifier.py
+++ b/lcm/lcm/nf/vnfs/vnf_create/create_vnf_identifier.py
@@ -27,39 +27,36 @@ logger = logging.getLogger(__name__)
class CreateVnf:
def __init__(self, data):
self.data = data
-
- def do_biz(self):
- logger.debug("CreateVnfIdentifier--CreateVnf::> %s" % self.data)
self.vnfd_id = ignore_case_get(self.data, "vnfdId")
self.vnf_instance_mame = ignore_case_get(self.data, "vnfInstanceName")
self.description = ignore_case_get(self.data, "vnfInstanceDescription")
+
+ def do_biz(self):
+ logger.debug("CreateVnfIdentifier--CreateVnf::> %s" % self.data)
is_exist = NfInstModel.objects.filter(nf_name=self.vnf_instance_mame).exists()
- logger.debug("check_ns_inst_name_exist::is_exist=%s" % is_exist)
+ logger.debug("check_inst_name_exist::is_exist=%s" % is_exist)
if is_exist:
raise NFLCMException('VNF is already exist.')
- #get rawdata by vnfd_id
ret = vnfd_rawdata_get(self.vnfd_id)
if ret[0] != 0:
- raise NFLCMException('Get vnfd_raw_data failed.')
- dst_plan = json.JSONDecoder().decode(ret[1])
- self.vnfd_version = dst_plan['metadata']['vnfd_version']
- self.vendor = dst_plan['metadata']['vendor']
- self.producttype = dst_plan['metadata']['domain_type']
- self.netype = dst_plan['metadata']['vnf_type']
- self.vnfd_model = dst_plan
- self.vnfSoftwareVersion = dst_plan['metadata']['version']
+ raise NFLCMException('Get vnfd data failed.')
+ vnfd_info = json.JSONDecoder().decode(ret[1])
+ vnfd_version = vnfd_info['metadata']['vnfd_version']
+ vendor = vnfd_info['metadata']['vendor']
+ producttype = vnfd_info['metadata']['domain_type']
+ netype = vnfd_info['metadata']['vnf_type']
+ vnfd_model = vnfd_info
+ vnfsoftwareversion = vnfd_info['metadata']['version']
- self.nf_inst_id = str(uuid.uuid4())
- NfInstModel.objects.create(nfinstid=self.nf_inst_id, mnfinstid=self.nf_inst_id, nf_name=self.vnf_instance_mame,
- package_id='todo', vnfm_inst_id='todo', version=self.vnfd_version, vendor=self.vendor,
- producttype=self.producttype,netype=self.netype, vnfd_model=self.vnfd_model,
+ nf_inst_id = str(uuid.uuid4())
+ NfInstModel.objects.create(nfinstid=nf_inst_id, mnfinstid=nf_inst_id, nf_name=self.vnf_instance_mame,
+ package_id='todo', vnfm_inst_id='todo', version=vnfd_version, vendor=vendor,
+ producttype=producttype, netype=netype, vnfd_model=vnfd_model,
instantiationState='NOT_INSTANTIATED', nf_desc=self.description, vnfdid=self.vnfd_id,
- vnfSoftwareVersion=self.vnfSoftwareVersion, vnfConfigurableProperties='todo',
- localizationLanguage='EN_US',create_time=now_time())
- is_exist = NfInstModel.objects.filter(nf_name=self.vnf_instance_mame).exists()
- logger.debug("check_ns_inst_name_exist::is_exist=%s" % is_exist)
- vnf_inst = NfInstModel.objects.get(nfinstid=self.nf_inst_id)
+ vnfSoftwareVersion=vnfsoftwareversion, vnfConfigurableProperties='todo',
+ localizationLanguage='EN_US', create_time=now_time())
+ vnf_inst = NfInstModel.objects.get(nfinstid=nf_inst_id)
logger.debug('id is [%s],name is [%s],vnfd_id is [%s],description is [%s],create_time is [%s]' %
- (vnf_inst.nfinstid, vnf_inst.nf_name, vnf_inst.vnfdid, vnf_inst.nf_desc, vnf_inst.create_time))
- return self.nf_inst_id \ No newline at end of file
+ (vnf_inst.nfinstid, vnf_inst.nf_name, vnf_inst.vnfdid, vnf_inst.nf_desc, vnf_inst.create_time))
+ return nf_inst_id
diff --git a/lcm/lcm/nf/vnfs/vnf_create/inst_vnf.py b/lcm/lcm/nf/vnfs/vnf_create/inst_vnf.py
index 2225ddca..9340a735 100644
--- a/lcm/lcm/nf/vnfs/vnf_create/inst_vnf.py
+++ b/lcm/lcm/nf/vnfs/vnf_create/inst_vnf.py
@@ -20,6 +20,7 @@ from lcm.pub.database.models import NfInstModel, JobStatusModel, NfvoRegInfoMode
from lcm.pub.exceptions import NFLCMException
from lcm.pub.msapi.nfvolcm import vnfd_rawdata_get, apply_grant_to_nfvo
from lcm.pub.utils.jobutil import JobUtil
+from lcm.pub.utils.timeutil import now_time
logger = logging.getLogger(__name__)
@@ -33,13 +34,10 @@ class InstVnf(Thread):
self.nfvo_inst_id = ''
self.vnfm_inst_id = ''
-
def run(self):
try:
- self.inst_pre(self.nf_inst_id)
-
+ self.inst_pre()
self.apply_grant()
-
# self.apply_res(args)
# self.check_res_status(args)
# self.wait_inst_finish(args)
@@ -48,38 +46,30 @@ class InstVnf(Thread):
is_exist = JobStatusModel.objects.filter(jobid=self.job_id).exists()
logger.debug("check_ns_inst_name_exist::is_exist=%s" % is_exist)
except NFLCMException as e:
- self.inst_exception(e.message)
- pass
- except Exception:
+ self.vnf_inst_failed_handle(e.message)
+ # self.rollback(e.message)
+ except:
+ self.vnf_inst_failed_handle('unexpected exception')
logger.error(traceback.format_exc())
- self.inst_exception('unexpected exception')
-
- def inst_pre(self, args):
- logger.info('inst_pre, args=%s' % args)
- is_exist = NfInstModel.objects.filter(nfinstid=self.nf_inst_id).exists()
- logger.debug("check_ns_inst_name_exist::is_exist=%s" % is_exist)
- if not is_exist:
- logger.error("VNF nf_inst_id is not exist.")
- JobUtil.add_job_status(self.job_id, 255, "VNF nf_inst_id is not exist.")
+ # self.rollback('unexpected exception')
+
+ def inst_pre(self):
+ vnf_insts = NfInstModel.objects.filter(nfinstid=self.nf_inst_id)
+ if not vnf_insts.exists():
raise NFLCMException('VNF nf_inst_id is not exist.')
- vnf_inst = NfInstModel.objects.get(nfinstid=self.nf_inst_id)
- self.vnfm_inst_id = vnf_inst.vnfm_inst_id
- if vnf_inst.instantiationState != 'NOT_INSTANTIATED':
- logger.error("VNF instantiationState is not NOT_INSTANTIATED.")
- JobUtil.add_job_status(self.job_id, 255, "VNF instantiationState is not NOT_INSTANTIATED.")
+ self.vnfm_inst_id = vnf_insts[0].vnfm_inst_id
+ if vnf_insts[0].instantiationState != 'NOT_INSTANTIATED':
raise NFLCMException('VNF instantiationState is not NOT_INSTANTIATED.')
#get rawdata by vnfd_id
- ret = vnfd_rawdata_get(vnf_inst.vnfdid)
+ ret = vnfd_rawdata_get(vnf_insts[0].vnfdid)
if ret[0] != 0:
raise NFLCMException("Get vnfd_raw_data failed.")
self.vnfd_info = json.JSONDecoder().decode(ret[1])
#checkParameterExist
for cp in self.data:
if cp not in self.vnfd_info:
- logger.error("[%s] is not defined in vnfd_info."%cp)
- JobUtil.add_job_status(self.job_id, 255, "Input parameter is not defined in vnfd_info.")
raise NFLCMException('Input parameter is not defined in vnfd_info.')
#get nfvo info
JobUtil.add_job_status(self.job_id, 5, 'GET_NFVO_CONNECTION_INFO')
@@ -107,9 +97,6 @@ class InstVnf(Thread):
resp = apply_grant_to_nfvo(content_args)
logger.info("[NF instantiation] get grant response = %s" % resp)
if resp[0] != 0:
- err_msg = str(resp[1])
- logger.error("Nf instancing apply grant exception.[%s]" % err_msg)
- JobUtil.add_job_status(self.job_id, 255, 'Nf instancing apply grant exception')
raise NFLCMException('Nf instancing apply grant exception')
#update_resources_table()
@@ -156,7 +143,7 @@ class InstVnf(Thread):
logger.error(traceback.format_exc())
return {'result': '255', 'msg': 'Nf instancing lcm notify exception', 'context': {}}
- def inst_exception(self, args):
+ def rollback(self, args):
try:
logger.info('inst_exception, args=%s' % args)
# InstExceptionTask(args).do_biz()
@@ -173,6 +160,12 @@ class InstVnf(Thread):
self.nfvo_inst_id = reg_info.nfvoid
logger.info("[NF instantiation] Registered nfvo id is [%s]"%self.nfvo_inst_id)
else:
- JobUtil.add_job_status(self.job_id, 255, "Nfvo was not registered")
raise NFLCMException("Nfvo was not registered")
logger.info("[NF instantiation]get nfvo connection info end")
+
+ def vnf_inst_failed_handle(self, error_msg):
+ logger.error('VNF instantiation failed, detail message: %s' % error_msg)
+ NfInstModel.objects.filter(nfinstid=self.nf_inst_id).update(status='failed', lastuptime=now_time())
+ JobUtil.add_job_status(self.job_id, 255, error_msg)
+ # JobUtil.add_job_status(self.job_id, 255, 'VNF instantiation failed, detail message: %s' % error_msg, 0)
+
diff --git a/lcm/lcm/pub/msapi/nfvolcm.py b/lcm/lcm/pub/msapi/nfvolcm.py
index 755f3353..9ea2eef8 100644
--- a/lcm/lcm/pub/msapi/nfvolcm.py
+++ b/lcm/lcm/pub/msapi/nfvolcm.py
@@ -12,14 +12,19 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-# Query vnfd_rawdata by vnfdid
from lcm.pub.utils.restcall import req_by_msb
-
+#call gvnfm driver
def vnfd_rawdata_get(vnfdid):
- ret = req_by_msb("openoapi/nslcm/v1/vnfpackage/%s" % vnfdid, "GET")
+ ret = req_by_msb("openoapi/nslcm/v1/vnfs/%s" % vnfdid, "GET")
return ret
+#call gvnfm driver
def apply_grant_to_nfvo(data):
- ret = req_by_msb("openoapi/nslcm/v1/vnfpackage" , "GET", data)
+ ret = req_by_msb("openoapi/nslcm/v1/grantvnf" , "POST", data)
+ return ret
+
+#call gvnfm driver
+def notify_lcm_to_nfvo(data, nf_inst_id):
+ ret = req_by_msb("openoapi/nslcm/v1/vnfs/%s/Notify"%nf_inst_id, "POST", data)
return ret \ No newline at end of file