From 3da2e4c5d85b9dee2adeef99a6d5651f13624de7 Mon Sep 17 00:00:00 2001 From: Joris De Winne Date: Thu, 1 Dec 2016 11:02:45 -0800 Subject: [PATCH] Improved error handling on executing control tasks --- src/main/resources/xldeploy/XLDeployClient.py | 42 +++++++++---------- src/main/resources/xldeploy/controlTask.py | 8 ++-- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/src/main/resources/xldeploy/XLDeployClient.py b/src/main/resources/xldeploy/XLDeployClient.py index 36b589f..f89b2cb 100644 --- a/src/main/resources/xldeploy/XLDeployClient.py +++ b/src/main/resources/xldeploy/XLDeployClient.py @@ -26,50 +26,48 @@ def extract_state(self, task_state_xml): state = task_state_xml[state_pos + state_offset:state_end_pos] return state - def getParameterTypeName(self, root): + def get_parameter_type_name(self, root): params = root.find("parameters") if params: for child in params: return child.tag - def getParameterNames(self, parameterTypeId): - metadata_url = "/deployit/metadata/type/%s" % (parameterTypeId) + def get_parameter_names(self, parameter_type_id): + metadata_url = "/deployit/metadata/type/%s" % (parameter_type_id) metadata_response = self.http_request.get(metadata_url, contentType='application/xml') root = ET.fromstring(metadata_response.getResponse()) params = root.find("property-descriptors") if params: - parameterNames = [] + parameter_names = [] for child in params: - parameterNames.append(child.get("name")) - return parameterNames + parameter_names.append(child.get("name")) + return parameter_names - def addParameter(self, root, parameterTypeId, parameterName, parameters): + def add_parameter(self, root, parameter_type_id, parameter_name, parameters): params = root.find("parameters") - propertyDict = dict(ast.literal_eval(parameters)) + property_dict = dict(ast.literal_eval(parameters)) if params: for child in params: - if child.tag == parameterTypeId: - param = ET.SubElement(child, parameterName) - param.text = propertyDict[parameterName] + if child.tag == parameter_type_id: + param = ET.SubElement(child, parameter_name) + param.text = property_dict[parameter_name] def prepare_control_task(self, control_task_name, target_ci_id, parameters=None): - # print 'DEBUG: prepare the control task' prepare_control_task_url = "/deployit/control/prepare/%s/%s" % (control_task_name, target_ci_id) prepare_response = self.http_request.get(prepare_control_task_url, contentType='application/xml') + if not prepare_response.isSuccessful(): + raise Exception("Failed to prepare control task [%s]. Server return [%s], with content [%s]" % (target_ci_id, prepare_response.status, prepare_response.response)) control_obj = prepare_response.getResponse() root = ET.fromstring(control_obj) - # print 'DEBUG: Control obj from /prepare', control_obj, '\n' - parameterTypeId = self.getParameterTypeName(root) - # print 'DEBUG: got parameterTypeId: %s' % parameterTypeId - if parameterTypeId: - parameterNames = self.getParameterNames(parameterTypeId) - # print 'Found parameter names: %s' % parameterNames - for parameterName in parameterNames: - self.addParameter(root, parameterTypeId, parameterName, parameters) - # print 'DEBUG: Control obj after udating parameters ', ET.tostring(root), '\n' + parameter_type_id = self.get_parameter_type_name(root) + if parameter_type_id: + parameter_names = self.get_parameter_names(parameter_type_id) + for parameterName in parameter_names: + self.add_parameter(root, parameter_type_id, parameterName, parameters) invoke_response = self.http_request.post('/deployit/control', ET.tostring(root), contentType='application/xml') + if not invoke_response.isSuccessful(): + raise Exception("Failed to create control task [%s]. Server return [%s], with content [%s]" % (target_ci_id, invoke_response.status, invoke_response.response)) task_id = invoke_response.getResponse() - # print 'DEBUG: Control task ID', task_id, '\n' return task_id def invoke_task_and_wait_for_result(self, task_id, polling_interval=10, number_of_trials=None, continue_if_step_fails=False, number_of_continue_retrials=0, fail_on_pause=True): diff --git a/src/main/resources/xldeploy/controlTask.py b/src/main/resources/xldeploy/controlTask.py index 87a859a..c796813 100644 --- a/src/main/resources/xldeploy/controlTask.py +++ b/src/main/resources/xldeploy/controlTask.py @@ -8,14 +8,14 @@ from xldeploy.XLDeployClientUtil import XLDeployClientUtil -xldClient = XLDeployClientUtil.create_xldeploy_client(xldeployServer, username, password) +xld_client = XLDeployClientUtil.create_xldeploy_client(xldeployServer, username, password) print 'DEBUG: About to prepare %s on %s\n' % (controlTaskName, ciId) -task_id = xldClient.prepare_control_task(controlTaskName, ciId, parameters) +task_id = xld_client.prepare_control_task(controlTaskName, ciId, parameters) print 'DEBUG: About to invoke task and wait for response', task_id, '\n' -task_state = xldClient.invoke_task_and_wait_for_result(task_id, pollingInterval, numberOfPollingTrials, continueIfStepFails, numberOfContinueRetrials) +task_state = xld_client.invoke_task_and_wait_for_result(task_id, pollingInterval, numberOfPollingTrials, continueIfStepFails, numberOfContinueRetrials) print 'DEBUG: Task state for', task_id, ':', task_state, '\n' -xldClient.archive_task(task_id) +xld_client.archive_task(task_id) if task_state in ('DONE','EXECUTED'): sys.exit(0) sys.exit(1)