From: Sean Smith Date: Tue, 6 Apr 2021 20:18:36 +0000 (-0400) Subject: Restrict image on multi-node booking X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F52%2F72352%2F1;p=laas.git Restrict image on multi-node booking Change-Id: I280dba83bceed74195a77b28f3016421c462cc5a Signed-off-by: Sean Smith --- diff --git a/src/booking/forms.py b/src/booking/forms.py index e7be70f..fe1ff3f 100644 --- a/src/booking/forms.py +++ b/src/booking/forms.py @@ -35,10 +35,18 @@ class QuickBookingForm(forms.Form): super(QuickBookingForm, self).__init__(data=data, **kwargs) + image_help_text = 'Image can be set only for single-node bookings. For multi-node bookings set image through Design a POD.' self.fields["image"] = forms.ModelChoiceField( Image.objects.filter(public=True) | Image.objects.filter(owner=user), required=False ) + self.fields['image'].widget.attrs.update({ + 'class': 'has-popover', + 'data-content': image_help_text, + 'data-placement': 'bottom', + 'data-container': 'body' + }) + self.fields['users'] = SearchableSelectMultipleField( queryset=UserProfile.objects.select_related('user').exclude(user=user), items=get_user_items(exclude=user), @@ -59,10 +67,10 @@ class QuickBookingForm(forms.Form): self.fields['filter_field'] = MultipleSelectFilterField(widget=MultipleSelectFilterWidget(**lab_data)) - help_text = 'Hostname can be set only for single-node bookings. For multi-node bookings set hostname through Design a POD.' + hostname_help_text = 'Hostname can be set only for single-node bookings. For multi-node bookings set hostname through Design a POD.' self.fields['hostname'].widget.attrs.update({ 'class': 'has-popover', - 'data-content': help_text, + 'data-content': hostname_help_text, 'data-placement': 'top', 'data-container': 'body' }) diff --git a/src/static/js/dashboard.js b/src/static/js/dashboard.js index dfbb157..6395df0 100644 --- a/src/static/js/dashboard.js +++ b/src/static/js/dashboard.js @@ -409,6 +409,7 @@ class MultipleSelectFilterWidget { reserveResource(node){ const required_resources = JSON.parse(node['required_resources']); let hostname = document.getElementById('id_hostname'); + let image = document.getElementById('id_image'); let cnt = 0 @@ -417,8 +418,10 @@ class MultipleSelectFilterWidget { cnt += required_resources[resource]; } - if (cnt > 1) + if (cnt > 1) { hostname.readOnly = true; + image.disabled = true; + } this.updateAvailibility(); } @@ -426,12 +429,14 @@ class MultipleSelectFilterWidget { releaseResource(node){ const required_resources = JSON.parse(node['required_resources']); let hostname = document.getElementById('id_hostname'); + let image = document.getElementById('id_image'); for(let resource in required_resources){ this.available_resources[resource] += required_resources[resource]; } hostname.readOnly = false; + image.readOnly = false; this.updateAvailibility(); }