Feature 10911-Vertical scaling of VM instances from OSM
[osm/LCM.git] / osm_lcm / ng_ro.py
index 5dd3cc4..03819c8 100644 (file)
@@ -335,6 +335,38 @@ class NgRoClient:
         except asyncio.TimeoutError:
             raise NgRoException("Timeout", http_code=504)
 
+    async def vertical_scale(self, nsr_id, target):
+        """
+        Performs migration of VNFs
+        :param nsr_id: NS Instance Id
+        :param target: payload data for migrate operation
+        :return: dictionary with the information or raises NgRoException on Error
+        """
+        try:
+            if isinstance(target, str):
+                target = self._parse_yaml(target)
+            payload_req = yaml.safe_dump(target)
+
+            url = "{}/ns/v1/verticalscale/{nsr_id}".format(self.endpoint_url, nsr_id=nsr_id)
+            async with aiohttp.ClientSession(loop=self.loop) as session:
+                self.logger.debug("NG-RO POST %s %s", url, payload_req)
+                async with session.post(
+                    url, headers=self.headers_req, data=payload_req
+                ) as response:
+                    response_text = await response.read()
+                    self.logger.debug(
+                        "POST {} [{}] {}".format(
+                            url, response.status, response_text[:100]
+                        )
+                    )
+                    if response.status >= 300:
+                        raise NgRoException(response_text, http_code=response.status)
+                    return self._parse_yaml(response_text, response=True)
+        except (aiohttp.ClientOSError, aiohttp.ClientError) as e:
+            raise NgRoException(e, http_code=504)
+        except asyncio.TimeoutError:
+            raise NgRoException("Timeout", http_code=504)
+
     @staticmethod
     def _parse_yaml(descriptor, response=False):
         try: