aboutsummaryrefslogtreecommitdiffstats
path: root/src/booking
diff options
context:
space:
mode:
authorSawyer Bergeron <sbergeron@iol.unh.edu>2020-06-03 13:05:29 -0400
committerSawyer Bergeron <sbergeron@iol.unh.edu>2020-06-04 15:49:23 -0400
commit1fec02fd0a4d7af8a89beb91d8d751a23e5086e0 (patch)
tree628204d724fad0eeb7711029a329ca30fd5dedfd /src/booking
parent530271c247a4ce538e3aa69fd3893481fada44ab (diff)
Allow not setting image for multi-node pods
Signed-off-by: Sawyer Bergeron <sbergeron@iol.unh.edu> Change-Id: Ieee0802291901b4b14d756781fb2182bff9afae6 Signed-off-by: Sawyer Bergeron <sbergeron@iol.unh.edu>
Diffstat (limited to 'src/booking')
-rw-r--r--src/booking/forms.py2
-rw-r--r--src/booking/quick_deployer.py34
2 files changed, 21 insertions, 15 deletions
diff --git a/src/booking/forms.py b/src/booking/forms.py
index 886f0f6..2a8784f 100644
--- a/src/booking/forms.py
+++ b/src/booking/forms.py
@@ -36,7 +36,7 @@ class QuickBookingForm(forms.Form):
super(QuickBookingForm, self).__init__(data=data, **kwargs)
self.fields["image"] = forms.ModelChoiceField(
- Image.objects.filter(public=True) | Image.objects.filter(owner=user)
+ Image.objects.filter(public=True) | Image.objects.filter(owner=user), required=False
)
self.fields['users'] = SearchableSelectMultipleField(
diff --git a/src/booking/quick_deployer.py b/src/booking/quick_deployer.py
index 9cfc465..0d4e5ea 100644
--- a/src/booking/quick_deployer.py
+++ b/src/booking/quick_deployer.py
@@ -103,9 +103,13 @@ def update_template(old_template, image, hostname, user):
# there is never multiple networks anyway. This may have to change in the future
for old_config in old_template.getConfigs():
+ image_to_set = image
+ if not image:
+ image_to_set = old_config.image
+
config = ResourceConfiguration.objects.create(
profile=old_config.profile,
- image=image,
+ image=image_to_set,
template=template,
is_head_node=old_config.is_head_node
)
@@ -170,19 +174,21 @@ def check_invariants(request, **kwargs):
lab = kwargs['lab']
length = kwargs['length']
# check that image os is compatible with installer
- if installer in image.os.sup_installers.all():
- # if installer not here, we can omit that and not check for scenario
- if not scenario:
- raise ValidationError("An OPNFV Installer needs a scenario to be chosen to work properly")
- if scenario not in installer.sup_scenarios.all():
- raise ValidationError("The chosen installer does not support the chosen scenario")
- if image.from_lab != lab:
- raise ValidationError("The chosen image is not available at the chosen hosting lab")
- # TODO
- # if image.host_type != host_profile:
- # raise ValidationError("The chosen image is not available for the chosen host type")
- if not image.public and image.owner != request.user:
- raise ValidationError("You are not the owner of the chosen private image")
+ if image:
+ if installer or scenario:
+ if installer in image.os.sup_installers.all():
+ # if installer not here, we can omit that and not check for scenario
+ if not scenario:
+ raise ValidationError("An OPNFV Installer needs a scenario to be chosen to work properly")
+ if scenario not in installer.sup_scenarios.all():
+ raise ValidationError("The chosen installer does not support the chosen scenario")
+ if image.from_lab != lab:
+ raise ValidationError("The chosen image is not available at the chosen hosting lab")
+ # TODO
+ # if image.host_type != host_profile:
+ # raise ValidationError("The chosen image is not available for the chosen host type")
+ if not image.public and image.owner != request.user:
+ raise ValidationError("You are not the owner of the chosen private image")
if length < 1 or length > 21:
raise BookingLengthException("Booking must be between 1 and 21 days long")