aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRuoyu Ying <ruoyu.ying@intel.com>2018-09-10 20:45:17 +0800
committerRuoyu Ying <ruoyu.ying@intel.com>2018-09-10 20:51:29 +0800
commitf2c8a6137235d8f9664b36cce49aa3cbe061a5e5 (patch)
tree2a837ca9000c0c206ef8aacff04cce41ea39f77f
parentb1fb8844820a212f3f86810fed63e8d5f2576c3e (diff)
Refine logic for OOF response resolvation
Refine some logic inside resolvation Change-Id: I0a69758b39f6f3deed075d82cedbf674ff16a3a2 Issue-ID: VFC-941 Signed-off-by: Ruoyu Ying <ruoyu.ying@intel.com>
-rw-r--r--lcm/ns_vnfs/biz/place_vnfs.py90
1 files changed, 53 insertions, 37 deletions
diff --git a/lcm/ns_vnfs/biz/place_vnfs.py b/lcm/ns_vnfs/biz/place_vnfs.py
index 9cba53d0..84577b26 100644
--- a/lcm/ns_vnfs/biz/place_vnfs.py
+++ b/lcm/ns_vnfs/biz/place_vnfs.py
@@ -40,10 +40,9 @@ class PlaceVnfs(object):
return False
else:
logger.error(
- "Error occurred in Homing: Request has not been completed, the request status is %s" % self.data.get(
- 'requestStatus'))
- if self.data.get("statusMessage"):
- logger.debug("StatusMessage for the request is %s" % self.data.get("statusMessage"))
+ "Error occurred in Homing: Request has not been completed, the request status is %s, "
+ "the status message is %s" % self.data.get('requestStatus'),
+ self.data.get("statusMessage"))
return False
def extract(self):
@@ -51,59 +50,65 @@ class PlaceVnfs(object):
vim_info = {}
if not self.validateCallbackResponse():
logger.error("OOF request Failed")
+ self.update_response_to_db(self.data.get("requestId"), self.data.get("transactionId"),
+ self.data.get("requestStatus"), "none", "none", "none", "none")
return
for item in self.placements:
if not item:
logger.debug("No solution found for request %s " % self.data.get("requestId"))
- OOFDataModel.objects.filter(request_id=self.data.get("requestId"),
- transaction_id=self.data.get("transactionId")).update(
- request_status=self.data.get("requestStatus"),
- vim_id="no-solution",
- cloud_owner="no-solution",
- cloud_region_id="no-solution",
- vduinfo="no-solution")
- return
+ self.update_response_to_db(self.data.get("requestId"), self.data.get("transactionId"),
+ self.data.get("requestStatus"), "no-solution", "no-solution",
+ "no-solution", "no-solution")
+ continue
for placement in item:
assignmentInfo = placement.get("assignmentInfo")
if not assignmentInfo:
logger.debug(
- "No assignment info inside Homing response for request %s" % self.data.get("requestId"))
- OOFDataModel.objects.filter(request_id=self.data.get("requestId"),
- transaction_id=self.data.get("transactionId")).update(
- request_status=self.data.get("requestStatus"),
- vim_id="none",
- cloud_owner="none",
- cloud_region_id="none",
- vduinfo="none"
- )
- return
+ "No assignment info inside Homing response for request %s" % self.data.get(
+ "requestId"))
+ self.update_response_to_db(self.data.get("requestId"),
+ self.data.get("transactionId"),
+ self.data.get("requestStatus"), "none", "none", "none",
+ "none")
+ continue
for info in assignmentInfo:
- if info.get('key') in params:
- vim_info[info.get('key')] = info.get('value')
+ if info.get("key") in params:
+ vim_info[info.get("key")] = info.get("value")
if not vim_info.get("oofDirectives"):
logger.warn("Missing flavor info as no directive found in response")
+ self.update_response_to_db(self.data.get("requestId"),
+ self.data.get("transactionId"),
+ self.data.get("requestStatus"), "none", "none",
+ "none", "none")
+ continue
vduinfo = self.get_info_from_directives(
vim_info['oofDirectives'])
- if vduinfo:
- OOFDataModel.objects.filter(request_id=self.data.get("requestId"),
- transaction_id=self.data.get(
- "transactionId")).update(
- request_status=self.data.get("requestStatus"),
- vim_id=vim_info['vimId'],
- cloud_owner=placement.get("solution").get("cloudOwner"),
- cloud_region_id=vim_info['locationId'],
- vduinfo=vduinfo
- )
+ if not vduinfo:
+ self.update_response_to_db(self.data.get("requestId"),
+ self.data.get("transactionId"),
+ self.data.get("requestStatus"), "none", "none",
+ "none", "none")
+ return
+ else:
+ self.update_response_to_db(requestId=self.data.get("requestId"),
+ transactionId=self.data.get("transactionId"),
+ requestStatus=self.data.get("requestStatus"),
+ vimId=vim_info['vimId'],
+ cloudOwner=placement.get("solution").get(
+ "cloudOwner"),
+ cloudRegionId=vim_info['locationId'],
+ vduInfo=vduinfo
+ )
logger.debug(
- "Placement solution has been stored for request %s " % self.data.get(
- "requestId"))
+ "Placement solution has been stored for request %s "
+ % self.data.get("requestId"))
return "Done"
def get_info_from_directives(self, directives):
vduinfo = []
for directive in directives:
if directive.get("type") == "tocsa.nodes.nfv.Vdu.Compute":
- vdu = {'vduName': directive.get("id")}
+ vdu = {"vduName": directive.get("id")}
other_directives = []
for item in directive.get("directives"):
if item.get("type") == "flavor_directive":
@@ -123,3 +128,14 @@ class PlaceVnfs(object):
else:
logger.warn("No OOF directive for VDU")
return None
+
+ def update_response_to_db(self, requestId, transactionId, requestStatus, vimId, cloudOwner,
+ cloudRegionId, vduInfo):
+ OOFDataModel.objects.filter(request_id=requestId,
+ transaction_id=transactionId).update(
+ request_status=requestStatus,
+ vim_id=vimId,
+ cloud_owner=cloudOwner,
+ cloud_region_id=cloudRegionId,
+ vduinfo=vduInfo
+ )