Refactor Networks API for newton
authorBin Yang <bin.yang@windriver.com>
Fri, 3 Mar 2017 09:24:37 +0000 (17:24 +0800)
committerBin Yang <bin.yang@windriver.com>
Fri, 3 Mar 2017 09:24:37 +0000 (17:24 +0800)
Change-Id: I8bfee93e796dc14311ea38c97a0cc6ba7dd89515
Issue-Id: MULTIVIM-22
Signed-off-by: Bin Yang <bin.yang@windriver.com>
newton/newton/requests/views/network.py

index 9d91afc..ad17d39 100644 (file)
@@ -41,45 +41,70 @@ class Networks(APIView):
     def get(self, request, vimid="", tenantid="", networkid=""):
         logger.debug("Networks--get::> %s" % request.data)
         try:
-            # prepare request resource to vim instance
-            req_resouce = "v2.0/networks"
-            if networkid:
-                req_resouce += "/%s" % networkid
-            query = VimDriverUtils.get_query_part(request)
-            if query:
-                req_resouce += "?%s" % query
-
-            vim = VimDriverUtils.get_vim_info(vimid)
-            sess = VimDriverUtils.get_session(vim, tenantid)
-            resp = sess.get(req_resouce, endpoint_filter=self.service)
-            content = resp.json()
-            vim_dict = {
-                "vimName": vim["name"],
-                "vimId": vim["vimId"],
-                "tenantId": tenantid,
-            }
-            content.update(vim_dict)
-
-            if not networkid:
-                # convert the key naming in networks
-                for network in content["networks"]:
-                    VimDriverUtils.replace_key_by_mapping(network,
-                                                          self.keys_mapping)
-            else:
-                # convert the key naming in the network specified by id
-                VimDriverUtils.replace_key_by_mapping(content["network"],
-                                                      self.keys_mapping)
+            content, status_code = self.get_networks(request, vimid, tenantid, networkid)
+            return Response(data=content, status=status_code)
 
-            return Response(data=content, status=resp.status_code)
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
         except Exception as e:
             return Response(data={'error': str(e)},
                             status=status.HTTP_500_INTERNAL_SERVER_ERROR)
 
+    def get_networks(self, request, vimid="", tenantid="", networkid=""):
+        logger.debug("Networks--get_networks::> %s" % networkid)
+
+        # prepare request resource to vim instance
+        req_resouce = "v2.0/networks"
+        if networkid:
+            req_resouce += "/%s" % networkid
+        query = VimDriverUtils.get_query_part(request)
+        if query:
+            req_resouce += "?%s" % query
+
+        vim = VimDriverUtils.get_vim_info(vimid)
+        sess = VimDriverUtils.get_session(vim, tenantid)
+        resp = sess.get(req_resouce, endpoint_filter=self.service)
+        content = resp.json()
+        vim_dict = {
+            "vimName": vim["name"],
+            "vimId": vim["vimId"],
+            "tenantId": tenantid,
+        }
+        content.update(vim_dict)
+
+        if not networkid:
+            # convert the key naming in networks
+            for network in content["networks"]:
+                VimDriverUtils.replace_key_by_mapping(network,
+                                                      self.keys_mapping)
+        else:
+            # convert the key naming in the network specified by id
+            network = content.pop("network", None)
+            VimDriverUtils.replace_key_by_mapping(network,
+                                                  self.keys_mapping)
+            content.update(network)
+
+        return content, resp.status_code
+
     def post(self, request, vimid="", tenantid="", networkid=""):
         logger.debug("Networks--post::> %s" % request.data)
         try:
+            #check if created already: check name
+            content, status_code = self.get_networks(request, vimid, tenantid)
+            existed = False
+            if status_code == 200:
+                for network in content["networks"]:
+                    if network["name"] == request.data["name"]:
+                        existed = True
+                        break
+                    pass
+                if existed == True:
+                    vim_dict = {
+                        "returnCode": 0,
+                    }
+                    network.update(vim_dict)
+                    return Response(data=network, status=status_code)
+
             # prepare request resource to vim instance
             req_resouce = "v2.0/networks"
             if networkid:
@@ -102,6 +127,7 @@ class Networks(APIView):
                 "vimName": vim["name"],
                 "vimId": vim["vimId"],
                 "tenantId": tenantid,
+                "returnCode": 1,
             }
             resp_body.update(vim_dict)
             return Response(data=resp_body, status=resp.status_code)