Update create vl logic
[vfc/nfvo/lcm.git] / lcm / ns / vls / create_vls.py
index 9d33838..06ef78b 100644 (file)
@@ -40,6 +40,7 @@ class CreateVls(object):
         self.owner_type = OWNER_TYPE.NS
         self.vld_id = ""
         self.vl_properties = ""
+        self.vl_profile = ""
         self.vl_inst_name = ""
         self.related_network_id = ""
         self.related_subnetwork_id = ""
@@ -57,7 +58,7 @@ class CreateVls(object):
             self.create_vl_to_resmgr()
             self.save_vl_to_db()
             if REPORT_TO_AAI:
-                self.create_network_in_aai()
+                self.create_network_and_subnet_in_aai()
             return {"result": 0, "detail": "instantiation vl success", "vlId": self.vl_inst_id}
         except NSLCMException as e:
             return self.exception_handle(e)
@@ -77,7 +78,8 @@ class CreateVls(object):
         self.vld_id = ignore_case_get(vl_info, "vl_id")
         self.description = ignore_case_get(vl_info, "description")
         self.vl_properties = ignore_case_get(vl_info, "properties")
-        self.vl_inst_name = ignore_case_get(self.vl_properties, "name")
+        self.vl_profile = ignore_case_get(self.vl_properties, "vl_profile")
+        self.vl_inst_name = ignore_case_get(self.vl_profile, "networkName")
         self.route_external = ignore_case_get(vl_info, "route_external")
         ns_info = NSInstModel.objects.filter(id=self.owner_id)
         self.ns_name = ns_info[0].name if ns_info else ""
@@ -92,23 +94,23 @@ class CreateVls(object):
         self.tenant = ignore_case_get(self.vl_properties["location_info"], "tenant")
         network_data = {
             "tenant": self.tenant,
-            "network_name": self.vl_properties.get("network_name", ""),
+            "network_name": self.vl_profile.get("networkName", ""),
             "shared": const.SHARED_NET,
-            "network_type": self.vl_properties.get("network_type", ""),
-            "segmentation_id": self.vl_properties.get("segmentation_id", ""),
-            "physical_network": self.vl_properties.get("physical_network", ""),
-            "mtu": self.vl_properties.get("mtu", const.DEFAULT_MTU),
-            "vlan_transparent": self.vl_properties.get("vlan_transparent", False),
+            "network_type": self.vl_profile.get("networkType", ""),
+            "segmentation_id": self.vl_profile.get("segmentationId", ""),
+            "physical_network": self.vl_profile.get("physicalNetwork", ""),
+            "mtu": self.vl_profile.get("mtu", const.DEFAULT_MTU),
+            "vlan_transparent": self.vl_profile.get("vlanTransparent", False),
             "subnet_list": [{
-                "subnet_name": self.vl_properties.get("name", ""),
-                "cidr": self.vl_properties.get("cidr", "192.168.0.0/24"),
-                "ip_version": self.vl_properties.get("ip_version", const.IPV4),
-                "enable_dhcp": self.vl_properties.get("dhcp_enabled", False),
-                "gateway_ip": self.vl_properties.get("gateway_ip", ""),
-                "dns_nameservers": self.vl_properties.get("dns_nameservers", ""),
-                "host_routes": self.vl_properties.get("host_routes", "")}]}
-        startip = self.vl_properties.get("start_ip", "")
-        endip = self.vl_properties.get("end_ip", "")
+                "subnet_name": self.vl_profile.get("initiationParameters").get("name", ""),
+                "cidr": self.vl_profile.get("cidr", "192.168.0.0/24"),
+                "ip_version": self.vl_profile.get("ip_version", const.IPV4),
+                "enable_dhcp": self.vl_profile.get("dhcpEnabled", False),
+                "gateway_ip": self.vl_profile.get("gatewayIp", ""),
+                "dns_nameservers": self.vl_profile.get("dns_nameservers", ""),
+                "host_routes": self.vl_profile.get("host_routes", "")}]}
+        startip = self.vl_profile.get("startIp", "")
+        endip = self.vl_profile.get("endIp", "")
         if startip and endip:
             network_data["subnet_list"][0]["allocation_pools"] = [
                 {"start": startip, "end": endip}]
@@ -139,31 +141,31 @@ class CreateVls(object):
     def create_vl_to_resmgr(self):
         req_param = {
             "vlInstanceId": self.vl_inst_id,
-            "name": self.vl_properties.get("network_name", ""),
+            "name": self.vl_profile.get("networkName", ""),
             "backendId": str(self.related_network_id),
             "isPublic": "True",
             "dcName": "",
             "vimId": str(self.vim_id),
             "vimName": self.vim_name,
-            "physicialNet": self.vl_properties.get("physical_network", ""),
+            "physicialNet": self.vl_profile.get("physicalNetwork", ""),
             "nsId": self.owner_id,
             "nsName": self.ns_name,
             "description": self.description,
-            "networkType": self.vl_properties.get("network_type", ""),
-            "segmentation": str(self.vl_properties.get("segmentation_id", "")),
-            "mtu": str(self.vl_properties.get("mtu", "")),
-            "vlanTransparent": str(self.vl_properties.get("vlan_transparent", "")),
+            "networkType": self.vl_profile.get("networkType", ""),
+            "segmentation": str(self.vl_profile.get("segmentationId", "")),
+            "mtu": str(self.vl_profile.get("mtu", "")),
+            "vlanTransparent": str(self.vl_profile.get("vlanTransparent", "")),
             "routerExternal": self.route_external,
             "resourceProviderType": "",
             "resourceProviderId": "",
             "subnet_list": [{
-                "subnet_name": self.vl_properties.get("name", ""),
-                "cidr": self.vl_properties.get("cidr", "192.168.0.0/24"),
-                "ip_version": self.vl_properties.get("ip_version", const.IPV4),
-                "enable_dhcp": self.vl_properties.get("dhcp_enabled", False),
-                "gateway_ip": self.vl_properties.get("gateway_ip", ""),
-                "dns_nameservers": self.vl_properties.get("dns_nameservers", ""),
-                "host_routes": self.vl_properties.get("host_routes", "")
+                "subnet_name": self.vl_profile.get("initiationParameters").get("name", ""),
+                "cidr": self.vl_profile.get("cidr", "192.168.0.0/24"),
+                "ip_version": self.vl_profile.get("ip_version", const.IPV4),
+                "enable_dhcp": self.vl_profile.get("dhcpEnabled", False),
+                "gateway_ip": self.vl_profile.get("gatewayIp", ""),
+                "dns_nameservers": self.vl_profile.get("dns_nameservers", ""),
+                "host_routes": self.vl_profile.get("host_routes", "")
             }]
         }
         resmgr.create_vl(req_param)
@@ -194,31 +196,52 @@ class CreateVls(object):
         # do_biz_with_share_lock("create-vllist-in-vnffg-%s" % self.owner_id, self.create_vl_inst_id_in_vnffg)
         self.create_vl_inst_id_in_vnffg()
 
-    def create_network_in_aai(self):
+    def create_network_and_subnet_in_aai(self):
         logger.debug("CreateVls::create_network_in_aai::report network[%s] to aai." % self.vl_inst_id)
-        data = {
-            "network-id": self.vl_inst_id,
-            "network-name": self.vl_inst_name,
-            "is-bound-to-vpn": "false",
-            "is-provider-network": "true",
-            "is-shared-network": "true",
-            "is-external-network": "true",
-            "relationship-list": {
-                "relationship": [
-                    {
-                        "related-to": "generic-vnf",
-                        "relationship-data": [
-                            {
-                                "relationship-key": "generic-vnf.vnf-id",
-                                "relationship-value": self.owner_id
-                            }
-                        ]
-                    }
-                ]
+        try:
+            ns_insts = NSInstModel.objects.filter(id=self.owner_id)
+            self.global_customer_id = ns_insts[0].global_customer_id
+            self.service_type = ns_insts[0].service_type
+            data = {
+                "network-id": self.vl_inst_id,
+                "network-name": self.vl_inst_name,
+                "is-bound-to-vpn": False,
+                "is-provider-network": True,
+                "is-shared-network": True,
+                "is-external-network": True,
+                "subnets": {
+                    "subnet": [
+                        {
+                            "subnet-id": self.related_subnetwork_id,
+                            "dhcp-enabled": False
+                        }
+                    ]
+                },
+                "relationship-list": {
+                    "relationship": [
+                        {
+                            "related-to": "service-instance",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "customer.global-customer-id",
+                                    "relationship-value": self.global_customer_id
+                                },
+                                {
+                                    "relationship-key": "service-subscription.service-type",
+                                    "relationship-value": self.service_type
+                                },
+                                {
+                                    "relationship-key": "service-instance.service-instance-id",
+                                    "relationship-value": self.owner_id
+                                }
+                            ]
+                        }
+                    ]
+                }
             }
-        }
-        resp_data, resp_status = create_network_aai(self.vl_inst_id, data)
-        if resp_data:
-            logger.debug("Fail to create network[%s] to aai: [%s].", self.vl_inst_id, resp_status)
-        else:
+            resp_data, resp_status = create_network_aai(self.vl_inst_id, data)
             logger.debug("Success to create network[%s] to aai: [%s].", self.vl_inst_id, resp_status)
+        except NSLCMException as e:
+            logger.debug("Fail to create network[%s] to aai, detail message: %s" % (self.vl_inst_id, e.message))
+        except:
+            logger.error(traceback.format_exc())