diff options
author | Sawyer Bergeron <sbergeron@iol.unh.edu> | 2020-05-15 14:58:37 -0400 |
---|---|---|
committer | Sawyer Bergeron <sbergeron@iol.unh.edu> | 2020-05-15 17:42:23 -0400 |
commit | 530271c247a4ce538e3aa69fd3893481fada44ab (patch) | |
tree | 48640138c825bf0906a1c261c28939d5311ae6d6 /src/resource_inventory | |
parent | 6bf37e9864787e0398a1d2e1cdd10b40a8ebc6e6 (diff) |
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 <sawyerbergeron@gmail.com>
Date: Thu Apr 2 14:05:26 2020 -0400
Start fixing workflow for model changes
Change-Id: I79df975ef45abf2e6e69594d358bbd205938828f
Signed-off-by: Sawyer Bergeron <sbergeron@iol.unh.com>
Signed-off-by: Sawyer Bergeron <sbergeron@iol.unh.edu>
commit 7a7e2182acd0ea94e19aba4926c3a12771b30a6d
Author: sms1097 <ssmith@iol.unh.edu>
Date: Tue Mar 31 15:13:06 2020 -0400
Working on workflow refactoring
Change-Id: I4141b6aca98aff7bff9cb78a7d5594e25eb45e98
Signed-off-by: Sean Smith <ssmith@iol.unh.edu>
commit c09050ae2814f07af58557b40f9ed3559063d2c7
Merge: 71438d9 b5ccdc4
Author: Parker Berberian <pberberian@iol.unh.edu>
Date: Tue Mar 24 20:34:16 2020 +0000
Merge "Able to delete configurations and view lab details" into resource
commit b5ccdc4ffbb883c20f2f6f69aeef5002aef5db53
Author: sms1097 <ssmith@iol.unh.edu>
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 <ssmith@iol.unh.edu>
Change-Id: Id6748c6bea67773a861921394d88579730246598
commit 71438d9a35cdb316cece865c9d410aeffb0053d8
Merge: 5460d0d a758223
Author: Parker Berberian <pberberian@iol.unh.edu>
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 <pberberian@iol.unh.edu>
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 <ahassick@iol.unh.edu>
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 <ahassick@iol.unh.edu>
Change-Id: I2d2e7aeb96b10c231804a62f37a476039c954b7b
commit a9063a347c4ebef0e53a17f198468bb135772810
Author: Parker Berberian <pberberian@iol.unh.edu>
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 <pberberian@iol.unh.edu>
Change-Id: I2a1e843fbaa7984225f2f80742dad59dc348fbf2
commit a758223f44c6fec595b055d7c9b232b00e9174a0
Author: Parker Berberian <pberberian@iol.unh.edu>
Date: Tue Mar 17 11:07:32 2020 -0400
Add / Fix tests for refactor
Change-Id: I0526d1942f87707082a4eb1c8c98910f84481c23
Signed-off-by: Parker Berberian <pberberian@iol.unh.edu>
Author: Parker Berberian <pberberian@iol.unh.edu>
Add "Pod" Column to booking list
Signed-off-by: Parker Berberian <pberberian@iol.unh.edu>
Change-Id: I270913283bf1e5815cadf622ba2fd5f98bb61675
Author: Parker Berberian <pberberian@iol.unh.edu>
Fixes that make the Akraino dashboard work
Signed-off-by: Parker Berberian <pberberian@iol.unh.edu>
Change-Id: I81746473a4511ef7d46445a7b16809a6e9da100f
Signed-off-by: Sawyer Bergeron <sbergeron@iol.unh.edu>
Change-Id: I4b428e7c8a8d401d7bae95cba01077feb0332a7f
Signed-off-by: Sawyer Bergeron <sbergeron@iol.unh.edu>
Diffstat (limited to 'src/resource_inventory')
-rw-r--r-- | src/resource_inventory/admin.py | 6 | ||||
-rw-r--r-- | src/resource_inventory/migrations/0013_auto_20200218_1536.py | 2 | ||||
-rw-r--r-- | src/resource_inventory/migrations/0015_resourcetemplate_copy_of.py | 19 | ||||
-rw-r--r-- | src/resource_inventory/models.py | 17 | ||||
-rw-r--r-- | src/resource_inventory/pdf_templater.py | 2 | ||||
-rw-r--r-- | src/resource_inventory/resource_manager.py | 21 |
6 files changed, 54 insertions, 13 deletions
diff --git a/src/resource_inventory/admin.py b/src/resource_inventory/admin.py index 13afd99..439dad3 100644 --- a/src/resource_inventory/admin.py +++ b/src/resource_inventory/admin.py @@ -30,7 +30,9 @@ from resource_inventory.models import ( OPNFVConfig, OPNFVRole, Image, - RemoteInfo + RemoteInfo, + PhysicalNetwork, + NetworkConnection ) admin.site.register([ @@ -53,4 +55,6 @@ admin.site.register([ OPNFVConfig, OPNFVRole, Image, + PhysicalNetwork, + NetworkConnection, RemoteInfo]) diff --git a/src/resource_inventory/migrations/0013_auto_20200218_1536.py b/src/resource_inventory/migrations/0013_auto_20200218_1536.py index d9dcbd6..053453b 100644 --- a/src/resource_inventory/migrations/0013_auto_20200218_1536.py +++ b/src/resource_inventory/migrations/0013_auto_20200218_1536.py @@ -15,7 +15,7 @@ def clear_resource_bundles(apps, schema_editor): def create_default_template(apps, schema_editor): ResourceTemplate = apps.get_model('resource_inventory', 'ResourceTemplate') - ResourceTemplate.objects.create(id=1, name="Default Template") + ResourceTemplate.objects.create(name="Default Template", hidden=True) def populate_servers(apps, schema_editor): diff --git a/src/resource_inventory/migrations/0015_resourcetemplate_copy_of.py b/src/resource_inventory/migrations/0015_resourcetemplate_copy_of.py new file mode 100644 index 0000000..322dc00 --- /dev/null +++ b/src/resource_inventory/migrations/0015_resourcetemplate_copy_of.py @@ -0,0 +1,19 @@ +# Generated by Django 2.2 on 2020-04-13 13:56 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('resource_inventory', '0014_auto_20200305_1415'), + ] + + operations = [ + migrations.AddField( + model_name='resourcetemplate', + name='copy_of', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='resource_inventory.ResourceTemplate'), + ), + ] diff --git a/src/resource_inventory/models.py b/src/resource_inventory/models.py index 7115ece..d1b7a75 100644 --- a/src/resource_inventory/models.py +++ b/src/resource_inventory/models.py @@ -155,16 +155,18 @@ class ResourceTemplate(models.Model): # TODO: template might not be a good name because this is a collection of lots of configured resources id = models.AutoField(primary_key=True) - name = models.CharField(max_length=300, unique=True) + name = models.CharField(max_length=300) xml = models.TextField() owner = models.ForeignKey(User, null=True, on_delete=models.SET_NULL) lab = models.ForeignKey(Lab, null=True, on_delete=models.SET_NULL, related_name="resourcetemplates") description = models.CharField(max_length=1000, default="") public = models.BooleanField(default=False) temporary = models.BooleanField(default=False) + copy_of = models.ForeignKey("ResourceTemplate", null=True, on_delete=models.SET_NULL) def getConfigs(self): - return list(self.resourceConfigurations.all()) + configs = self.resourceConfigurations.all() + return list(configs) def __str__(self): return self.name @@ -191,6 +193,13 @@ class ResourceBundle(models.Model): # TODO pass + def get_template_name(self): + if not self.template: + return "" + if not self.template.temporary: + return self.template.name + return self.template.copy_of.name + class ResourceConfiguration(models.Model): """Model to represent a complete configuration for a single physical Resource.""" @@ -200,7 +209,7 @@ class ResourceConfiguration(models.Model): image = models.ForeignKey("Image", on_delete=models.PROTECT) template = models.ForeignKey(ResourceTemplate, related_name="resourceConfigurations", null=True, on_delete=models.CASCADE) is_head_node = models.BooleanField(default=False) - # name? + name = models.CharField(max_length=3000, default="<Hostname>") def __str__(self): return "config with " + str(self.template) + " and image " + str(self.image) @@ -428,7 +437,7 @@ class InterfaceConfiguration(models.Model): connections = models.ManyToManyField(NetworkConnection) def __str__(self): - return "type " + str(self.profile) + " on host " + str(self.host) + return "type " + str(self.profile) + " on host " + str(self.resource_config) """ diff --git a/src/resource_inventory/pdf_templater.py b/src/resource_inventory/pdf_templater.py index 367ba43..27a264e 100644 --- a/src/resource_inventory/pdf_templater.py +++ b/src/resource_inventory/pdf_templater.py @@ -10,7 +10,7 @@ from django.template.loader import render_to_string import booking -from resource_inventory.models import Server, InterfaceProfile +from resource_inventory.models import Server class PDFTemplater: diff --git a/src/resource_inventory/resource_manager.py b/src/resource_inventory/resource_manager.py index 4310f8c..4d539bd 100644 --- a/src/resource_inventory/resource_manager.py +++ b/src/resource_inventory/resource_manager.py @@ -17,6 +17,7 @@ from resource_inventory.models import ( Network, Vlan, PhysicalNetwork, + InterfaceConfiguration, ) @@ -33,10 +34,12 @@ class ResourceManager: ResourceManager.instance = ResourceManager() return ResourceManager.instance - def getAvailableResourceTemplates(self, lab, user): - templates = ResourceTemplate.objects.filter(lab=lab) - templates = templates.filter(Q(owner=user) | Q(public=True)).filter(temporary=False) - return templates + def getAvailableResourceTemplates(self, lab, user=None): + filter = Q(public=True) + if user: + filter = filter | Q(owner=user) + filter = filter & Q(temporary=False) & Q(lab=lab) + return ResourceTemplate.objects.filter(filter) def templateIsReservable(self, resource_template): """ @@ -110,9 +113,15 @@ class ResourceManager: def configureNetworking(self, resource, vlan_map): for physical_interface in resource.interfaces.all(): - iface_config = physical_interface.acts_as - if not iface_config: + # assign interface configs + iface_configs = InterfaceConfiguration.objects.filter(profile=physical_interface.profile, resource_config=resource.config) + if iface_configs.count() != 1: continue + iface_config = iface_configs.first() + physical_interface.acts_as = iface_config + physical_interface.acts_as.save() + #if not iface_config: + # continue physical_interface.config.clear() for connection in iface_config.connections.all(): physicalNetwork = PhysicalNetwork.objects.create( |