X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osmclient%2Fsol005%2Fns.py;h=b551868dc0ce6f54958696c3eca4dc8ebda68e0f;hb=bcb78331f0e8a321585fc7b84e9b7857a90ecb6c;hp=2fce5ab90fc30d99c66324eefc49fdd070e12281;hpb=e0fb4995c67792f01648cbc7e331879fc661a572;p=osm%2Fosmclient.git diff --git a/osmclient/sol005/ns.py b/osmclient/sol005/ns.py index 2fce5ab..b551868 100644 --- a/osmclient/sol005/ns.py +++ b/osmclient/sol005/ns.py @@ -40,15 +40,17 @@ class Ns(object): self._apiVersion, self._apiResource) # NS '--wait' option - def _wait(self, id, deleteFlag=False): + def _wait(self, id, wait_time, deleteFlag=False): self._logger.debug("") # Endpoint to get operation status apiUrlStatus = '{}{}{}'.format(self._apiName, self._apiVersion, '/ns_lcm_op_occs') # Wait for status for NS instance creation/update/deletion + if isinstance(wait_time, bool): + wait_time = WaitForStatus.TIMEOUT_NS_OPERATION WaitForStatus.wait_for_status( 'NS', str(id), - WaitForStatus.TIMEOUT_NS_OPERATION, + wait_time, apiUrlStatus, self._http.get2_cmd, deleteFlag=deleteFlag) @@ -101,6 +103,18 @@ class Ns(object): raise NotFound("ns '{}' not found".format(name)) def delete(self, name, force=False, config=None, wait=False): + """ + Deletes a Network Service (NS) + :param name: name of network service + :param force: set force. Direct deletion without cleaning at VIM + :param config: parameters of deletion, as: + autoremove: Bool (default True) + timeout_ns_terminate: int + skip_terminate_primitives: Bool (default False) to not exec the terminate primitives + :param wait: Make synchronous. Wait until deletion is completed: + False to not wait (by default), True to wait a standard time, or int (time to wait) + :return: None. Exception if fail + """ self._logger.debug("") ns = self.get(name) querystring_list = [] @@ -123,7 +137,7 @@ class Ns(object): if wait and resp: resp = json.loads(resp) # For the 'delete' operation, '_id' is used - self._wait(resp.get('_id'), deleteFlag=True) + self._wait(resp.get('_id'), wait, deleteFlag=True) else: print('Deletion in progress') elif http_code == 204: @@ -190,10 +204,10 @@ class Ns(object): ns_config["vld"] = ns_config.pop("vim-network-name") if "vld" in ns_config: if not isinstance(ns_config["vld"], list): - raise ValueError("Error at --config 'vld' must be a list of dictionaries") + raise ClientException("Error at --config 'vld' must be a list of dictionaries") for vld in ns_config["vld"]: if not isinstance(vld, dict): - raise ValueError("Error at --config 'vld' must be a list of dictionaries") + raise ClientException("Error at --config 'vld' must be a list of dictionaries") if vld.get("vim-network-name"): if isinstance(vld["vim-network-name"], dict): vim_network_name_dict = {} @@ -209,15 +223,15 @@ class Ns(object): if "additionalParamsForNs" in ns_config: if not isinstance(ns_config["additionalParamsForNs"], dict): - raise ValueError("Error at --config 'additionalParamsForNs' must be a dictionary") + raise ClientException("Error at --config 'additionalParamsForNs' must be a dictionary") if "additionalParamsForVnf" in ns_config: if not isinstance(ns_config["additionalParamsForVnf"], list): - raise ValueError("Error at --config 'additionalParamsForVnf' must be a list") + raise ClientException("Error at --config 'additionalParamsForVnf' must be a list") for additional_param_vnf in ns_config["additionalParamsForVnf"]: if not isinstance(additional_param_vnf, dict): - raise ValueError("Error at --config 'additionalParamsForVnf' items must be dictionaries") + raise ClientException("Error at --config 'additionalParamsForVnf' items must be dictionaries") if not additional_param_vnf.get("member-vnf-index"): - raise ValueError("Error at --config 'additionalParamsForVnf' items must contain " + raise ClientException("Error at --config 'additionalParamsForVnf' items must contain " "'member-vnf-index'") if "wim_account" in ns_config: wim_account = ns_config.pop("wim_account") @@ -250,7 +264,7 @@ class Ns(object): resp)) if wait: # Wait for status for NS instance creation - self._wait(resp.get('nslcmop_id')) + self._wait(resp.get('nslcmop_id'), wait) print(resp['id']) return resp['id'] #else: @@ -280,7 +294,7 @@ class Ns(object): filter_string = '' if filter: filter_string = '&{}'.format(filter) - http_code, resp = self._http.get2_cmd('{}?nsInstanceId={}'.format( + http_code, resp = self._http.get2_cmd('{}?nsInstanceId={}{}'.format( self._apiBase, ns['_id'], filter_string) ) #print('HTTP CODE: {}'.format(http_code)) @@ -364,7 +378,7 @@ class Ns(object): if wait: # Wait for status for NS instance action # For the 'action' operation, 'id' is used - self._wait(resp.get('id')) + self._wait(resp.get('id'), wait) return resp['id'] #else: # msg = "" @@ -380,7 +394,7 @@ class Ns(object): str(exc)) raise ClientException(message) - def scale_vnf(self, ns_name, vnf_name, scaling_group, scale_in, scale_out, wait=False): + def scale_vnf(self, ns_name, vnf_name, scaling_group, scale_in, scale_out, wait=False, timeout=None): """Scales a VNF by adding/removing VDUs """ self._logger.debug("") @@ -389,14 +403,18 @@ class Ns(object): op_data={} op_data["scaleType"] = "SCALE_VNF" op_data["scaleVnfData"] = {} - if scale_in: + if scale_in and not scale_out: op_data["scaleVnfData"]["scaleVnfType"] = "SCALE_IN" - else: + elif not scale_in and scale_out: op_data["scaleVnfData"]["scaleVnfType"] = "SCALE_OUT" + else: + raise ClientException("you must set either 'scale_in' or 'scale_out'") op_data["scaleVnfData"]["scaleByStepData"] = { "member-vnf-index": vnf_name, "scaling-group-descriptor": scaling_group, } + if timeout: + op_data["timeout_ns_scale"] = timeout op_id = self.exec_op(ns_name, op_name='scale', op_data=op_data, wait=wait) print(str(op_id)) except ClientException as exc: