+ desc = remove_envelop(item, descriptor)
+
+ # # check that exist
+ # uuid = self._get_item_uuid(session, "datacenters", uuid_name, all_tenants=True)
+ # tenant_text = "/" + self._get_tenant()
+ if kwargs:
+ desc = self.update_descriptor(desc, kwargs)
+
+ if item == "vim_account":
+ if not desc.get("vim_tenant_name") and not desc.get("vim_tenant_id"):
+ raise ROClientException("Wrong descriptor. At least vim_tenant_name or vim_tenant_id must be "
+ "provided")
+ elif item != "wim_account":
+ raise ROClientException("Attach with unknown item {}. Must be 'vim_account' or 'wim_account'".
+ format(item))
+ create_desc = self._create_envelop(item, desc)
+ payload_req = yaml.safe_dump(create_desc)
+ 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=True)
+ await self._get_tenant(session)
+
+ url = "{}/{tenant}/{item}/{item_id}".format(self.endpoint_url, tenant=self.tenant,
+ item=self.client_to_RO[item], item_id=item_id)
+ self.logger.debug("RO POST %s %s", url, payload_req)
+ with aiohttp.Timeout(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(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.errors.ClientOSError 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):