class ROClient:
headers_req = {'Accept': 'application/yaml', 'content-type': 'application/yaml'}
client_to_RO = {'tenant': 'tenants', 'vim': 'datacenters', 'vim_account': 'datacenters', 'sdn': 'sdn_controllers',
- 'vnfd': 'vnfs', 'nsd': 'scenarios',
+ 'vnfd': 'vnfs', 'nsd': 'scenarios',
'ns': 'instances'}
mandatory_for_create = {
'tenant': ("name", ),
- 'vnfd': ("name", "id", "connection-point", "vdu"),
- 'nsd': ("name", "id", "constituent-vnfd"),
+ 'vnfd': ("name", "id"),
+ 'nsd': ("name", "id"),
'ns': ("name", "scenario", "datacenter"),
'vim': ("name", "vim_url"),
'vim_account': (),
try:
UUID(uuid_text)
return True
- except (ValueError, TypeError):
+ except Exception:
return False
@staticmethod
"""
ns_info = {}
for vnf in ns_descriptor["vnfs"]:
- if not vnf.get("ip_address"):
+ if not vnf.get("ip_address") and vnf.get("vms"):
raise ROClientException("ns member_vnf_index '{}' has no IP address".format(
vnf["member_vnf_index"]), http_code=409)
vnfr_info = {
all_tenants = None
with aiohttp.ClientSession(loop=self.loop) as session:
- return await self._del_item(session, self.client_to_RO[item], item_id_name, all_tenants=all_tenants)
+ result = await self._del_item(session, self.client_to_RO[item], item_id_name, all_tenants=all_tenants)
+ # in case of ns delete, get the action_id embeded in text
+ if item == "ns" and result.get("result"):
+ _, _, action_id = result["result"].partition("action_id=")
+ action_id, _, _ = action_id.partition(" ")
+ if action_id:
+ result["action_id"] = action_id
+ return result
except aiohttp.errors.ClientOSError as e:
raise ROClientException(e, http_code=504)
except asyncio.TimeoutError:
async def create(self, item, descriptor=None, descriptor_format=None, **kwargs):
"""
Creates an item from its descriptor
- :param item: can be 'tenant', 'vnfd', 'nsd', 'ns', 'vim', 'vim_account', 'sdn'
+ :param item: can be 'tenant', 'vnfd', 'nsd', 'ns', 'vim', 'vim_account', 'sdn', nstd
: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