X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osmclient%2Fsol005%2Fnsi.py;h=b582ae1ab1ec664ee0285b336d4c3ba655d6e6f2;hb=refs%2Fchanges%2F85%2F8385%2F14;hp=0fcfe1d979288b65440f34e15d5c72e68cb37783;hpb=36253c72d4f7456d6a5b2a199d2e544e699f3d99;p=osm%2Fosmclient.git diff --git a/osmclient/sol005/nsi.py b/osmclient/sol005/nsi.py index 0fcfe1d..b582ae1 100644 --- a/osmclient/sol005/nsi.py +++ b/osmclient/sol005/nsi.py @@ -22,8 +22,10 @@ from osmclient.common import utils from osmclient.common import wait as WaitForStatus from osmclient.common.exceptions import ClientException from osmclient.common.exceptions import NotFound +from osmclient.common.exceptions import OsmHttpException import yaml import json +import logging class Nsi(object): @@ -31,6 +33,7 @@ class Nsi(object): def __init__(self, http=None, client=None): self._http = http self._client = client + self._logger = logging.getLogger('osmclient') self._apiName = '/nsilcm' self._apiVersion = '/v1' self._apiResource = '/netslice_instances_content' @@ -39,6 +42,7 @@ class Nsi(object): # NSI '--wait' option def _wait(self, id, deleteFlag=False): + self._logger.debug("") self._client.get_token() # Endpoint to get operation status apiUrlStatus = '{}{}{}'.format(self._apiName, self._apiVersion, '/nsi_lcm_op_occs') @@ -54,18 +58,20 @@ class Nsi(object): def list(self, filter=None): """Returns a list of NSI """ + self._logger.debug("") self._client.get_token() filter_string = '' if filter: filter_string = '?{}'.format(filter) - resp = self._http.get_cmd('{}{}'.format(self._apiBase,filter_string)) + _, resp = self._http.get2_cmd('{}{}'.format(self._apiBase,filter_string)) if resp: - return resp + return json.loads(resp) return list() def get(self, name): """Returns an NSI based on name or id """ + self._logger.debug("") self._client.get_token() if utils.validate_uuid4(name): for nsi in self.list(): @@ -78,6 +84,7 @@ class Nsi(object): raise NotFound("nsi {} not found".format(name)) def get_individual(self, name): + self._logger.debug("") nsi_id = name self._client.get_token() if not utils.validate_uuid4(name): @@ -85,14 +92,15 @@ class Nsi(object): if name == nsi['name']: nsi_id = nsi['_id'] break - resp = self._http.get_cmd('{}/{}'.format(self._apiBase, nsi_id)) + _, resp = self._http.get2_cmd('{}/{}'.format(self._apiBase, nsi_id)) #resp = self._http.get_cmd('{}/{}/nsd_content'.format(self._apiBase, nsi_id)) #print(yaml.safe_dump(resp)) if resp: - return resp + return json.loads(resp) raise NotFound("nsi {} not found".format(name)) def delete(self, name, force=False, wait=False): + self._logger.debug("") nsi = self.get(name) querystring = '' if force: @@ -118,18 +126,20 @@ class Nsi(object): msg = json.loads(resp) except ValueError: msg = resp - raise ClientException("failed to delete nsi {} - {}".format(name, msg)) + raise OsmHttpException("failed to delete nsi {} - {}".format(name, msg)) def create(self, nst_name, nsi_name, account, config=None, ssh_keys=None, description='default description', admin_status='ENABLED', wait=False): + self._logger.debug("") self._client.get_token() nst = self._client.nst.get(nst_name) vim_account_id = {} def get_vim_account_id(vim_account): + self._logger.debug("") if vim_account_id.get(vim_account): return vim_account_id[vim_account] @@ -203,6 +213,8 @@ class Nsi(object): not additional_param_subnet.get("additionalParamsForVnf"): raise ValueError("Error at --config 'additionalParamsForSubnet' items must contain " "'additionalParamsForNs' and/or 'additionalParamsForVnf'") + if "timeout_nsi_deploy" in nsi_config: + nsi["timeout_nsi_deploy"] = nsi_config.pop("timeout_nsi_deploy") # print(yaml.safe_dump(nsi)) try: @@ -215,37 +227,38 @@ class Nsi(object): for (key,val) in list(headers.items())] self._http.set_http_header(http_header) http_code, resp = self._http.post_cmd(endpoint=self._apiBase, - postfields_dict=nsi) + postfields_dict=nsi) #print('HTTP CODE: {}'.format(http_code)) #print('RESP: {}'.format(resp)) - if http_code in (200, 201, 202, 204): - if resp: - resp = json.loads(resp) - if not resp or 'id' not in resp: - raise ClientException('unexpected response from server - {} '.format( - resp)) - if wait: - # Wait for status for NSI instance creation - self._wait(resp.get('nsilcmop_id')) - print(resp['id']) - else: - msg = "" - if resp: - try: - msg = json.loads(resp) - except ValueError: - msg = resp - raise ClientException(msg) + #if http_code in (200, 201, 202, 204): + if resp: + resp = json.loads(resp) + if not resp or 'id' not in resp: + raise ClientException('unexpected response from server - {} '.format( + resp)) + if wait: + # Wait for status for NSI instance creation + self._wait(resp.get('nsilcmop_id')) + print(resp['id']) + #else: + # msg = "" + # if resp: + # try: + # msg = json.loads(resp) + # except ValueError: + # msg = resp + # raise ClientException(msg) except ClientException as exc: message="failed to create nsi: {} nst: {}\nerror:\n{}".format( nsi_name, nst_name, str(exc)) - raise ClientException(message) + raise OsmHttpException(message) def list_op(self, name, filter=None): """Returns the list of operations of a NSI """ + self._logger.debug("") nsi = self.get(name) try: self._apiResource = '/nsi_lcm_op_occs' @@ -259,30 +272,31 @@ class Nsi(object): filter_string) ) #print('HTTP CODE: {}'.format(http_code)) #print('RESP: {}'.format(resp)) - if http_code == 200: - if resp: - resp = json.loads(resp) - return resp - else: - raise ClientException('unexpected response from server') + #if http_code == 200: + if resp: + resp = json.loads(resp) + return resp else: - msg = "" - if resp: - try: - resp = json.loads(resp) - msg = resp['detail'] - except ValueError: - msg = resp - raise ClientException(msg) + raise ClientException('unexpected response from server') + #else: + # msg = "" + # if resp: + # try: + # resp = json.loads(resp) + # msg = resp['detail'] + # except ValueError: + # msg = resp + # raise ClientException(msg) except ClientException as exc: message="failed to get operation list of NSI {}:\nerror:\n{}".format( name, str(exc)) - raise ClientException(message) + raise OsmHttpException(message) def get_op(self, operationId): """Returns the status of an operation """ + self._logger.debug("") self._client.get_token() try: self._apiResource = '/nsi_lcm_op_occs' @@ -291,30 +305,31 @@ class Nsi(object): http_code, resp = self._http.get2_cmd('{}/{}'.format(self._apiBase, operationId)) #print('HTTP CODE: {}'.format(http_code)) #print('RESP: {}'.format(resp)) - if http_code == 200: - if resp: - resp = json.loads(resp) - return resp - else: - raise ClientException('unexpected response from server') + #if http_code == 200: + if resp: + resp = json.loads(resp) + return resp else: - msg = "" - if resp: - try: - resp = json.loads(resp) - msg = resp['detail'] - except ValueError: - msg = resp - raise ClientException(msg) + raise ClientException('unexpected response from server') + #else: + # msg = "" + # if resp: + # try: + # resp = json.loads(resp) + # msg = resp['detail'] + # except ValueError: + # msg = resp + # raise ClientException(msg) except ClientException as exc: message="failed to get status of operation {}:\nerror:\n{}".format( operationId, str(exc)) - raise ClientException(message) + raise OsmHttpException(message) def exec_op(self, name, op_name, op_data=None): """Executes an operation on a NSI """ + self._logger.debug("") nsi = self.get(name) try: self._apiResource = '/netslice_instances' @@ -326,24 +341,24 @@ class Nsi(object): http_code, resp = self._http.post_cmd(endpoint=endpoint, postfields_dict=op_data) #print('HTTP CODE: {}'.format(http_code)) #print('RESP: {}'.format(resp)) - if http_code in (200, 201, 202, 204): - if resp: - resp = json.loads(resp) - if not resp or 'id' not in resp: - raise ClientException('unexpected response from server - {}'.format( - resp)) - print(resp['id']) - else: - msg = "" - if resp: - try: - msg = json.loads(resp) - except ValueError: - msg = resp - raise ClientException(msg) + #if http_code in (200, 201, 202, 204): + if resp: + resp = json.loads(resp) + if not resp or 'id' not in resp: + raise ClientException('unexpected response from server - {}'.format( + resp)) + print(resp['id']) + #else: + # msg = "" + # if resp: + # try: + # msg = json.loads(resp) + # except ValueError: + # msg = resp + # raise ClientException(msg) except ClientException as exc: message="failed to exec operation {}:\nerror:\n{}".format( name, str(exc)) - raise ClientException(message) + raise OsmHttpException(message)