Bug 2097: Fix for flavor name
[osm/NBI.git] / osm_nbi / instance_topics.py
index 62df4f8..16bd406 100644 (file)
@@ -30,6 +30,7 @@ from osm_nbi.validation import (
     ns_heal,
     nsi_instantiate,
     ns_migrate,
+    ns_verticalscale,
 )
 from osm_nbi.base_topic import (
     BaseTopic,
@@ -440,7 +441,7 @@ class NsrTopic(BaseTopic):
 
         return ns_k8s_namespace
 
-    def _add_flavor_to_nsr(self, vdu, vnfd, nsr_descriptor):
+    def _add_flavor_to_nsr(self, vdu, vnfd, nsr_descriptor, member_vnf_index, revision=None):
         flavor_data = {}
         guest_epa = {}
         # Find this vdu compute and storage descriptors
@@ -510,7 +511,8 @@ class NsrTopic(BaseTopic):
         if guest_epa:
             flavor_data["guest-epa"] = guest_epa
 
-        flavor_data["name"] = vdu["id"][:56] + "-flv"
+        revision = revision if revision is not None else 1
+        flavor_data["name"] = vdu["id"][:56] + "-" + member_vnf_index + "-" + str(revision) + "-flv"
         flavor_data["id"] = str(len(nsr_descriptor["flavor"]))
         nsr_descriptor["flavor"].append(flavor_data)
 
@@ -592,7 +594,8 @@ class NsrTopic(BaseTopic):
                 vnfd.pop("_admin")
 
                 for vdu in vnfd.get("vdu", ()):
-                    self._add_flavor_to_nsr(vdu, vnfd, nsr_descriptor)
+                    member_vnf_index = vnf_profile.get("id")
+                    self._add_flavor_to_nsr(vdu, vnfd, nsr_descriptor, member_vnf_index)
                     sw_image_id = vdu.get("sw-image-desc")
                     if sw_image_id:
                         image_data = self._get_image_data_from_vnfd(vnfd, sw_image_id)
@@ -718,6 +721,7 @@ class NsrTopic(BaseTopic):
         nsr_descriptor,
         ns_request,
         ns_k8s_namespace,
+        revision=None,
     ):
         vnfr_id = str(uuid4())
         nsr_id = nsr_descriptor["id"]
@@ -895,7 +899,10 @@ class NsrTopic(BaseTopic):
                 vdur["internal-connection-point"].append(vdu_icp)
 
                 for iface in icp.get("virtual-network-interface-requirement", ()):
-                    iface_fields = ("name", "mac-address")
+                    # Name, mac-address and interface position is taken from VNFD
+                    # and included into VNFR. By this way RO can process this information
+                    # while creating the VDU.
+                    iface_fields = ("name", "mac-address", "position")
                     vdu_iface = {
                         x: iface[x] for x in iface_fields if iface.get(x) is not None
                     }
@@ -1019,7 +1026,8 @@ class NsrTopic(BaseTopic):
                     alt_image_ids.append(nsr_sw_image_data["id"])
                 vdur["alt-image-ids"] = alt_image_ids
 
-            flavor_data_name = vdu["id"][:56] + "-flv"
+            revision = revision if revision is not None else 1
+            flavor_data_name = vdu["id"][:56] + "-" + vnf_index + "-" + str(revision) + "-flv"
             nsr_flavor_desc = utils.find_in_list(
                 nsr_descriptor["flavor"],
                 lambda flavor: flavor["name"] == flavor_data_name,
@@ -1167,6 +1175,7 @@ class NsLcmOpTopic(BaseTopic):
         "heal": ns_heal,
         "terminate": ns_terminate,
         "migrate": ns_migrate,
+        "verticalscale": ns_verticalscale,
     }
 
     def __init__(self, db, fs, msg, auth):
@@ -2254,7 +2263,7 @@ class NsLcmOpTopic(BaseTopic):
                         vnf_index = vnfr["member-vnf-index-ref"]
                         self.logger.info("nsr {}".format(nsr))
                         for vdu in vnfd["vdu"]:
-                            self.nsrtopic._add_flavor_to_nsr(vdu, vnfd, nsr)
+                            self.nsrtopic._add_flavor_to_nsr(vdu, vnfd, nsr, vnf_index, latest_vnfd_revision)
                             sw_image_id = vdu.get("sw-image-desc")
                             if sw_image_id:
                                 image_data = self.nsrtopic._get_image_data_from_vnfd(vnfd, sw_image_id)
@@ -2274,6 +2283,7 @@ class NsLcmOpTopic(BaseTopic):
                             nsr,
                             ns_request,
                             ns_k8s_namespace,
+                            latest_vnfd_revision,
                         )
                         indata["newVdur"] = vnfr_descriptor["vdur"]
             nslcmop_desc = self._create_nslcmop(nsInstanceId, operation, indata)