+ url = "{}/{tenant}/{item}/{item_id}".format(
+ self.uri,
+ tenant=self.tenant,
+ item=self.client_to_RO[item],
+ item_id=item_id,
+ )
+ self.logger.debug("RO POST %s %s", url, payload_req)
+ # timeout = aiohttp.ClientTimeout(total=self.timeout_large)
+ 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 ROClientException(
+ self._parse_error_yaml(response_text),
+ http_code=response.status,
+ )
+
+ response_desc = self._parse_yaml(response_text, response=True)
+ desc = remove_envelop(item, response_desc)
+ return desc
+ except (aiohttp.ClientOSError, aiohttp.ClientError) as e:
+ raise ROClientException(e, http_code=504)
+ except asyncio.TimeoutError:
+ raise ROClientException("Timeout", http_code=504)
+
+ async def detach(self, item, item_id_name=None):
+ # TODO replace the code with delete_item(vim_account,...)
+ try:
+ async with aiohttp.ClientSession(loop=self.loop) as session:
+ # check that exist
+ item_id = await self._get_item_uuid(
+ session, self.client_to_RO[item], item_id_name, all_tenants=False
+ )
+ tenant = await self._get_tenant(session)
+
+ url = "{}/{tenant}/{item}/{datacenter}".format(
+ self.uri,
+ tenant=tenant,
+ item=self.client_to_RO[item],
+ datacenter=item_id,
+ )
+ self.logger.debug("RO DELETE %s", url)
+
+ # timeout = aiohttp.ClientTimeout(total=self.timeout_large)
+ async with session.delete(url, headers=self.headers_req) as response:
+ response_text = await response.read()
+ self.logger.debug(
+ "DELETE {} [{}] {}".format(
+ url, response.status, response_text[:100]
+ )
+ )
+ if response.status >= 300:
+ raise ROClientException(
+ self._parse_error_yaml(response_text),
+ http_code=response.status,
+ )
+
+ response_desc = self._parse_yaml(response_text, response=True)
+ desc = remove_envelop(item, response_desc)
+ return desc
+ except (aiohttp.ClientOSError, aiohttp.ClientError) as e:
+ raise ROClientException(e, http_code=504)
+ except asyncio.TimeoutError:
+ raise ROClientException("Timeout", http_code=504)
+
+ # TODO convert to asyncio
+ # DATACENTERS
+
+ def edit_datacenter(
+ self,
+ uuid=None,
+ name=None,
+ descriptor=None,
+ descriptor_format=None,
+ all_tenants=False,
+ **kwargs
+ ):