mirror of
https://github.com/ansible/awx.git
synced 2026-02-22 21:46:00 -03:30
Add approval node logic to awxkit
Co-authored-by: <Apurva bakshiapurva93@gmail.com>
This commit is contained in:
committed by
Ryan Petrello
parent
adf621d2cf
commit
bdf4defdbe
@@ -32,6 +32,7 @@ from .workflow_job_templates import * # NOQA
|
|||||||
from .workflow_job_template_nodes import * # NOQA
|
from .workflow_job_template_nodes import * # NOQA
|
||||||
from .workflow_jobs import * # NOQA
|
from .workflow_jobs import * # NOQA
|
||||||
from .workflow_job_nodes import * # NOQA
|
from .workflow_job_nodes import * # NOQA
|
||||||
|
from .workflow_approvals import * # NOQA
|
||||||
from .settings import * # NOQA
|
from .settings import * # NOQA
|
||||||
from .instances import * # NOQA
|
from .instances import * # NOQA
|
||||||
from .instance_groups import * # NOQA
|
from .instance_groups import * # NOQA
|
||||||
|
|||||||
30
awxkit/awxkit/api/pages/workflow_approvals.py
Normal file
30
awxkit/awxkit/api/pages/workflow_approvals.py
Normal 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)
|
||||||
@@ -3,7 +3,7 @@ import awxkit.exceptions as exc
|
|||||||
from awxkit.api.pages import base, WorkflowJobTemplate, UnifiedJobTemplate, JobTemplate
|
from awxkit.api.pages import base, WorkflowJobTemplate, UnifiedJobTemplate, JobTemplate
|
||||||
from awxkit.api.mixins import HasCreate, DSAdapter
|
from awxkit.api.mixins import HasCreate, DSAdapter
|
||||||
from awxkit.api.resources import resources
|
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
|
from . import page
|
||||||
|
|
||||||
|
|
||||||
@@ -12,11 +12,24 @@ class WorkflowJobTemplateNode(HasCreate, base.Base):
|
|||||||
dependencies = [WorkflowJobTemplate, UnifiedJobTemplate]
|
dependencies = [WorkflowJobTemplate, UnifiedJobTemplate]
|
||||||
|
|
||||||
def payload(self, workflow_job_template, unified_job_template, **kwargs):
|
def payload(self, workflow_job_template, unified_job_template, **kwargs):
|
||||||
payload = PseudoNamespace(workflow_job_template=workflow_job_template.id,
|
if not unified_job_template:
|
||||||
unified_job_template=unified_job_template.id)
|
# 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',
|
optional_fields = (
|
||||||
'extra_data')
|
'diff_mode',
|
||||||
|
'extra_data',
|
||||||
|
'limit',
|
||||||
|
'job_tags',
|
||||||
|
'job_type',
|
||||||
|
'skip_tags',
|
||||||
|
'verbosity',
|
||||||
|
'extra_data')
|
||||||
|
|
||||||
update_payload(payload, optional_fields, kwargs)
|
update_payload(payload, optional_fields, kwargs)
|
||||||
|
|
||||||
@@ -25,21 +38,45 @@ class WorkflowJobTemplateNode(HasCreate, base.Base):
|
|||||||
|
|
||||||
return payload
|
return payload
|
||||||
|
|
||||||
def create_payload(self, workflow_job_template=WorkflowJobTemplate, unified_job_template=JobTemplate, **kwargs):
|
def create_payload(
|
||||||
self.create_and_update_dependencies(workflow_job_template, unified_job_template)
|
self,
|
||||||
payload = self.payload(workflow_job_template=self.ds.workflow_job_template,
|
workflow_job_template=WorkflowJobTemplate,
|
||||||
unified_job_template=self.ds.unified_job_template, **kwargs)
|
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)
|
payload.ds = DSAdapter(self.__class__.__name__, self._dependency_store)
|
||||||
return payload
|
return payload
|
||||||
|
|
||||||
def create(self, workflow_job_template=WorkflowJobTemplate, unified_job_template=JobTemplate, **kwargs):
|
def create(
|
||||||
payload = self.create_payload(workflow_job_template=workflow_job_template,
|
self,
|
||||||
unified_job_template=unified_job_template, **kwargs)
|
workflow_job_template=WorkflowJobTemplate,
|
||||||
return self.update_identity(WorkflowJobTemplateNodes(self.connection).post(payload))
|
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):
|
def _add_node(self, endpoint, unified_job_template):
|
||||||
node = endpoint.post(dict(unified_job_template=unified_job_template.id))
|
node = endpoint.post(
|
||||||
node.create_and_update_dependencies(self.ds.workflow_job_template, unified_job_template)
|
dict(unified_job_template=unified_job_template.id))
|
||||||
|
node.create_and_update_dependencies(
|
||||||
|
self.ds.workflow_job_template, unified_job_template)
|
||||||
return node
|
return node
|
||||||
|
|
||||||
def add_always_node(self, unified_job_template):
|
def add_always_node(self, unified_job_template):
|
||||||
@@ -67,9 +104,20 @@ class WorkflowJobTemplateNode(HasCreate, base.Base):
|
|||||||
self.related.credentials.post(
|
self.related.credentials.post(
|
||||||
dict(id=cred.id, disassociate=True))
|
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,
|
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):
|
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_workflow_nodes,
|
||||||
resources.workflow_job_template_node_always_nodes,
|
resources.workflow_job_template_node_always_nodes,
|
||||||
resources.workflow_job_template_node_failure_nodes,
|
resources.workflow_job_template_node_failure_nodes,
|
||||||
resources.workflow_job_template_node_success_nodes], WorkflowJobTemplateNodes)
|
resources.workflow_job_template_node_success_nodes],
|
||||||
|
WorkflowJobTemplateNodes)
|
||||||
|
|||||||
@@ -81,6 +81,8 @@ class Resources(object):
|
|||||||
_inventory_update_events = r'inventory_updates/\d+/events/'
|
_inventory_update_events = r'inventory_updates/\d+/events/'
|
||||||
_inventory_updates = 'inventory_updates/'
|
_inventory_updates = 'inventory_updates/'
|
||||||
_inventory_variable_data = r'inventories/\d+/variable_data/'
|
_inventory_variable_data = r'inventories/\d+/variable_data/'
|
||||||
|
_workflow_approval = r'workflow_approvals/\d+/'
|
||||||
|
_workflow_approvals = 'workflow_approvals/'
|
||||||
_job = r'jobs/\d+/'
|
_job = r'jobs/\d+/'
|
||||||
_job_cancel = r'jobs/\d+/cancel/'
|
_job_cancel = r'jobs/\d+/cancel/'
|
||||||
_job_create_schedule = r'jobs/\d+/create_schedule/'
|
_job_create_schedule = r'jobs/\d+/create_schedule/'
|
||||||
|
|||||||
Reference in New Issue
Block a user