aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYan Yang <yangyanyj@chinamobile.com>2018-11-22 07:55:26 +0000
committerGerrit Code Review <gerrit@onap.org>2018-11-22 07:55:26 +0000
commit465cfd86a3e17b47eeea1a79eedbc053168aa46c (patch)
treebea51cf462a786a4a6bf4adc7b985c1d42251bd8
parent3723bf0749737ae972295189a6ec476bbe779b31 (diff)
parent0b0fbfc52d4726092bb66592e6236a9459f1b71d (diff)
Merge "Refine code for OOF-VFC interaction" into casablanca
-rw-r--r--lcm/ns_vnfs/biz/create_vnfs.py21
-rw-r--r--lcm/ns_vnfs/biz/grant_vnf.py33
-rw-r--r--lcm/ns_vnfs/biz/place_vnfs.py29
-rw-r--r--lcm/ns_vnfs/biz/terminate_nfs.py4
-rw-r--r--lcm/ns_vnfs/serializers/serializers.py2
-rw-r--r--lcm/ns_vnfs/tests/tests.py3
-rw-r--r--lcm/pub/config/config.py7
7 files changed, 58 insertions, 41 deletions
diff --git a/lcm/ns_vnfs/biz/create_vnfs.py b/lcm/ns_vnfs/biz/create_vnfs.py
index b1caa393..04cb3b8b 100644
--- a/lcm/ns_vnfs/biz/create_vnfs.py
+++ b/lcm/ns_vnfs/biz/create_vnfs.py
@@ -35,6 +35,7 @@ from lcm.pub.utils import restcall
from lcm.ns_vnfs.const import VNF_STATUS, NFVO_VNF_INST_TIMEOUT_SECOND, INST_TYPE, INST_TYPE_NAME
from lcm.ns_vnfs.biz.wait_job import wait_job_finish
from lcm.pub.config.config import REG_TO_MSB_REG_PARAM, OOF_BASE_URL, OOF_PASSWD, OOF_USER
+from lcm.pub.config.config import CUST_NAME, CUST_LAT, CUST_LONG
from lcm.ns_vnfs.biz.subscribe import SubscriptionCreation
logger = logging.getLogger(__name__)
@@ -231,7 +232,7 @@ class CreateVnfs(Thread):
def build_homing_request(self):
id = str(uuid.uuid4())
- callback_uri = " {vfcBaseUrl}/api/nslcm/v1/ns/placevnf"
+ callback_uri = "http://{vfcBaseUrl}/api/nslcm/v1/ns/placevnf"
IP = REG_TO_MSB_REG_PARAM["nodes"][0]["ip"]
PORT = REG_TO_MSB_REG_PARAM["nodes"][0]["port"]
vfcBaseUrl = IP + ':' + PORT
@@ -240,7 +241,7 @@ class CreateVnfs(Thread):
modelVersionId = "no-resourceModelVersionId"
nsInfo = NSInstModel.objects.filter(id=self.ns_inst_id)
placementDemand = {
- "resourceModuleName": self.vnf_inst_name,
+ "resourceModuleName": self.vnf_id,
"serviceResourceId": self.vnfm_nf_inst_id,
"resourceModelInfo": {
"modelInvariantId": modelInvariantId,
@@ -259,6 +260,16 @@ class CreateVnfs(Thread):
"timeout": 600
},
"placementInfo": {
+ "requestParameters": {
+ "customerLatitude": CUST_LAT,
+ "customerLongitude": CUST_LONG,
+ "customerName": CUST_NAME
+ },
+ "subscriberInfo": {
+ "globalSubscriberId": "",
+ "subscriberName": "",
+ "subscriberCommonSiteId": "",
+ },
"placementDemands": []
},
"serviceInfo": {
@@ -276,8 +287,8 @@ class CreateVnfs(Thread):
request_id=id,
transaction_id=id,
request_status="init",
- request_module_name=self.vnfm_nf_inst_id,
- service_resource_id=self.vnf_inst_name,
+ request_module_name=self.vnf_id,
+ service_resource_id=self.vnfm_nf_inst_id,
vim_id="",
cloud_owner="",
cloud_region_id="",
@@ -291,7 +302,7 @@ class CreateVnfs(Thread):
resources = "/api/oof/v1/placement"
resp = restcall.call_req(base_url=base_url, user=OOF_USER, passwd=OOF_PASSWD,
auth_type=restcall.rest_oneway_auth, resource=resources,
- method="POST", content=req_body, additional_headers="")
+ method="POST", content=json.dumps(req_body), additional_headers="")
resp_body = resp[-2]
resp_status = resp[-1]
if resp_body:
diff --git a/lcm/ns_vnfs/biz/grant_vnf.py b/lcm/ns_vnfs/biz/grant_vnf.py
index 0923eb15..f16382e7 100644
--- a/lcm/ns_vnfs/biz/grant_vnf.py
+++ b/lcm/ns_vnfs/biz/grant_vnf.py
@@ -15,6 +15,7 @@
import json
import logging
import uuid
+import time
from lcm.pub.database.models import NfInstModel, OOFDataModel
from lcm.pub.exceptions import NSLCMException
from lcm.pub.msapi.sdc_run_catalog import query_vnfpackage_by_id
@@ -34,6 +35,7 @@ class GrantVnf(object):
self.data = json.JSONDecoder().decode(self.data)
has_res_tpl = False
grant_type = None
+ action_type = ignore_case_get(self.data, "operation")
vimConnections = []
if ignore_case_get(self.data, "addResources"):
grant_type = "addResources"
@@ -106,18 +108,25 @@ class GrantVnf(object):
"vimConnections": vimConnections
}
- offs = OOFDataModel.objects.filter(service_resource_id=ignore_case_get(self.data, "vnfInstanceId"))
- if offs.exists():
- vdu_info = json.loads(offs[0].vdu_info)
- grant_resp['vimAssets'] = {'computeResourceFlavours': []}
- for vdu in vdu_info:
- grant_resp['vimAssets']['computeResourceFlavours'].append({
- 'vimConnectionId': offs[0].vim_id,
- 'resourceProviderId': vdu.get("vduName"),
- 'vnfdVirtualComputeDescId': None, # TODO: required
- 'vimFlavourId': vdu.get("flavorName")
- })
- # grant_resp['additionalparams'][off.vim_id] = off.directive
+ logger.debug("action_type=%s" % action_type)
+ if action_type == 'INSTANTIATE':
+ for i in range(18):
+ offs = OOFDataModel.objects.filter(service_resource_id=ignore_case_get(self.data, "vnfInstanceId"))
+ if not (offs.exists() and offs[0].vdu_info):
+ logger.debug("Cannot find oof data, retry%s" % (i + 1))
+ time.sleep(5)
+ continue
+ vdu_info = json.loads(offs[0].vdu_info)
+ grant_resp['vimAssets'] = {'computeResourceFlavours': []}
+ for vdu in vdu_info:
+ grant_resp['vimAssets']['computeResourceFlavours'].append({
+ 'vimConnectionId': offs[0].vim_id,
+ 'resourceProviderId': vdu.get("vduName"),
+ 'vnfdVirtualComputeDescId': None, # TODO: required
+ 'vimFlavourId': vdu.get("flavorName")
+ })
+ # grant_resp['additionalparams'][off.vim_id] = off.directive
+ break
logger.debug("grant_resp=%s", grant_resp)
return grant_resp
diff --git a/lcm/ns_vnfs/biz/place_vnfs.py b/lcm/ns_vnfs/biz/place_vnfs.py
index e288f9dd..6f858127 100644
--- a/lcm/ns_vnfs/biz/place_vnfs.py
+++ b/lcm/ns_vnfs/biz/place_vnfs.py
@@ -26,14 +26,12 @@ class PlaceVnfs(object):
self.data = data
self.placements = ""
self.request_id = data.get("requestId")
- self.transaction_id = data.get("transactionId")
def validateCallbackResponse(self):
if self.data == "":
logger.error("Error occurred in Homing: OOF Async Callback Response is empty")
return False
- if self.data.get('requestStatus') == "completed" and self.data.get("requestId") \
- and self.data.get("transactionId"):
+ if self.data.get('requestStatus') == "completed" and self.data.get("requestId"):
if self.data.get("solutions").get("placementSolutions") is not None:
self.placements = self.data.get("solutions").get("placementSolutions")
logger.debug("Got placement solutions in OOF Async Callback response")
@@ -58,19 +56,17 @@ class PlaceVnfs(object):
vim_info = {}
if not self.validateCallbackResponse():
logger.error("OOF request Failed")
- self.update_response_to_db(self.request_id, self.transaction_id,
- self.data.get("requestStatus"), "none", "none", "none", "none")
+ self.update_response_to_db(self.request_id, self.data.get("requestStatus"), "none", "none",
+ "none", "none")
return
if self.placements == [] or self.placements == [[]]:
logger.debug("No solution found for request %s " % self.request_id)
- self.update_response_to_db(self.request_id, self.transaction_id,
- self.data.get("requestStatus"), "none", "none",
+ self.update_response_to_db(self.request_id, self.data.get("requestStatus"), "none", "none",
"none", "none")
return
for item in self.placements:
if not isinstance(item, list):
- self.update_response_to_db(self.request_id, self.transaction_id,
- self.data.get("requestStatus"), "none", "none",
+ self.update_response_to_db(self.request_id, self.data.get("requestStatus"), "none", "none",
"none", "none")
continue
for placement in item:
@@ -79,10 +75,8 @@ class PlaceVnfs(object):
logger.debug(
"No assignment info/Solution inside Homing response for request %s"
% self.request_id)
- self.update_response_to_db(self.request_id,
- self.transaction_id,
- self.data.get("requestStatus"), "none", "none", "none",
- "none")
+ self.update_response_to_db(self.request_id, self.data.get("requestStatus"), "none", "none",
+ "none", "none")
continue
for info in assignmentInfo:
if info.get("key") in params:
@@ -90,7 +84,6 @@ class PlaceVnfs(object):
if not vim_info.get("oof_directives"):
logger.warn("Missing flavor info as no directive found in response")
self.update_response_to_db(self.request_id,
- self.transaction_id,
self.data.get("requestStatus"), "none", "none",
"none", "none")
continue
@@ -98,7 +91,6 @@ class PlaceVnfs(object):
vim_info['oof_directives'])
if not vduinfo:
self.update_response_to_db(self.request_id,
- self.transaction_id,
self.data.get("requestStatus"), "none", "none",
"none", "none")
return
@@ -109,14 +101,12 @@ class PlaceVnfs(object):
location_id = vim_info.get("locationId")
if not cloud_owner or not location_id:
self.update_response_to_db(self.request_id,
- self.transaction_id,
self.data.get("requestStatus"), "none", "none",
"none", "none")
return
vim_id = vim_info['vimId'] if vim_info.get('vimId') \
else cloud_owner + "_" + location_id
self.update_response_to_db(requestId=self.request_id,
- transactionId=self.transaction_id,
requestStatus=self.data.get("requestStatus"),
vimId=vim_id,
cloudOwner=cloud_owner,
@@ -153,10 +143,9 @@ class PlaceVnfs(object):
logger.warn("No OOF directive for VDU")
return None
- def update_response_to_db(self, requestId, transactionId, requestStatus, vimId, cloudOwner,
+ def update_response_to_db(self, requestId, requestStatus, vimId, cloudOwner,
cloudRegionId, vduInfo):
- OOFDataModel.objects.filter(request_id=requestId,
- transaction_id=transactionId).update(
+ OOFDataModel.objects.filter(request_id=requestId).update(
request_status=requestStatus,
vim_id=vimId,
cloud_owner=cloudOwner,
diff --git a/lcm/ns_vnfs/biz/terminate_nfs.py b/lcm/ns_vnfs/biz/terminate_nfs.py
index 7cdea1c8..073f2562 100644
--- a/lcm/ns_vnfs/biz/terminate_nfs.py
+++ b/lcm/ns_vnfs/biz/terminate_nfs.py
@@ -18,7 +18,7 @@ import threading
import traceback
from lcm.pub.config.config import REPORT_TO_AAI
-from lcm.pub.database.models import NfInstModel, VmInstModel
+from lcm.pub.database.models import NfInstModel, VmInstModel, OOFDataModel
from lcm.pub.exceptions import NSLCMException
from lcm.pub.msapi import resmgr
from lcm.pub.msapi.aai import query_vnf_aai, delete_vnf_aai, query_vserver_aai, delete_vserver_aai
@@ -140,6 +140,8 @@ class TerminateVnfs(threading.Thread):
def delete_data_from_db(self):
NfInstModel.objects.filter(nfinstid=self.vnf_inst_id).delete()
+ VmInstModel.objects.filter(instid=self.vnf_inst_id).delete()
+ OOFDataModel.objects.filter(service_resource_id=self.vnf_inst_id).delete()
JobUtil.add_job_status(self.job_id, 100, 'vnf terminate success', 0)
def delete_vnf_in_aai(self):
diff --git a/lcm/ns_vnfs/serializers/serializers.py b/lcm/ns_vnfs/serializers/serializers.py
index d9d6fa06..b588cf1e 100644
--- a/lcm/ns_vnfs/serializers/serializers.py
+++ b/lcm/ns_vnfs/serializers/serializers.py
@@ -301,7 +301,7 @@ class SolutionSerializer(serializers.Serializer):
allow_empty=True,
many=True)
licenseSolutions = LicenseSolutionSerializer(help_text="A list of License Solutions",
- required=True, many=True)
+ required=False, many=True)
class PlaceVnfReqSerializer(serializers.Serializer):
diff --git a/lcm/ns_vnfs/tests/tests.py b/lcm/ns_vnfs/tests/tests.py
index 422182ad..02fa2f82 100644
--- a/lcm/ns_vnfs/tests/tests.py
+++ b/lcm/ns_vnfs/tests/tests.py
@@ -943,7 +943,8 @@ class TestGrantVnfViews(TestCase):
self.vnf_inst_id = str(uuid.uuid4())
self.data = {
"vnfInstanceId": self.vnf_inst_id,
- "vnfLcmOpOccId": "1234"
+ "vnfLcmOpOccId": "1234",
+ "operation": "INSTANTIATE"
}
vdu_info_dict = [{"vduName": "vg", "flavorName": "flavor_1", "directive": []}]
OOFDataModel(request_id='1234', transaction_id='1234', request_status='done', request_module_name='vg',
diff --git a/lcm/pub/config/config.py b/lcm/pub/config/config.py
index 5ba41e98..3e64583f 100644
--- a/lcm/pub/config/config.py
+++ b/lcm/pub/config/config.py
@@ -70,6 +70,11 @@ DEPLOY_WORKFLOW_WHEN_START = False
WORKFLOW_OPTION = "buildin"
# [OOF config]
-OOF_BASE_URL = "http://oof.api.simpledemo.onap.org:8698"
+OOF_BASE_URL = "http://oof-osdf.onap.org:8698"
OOF_USER = "vfc_test"
OOF_PASSWD = "vfc_testpwd"
+
+# [Customer information]
+CUST_NAME = "some_company"
+CUST_LAT = "32.897480"
+CUST_LONG = "97.040443"