mirror of
https://github.com/ansible/awx.git
synced 2026-05-15 13:27:40 -02:30
refactor to be more testable
This commit is contained in:
@@ -143,7 +143,7 @@ class WorkflowJobTemplate(UnifiedJobTemplate, WorkflowJobOptions):
|
|||||||
#def create_workflow_job(self, **kwargs):
|
#def create_workflow_job(self, **kwargs):
|
||||||
#workflow_job = self.create_unified_job(**kwargs)
|
#workflow_job = self.create_unified_job(**kwargs)
|
||||||
workflow_job = super(WorkflowJobTemplate, self).create_unified_job(**kwargs)
|
workflow_job = super(WorkflowJobTemplate, self).create_unified_job(**kwargs)
|
||||||
workflow_job.inherit_jt_workflow_nodes()
|
workflow_job.inherit_job_template_workflow_nodes()
|
||||||
return workflow_job
|
return workflow_job
|
||||||
|
|
||||||
class WorkflowJobInheritNodesMixin(object):
|
class WorkflowJobInheritNodesMixin(object):
|
||||||
@@ -152,21 +152,33 @@ class WorkflowJobInheritNodesMixin(object):
|
|||||||
new_node_type_mgr = getattr(new_node, node_type)
|
new_node_type_mgr = getattr(new_node, node_type)
|
||||||
|
|
||||||
for old_related_node in old_related_nodes:
|
for old_related_node in old_related_nodes:
|
||||||
new_related_node_id = node_ids_map[old_related_node.id]
|
new_related_node = self._get_workflowJob_node_by_id(node_ids_map[old_related_node.id])
|
||||||
new_related_node = WorkflowJobNode.objects.get(id=new_related_node_id)
|
|
||||||
new_node_type_mgr.add(new_related_node)
|
new_node_type_mgr.add(new_related_node)
|
||||||
|
|
||||||
def inherit_jt_workflow_nodes(self):
|
'''
|
||||||
new_nodes = []
|
Create a WorkflowJobNode for each WorkflowJobTemplateNode
|
||||||
old_nodes = self.workflow_job_template.workflow_job_template_nodes.all()
|
'''
|
||||||
|
def _create_workflow_job_nodes(self, old_nodes):
|
||||||
|
return [WorkflowJobNode.objects.create(workflow_job=self, unified_job_template=old_node.unified_job_template) for old_node in old_nodes]
|
||||||
|
|
||||||
|
def _map_workflow_job_nodes(self, old_nodes, new_nodes):
|
||||||
node_ids_map = {}
|
node_ids_map = {}
|
||||||
|
|
||||||
for old_node in old_nodes:
|
for i, old_node in enumerate(old_nodes):
|
||||||
new_node = WorkflowJobNode.objects.create(workflow_job=self, unified_job_template=old_node.unified_job_template)
|
node_ids_map[old_node.id] = new_nodes[i].id
|
||||||
new_nodes.append(new_node)
|
|
||||||
|
|
||||||
node_ids_map[old_node.id] = new_node.id
|
return node_ids_map
|
||||||
|
|
||||||
|
def _get_workflow_job_template_nodes(self):
|
||||||
|
return self.workflow_job_template.workflow_job_template_nodes.all()
|
||||||
|
|
||||||
|
def _get_workflowJob_node_by_id(self, id):
|
||||||
|
return WorkflowJobNode.objects.get(id=id)
|
||||||
|
|
||||||
|
def inherit_job_template_workflow_nodes(self):
|
||||||
|
old_nodes = self._get_workflow_job_template_nodes()
|
||||||
|
new_nodes = self._create_workflow_job_nodes(old_nodes)
|
||||||
|
node_ids_map = self._map_workflow_job_nodes(old_nodes, new_nodes)
|
||||||
|
|
||||||
for index, old_node in enumerate(old_nodes):
|
for index, old_node in enumerate(old_nodes):
|
||||||
new_node = new_nodes[index]
|
new_node = new_nodes[index]
|
||||||
|
|||||||
@@ -14,7 +14,9 @@ from awx.main.models import (
|
|||||||
Inventory,
|
Inventory,
|
||||||
Label,
|
Label,
|
||||||
WorkflowJobTemplate,
|
WorkflowJobTemplate,
|
||||||
WorkflowNode,
|
WorkflowJob,
|
||||||
|
WorkflowJobNode,
|
||||||
|
WorkflowJobTemplateNode,
|
||||||
)
|
)
|
||||||
|
|
||||||
# mk methods should create only a single object of a single type.
|
# mk methods should create only a single object of a single type.
|
||||||
@@ -155,7 +157,20 @@ def mk_job_template(name, job_type='run',
|
|||||||
jt.save()
|
jt.save()
|
||||||
return jt
|
return jt
|
||||||
|
|
||||||
|
def mk_workflow_job(status='new', workflow_job_template=None, extra_vars={},
|
||||||
|
persisted=True):
|
||||||
|
job = WorkflowJob(status=status, extra_vars=json.dumps(extra_vars))
|
||||||
|
|
||||||
|
job.workflow_job_template = workflow_job_template
|
||||||
|
|
||||||
|
if persisted:
|
||||||
|
job.save()
|
||||||
|
return job
|
||||||
|
|
||||||
def mk_workflow_job_template(name, extra_vars='', spec=None, persisted=True):
|
def mk_workflow_job_template(name, extra_vars='', spec=None, persisted=True):
|
||||||
|
if extra_vars:
|
||||||
|
extra_vars = json.dumps(extra_vars)
|
||||||
|
|
||||||
wfjt = WorkflowJobTemplate(name=name, extra_vars=extra_vars)
|
wfjt = WorkflowJobTemplate(name=name, extra_vars=extra_vars)
|
||||||
|
|
||||||
wfjt.survey_spec = spec
|
wfjt.survey_spec = spec
|
||||||
@@ -166,15 +181,35 @@ def mk_workflow_job_template(name, extra_vars='', spec=None, persisted=True):
|
|||||||
wfjt.save()
|
wfjt.save()
|
||||||
return wfjt
|
return wfjt
|
||||||
|
|
||||||
def mk_workflow_node(workflow_job_template=None, unified_job_template=None,
|
def mk_workflow_job_template_node(workflow_job_template=None,
|
||||||
success_nodes=None, failure_nodes=None, always_nodes=None,
|
unified_job_template=None,
|
||||||
job=None, persisted=True):
|
success_nodes=None,
|
||||||
workflow_node = WorkflowNode(workflow_job_template=workflow_job_template,
|
failure_nodes=None,
|
||||||
unified_job_template=unified_job_template,
|
always_nodes=None,
|
||||||
success_nodes=success_nodes,
|
persisted=True):
|
||||||
failure_nodes=failure_nodes,
|
workflow_node = WorkflowJobTemplateNode(workflow_job_template=workflow_job_template,
|
||||||
always_nodes=always_nodes,
|
unified_job_template=unified_job_template,
|
||||||
job=job)
|
success_nodes=success_nodes,
|
||||||
|
failure_nodes=failure_nodes,
|
||||||
|
always_nodes=always_nodes)
|
||||||
if persisted:
|
if persisted:
|
||||||
workflow_node.save()
|
workflow_node.save()
|
||||||
return workflow_node
|
return workflow_node
|
||||||
|
|
||||||
|
def mk_workflow_job_node(unified_job_template=None,
|
||||||
|
success_nodes=None,
|
||||||
|
failure_nodes=None,
|
||||||
|
always_nodes=None,
|
||||||
|
workflow_job=None,
|
||||||
|
job=None,
|
||||||
|
persisted=True):
|
||||||
|
workflow_node = WorkflowJobNode(unified_job_template=unified_job_template,
|
||||||
|
success_nodes=success_nodes,
|
||||||
|
failure_nodes=failure_nodes,
|
||||||
|
always_nodes=always_nodes,
|
||||||
|
workflow_job=workflow_job,
|
||||||
|
job=job)
|
||||||
|
if persisted:
|
||||||
|
workflow_node.save()
|
||||||
|
return workflow_node
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ from .fixtures import (
|
|||||||
mk_label,
|
mk_label,
|
||||||
mk_notification_template,
|
mk_notification_template,
|
||||||
mk_workflow_job_template,
|
mk_workflow_job_template,
|
||||||
|
#mk_workflow_job_template_node,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -344,8 +345,16 @@ def create_notification_template(name, roles=None, persisted=True, **kwargs):
|
|||||||
users=_Mapped(users),
|
users=_Mapped(users),
|
||||||
superusers=_Mapped(superusers),
|
superusers=_Mapped(superusers),
|
||||||
teams=teams)
|
teams=teams)
|
||||||
|
'''
|
||||||
|
def generate_workflow_job_template_nodes(workflow_job_template,
|
||||||
|
unified_job_template,
|
||||||
|
persisted=True,
|
||||||
|
**kwargs):
|
||||||
|
'''
|
||||||
|
|
||||||
def create_workflow_job_template(name, persisted=True, **kwargs):
|
# TODO: Implement survey
|
||||||
|
'''
|
||||||
|
def create_workflow_job(name, persisted=True, **kwargs):
|
||||||
Objects = generate_objects(["workflow_job_template",
|
Objects = generate_objects(["workflow_job_template",
|
||||||
"survey",], kwargs)
|
"survey",], kwargs)
|
||||||
|
|
||||||
@@ -353,13 +362,27 @@ def create_workflow_job_template(name, persisted=True, **kwargs):
|
|||||||
jobs = None
|
jobs = None
|
||||||
|
|
||||||
extra_vars = kwargs.get('extra_vars', '')
|
extra_vars = kwargs.get('extra_vars', '')
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: Implement survey
|
||||||
|
def create_workflow_job_template(name, persisted=True, **kwargs):
|
||||||
|
Objects = generate_objects(["workflow_job_template",
|
||||||
|
"survey",], kwargs)
|
||||||
|
|
||||||
|
spec = None
|
||||||
|
#jobs = None
|
||||||
|
|
||||||
|
extra_vars = kwargs.get('extra_vars', '')
|
||||||
|
|
||||||
if 'survey' in kwargs:
|
if 'survey' in kwargs:
|
||||||
spec = create_survey_spec(kwargs['survey'])
|
spec = create_survey_spec(kwargs['survey'])
|
||||||
|
|
||||||
wfjt = mk_workflow_job_template(name, spec=spec, extra_vars=extra_vars,
|
wfjt = mk_workflow_job_template(name, spec=spec, extra_vars=extra_vars,
|
||||||
persisted=persisted)
|
persisted=persisted)
|
||||||
|
#workflow_nodes = generate_workflow_job_template_nodes(wfjt, persisted, workflow_nodes=kwargs.get('workflow_nodes'))
|
||||||
|
|
||||||
|
'''
|
||||||
if 'jobs' in kwargs:
|
if 'jobs' in kwargs:
|
||||||
for i in kwargs['jobs']:
|
for i in kwargs['jobs']:
|
||||||
if type(i) is Job:
|
if type(i) is Job:
|
||||||
@@ -367,8 +390,8 @@ def create_workflow_job_template(name, persisted=True, **kwargs):
|
|||||||
else:
|
else:
|
||||||
# TODO: Create the job
|
# TODO: Create the job
|
||||||
raise RuntimeError("Currently, only already created jobs are supported")
|
raise RuntimeError("Currently, only already created jobs are supported")
|
||||||
|
'''
|
||||||
return Objects(workflow_job_template=wfjt,
|
return Objects(workflow_job_template=wfjt,
|
||||||
jobs=jobs,
|
#jobs=jobs,
|
||||||
survey=spec,)
|
survey=spec,)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user