aboutsummaryrefslogtreecommitdiffstats
path: root/src/static/js/workflows/common-models.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/static/js/workflows/common-models.js')
-rw-r--r--src/static/js/workflows/common-models.js189
1 files changed, 189 insertions, 0 deletions
diff --git a/src/static/js/workflows/common-models.js b/src/static/js/workflows/common-models.js
new file mode 100644
index 0000000..65fedb1
--- /dev/null
+++ b/src/static/js/workflows/common-models.js
@@ -0,0 +1,189 @@
+/*
+common-models.js
+Defines classes used by the workflows
+Functions as the "model" part of MVC
+*/
+
+// Provided by the LibLaaS API
+// TemplateBlob classes
+class TemplateBlob {
+ constructor(incomingBlob) {
+ this.id = incomingBlob.id; // UUID (String)
+ this.owner = incomingBlob.owner; // String
+ this.lab_name = incomingBlob.lab_name; // String
+ this.pod_name = incomingBlob.pod_name; // String
+ this.pod_desc = incomingBlob.pod_desc; // String
+ this["public"] = incomingBlob["public"]; // bool
+ this.host_list = []; // List<HostConfigBlob>
+ this.networks = []; // List<NetworkBlob>
+
+ if (incomingBlob.host_list) {
+ this.host_list = incomingBlob.host_list;
+ }
+
+ if (incomingBlob.networks) {
+ this.networks = incomingBlob.networks;
+ }
+ }
+
+ /**
+ * Takes a network name (string) and returns the network stored in the template, or null if it does not exist
+ * @param {String} network_name
+ */
+ findNetwork(network_name) {
+ for (const network of this.networks) {
+ if (network.name == network_name) {
+ return network;
+ }
+ }
+
+ // Did not find it
+ return null;
+ }
+
+
+ /**
+ * Takes a hostname (string) and returns the host stored in the template, or null if it does not exist
+ * @param {String} hostname
+ */
+ findHost(hostname) {
+ for (const host of this.host_list) {
+ if (host.hostname == hostname) {
+ return host;
+ }
+ }
+
+ // Did not find it
+ return null;
+ }
+}
+
+class HostConfigBlob {
+ constructor(incomingBlob) {
+ this.hostname = incomingBlob.hostname; // String
+ this.flavor = incomingBlob.flavor; // UUID (String)
+ this.image = incomingBlob.image; // UUID (String)
+ this.cifile = []; // List<String>
+ this.bondgroups = []; // List<BondgroupBlob>
+
+ if (incomingBlob.cifile) {
+ this.cifile = incomingBlob.cifile;
+ }
+
+ if (incomingBlob.bondgroups) {
+ this.bondgroups = incomingBlob.bondgroups;
+ }
+ }
+}
+
+class NetworkBlob {
+ constructor(incomingBlob) {
+ this.name = incomingBlob.name;
+ this['public'] = incomingBlob['public'];
+
+ }
+}
+
+/** One bondgroup per interface at this time. */
+class BondgroupBlob {
+ constructor(incomingBlob) {
+ this.connections = []; //List<ConnectionBlob>
+ this.ifaces = []; // List<IfaceBlob> (will only contain the one iface for now)
+
+ if (incomingBlob.connections) {
+ this.connections = incomingBlob.connections;
+ }
+
+ if (incomingBlob.ifaces) {
+ this.ifaces = incomingBlob.ifaces;
+ }
+ }
+
+}
+
+class ConnectionBlob {
+ constructor(incomingBlob) {
+ this.tagged = incomingBlob.tagged; // bool,
+ this.connects_to = incomingBlob.connects_to; // String
+ }
+}
+
+class InterfaceBlob {
+ constructor(incomingBlob) {
+ this.name = incomingBlob.name; // String,
+ this.speed = incomingBlob.speed;
+ this.cardtype = incomingBlob.cardtype;
+ }
+}
+
+// BookingClasses
+class BookingBlob {
+ // constructor({template_id, allowed_users, global_cifile}) {
+ constructor(incomingBlob) {
+
+ this.template_id = incomingBlob.template_id; // UUID (String)
+ this.allowed_users = []; // List<String>
+ this.global_cifile = ""; // String
+ this.metadata = new BookingMetaDataBlob({});
+
+ if (incomingBlob.allowed_users) {
+ this.allowed_users = incomingBlob.allowed_users;
+ }
+
+ if (incomingBlob.global_cifile) {
+ this.global_cifile = incomingBlob.global_cifile;
+ }
+
+ if (incomingBlob.metadata) {
+ this.metadata = incomingBlob.metadata;
+ }
+ }
+}
+
+
+class BookingMetaDataBlob {
+ constructor(incomingBlob) {
+ this.booking_id = incomingBlob.booking_id; // String
+ this.owner = incomingBlob.owner; // String
+ this.lab = incomingBlob.lab; // String
+ this.purpose = incomingBlob.purpose; // String
+ this.project = incomingBlob.project; // String
+ this.length = 1 // Number
+
+ if (incomingBlob.length) {
+ this.length = incomingBlob.length;
+ }
+ }
+}
+
+// Utility Classes
+class ImageBlob {
+ constructor(incomingBlob) {
+ this.image_id = incomingBlob.image_id; // UUID (String)
+ this.name = incomingBlob.name; // String,
+ }
+}
+
+class FlavorBlob {
+ constructor(incomingBlob) {
+ this.flavor_id = incomingBlob.flavor_id; // UUID (String)
+ this.name = incomingBlob.name; // String
+ this.interfaces = []; // List<String>
+ // images are added after
+
+ if (incomingBlob.interfaces) {
+ this.interfaces = incomingBlob.interfaces;
+ }
+ }
+
+}
+
+class LabBlob {
+ constructor(incomingBlob) {
+ this.name = incomingBlob.name; // String
+ this.description = incomingBlob.description; // String
+ this.location = incomingBlob.location; //String
+ this.status = incomingBlob.status; // Number
+
+ }
+} \ No newline at end of file