fix a few bugs with the session and oauth2 cleanup scheduled jobs

see: https://github.com/ansible/tower/issues/3940
This commit is contained in:
Ryan Petrello
2019-11-25 11:50:09 -05:00
parent a1af4e1808
commit ea5d429399
4 changed files with 30 additions and 20 deletions

View File

@@ -4658,6 +4658,10 @@ class ScheduleSerializer(LaunchConfigurationBaseSerializer, SchedulePreviewSeria
def get_summary_fields(self, obj): def get_summary_fields(self, obj):
summary_fields = super(ScheduleSerializer, self).get_summary_fields(obj) summary_fields = super(ScheduleSerializer, self).get_summary_fields(obj)
if isinstance(obj.unified_job_template, SystemJobTemplate):
summary_fields['unified_job_template']['job_type'] = obj.unified_job_template.job_type
if 'inventory' in summary_fields: if 'inventory' in summary_fields:
return summary_fields return summary_fields

View File

@@ -1179,18 +1179,19 @@ class SystemJobTemplate(UnifiedJobTemplate, SystemJobOptions):
for key in unallowed_vars: for key in unallowed_vars:
rejected[key] = data.pop(key) rejected[key] = data.pop(key)
if 'days' in data: if self.job_type in ('cleanup_jobs', 'cleanup_activitystream'):
try: if 'days' in data:
if type(data['days']) is bool: try:
raise ValueError if isinstance(data['days'], (bool, type(None))):
if float(data['days']) != int(data['days']): raise ValueError
raise ValueError if float(data['days']) != int(data['days']):
days = int(data['days']) raise ValueError
if days < 0: days = int(data['days'])
raise ValueError if days < 0:
except ValueError: raise ValueError
errors_list.append(_("days must be a positive integer.")) except ValueError:
rejected['days'] = data.pop('days') errors_list.append(_("days must be a positive integer."))
rejected['days'] = data.pop('days')
if errors_list: if errors_list:
errors['extra_vars'] = errors_list errors['extra_vars'] = errors_list

View File

@@ -2761,10 +2761,11 @@ class RunSystemJob(BaseTask):
json_vars = {} json_vars = {}
else: else:
json_vars = json.loads(system_job.extra_vars) json_vars = json.loads(system_job.extra_vars)
if 'days' in json_vars: if system_job.job_type in ('cleanup_jobs', 'cleanup_activitystream'):
args.extend(['--days', str(json_vars.get('days', 60))]) if 'days' in json_vars:
if 'dry_run' in json_vars and json_vars['dry_run']: args.extend(['--days', str(json_vars.get('days', 60))])
args.extend(['--dry-run']) if 'dry_run' in json_vars and json_vars['dry_run']:
args.extend(['--dry-run'])
if system_job.job_type == 'cleanup_jobs': if system_job.job_type == 'cleanup_jobs':
args.extend(['--jobs', '--project-updates', '--inventory-updates', args.extend(['--jobs', '--project-updates', '--inventory-updates',
'--management-jobs', '--ad-hoc-commands', '--workflow-jobs', '--management-jobs', '--ad-hoc-commands', '--workflow-jobs',

View File

@@ -12,7 +12,9 @@ from awx.main.models import SystemJobTemplate
{"days": 13435}, {"days": 13435},
]) ])
def test_valid__clean_extra_data_system_jobs(extra_data): def test_valid__clean_extra_data_system_jobs(extra_data):
accepted, rejected, errors = SystemJobTemplate().accept_or_ignore_variables(extra_data) accepted, rejected, errors = SystemJobTemplate(
job_type='cleanup_jobs'
).accept_or_ignore_variables(extra_data)
assert not rejected assert not rejected
assert not errors assert not errors
@@ -32,12 +34,14 @@ def test_valid__clean_extra_data_system_jobs(extra_data):
{"days": "foobar"}, {"days": "foobar"},
]) ])
def test_invalid__extra_data_system_jobs(extra_data): def test_invalid__extra_data_system_jobs(extra_data):
accepted, rejected, errors = SystemJobTemplate().accept_or_ignore_variables(extra_data) accepted, rejected, errors = SystemJobTemplate(
job_type='cleanup_jobs'
).accept_or_ignore_variables(extra_data)
assert str(errors['extra_vars'][0]) == u'days must be a positive integer.' assert str(errors['extra_vars'][0]) == u'days must be a positive integer.'
def test_unallowed_system_job_data(): def test_unallowed_system_job_data():
sjt = SystemJobTemplate() sjt = SystemJobTemplate(job_type='cleanup_jobs')
accepted, ignored, errors = sjt.accept_or_ignore_variables({ accepted, ignored, errors = sjt.accept_or_ignore_variables({
'days': 34, 'days': 34,
'foobar': 'baz' 'foobar': 'baz'
@@ -54,7 +58,7 @@ def test_reject_other_prommpts():
def test_reject_some_accept_some(): def test_reject_some_accept_some():
sjt = SystemJobTemplate() sjt = SystemJobTemplate(job_type='cleanup_jobs')
accepted, ignored, errors = sjt._accept_or_ignore_job_kwargs(limit="", extra_vars={ accepted, ignored, errors = sjt._accept_or_ignore_job_kwargs(limit="", extra_vars={
'days': 34, 'days': 34,
'foobar': 'baz' 'foobar': 'baz'