1
0
mirror of https://github.com/ansible/awx.git synced 2024-10-27 17:55:10 +03:00

Add approval node logic to awxkit

Co-authored-by: <Apurva bakshiapurva93@gmail.com>
This commit is contained in:
Elijah DeLee 2019-08-13 14:24:27 -04:00 committed by Ryan Petrello
parent adf621d2cf
commit bdf4defdbe
No known key found for this signature in database
GPG Key ID: F2AA5F2122351777
4 changed files with 99 additions and 17 deletions

View File

@ -32,6 +32,7 @@ from .workflow_job_templates import * # NOQA
from .workflow_job_template_nodes import * # NOQA
from .workflow_jobs import * # NOQA
from .workflow_job_nodes import * # NOQA
from .workflow_approvals import * # NOQA
from .settings import * # NOQA
from .instances import * # NOQA
from .instance_groups import * # NOQA

View File

@ -0,0 +1,30 @@
from awxkit.api.pages import UnifiedJob
from awxkit.api.resources import resources
from . import page
from awxkit import exceptions
class WorkflowApproval(UnifiedJob):
def approve(self):
try:
self.related.approve.post()
except exceptions.NoContent:
pass
def deny(self):
try:
self.related.deny.post()
except exceptions.NoContent:
pass
page.register_page(resources.workflow_approval, WorkflowApproval)
class WorkflowApprovals(page.PageList, WorkflowApproval):
pass
page.register_page(resources.workflow_approvals, WorkflowApprovals)

View File

@ -3,7 +3,7 @@ import awxkit.exceptions as exc
from awxkit.api.pages import base, WorkflowJobTemplate, UnifiedJobTemplate, JobTemplate
from awxkit.api.mixins import HasCreate, DSAdapter
from awxkit.api.resources import resources
from awxkit.utils import update_payload, PseudoNamespace, suppress
from awxkit.utils import update_payload, PseudoNamespace, suppress, random_title
from . import page
@ -12,11 +12,24 @@ class WorkflowJobTemplateNode(HasCreate, base.Base):
dependencies = [WorkflowJobTemplate, UnifiedJobTemplate]
def payload(self, workflow_job_template, unified_job_template, **kwargs):
payload = PseudoNamespace(workflow_job_template=workflow_job_template.id,
unified_job_template=unified_job_template.id)
if not unified_job_template:
# May pass "None" to explicitly create an approval node
payload = PseudoNamespace(
workflow_job_template=workflow_job_template.id)
else:
payload = PseudoNamespace(
workflow_job_template=workflow_job_template.id,
unified_job_template=unified_job_template.id)
optional_fields = ('diff_mode', 'extra_data', 'limit', 'job_tags', 'job_type', 'skip_tags', 'verbosity',
'extra_data')
optional_fields = (
'diff_mode',
'extra_data',
'limit',
'job_tags',
'job_type',
'skip_tags',
'verbosity',
'extra_data')
update_payload(payload, optional_fields, kwargs)
@ -25,21 +38,45 @@ class WorkflowJobTemplateNode(HasCreate, base.Base):
return payload
def create_payload(self, workflow_job_template=WorkflowJobTemplate, unified_job_template=JobTemplate, **kwargs):
self.create_and_update_dependencies(workflow_job_template, unified_job_template)
payload = self.payload(workflow_job_template=self.ds.workflow_job_template,
unified_job_template=self.ds.unified_job_template, **kwargs)
def create_payload(
self,
workflow_job_template=WorkflowJobTemplate,
unified_job_template=JobTemplate,
**kwargs):
if not unified_job_template:
self.create_and_update_dependencies(workflow_job_template)
payload = self.payload(
workflow_job_template=self.ds.workflow_job_template,
unified_job_template=None,
**kwargs)
else:
self.create_and_update_dependencies(
workflow_job_template, unified_job_template)
payload = self.payload(
workflow_job_template=self.ds.workflow_job_template,
unified_job_template=self.ds.unified_job_template,
**kwargs)
payload.ds = DSAdapter(self.__class__.__name__, self._dependency_store)
return payload
def create(self, workflow_job_template=WorkflowJobTemplate, unified_job_template=JobTemplate, **kwargs):
payload = self.create_payload(workflow_job_template=workflow_job_template,
unified_job_template=unified_job_template, **kwargs)
return self.update_identity(WorkflowJobTemplateNodes(self.connection).post(payload))
def create(
self,
workflow_job_template=WorkflowJobTemplate,
unified_job_template=JobTemplate,
**kwargs):
payload = self.create_payload(
workflow_job_template=workflow_job_template,
unified_job_template=unified_job_template,
**kwargs)
return self.update_identity(
WorkflowJobTemplateNodes(
self.connection).post(payload))
def _add_node(self, endpoint, unified_job_template):
node = endpoint.post(dict(unified_job_template=unified_job_template.id))
node.create_and_update_dependencies(self.ds.workflow_job_template, unified_job_template)
node = endpoint.post(
dict(unified_job_template=unified_job_template.id))
node.create_and_update_dependencies(
self.ds.workflow_job_template, unified_job_template)
return node
def add_always_node(self, unified_job_template):
@ -67,9 +104,20 @@ class WorkflowJobTemplateNode(HasCreate, base.Base):
self.related.credentials.post(
dict(id=cred.id, disassociate=True))
def make_approval_node(
self,
**kwargs
):
if 'name' not in kwargs:
kwargs['name'] = 'approval node {}'.format(random_title())
self.related.create_approval_template.post(kwargs)
return self.get()
page.register_page([resources.workflow_job_template_node,
(resources.workflow_job_template_nodes, 'post')], WorkflowJobTemplateNode)
(resources.workflow_job_template_nodes,
'post')],
WorkflowJobTemplateNode)
class WorkflowJobTemplateNodes(page.PageList, WorkflowJobTemplateNode):
@ -81,4 +129,5 @@ page.register_page([resources.workflow_job_template_nodes,
resources.workflow_job_template_workflow_nodes,
resources.workflow_job_template_node_always_nodes,
resources.workflow_job_template_node_failure_nodes,
resources.workflow_job_template_node_success_nodes], WorkflowJobTemplateNodes)
resources.workflow_job_template_node_success_nodes],
WorkflowJobTemplateNodes)

View File

@ -81,6 +81,8 @@ class Resources(object):
_inventory_update_events = r'inventory_updates/\d+/events/'
_inventory_updates = 'inventory_updates/'
_inventory_variable_data = r'inventories/\d+/variable_data/'
_workflow_approval = r'workflow_approvals/\d+/'
_workflow_approvals = 'workflow_approvals/'
_job = r'jobs/\d+/'
_job_cancel = r'jobs/\d+/cancel/'
_job_create_schedule = r'jobs/\d+/create_schedule/'