X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osmclient%2Fcommon%2Fwait.py;h=488bc613828fb99e9ded1cc4b5d25fcfdf739a0d;hb=922ce39e2e3d027ee14e6399ee612a1846ed0ad8;hp=f55ed6bc54c612a8040d71635a1ead9be6f1a0f8;hpb=5de571ed5ac38d3225ebdaa257b2b6b453a03bb5;p=osm%2Fosmclient.git diff --git a/osmclient/common/wait.py b/osmclient/common/wait.py index f55ed6b..488bc61 100644 --- a/osmclient/common/wait.py +++ b/osmclient/common/wait.py @@ -30,7 +30,7 @@ TIMEOUT_SDNC_OPERATION = TIMEOUT_GENERIC_OPERATION TIMEOUT_VIM_OPERATION = TIMEOUT_GENERIC_OPERATION TIMEOUT_WIM_OPERATION = TIMEOUT_GENERIC_OPERATION TIMEOUT_NS_OPERATION = 3600 -POLLING_TIME_INTERVAL = 1 +POLLING_TIME_INTERVAL = 5 MAX_DELETE_ATTEMPTS = 3 def _show_detailed_status(old_detailed_status, new_detailed_status): @@ -42,11 +42,11 @@ def _show_detailed_status(old_detailed_status, new_detailed_status): def _get_finished_states(entity): # Note that the member name is either: - # 'operationState' (NS and NSI) - # '_admin.'operationalState' (other) + # 'operationState' (NS, NSI) + # '_admin.'operationalState' (VIM, WIM, SDN) # For NS and NSI, 'operationState' may be one of: # PROCESSING, COMPLETED,PARTIALLY_COMPLETED, FAILED_TEMP,FAILED,ROLLING_BACK,ROLLED_BACK - # For other entities, '_admin.operationalState' may be one of: + # For VIM, WIM, SDN: '_admin.operationalState' may be one of: # operationalState: ENABLED, DISABLED, ERROR, PROCESSING if entity == 'NS' or entity == 'NSI': return ['COMPLETED', 'PARTIALLY_COMPLETED', 'FAILED_TEMP', 'FAILED'] @@ -85,8 +85,24 @@ def _get_detailed_status(resp, entity, detailed_status_deleted): # For NS and NSI, 'detailed-status' is a JSON "root" member: return resp.get('detailed-status') else: - # For other entities, 'detailed-status' a leaf node to '_admin': - return resp.get('_admin', {}).get('detailed-status') + # For VIM, WIM, SDN, 'detailed-status' is either: + # - a leaf node to '_admin' (operations NOT supported) + # - a leaf node of the Nth element in the list '_admin.operations[]' (operations supported by LCM and NBI) + # https://osm.etsi.org/gerrit/#/c/7767 : LCM support for operations + # https://osm.etsi.org/gerrit/#/c/7734 : NBI support for current_operation + ops = resp.get('_admin', {}).get('operations') + op_index = resp.get('_admin', {}).get('current_operation') + if ops and op_index: + # Operations are supported, verify operation index + if isinstance(op_index, (int)) or op_index.isdigit(): + op_index = int(op_index) + if op_index > 0 and op_index < len(ops) and ops[op_index] and ops[op_index]["detailed-status"]: + return ops[op_index]["detailed-status"] + # operation index is either non-numeric or out-of-range + return 'Unexpected error when getting detailed-status!' + else: + # Operations are NOT supported + return resp.get('_admin', {}).get('detailed-status') def _has_delete_error(resp, entity, deleteFlag, delete_attempts_left): if deleteFlag and delete_attempts_left: @@ -118,9 +134,9 @@ def wait_for_status(entity_label, entity_id, timeout, apiUrlStatus, http_cmd, de resp = '' if resp_unicode: resp = json.loads(resp_unicode) - # print 'HTTP CODE: {}'.format(http_code) - # print 'RESP: {}'.format(resp) - # print 'URL: {}/{}'.format(apiUrlStatus, entity_id) + # print('HTTP CODE: {}'.format(http_code)) + # print('RESP: {}'.format(resp)) + # print('URL: {}/{}'.format(apiUrlStatus, entity_id)) if deleteFlag and http_code == 404: # In case of deletion, '404 Not Found' means successfully deleted # Display 'detailed-status: Deleted' and return @@ -157,8 +173,8 @@ def wait_for_status(entity_label, entity_id, timeout, apiUrlStatus, http_cmd, de else: time_to_return = True new_detailed_status = _get_detailed_status(resp, entity_label, detailed_status_deleted) - # print 'DETAILED-STATUS: {}'.format(new_detailed_status) - # print 'DELETE-ATTEMPTS-LEFT: {}'.format(delete_attempts_left) + # print('DETAILED-STATUS: {}'.format(new_detailed_status)) + # print('DELETE-ATTEMPTS-LEFT: {}'.format(delete_attempts_left)) if not new_detailed_status: new_detailed_status = 'In progress' # TODO: Change LCM to provide detailed-status more up to date