X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_lcm%2Fng_ro.py;h=9426488299ae63baaea685003df846697e2af87c;hb=8f6b0e74d6a2595ec8d7176e31ac729afd54f75b;hp=5dd3cc46d2225cb34eb4f8db390b7f5262d90315;hpb=b827de931cbe2452bcca76b8b24371b4a8afe2aa;p=osm%2FLCM.git diff --git a/osm_lcm/ng_ro.py b/osm_lcm/ng_ro.py index 5dd3cc4..9426488 100644 --- a/osm_lcm/ng_ro.py +++ b/osm_lcm/ng_ro.py @@ -67,8 +67,7 @@ class NgRoClient: timeout_large = 120 timeout_short = 30 - def __init__(self, loop, uri, **kwargs): - self.loop = loop + def __init__(self, uri, **kwargs): self.endpoint_url = uri if not self.endpoint_url.endswith("/"): self.endpoint_url += "/" @@ -103,7 +102,7 @@ class NgRoClient: payload_req = yaml.safe_dump(target) url = "{}/ns/v1/deploy/{nsr_id}".format(self.endpoint_url, nsr_id=nsr_id) - async with aiohttp.ClientSession(loop=self.loop) as session: + async with aiohttp.ClientSession() as session: self.logger.debug("NG-RO POST %s %s", url, payload_req) # timeout = aiohttp.ClientTimeout(total=self.timeout_large) async with session.post( @@ -136,7 +135,7 @@ class NgRoClient: payload_req = yaml.safe_dump(target) url = "{}/ns/v1/migrate/{nsr_id}".format(self.endpoint_url, nsr_id=nsr_id) - async with aiohttp.ClientSession(loop=self.loop) as session: + async with aiohttp.ClientSession() as session: self.logger.debug("NG-RO POST %s %s", url, payload_req) # timeout = aiohttp.ClientTimeout(total=self.timeout_large) async with session.post( @@ -172,7 +171,7 @@ class NgRoClient: url = "{}/ns/v1/{operation_type}/{nsr_id}".format( self.endpoint_url, operation_type=operation_type, nsr_id=nsr_id ) - async with aiohttp.ClientSession(loop=self.loop) as session: + async with aiohttp.ClientSession() as session: self.logger.debug("NG-RO POST %s %s", url, payload_req) # timeout = aiohttp.ClientTimeout(total=self.timeout_large) async with session.post( @@ -197,7 +196,7 @@ class NgRoClient: url = "{}/ns/v1/deploy/{nsr_id}/{action_id}".format( self.endpoint_url, nsr_id=nsr_id, action_id=action_id ) - async with aiohttp.ClientSession(loop=self.loop) as session: + async with aiohttp.ClientSession() as session: self.logger.debug("GET %s", url) # timeout = aiohttp.ClientTimeout(total=self.timeout_short) async with session.get(url, headers=self.headers_req) as response: @@ -219,7 +218,7 @@ class NgRoClient: async def delete(self, nsr_id): try: url = "{}/ns/v1/deploy/{nsr_id}".format(self.endpoint_url, nsr_id=nsr_id) - async with aiohttp.ClientSession(loop=self.loop) as session: + async with aiohttp.ClientSession() as session: self.logger.debug("DELETE %s", url) # timeout = aiohttp.ClientTimeout(total=self.timeout_short) async with session.delete(url, headers=self.headers_req) as response: @@ -242,7 +241,7 @@ class NgRoClient: """ try: response_text = "" - async with aiohttp.ClientSession(loop=self.loop) as session: + async with aiohttp.ClientSession() as session: url = "{}/version".format(self.endpoint_url) self.logger.debug("RO GET %s", url) # timeout = aiohttp.ClientTimeout(total=self.timeout_short) @@ -293,7 +292,7 @@ class NgRoClient: payload_req = yaml.safe_dump(target) url = "{}/ns/v1/recreate/{nsr_id}".format(self.endpoint_url, nsr_id=nsr_id) - async with aiohttp.ClientSession(loop=self.loop) as session: + async with aiohttp.ClientSession() 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 @@ -317,7 +316,7 @@ class NgRoClient: url = "{}/ns/v1/recreate/{nsr_id}/{action_id}".format( self.endpoint_url, nsr_id=nsr_id, action_id=action_id ) - async with aiohttp.ClientSession(loop=self.loop) as session: + async with aiohttp.ClientSession() as session: self.logger.debug("GET %s", url) async with session.get(url, headers=self.headers_req) as response: response_text = await response.read() @@ -335,6 +334,40 @@ 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() 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: