Always run post playbooks

Post playbooks get us things like logs.  Including logs from
pre-playbooks.

Generally, we want to retry the job if a pre-playbook fails.  However,
if it keeps failing, we run into the RETRY_LIMIT and stop trying.  In
that case, we would like to see the logs from the failed job.  To make
that happen, always run all of the post-playbooks for a job, even if
the pre-playbooks have failed.

Change-Id: I8457e5a89a3cc34c351f1f861847c5fbe231e28e
This commit is contained in:
James E. Blair 2017-06-30 14:14:04 -07:00
parent 547af8e8fd
commit 7d5a8fe2d1
1 changed files with 23 additions and 17 deletions

View File

@ -882,6 +882,7 @@ class AnsibleJob(object):
def runPlaybooks(self, args):
result = None
pre_failed = False
for playbook in self.jobdir.pre_playbooks:
# TODOv3(pabelanger): Implement pre-run timeout setting.
pre_status, pre_code = self.runAnsiblePlaybook(
@ -889,31 +890,36 @@ class AnsibleJob(object):
if pre_status != self.RESULT_NORMAL or pre_code != 0:
# These should really never fail, so return None and have
# zuul try again
pre_failed = True
break
if not pre_failed:
job_status, job_code = self.runAnsiblePlaybook(
self.jobdir.playbook, args['timeout'])
if job_status == self.RESULT_TIMED_OUT:
return 'TIMED_OUT'
if job_status == self.RESULT_ABORTED:
return 'ABORTED'
if job_status != self.RESULT_NORMAL:
# The result of the job is indeterminate. Zuul will
# run it again.
return result
job_status, job_code = self.runAnsiblePlaybook(
self.jobdir.playbook, args['timeout'])
if job_status == self.RESULT_TIMED_OUT:
return 'TIMED_OUT'
if job_status == self.RESULT_ABORTED:
return 'ABORTED'
if job_status != self.RESULT_NORMAL:
# The result of the job is indeterminate. Zuul will
# run it again.
return result
success = (job_code == 0)
if success:
result = 'SUCCESS'
else:
result = 'FAILURE'
success = (job_code == 0)
if success:
result = 'SUCCESS'
else:
result = 'FAILURE'
for playbook in self.jobdir.post_playbooks:
# TODOv3(pabelanger): Implement post-run timeout setting.
post_status, post_code = self.runAnsiblePlaybook(
playbook, args['timeout'], success)
if post_status != self.RESULT_NORMAL or post_code != 0:
result = 'POST_FAILURE'
# If we encountered a pre-failure, that takes
# precedence over the post result.
if not pre_failed:
result = 'POST_FAILURE'
return result
def getHostList(self, args):