From 25275685e9a735e51fae8b1a936ba5733f6fb770 Mon Sep 17 00:00:00 2001 From: Parker Berberian Date: Wed, 10 Oct 2018 16:06:47 -0400 Subject: Lab as a Service 2.0 See changes here: https://wiki.opnfv.org/display/INF/Pharos+Laas Change-Id: I59ada5f98e70a28d7f8c14eab3239597e236ca26 Signed-off-by: Sawyer Bergeron Signed-off-by: Parker Berberian --- dashboard/src/booking/models.py | 60 ++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 31 deletions(-) (limited to 'dashboard/src/booking/models.py') diff --git a/dashboard/src/booking/models.py b/dashboard/src/booking/models.py index 8762d46..adfc28d 100644 --- a/dashboard/src/booking/models.py +++ b/dashboard/src/booking/models.py @@ -1,5 +1,6 @@ ############################################################################## # Copyright (c) 2016 Max Breitenfeldt and others. +# Copyright (c) 2018 Sawyer Bergeron, Parker Berberian, and others. # # All rights reserved. This program and the accompanying materials # are made available under the terms of the Apache License, Version 2.0 @@ -8,67 +9,61 @@ ############################################################################## +from resource_inventory.models import ResourceBundle, ConfigBundle +from account.models import Lab from django.conf import settings from django.contrib.auth.models import User from django.db import models from jira import JIRA from jira import JIRAError -from django.utils.crypto import get_random_string -import hashlib +import resource_inventory.resource_manager -from dashboard.models import Resource - -class Installer(models.Model): +class Scenario(models.Model): id = models.AutoField(primary_key=True) - name = models.CharField(max_length=30) + name = models.CharField(max_length=300) def __str__(self): return self.name -class Scenario(models.Model): + +class Installer(models.Model): id = models.AutoField(primary_key=True) - name = models.CharField(max_length=300) + name = models.CharField(max_length=30) + sup_scenarios = models.ManyToManyField(Scenario, blank=True) def __str__(self): return self.name + class Opsys(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=100) + sup_installers = models.ManyToManyField(Installer, blank=True) def __str__(self): return self.name + class Booking(models.Model): id = models.AutoField(primary_key=True) - changeid = models.TextField(default='initial', blank=True, null=True) - user = models.ForeignKey(User, models.CASCADE) # delete if user is deleted - resource = models.ForeignKey(Resource, models.PROTECT) + owner = models.ForeignKey(User, models.CASCADE, related_name='owner') # delete if user is deleted + collaborators = models.ManyToManyField(User, related_name='collaborators') start = models.DateTimeField() end = models.DateTimeField() reset = models.BooleanField(default=False) - jira_issue_id = models.IntegerField(null=True) - jira_issue_status = models.CharField(max_length=50) - - opsys = models.ForeignKey(Opsys, models.DO_NOTHING, null=True) - installer = models.ForeignKey(Installer, models.DO_NOTHING, null=True) - scenario = models.ForeignKey(Scenario, models.DO_NOTHING, null=True) + jira_issue_id = models.IntegerField(null=True, blank=True) + jira_issue_status = models.CharField(max_length=50, blank=True) purpose = models.CharField(max_length=300, blank=False) ext_count = models.IntegerField(default=2) + resource = models.ForeignKey(ResourceBundle, on_delete=models.SET_NULL, null=True) #need to decide behavior here on delete + config_bundle = models.ForeignKey(ConfigBundle, on_delete=models.SET_NULL, null=True) + project = models.CharField(max_length=100, default="", blank=True, null=True) + lab = models.ForeignKey(Lab, null=True, on_delete=models.SET_NULL) class Meta: db_table = 'booking' - def get_jira_issue(self): - try: - jira = JIRA(server=settings.JIRA_URL, - basic_auth=(settings.JIRA_USER_NAME, settings.JIRA_USER_PASSWORD)) - issue = jira.issue(self.jira_issue_id) - return issue - except JIRAError: - return None - def save(self, *args, **kwargs): """ Save the booking if self.user is authorized and there is no overlapping booking. @@ -83,11 +78,14 @@ class Booking(models.Model): conflicting_dates = conflicting_dates.filter(start__lt=self.end) if conflicting_dates.count() > 0: raise ValueError('This booking overlaps with another booking') - if not self.changeid: - self.changeid = self.id - else: - self.changeid = hashlib.md5(self.changeid.encode() + get_random_string(length=32).encode()).hexdigest() return super(Booking, self).save(*args, **kwargs) + def delete(self, *args, **kwargs): + res = self.resource + self.resource = None + self.save() + resource_inventory.resource_manager.ResourceManager.getInstance().deleteResourceBundle(res) + return super(self.__class__, self).delete(*args, **kwargs) + def __str__(self): - return str(self.resource) + ' from ' + str(self.start) + ' until ' + str(self.end) + return str(self.purpose) + ' from ' + str(self.start) + ' until ' + str(self.end) -- cgit 1.2.3-korg