X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osmclient%2Fv1%2Fns.py;h=e6b747fd78a75ac35f65a6a3a07189a85ac329fa;hb=f6a4f77b98e5f05b74938b44bcbb2ed148e4941a;hp=fc3fe06a0cbccc3810e2b66436ae081ba71be9f1;hpb=4c7e237e45bc6fe209006b4837a8e6b031e78e1c;p=osm%2Fosmclient.git diff --git a/osmclient/v1/ns.py b/osmclient/v1/ns.py index fc3fe06..e6b747f 100644 --- a/osmclient/v1/ns.py +++ b/osmclient/v1/ns.py @@ -22,6 +22,7 @@ from osmclient.common import utils from osmclient.common.exceptions import ClientException from osmclient.common.exceptions import NotFound import uuid +import yaml class Ns(object): @@ -33,8 +34,8 @@ class Ns(object): def list(self): """Returns a list of ns's """ - resp = self._http.get_cmd('api/running/ns-instance-config') - + resp = self._http.get_cmd('api/running/{}ns-instance-config' + .format(self._client.so_rbac_project_path)) if not resp or 'nsr:ns-instance-config' not in resp: return list() @@ -60,15 +61,15 @@ class Ns(object): ns = self.get(ns_name) resp = self._http.post_cmd( - 'v1/api/config/ns-instance-config/nsr/{}/scaling-group/{}/instance' - .format(ns['id'], ns_scale_group), postdata) + 'v1/api/config/{}ns-instance-config/nsr/{}/scaling-group/{}/instance' + .format(self._client.so_rbac_project_path, ns['id'], ns_scale_group), postdata) if 'success' not in resp: raise ClientException( "failed to scale ns: {} result: {}".format( ns_name, resp)) - def create(self, nsd_name, nsr_name, account, vim_network_prefix=None, + def create(self, nsd_name, nsr_name, account, config=None, ssh_keys=None, description='default description', admin_status='ENABLED'): postdata = {} @@ -77,17 +78,32 @@ class Ns(object): nsr['id'] = str(uuid.uuid1()) nsd = self._client.nsd.get(nsd_name) - - datacenter = self._client.vim.get_datacenter(account) - if datacenter is None: - raise NotFound("cannot find datacenter account {}".format(account)) + + if self._client._so_version == 'v3': + datacenter, resource_orchestrator = self._client.vim.get_datacenter(account) + if datacenter is None or resource_orchestrator is None: + raise NotFound("cannot find datacenter account {}".format(account)) + if 'uuid' not in datacenter: + raise NotFound("The RO Datacenter - {} is invalid. Please select another".format(account)) + else: + # Backwards Compatiility + datacenter = self._client.vim.get_datacenter(account) + if datacenter is None: + raise NotFound("cannot find datacenter account {}".format(account)) nsr['nsd'] = nsd nsr['name'] = nsr_name nsr['short-name'] = nsr_name nsr['description'] = description nsr['admin-status'] = admin_status - nsr['om-datacenter'] = datacenter['uuid'] + + if self._client._so_version == 'v3': + # New format for V3 + nsr['resource-orchestrator'] = resource_orchestrator + nsr['datacenter'] = datacenter['name'] + else: + # Backwards Compatiility + nsr['om-datacenter'] = datacenter['uuid'] if ssh_keys is not None: # ssh_keys is comma separate list @@ -97,16 +113,26 @@ class Ns(object): nsr['ssh-authorized-key'] = ssh_keys_format - if vim_network_prefix is not None: - for index, vld in enumerate(nsr['nsd']['vld']): - network_name = vld['name'] - nsr['nsd']['vld'][index]['vim-network-name'] = '{}-{}'.format( - vim_network_prefix, network_name) + ns_config = {} + + if config: + ns_config = yaml.safe_load(config) + + if ns_config and 'vim-network-name' in ns_config: + for network in ns_config['vim-network-name']: + # now find this network + vld_name = network['name'] + # vim_vld_name = network['vim-network-name'] + + for index, vld in enumerate(nsr['nsd']['vld']): + if vld['name'] == vld_name: + nsr['nsd']['vld'][index]['vim-network-name'] = network['vim-network-name'] postdata['nsr'].append(nsr) resp = self._http.post_cmd( - 'api/config/ns-instance-config/nsr', + 'api/config/{}ns-instance-config/nsr' + .format(self._client.so_rbac_project_path), postdata) if 'success' not in resp: @@ -118,7 +144,8 @@ class Ns(object): def get_opdata(self, id): return self._http.get_cmd( - 'api/operational/ns-instance-opdata/nsr/{}?deep'.format(id)) + 'api/operational/{}ns-instance-opdata/nsr/{}?deep' + .format(self._client.so_rbac_project_path, id)) def get_field(self, ns_name, field): nsr = self.get(ns_name) @@ -140,8 +167,8 @@ class Ns(object): if ns is None: raise NotFound("cannot find ns {}".format(ns_name)) - return self._http.delete_cmd('api/config/ns-instance-config/nsr/' + - ns['id']) + return self._http.delete_cmd('api/config/{}ns-instance-config/nsr/{}' + .format(self._client.so_rbac_project_path, ns['id'])) def delete(self, ns_name, wait=True): vnfs = self.get_field(ns_name, 'constituent-vnfr-ref')