Skip to content

Commit

Permalink
Improved error handling on executing control tasks
Browse files Browse the repository at this point in the history
  • Loading branch information
Joris De Winne committed Dec 1, 2016
1 parent da1aaad commit 3da2e4c
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 26 deletions.
42 changes: 20 additions & 22 deletions src/main/resources/xldeploy/XLDeployClient.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
8 changes: 4 additions & 4 deletions src/main/resources/xldeploy/controlTask.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit 3da2e4c

Please sign in to comment.