Merge pull request #4798 from AlanCoding/workflow_removal

Add workflow jobs to cleanup_jobs management job
This commit is contained in:
Alan Rominger
2017-01-18 16:24:00 -05:00
committed by GitHub
2 changed files with 33 additions and 8 deletions

View File

@@ -12,7 +12,7 @@ from django.db import transaction
from django.utils.timezone import now from django.utils.timezone import now
# AWX # AWX
from awx.main.models import Job, AdHocCommand, ProjectUpdate, InventoryUpdate, SystemJob from awx.main.models import Job, AdHocCommand, ProjectUpdate, InventoryUpdate, SystemJob, WorkflowJob
class Command(NoArgsCommand): class Command(NoArgsCommand):
@@ -30,19 +30,22 @@ class Command(NoArgsCommand):
'be removed)'), 'be removed)'),
make_option('--jobs', dest='only_jobs', action='store_true', make_option('--jobs', dest='only_jobs', action='store_true',
default=False, default=False,
help='Only remove jobs'), help='Remove jobs'),
make_option('--ad-hoc-commands', dest='only_ad_hoc_commands', make_option('--ad-hoc-commands', dest='only_ad_hoc_commands',
action='store_true', default=False, action='store_true', default=False,
help='Only remove ad hoc commands'), help='Remove ad hoc commands'),
make_option('--project-updates', dest='only_project_updates', make_option('--project-updates', dest='only_project_updates',
action='store_true', default=False, action='store_true', default=False,
help='Only remove project updates'), help='Remove project updates'),
make_option('--inventory-updates', dest='only_inventory_updates', make_option('--inventory-updates', dest='only_inventory_updates',
action='store_true', default=False, action='store_true', default=False,
help='Only remove inventory updates'), help='Remove inventory updates'),
make_option('--management-jobs', default=False, make_option('--management-jobs', default=False,
action='store_true', dest='only_management_jobs', action='store_true', dest='only_management_jobs',
help='Only remove management jobs') help='Remove management jobs'),
make_option('--workflow-jobs', default=False,
action='store_true', dest='only_workflow_jobs',
help='Remove workflow jobs')
) )
def cleanup_jobs(self): def cleanup_jobs(self):
@@ -169,6 +172,28 @@ class Command(NoArgsCommand):
self.logger.addHandler(handler) self.logger.addHandler(handler)
self.logger.propagate = False self.logger.propagate = False
def cleanup_workflow_jobs(self):
skipped, deleted = 0, 0
for workflow_job in WorkflowJob.objects.all():
workflow_job_display = '"{}" (started {}, {} nodes)'.format(
unicode(workflow_job), unicode(workflow_job.created),
workflow_job.workflow_nodes.count())
if workflow_job.status in ('pending', 'waiting', 'running'):
action_text = 'would skip' if self.dry_run else 'skipping'
self.logger.debug('%s %s job %s', action_text, workflow_job.status, workflow_job_display)
skipped += 1
elif workflow_job.created >= self.cutoff:
action_text = 'would skip' if self.dry_run else 'skipping'
self.logger.debug('%s %s', action_text, workflow_job_display)
skipped += 1
else:
action_text = 'would delete' if self.dry_run else 'deleting'
self.logger.info('%s %s', action_text, workflow_job_display)
if not self.dry_run:
workflow_job.delete()
deleted += 1
return skipped, deleted
@transaction.atomic @transaction.atomic
def handle_noargs(self, **options): def handle_noargs(self, **options):
self.verbosity = int(options.get('verbosity', 1)) self.verbosity = int(options.get('verbosity', 1))
@@ -179,7 +204,7 @@ class Command(NoArgsCommand):
self.cutoff = now() - datetime.timedelta(days=self.days) self.cutoff = now() - datetime.timedelta(days=self.days)
except OverflowError: except OverflowError:
raise CommandError('--days specified is too large. Try something less than 99999 (about 270 years).') raise CommandError('--days specified is too large. Try something less than 99999 (about 270 years).')
model_names = ('jobs', 'ad_hoc_commands', 'project_updates', 'inventory_updates', 'management_jobs') model_names = ('jobs', 'ad_hoc_commands', 'project_updates', 'inventory_updates', 'management_jobs', 'workflow_jobs')
models_to_cleanup = set() models_to_cleanup = set()
for m in model_names: for m in model_names:
if options.get('only_%s' % m, False): if options.get('only_%s' % m, False):

View File

@@ -1868,7 +1868,7 @@ class RunSystemJob(BaseTask):
if 'days' in json_vars and system_job.job_type != 'cleanup_facts': if 'days' in json_vars and system_job.job_type != 'cleanup_facts':
args.extend(['--days', str(json_vars.get('days', 60))]) args.extend(['--days', str(json_vars.get('days', 60))])
if system_job.job_type == 'cleanup_jobs': if system_job.job_type == 'cleanup_jobs':
args.extend(['--jobs', '--project-updates', '--inventory-updates', '--management-jobs', '--ad-hoc-commands']) args.extend(['--jobs', '--project-updates', '--inventory-updates', '--management-jobs', '--ad-hoc-commands', '--workflow-jobs'])
if system_job.job_type == 'cleanup_facts': if system_job.job_type == 'cleanup_facts':
if 'older_than' in json_vars: if 'older_than' in json_vars:
args.extend(['--older_than', str(json_vars['older_than'])]) args.extend(['--older_than', str(json_vars['older_than'])])