From: Adam Hassick Date: Tue, 17 Mar 2020 15:35:40 +0000 (-0400) Subject: Fixed the quick booking form resource template filtering. Added some more models... X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F00%2F69800%2F3;p=laas.git Fixed the quick booking form resource template filtering. Added some more models to the admin page. Signed-off-by: Adam Hassick Change-Id: I2d2e7aeb96b10c231804a62f37a476039c954b7b --- diff --git a/src/booking/forms.py b/src/booking/forms.py index b9c9231..2d3ef0f 100644 --- a/src/booking/forms.py +++ b/src/booking/forms.py @@ -27,7 +27,7 @@ class QuickBookingForm(forms.Form): installer = forms.ModelChoiceField(queryset=Installer.objects.all(), required=False) scenario = forms.ModelChoiceField(queryset=Scenario.objects.all(), required=False) - def __init__(self, data=None, user=None, *args, **kwargs): + def __init__(self, data=None, user=None, lab_data=None, *args, **kwargs): if "default_user" in kwargs: default_user = kwargs.pop("default_user") else: @@ -47,8 +47,6 @@ class QuickBookingForm(forms.Form): **get_user_field_opts() ) - attrs = FormUtils.getLabData() - self.fields['filter_field'] = MultipleSelectFilterField(widget=MultipleSelectFilterWidget(**attrs)) self.fields['length'] = forms.IntegerField( widget=NumberInput( attrs={ @@ -60,6 +58,8 @@ class QuickBookingForm(forms.Form): ) ) + self.fields['filter_field'] = MultipleSelectFilterField(widget=MultipleSelectFilterWidget(**lab_data)) + def build_user_list(self): """ Build list of UserProfiles. diff --git a/src/booking/views.py b/src/booking/views.py index daaf026..e767be1 100644 --- a/src/booking/views.py +++ b/src/booking/views.py @@ -24,11 +24,13 @@ from account.models import Lab, Downtime from booking.models import Booking from booking.stats import StatisticsManager from booking.forms import HostReImageForm +from booking.forms import FormUtils from api.models import JobFactory from workflow.views import login from booking.forms import QuickBookingForm from booking.quick_deployer import create_from_form, drop_filter - +from workflow.forms import (MultipleSelectFilterField, + MultipleSelectFilterWidget) def quick_create_clear_fields(request): request.session['quick_create_forminfo'] = None @@ -40,21 +42,16 @@ def quick_create(request): if request.method == 'GET': context = {} - - r_manager = ResourceManager.getInstance() - templates = {} - for lab in Lab.objects.all(): - templates[str(lab)] = r_manager.getAvailableResourceTemplates(lab, request.user) - - context['lab_profile_map'] = templates - - context['form'] = QuickBookingForm(default_user=request.user.username, user=request.user) - + attrs = FormUtils.getLabData(user=request.user) + context['form'] = QuickBookingForm(lab_data=attrs, default_user=request.user.username, user=request.user) + context['lab_profile_map'] = {} context.update(drop_filter(request.user)) - return render(request, 'booking/quick_deploy.html', context) + if request.method == 'POST': - form = QuickBookingForm(request.POST, user=request.user) + attrs = FormUtils.getLabData(user=request.user) + form = QuickBookingForm(request.POST, lab_data=attrs, user=request.user) + context = {} context['lab_profile_map'] = {} context['form'] = form 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/models.py b/src/resource_inventory/models.py index 7115ece..2c2dd5c 100644 --- a/src/resource_inventory/models.py +++ b/src/resource_inventory/models.py @@ -164,6 +164,7 @@ class ResourceTemplate(models.Model): temporary = models.BooleanField(default=False) def getConfigs(self): + configs = self.resourceConfigurations.all() return list(self.resourceConfigurations.all()) def __str__(self): @@ -428,7 +429,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.name) + " on host " + str(self.profile.host.name) """ diff --git a/src/resource_inventory/resource_manager.py b/src/resource_inventory/resource_manager.py index 4310f8c..fa8acfb 100644 --- a/src/resource_inventory/resource_manager.py +++ b/src/resource_inventory/resource_manager.py @@ -19,7 +19,6 @@ from resource_inventory.models import ( PhysicalNetwork, ) - class ResourceManager: instance = None @@ -33,10 +32,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): """ diff --git a/src/workflow/forms.py b/src/workflow/forms.py index a8d3413..c86f9da 100644 --- a/src/workflow/forms.py +++ b/src/workflow/forms.py @@ -24,6 +24,7 @@ from resource_inventory.models import ( Installer, Scenario, ) +from resource_inventory.resource_manager import ResourceManager from booking.lib import get_user_items, get_user_field_opts @@ -286,7 +287,7 @@ class MultipleSelectFilterField(forms.Field): class FormUtils: @staticmethod - def getLabData(multiple_hosts=False): + def getLabData(multiple_hosts=False, user=None): """ Get all labs and thier host profiles, returns a serialized version the form can understand. @@ -319,7 +320,8 @@ class FormUtils: neighbors[lab_node['id']] = [] labs[lab_node['id']] = lab_node - for template in lab.resourcetemplates.all(): + for template in ResourceManager.getInstance().getAvailableResourceTemplates(lab, user): + resource_node = { 'form': {"name": "host_name", "type": "text", "placeholder": "hostname"}, 'id': "resource_" + str(template.id),