From 530271c247a4ce538e3aa69fd3893481fada44ab Mon Sep 17 00:00:00 2001 From: Sawyer Bergeron Date: Fri, 15 May 2020 14:58:37 -0400 Subject: Merge resource branch This pulls master up to date to include changes to models and surrounding infra that allow for multi-node templates and merging of pods Squashed commit of the following: commit abc8f27d9c6b05fb3afcb9b00dc35c0f2232d1a6 Author: Sawyer Bergeron Date: Thu Apr 2 14:05:26 2020 -0400 Start fixing workflow for model changes Change-Id: I79df975ef45abf2e6e69594d358bbd205938828f Signed-off-by: Sawyer Bergeron Signed-off-by: Sawyer Bergeron commit 7a7e2182acd0ea94e19aba4926c3a12771b30a6d Author: sms1097 Date: Tue Mar 31 15:13:06 2020 -0400 Working on workflow refactoring Change-Id: I4141b6aca98aff7bff9cb78a7d5594e25eb45e98 Signed-off-by: Sean Smith commit c09050ae2814f07af58557b40f9ed3559063d2c7 Merge: 71438d9 b5ccdc4 Author: Parker Berberian Date: Tue Mar 24 20:34:16 2020 +0000 Merge "Able to delete configurations and view lab details" into resource commit b5ccdc4ffbb883c20f2f6f69aeef5002aef5db53 Author: sms1097 Date: Thu Mar 19 17:08:12 2020 -0400 Able to delete configurations and view lab details Change-Id: Ib15c86d84f4cc7e7745551889ce91c89b5de46e2 Signed-off-by: Sean Smith Change-Id: Id6748c6bea67773a861921394d88579730246598 commit 71438d9a35cdb316cece865c9d410aeffb0053d8 Merge: 5460d0d a758223 Author: Parker Berberian Date: Thu Mar 19 18:51:09 2020 +0000 Merge "Add / Fix tests for refactor" into resource commit 5460d0d447b075433a763f9bfa33448b88ec8393 Merge: a9063a3 f55d839 Author: Parker Berberian Date: Wed Mar 18 15:59:37 2020 +0000 Merge "Fixed the quick booking form resource template filtering. Added some more models to the admin page." into resource commit f55d839a029ab1f5ab1273872e71a97fa1d5108b Author: Adam Hassick Date: Tue Mar 17 11:35:40 2020 -0400 Fixed the quick booking form resource template filtering. Added some more models to the admin page. Signed-off-by: Adam Hassick Change-Id: I2d2e7aeb96b10c231804a62f37a476039c954b7b commit a9063a347c4ebef0e53a17f198468bb135772810 Author: Parker Berberian Date: Wed Mar 18 10:29:51 2020 -0400 Fixes Some Issues with Quick Booking Seen in the Akraino lab Signed-off-by: Parker Berberian Change-Id: I2a1e843fbaa7984225f2f80742dad59dc348fbf2 commit a758223f44c6fec595b055d7c9b232b00e9174a0 Author: Parker Berberian Date: Tue Mar 17 11:07:32 2020 -0400 Add / Fix tests for refactor Change-Id: I0526d1942f87707082a4eb1c8c98910f84481c23 Signed-off-by: Parker Berberian Author: Parker Berberian Add "Pod" Column to booking list Signed-off-by: Parker Berberian Change-Id: I270913283bf1e5815cadf622ba2fd5f98bb61675 Author: Parker Berberian Fixes that make the Akraino dashboard work Signed-off-by: Parker Berberian Change-Id: I81746473a4511ef7d46445a7b16809a6e9da100f Signed-off-by: Sawyer Bergeron Change-Id: I4b428e7c8a8d401d7bae95cba01077feb0332a7f Signed-off-by: Sawyer Bergeron --- src/workflow/models.py | 109 +++++++++++++++---------------------------------- 1 file changed, 33 insertions(+), 76 deletions(-) (limited to 'src/workflow/models.py') diff --git a/src/workflow/models.py b/src/workflow/models.py index df00d21..173fdba 100644 --- a/src/workflow/models.py +++ b/src/workflow/models.py @@ -18,7 +18,7 @@ import requests from workflow.forms import ConfirmationForm from api.models import JobFactory from dashboard.exceptions import ResourceAvailabilityException, ModelValidationException -from resource_inventory.models import Image, InterfaceConfiguration, OPNFVConfig, ResourceOPNFVConfig, NetworkRole +from resource_inventory.models import Image, OPNFVConfig, ResourceOPNFVConfig, NetworkRole from resource_inventory.resource_manager import ResourceManager from resource_inventory.pdf_templater import PDFTemplater from notifier.manager import NotificationHandler @@ -352,6 +352,7 @@ class Confirmation_Step(WorkflowStep): self.set_valid("Confirmed") elif data == "False": + self.repo.cancel() self.set_valid("Canceled") else: self.set_invalid("Bad Form Contents") @@ -366,14 +367,14 @@ class Repository(): MODELS = "models" RESOURCE_SELECT = "resource_select" CONFIRMATION = "confirmation" - SELECTED_GRESOURCE_BUNDLE = "selected generic bundle pk" + SELECTED_RESOURCE_TEMPLATE = "selected resource template pk" SELECTED_CONFIG_BUNDLE = "selected config bundle pk" SELECTED_OPNFV_CONFIG = "selected opnfv deployment config" - GRESOURCE_BUNDLE_MODELS = "generic_resource_bundle_models" - GRESOURCE_BUNDLE_INFO = "generic_resource_bundle_info" + RESOURCE_TEMPLATE_MODELS = "generic_resource_template_models" + RESOURCE_TEMPLATE_INFO = "generic_resource_template_info" BOOKING = "booking" LAB = "lab" - GRB_LAST_HOSTLIST = "grb_network_previous_hostlist" + RCONFIG_LAST_HOSTLIST = "resource_configuration_network_previous_hostlist" BOOKING_FORMS = "booking_forms" SWCONF_HOSTS = "swconf_hosts" BOOKING_MODELS = "booking models" @@ -391,6 +392,9 @@ class Repository(): SNAPSHOT_DESC = "description of the snapshot" BOOKING_INFO_FILE = "the INFO.yaml file for this user's booking" + # new keys for migration to using ResourceTemplates: + RESOURCE_TEMPLATE_MODELS = "current working model of resource template" + # migratory elements of segmented workflow # each of these is the end result of a different workflow. HAS_RESULT = "whether or not workflow has a result" @@ -399,7 +403,7 @@ class Repository(): def get_child_defaults(self): return_tuples = [] - for key in [self.SELECTED_GRESOURCE_BUNDLE, self.SESSION_USER]: + for key in [self.SELECTED_RESOURCE_TEMPLATE, self.SESSION_USER]: return_tuples.append((key, self.el.get(key))) return return_tuples @@ -428,6 +432,14 @@ class Repository(): else: history[key].append(id) + def cancel(self): + if self.RESOURCE_TEMPLATE_MODELS in self.el: + models = self.el[self.RESOURCE_TEMPLATE_MODELS] + if models['template'].temporary: + models['template'].delete() + # deleting current template should cascade delete all + # necessary related models + def make_models(self): if self.SNAPSHOT_MODELS in self.el: errors = self.make_snapshot() @@ -435,13 +447,13 @@ class Repository(): return errors # if GRB WF, create it - if self.GRESOURCE_BUNDLE_MODELS in self.el: + if self.RESOURCE_TEMPLATE_MODELS in self.el: errors = self.make_generic_resource_bundle() if errors: return errors else: self.el[self.HAS_RESULT] = True - self.el[self.RESULT_KEY] = self.SELECTED_GRESOURCE_BUNDLE + self.el[self.RESULT_KEY] = self.SELECTED_RESOURCE_TEMPLATE return if self.CONFIG_MODELS in self.el: @@ -507,78 +519,23 @@ class Repository(): def make_generic_resource_bundle(self): owner = self.el[self.SESSION_USER] - if self.GRESOURCE_BUNDLE_MODELS in self.el: - models = self.el[self.GRESOURCE_BUNDLE_MODELS] - if 'hosts' in models: - hosts = models['hosts'] - else: - return "GRB has no hosts. CODE:0x0002" - if 'bundle' in models: - bundle = models['bundle'] - else: - return "GRB, no bundle in models. CODE:0x0003" - - try: - bundle.owner = owner - bundle.save() - except Exception as e: - return "GRB, saving bundle generated exception: " + str(e) + " CODE:0x0004" - try: - for host in hosts: - genericresource = host.resource - genericresource.bundle = bundle - genericresource.save() - host.resource = genericresource - host.save() - except Exception as e: - return "GRB, saving hosts generated exception: " + str(e) + " CODE:0x0005" - - if 'networks' in models: - for net in models['networks'].values(): - net.bundle = bundle - net.save() - - if 'interfaces' in models: - for interface_set in models['interfaces'].values(): - for interface in interface_set: - try: - interface.host = interface.host - interface.save() - except Exception: - return "GRB, saving interface " + str(interface) + " failed. CODE:0x0019" - else: - return "GRB, no interface set provided. CODE:0x001a" - - if 'connections' in models: - for resource_name, mapping in models['connections'].items(): - for profile_name, connection_set in mapping.items(): - interface = InterfaceConfiguration.objects.get( - profile__name=profile_name, - host__resource__name=resource_name, - host__resource__bundle=models['bundle'] - ) - for connection in connection_set: - try: - connection.network = connection.network - connection.save() - interface.connections.add(connection) - except Exception as e: - return "GRB, saving vlan " + str(connection) + " failed. Exception: " + str(e) + ". CODE:0x0017" - else: - return "GRB, no vlan set provided. CODE:0x0018" + if self.RESOURCE_TEMPLATE_MODELS in self.el: + models = self.el[self.RESOURCE_TEMPLATE_MODELS] + models['template'].owner = owner + models['template'].temporary = False + models['template'].save() + self.el[self.RESULT] = models['template'] + self.el[self.HAS_RESULT] = True + return False else: return "GRB no models given. CODE:0x0001" - self.el[self.RESULT] = bundle - self.el[self.HAS_RESULT] = True - return False - def make_software_config_bundle(self): models = self.el[self.CONFIG_MODELS] if 'bundle' in models: bundle = models['bundle'] - bundle.bundle = self.el[self.SELECTED_GRESOURCE_BUNDLE] + bundle.bundle = self.el[self.SELECTED_RESOURCE_TEMPLATE] try: bundle.save() except Exception as e: @@ -589,8 +546,8 @@ class Repository(): if 'host_configs' in models: host_configs = models['host_configs'] for host_config in host_configs: - host_config.bundle = host_config.bundle - host_config.host = host_config.host + host_config.template = host_config.template + host_config.profile = host_config.profile try: host_config.save() except Exception as e: @@ -623,8 +580,8 @@ class Repository(): selected_grb = None - if self.SELECTED_GRESOURCE_BUNDLE in self.el: - selected_grb = self.el[self.SELECTED_GRESOURCE_BUNDLE] + if self.SELECTED_RESOURCE_TEMPLATE in self.el: + selected_grb = self.el[self.SELECTED_RESOURCE_TEMPLATE] else: return "BOOK, no selected resource. CODE:0x000e" -- cgit 1.2.3-korg