aboutsummaryrefslogtreecommitdiffstats
path: root/src/workflow/workflow_factory.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/workflow/workflow_factory.py')
-rw-r--r--src/workflow/workflow_factory.py149
1 files changed, 149 insertions, 0 deletions
diff --git a/src/workflow/workflow_factory.py b/src/workflow/workflow_factory.py
new file mode 100644
index 0000000..7c0dcb9
--- /dev/null
+++ b/src/workflow/workflow_factory.py
@@ -0,0 +1,149 @@
+##############################################################################
+# Copyright (c) 2018 Sawyer Bergeron, Parker Berberian, and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+
+from workflow.booking_workflow import *
+from workflow.resource_bundle_workflow import *
+from workflow.sw_bundle_workflow import *
+from workflow.snapshot_workflow import *
+from workflow.models import Workflow, Repository
+
+import uuid
+
+import logging
+logger = logging.getLogger(__name__)
+
+class BookingMetaWorkflow(object):
+ workflow_type = 0
+ color = "#0099ff"
+ is_child = False
+
+class ResourceMetaWorkflow(object):
+ workflow_type = 1
+ color = "#ff6600"
+
+class ConfigMetaWorkflow(object):
+ workflow_type = 2
+ color = "#00ffcc"
+
+class MetaRelation(object):
+ def __init__(self, *args, **kwargs):
+ self.color = "#cccccc"
+ self.parent = 0
+ self.children = []
+ self.depth = -1
+
+ def to_json(self):
+ return {
+ 'color': self.color,
+ 'parent': self.parent,
+ 'children': self.children,
+ 'depth': self.depth,
+ }
+
+class MetaStep(object):
+ #valid = 0 #0 is not checked, 1 is invalid, 2 is valid
+
+ UNTOUCHED = 0
+ INVALID = 100
+ VALID = 200
+
+ def set_invalid(self, message, code=100):
+ self.valid = code
+ self.message = message
+
+ def set_valid(self, message, code=200):
+ self.valid = code
+ self.message = message
+
+ def __init__(self, *args, **kwargs):
+ self.short_title = "error"
+ self.skip_step = 0
+ self.valid = 0
+ self.message = ""
+ self.id = uuid.uuid4()
+
+ def to_json(self):
+ return {
+ 'title': self.short_title,
+ 'skip': self.skip_step,
+ 'valid': self.valid,
+ 'message': self.message,
+ }
+
+ def __str__(self):
+ return "metastep: " + str(self.short_title)
+
+ def __hash__(self):
+ return hash(self.id)
+
+ def __eq__(self, other):
+ return self.id.int == other.id.int
+
+ def __ne__(self, other):
+ return self.id.int != other.id.int
+
+class WorkflowFactory():
+ #def __init__(self, *args, **kwargs):
+ booking_steps = [
+ Booking_Resource_Select,
+ SWConfig_Select,
+ Booking_Meta
+ ]
+
+ resource_steps = [
+ Define_Hardware,
+ Define_Nets,
+ Resource_Meta_Info,
+ ]
+
+ config_steps = [
+ SWConf_Resource_Select,
+ Define_Software,
+ Config_Software,
+ ]
+
+ snapshot_steps = [
+ Select_Host_Step,
+ Image_Meta_Step
+ ]
+
+ def conjure(self, workflow_type=None, repo=None):
+ workflow_types = [
+ self.booking_steps,
+ self.resource_steps,
+ self.config_steps,
+ self.snapshot_steps,
+ ]
+
+ steps = self.make_steps(workflow_types[workflow_type], repository=repo)
+ meta_steps = self.metaize(steps=steps, wf_type=workflow_type)
+ return steps, meta_steps
+
+ def make_steps(self, step_types, repository):
+ repository.el['steps'] += len(step_types)
+ steps = []
+ for step_type in step_types:
+ steps.append(self.make_step(step_type, repository))
+
+ return steps
+
+ def make_step(self, step_type, repository):
+ iden = step_type.description + step_type.title + step_type.template
+ return step_type(iden, repository)
+
+ def metaize(self, steps, wf_type):
+ meta_dict = []
+ for step in steps:
+ meta_step = MetaStep()
+ meta_step.short_title = step.short_title
+ meta_dict.append(meta_step)
+ step.metastep = meta_step
+
+ return meta_dict