mirror of
https://github.com/ansible/awx.git
synced 2026-05-24 00:57:48 -02:30
import awxkit
Co-authored-by: Christopher Wang <cwang@ansible.com> Co-authored-by: Jake McDermott <jmcdermott@ansible.com> Co-authored-by: Jim Ladd <jladd@redhat.com> Co-authored-by: Elijah DeLee <kdelee@redhat.com> Co-authored-by: Alan Rominger <arominge@redhat.com> Co-authored-by: Yanis Guenane <yanis@guenane.org>
This commit is contained in:
86
awxkit/awxkit/api/pages/unified_job_templates.py
Normal file
86
awxkit/awxkit/api/pages/unified_job_templates.py
Normal file
@@ -0,0 +1,86 @@
|
||||
from awxkit.api.resources import resources
|
||||
from awxkit.utils import random_title, update_payload
|
||||
from awxkit.api.mixins import HasStatus
|
||||
from . import base
|
||||
from . import page
|
||||
|
||||
|
||||
class UnifiedJobTemplate(HasStatus, base.Base):
|
||||
"""Base class for unified job template pages (e.g. project, inventory_source,
|
||||
and job_template).
|
||||
"""
|
||||
|
||||
optional_schedule_fields = (
|
||||
'extra_data',
|
||||
'diff_mode',
|
||||
'limit',
|
||||
'job_tags',
|
||||
'skip_tags',
|
||||
'job_type',
|
||||
'verbosity',
|
||||
'inventory',
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
# NOTE: I use .replace('%', '%%') to workaround an odd string
|
||||
# formatting issue where result_stdout contained '%s'. This later caused
|
||||
# a python traceback when attempting to display output from this
|
||||
# method.
|
||||
items = [
|
||||
'id',
|
||||
'name',
|
||||
'status',
|
||||
'source',
|
||||
'last_update_failed',
|
||||
'last_updated',
|
||||
'result_traceback',
|
||||
'job_explanation',
|
||||
'job_args']
|
||||
info = []
|
||||
for item in [x for x in items if hasattr(self, x)]:
|
||||
info.append('{0}:{1}'.format(item, getattr(self, item)))
|
||||
output = '<{0.__class__.__name__} {1}>'.format(self, ', '.join(info))
|
||||
return output.replace('%', '%%')
|
||||
|
||||
def add_schedule(
|
||||
self,
|
||||
name='',
|
||||
description='',
|
||||
enabled=True,
|
||||
rrule=None,
|
||||
**kwargs):
|
||||
if rrule is None:
|
||||
rrule = "DTSTART:30180101T000000Z RRULE:FREQ=YEARLY;INTERVAL=1"
|
||||
payload = dict(
|
||||
name=name or "{0} Schedule {1}".format(
|
||||
self.name,
|
||||
random_title()),
|
||||
description=description or random_title(10),
|
||||
enabled=enabled,
|
||||
rrule=str(rrule))
|
||||
|
||||
update_payload(payload, self.optional_schedule_fields, kwargs)
|
||||
|
||||
return self.related.schedules.post(payload)
|
||||
|
||||
@property
|
||||
def is_successful(self):
|
||||
"""An unified_job_template is considered successful when:
|
||||
1) status == 'successful'
|
||||
2) not last_update_failed
|
||||
3) last_updated
|
||||
"""
|
||||
return super(
|
||||
UnifiedJobTemplate,
|
||||
self).is_successful and not self.last_update_failed and self.last_updated is not None
|
||||
|
||||
|
||||
page.register_page(resources.unified_job_template, UnifiedJobTemplate)
|
||||
|
||||
|
||||
class UnifiedJobTemplates(page.PageList, UnifiedJobTemplate):
|
||||
|
||||
pass
|
||||
|
||||
|
||||
page.register_page(resources.unified_job_templates, UnifiedJobTemplates)
|
||||
Reference in New Issue
Block a user