+ except asyncio.TimeoutError:
+ raise ROClientException("Timeout", http_code=504)
+
+ async def create_action(self, item, item_id_name, descriptor=None, descriptor_format=None, **kwargs):
+ """
+ Performs an action over an item
+ :param item: can be 'tenant', 'vnfd', 'nsd', 'ns', 'vim', 'vim_account', 'sdn'
+ :param item_id_name: RO id or name of the item. Raise and exception if more than one found
+ :param descriptor: can be a dict, or a yaml/json text. Autodetect unless descriptor_format is provided
+ :param descriptor_format: Can be 'json' or 'yaml'
+ :param kwargs: Overrides descriptor with values as name, description, vim_url, vim_url_admin, vim_type
+ keys can be a dot separated list to specify elements inside dict
+ :return: dictionary with the information or raises ROClientException on Error
+ """
+ try:
+ if isinstance(descriptor, str):
+ descriptor = self._parse(descriptor, descriptor_format)
+ elif descriptor:
+ pass
+ else:
+ descriptor = {}
+
+ if item not in self.client_to_RO:
+ raise ROClientException("Invalid item {}".format(item))
+ desc = remove_envelop(item, descriptor)
+
+ # Override descriptor with kwargs
+ if kwargs:
+ desc = self.update_descriptor(desc, kwargs)
+
+ all_tenants = False
+ if item in ('tenant', 'vim'):
+ all_tenants = None
+
+ action = None
+ if item == "vims":
+ action = "sdn_mapping"
+ elif item in ("vim_account", "ns"):
+ action = "action"
+
+ # create_desc = self._create_envelop(item, desc)
+ create_desc = desc
+
+ with aiohttp.ClientSession(loop=self.loop) as session:
+ _all_tenants = all_tenants
+ if item == 'vim':
+ _all_tenants = True
+ # item_id = await self._get_item_uuid(session, self.client_to_RO[item], item_id_name,
+ # all_tenants=_all_tenants)
+ outdata = await self._create_item(session, self.client_to_RO[item], create_desc,
+ item_id_name=item_id_name, # item_id_name=item_id
+ action=action, all_tenants=_all_tenants)
+ return remove_envelop(item, outdata)
+ except aiohttp.errors.ClientOSError as e:
+ raise ROClientException(e, http_code=504)
+ except asyncio.TimeoutError:
+ raise ROClientException("Timeout", http_code=504)