diff options
Diffstat (limited to 'src/dashboard')
-rw-r--r-- | src/dashboard/context_processors.py | 1 | ||||
-rw-r--r-- | src/dashboard/exceptions.py | 6 | ||||
-rw-r--r-- | src/dashboard/populate_db_iol.py | 228 | ||||
-rw-r--r-- | src/dashboard/tasks.py | 20 | ||||
-rw-r--r-- | src/dashboard/templatetags/__init__.py | 2 | ||||
-rw-r--r-- | src/dashboard/tests/__init__.py | 2 | ||||
-rw-r--r-- | src/dashboard/urls.py | 9 | ||||
-rw-r--r-- | src/dashboard/views.py | 39 |
8 files changed, 163 insertions, 144 deletions
diff --git a/src/dashboard/context_processors.py b/src/dashboard/context_processors.py index 32c70b8..338f609 100644 --- a/src/dashboard/context_processors.py +++ b/src/dashboard/context_processors.py @@ -8,5 +8,6 @@ ############################################################################## from django.conf import settings + def debug(context): return {'DEBUG': settings.DEBUG} diff --git a/src/dashboard/exceptions.py b/src/dashboard/exceptions.py index bc3fcac..9c16a06 100644 --- a/src/dashboard/exceptions.py +++ b/src/dashboard/exceptions.py @@ -14,18 +14,21 @@ class ResourceProvisioningException(Exception): """ pass + class ModelValidationException(Exception): """ Validation before saving model returned issues """ pass + class ResourceAvailabilityException(ResourceProvisioningException): """ Requested resources are not *currently* available """ pass + class ResourceExistenceException(ResourceAvailabilityException): """ Requested resources do not exist or do not match any known resources @@ -36,11 +39,14 @@ class ResourceExistenceException(ResourceAvailabilityException): class NonUniqueHostnameException(Exception): pass + class InvalidHostnameException(Exception): pass + class InvalidVlanConfigurationException(Exception): pass + class NetworkExistsException(Exception): pass diff --git a/src/dashboard/populate_db_iol.py b/src/dashboard/populate_db_iol.py index 8c8b271..4368520 100644 --- a/src/dashboard/populate_db_iol.py +++ b/src/dashboard/populate_db_iol.py @@ -7,18 +7,27 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## - -from django.test import TestCase -from booking.models import Booking -from resource_inventory.models import * -from account.models import * -from api.serializers.booking_serializer import * -from datetime import timedelta -from django.utils import timezone -from django.contrib.auth.models import Permission, User import json import yaml +from account.models import Lab, UserProfile +from django.contrib.auth.models import User +from resource_inventory.models import ( + HostProfile, + InterfaceProfile, + DiskProfile, + CpuProfile, + RamProfile, + VlanManager, + Scenario, + Installer, + Opsys, + OPNFVRole, + Image, + Interface, + Host +) + class Populator: @@ -29,7 +38,6 @@ class Populator: self.generic_bundle_count = 0 self.booking_count = 0 - def make_host_profile(self, lab, data): hostProfile = HostProfile.objects.create( host_type=data['host']['type'], @@ -47,7 +55,6 @@ class Populator: ) interfaceProfile.save() - for disk_data in data['disks']: diskProfile = DiskProfile.objects.create( @@ -84,41 +91,38 @@ class Populator: user_sbergeron.save() user_sbergeron_prof = UserProfile.objects.create(user=user_sbergeron) user_sbergeron_prof.save() - return [user_sbergeron, user_pberberian,] - + return [user_sbergeron, user_pberberian] def make_labs(self): unh_iol = User.objects.create(username="unh_iol") unh_iol.save() vlans = [] reserved = [] - for i in range(1,4096): + for i in range(1, 4096): vlans.append(1) reserved.append(0) - # TODO: put reserved vlans here iol = Lab.objects.create( - lab_user=unh_iol, - name="UNH_IOL", - vlan_manager=VlanManager.objects.create( - vlans = json.dumps(vlans), - reserved_vlans = json.dumps(reserved), - allow_overlapping = False, - block_size = 20, - ), - api_token = Lab.make_api_token(), - contact_email = "nfv-lab@iol.unh.edu", - location = "University of New Hampshire, Durham NH, 03824 USA" - ) + lab_user=unh_iol, + name="UNH_IOL", + vlan_manager=VlanManager.objects.create( + vlans=json.dumps(vlans), + reserved_vlans=json.dumps(reserved), + allow_overlapping=False, + block_size=20, + ), + api_token=Lab.make_api_token(), + contact_email="nfv-lab@iol.unh.edu", + location="University of New Hampshire, Durham NH, 03824 USA" + ) return [iol] - def make_configurations(self): - #scenarios + # scenarios scen1 = Scenario.objects.create(name="os-nosdn-nofeature-noha") scen2 = Scenario.objects.create(name="os-odl-kvm-ha") scen3 = Scenario.objects.create(name="os-nosdn-nofeature-ha") - #installers + # installers fuel = Installer.objects.create(name="Fuel") fuel.sup_scenarios.add(scen1) fuel.sup_scenarios.add(scen3) @@ -141,7 +145,7 @@ class Populator: compass.sup_scenarios.add(scen3) compass.save() - #operating systems + # operating systems ubuntu = Opsys.objects.create(name="Ubuntu") ubuntu.sup_installers.add(compass) ubuntu.sup_installers.add(joid) @@ -154,61 +158,61 @@ class Populator: suse.sup_installers.add(fuel) suse.save() - - #opnfv roles - compute = OPNFVRole.objects.create(name="Compute", description="Does the heavy lifting") - controller = OPNFVRole.objects.create(name="Controller", description="Controls everything") - jumphost = OPNFVRole.objects.create(name="Jumphost", description="Entry Point") + # opnfv roles + OPNFVRole.objects.create(name="Compute", description="Does the heavy lifting") + OPNFVRole.objects.create(name="Controller", description="Controls everything") + OPNFVRole.objects.create(name="Jumphost", description="Entry Point") lab = Lab.objects.first() user = UserProfile.objects.first().user - image = Image.objects.create( - lab_id=23, - name="hpe centos", - from_lab=lab, - owner=user, - host_type=HostProfile.objects.get(name="hpe") - ) - image = Image.objects.create( - lab_id=25, - name="hpe ubuntu", - from_lab=lab, - owner=user, - host_type=HostProfile.objects.get(name="hpe") - ) + Image.objects.create( + lab_id=23, + name="hpe centos", + from_lab=lab, + owner=user, + host_type=HostProfile.objects.get(name="hpe") + ) + Image.objects.create( + lab_id=25, + name="hpe ubuntu", + from_lab=lab, + owner=user, + host_type=HostProfile.objects.get(name="hpe") + ) - image = Image.objects.create( - lab_id=26, - name="hpe suse", - from_lab=lab, - owner=user, - host_type=HostProfile.objects.get(name="hpe") - ) - image = Image.objects.create( - lab_id=27, - name="arm ubuntu", - from_lab=lab, - owner=user, - host_type=HostProfile.objects.get(name="arm") - ) + Image.objects.create( + lab_id=26, + name="hpe suse", + from_lab=lab, + owner=user, + host_type=HostProfile.objects.get(name="hpe") + ) + + Image.objects.create( + lab_id=27, + name="arm ubuntu", + from_lab=lab, + owner=user, + host_type=HostProfile.objects.get(name="arm") + ) def make_lab_hosts(self, hostcount, profile, lab, data, offset=1): for i in range(hostcount): - name="Host_" + lab.name + "_" + profile.name + "_" + str(i + offset) + name = "Host_" + lab.name + "_" + profile.name + "_" + str(i + offset) host = Host.objects.create( - name=name, - lab=lab, - profile=profile, - labid=data[i]['labid'] - ) + name=name, + lab=lab, + profile=profile, + labid=data[i]['labid'] + ) for iface_profile in profile.interfaceprofile.all(): iface_data = data[i]['interfaces'][iface_profile.name] Interface.objects.create( - mac_address=iface_data['mac'], - bus_address=iface_data['bus'], - name=iface_profile.name, - host=host - ) + mac_address=iface_data['mac'], + bus_address=iface_data['bus'], + name=iface_profile.name, + host=host + ) def make_profile_data(self): """ @@ -219,10 +223,10 @@ class Populator: for prof in ["hpe", "arm"]: # TODO profile_dict = {} host = { - "name": prof, - "type": 0, - "description": "some LaaS servers" - } + "name": prof, + "type": 0, + "description": "some LaaS servers" + } profile_dict['host'] = host profile_dict['interfaces'] = [] for interface in [{"name": "eno1", "speed": 1000}, {"name": "eno2", "speed": 10000}]: # TODO @@ -277,64 +281,64 @@ class Populator: if len(host_data_dict) < 1: continue host_profile = HostProfile.objects.create( - name=host_profile_name, - description="" - ) + name=host_profile_name, + description="" + ) host_profile.labs.add(lab) example_host_data = list(host_data_dict.values())[0] cpu_data = example_host_data['cpu'] CpuProfile.objects.create( - cores=cpu_data['cores'], - architecture=cpu_data['arch'], - cpus=cpu_data['cpus'], - host=host_profile - ) + cores=cpu_data['cores'], + architecture=cpu_data['arch'], + cpus=cpu_data['cpus'], + host=host_profile + ) ram_data = example_host_data['memory'] RamProfile.objects.create( - amount=int(ram_data[:-1]), - channels=1, - host=host_profile - ) + amount=int(ram_data[:-1]), + channels=1, + host=host_profile + ) disks_data = example_host_data['disk'] for disk_data in disks_data: size = 0 try: - size=int(disk_data['size'].split('.')[0]) + size = int(disk_data['size'].split('.')[0]) except: - size=int(disk_data['size'].split('.')[0][:-1]) + size = int(disk_data['size'].split('.')[0][:-1]) DiskProfile.objects.create( - size=size, - media_type="SSD", - name=disk_data['name'], - host=host_profile - ) + size=size, + media_type="SSD", + name=disk_data['name'], + host=host_profile + ) ifaces_data = example_host_data['interface'] for iface_data in ifaces_data: InterfaceProfile.objects.create( - speed=iface_data['speed'], - name=iface_data['name'], - host=host_profile - ) + speed=iface_data['speed'], + name=iface_data['name'], + host=host_profile + ) # all profiles created for hostname, host_data in host_data_dict.items(): host = Host.objects.create( - name=hostname, - labid=hostname, - profile=host_profile, - lab=lab - ) + name=hostname, + labid=hostname, + profile=host_profile, + lab=lab + ) for iface_data in host_data['interface']: Interface.objects.create( - mac_address=iface_data['mac'], - bus_address=iface_data['busaddr'], - name=iface_data['name'], - host=host - ) + mac_address=iface_data['mac'], + bus_address=iface_data['busaddr'], + name=iface_data['name'], + host=host + ) def populate(self): self.labs = self.make_labs() diff --git a/src/dashboard/tasks.py b/src/dashboard/tasks.py index d4b4189..b1d97b7 100644 --- a/src/dashboard/tasks.py +++ b/src/dashboard/tasks.py @@ -14,7 +14,7 @@ from django.utils import timezone from django.db.models import Q from booking.models import Booking from notifier.manager import NotificationHandler -from api.models import * +from api.models import JobStatus, SoftwareRelation, HostHardwareRelation, HostNetworkRelation, AccessRelation from resource_inventory.resource_manager import ResourceManager @@ -26,7 +26,7 @@ def booking_poll(): config.clear_delta() config.set_power("off") config.save() - hostrelation.status=JobStatus.NEW + hostrelation.status = JobStatus.NEW hostrelation.save() def cleanup_network(qs): @@ -53,7 +53,7 @@ def booking_poll(): interface.config.clear() network.add_interface(interface) network.save() - hostrelation.status=JobStatus.NEW + hostrelation.status = JobStatus.NEW hostrelation.save() def cleanup_software(qs): @@ -62,7 +62,7 @@ def booking_poll(): software = relation.config.opnfv software.clear_delta() software.save() - relation.status=JobStatus.NEW + relation.status = JobStatus.NEW relation.save() def cleanup_access(qs): @@ -96,11 +96,11 @@ def free_hosts(): hardware = ~Q(~Q(job__hosthardwarerelation__status=200)) bookings = Booking.objects.filter( - networks, - hardware, - end__lt=timezone.now(), - job__complete=True, - resource__isnull=False - ) + networks, + hardware, + end__lt=timezone.now(), + job__complete=True, + resource__isnull=False + ) for booking in bookings: ResourceManager.getInstance().deleteResourceBundle(booking.resource) diff --git a/src/dashboard/templatetags/__init__.py b/src/dashboard/templatetags/__init__.py index b5914ce..b6fef6c 100644 --- a/src/dashboard/templatetags/__init__.py +++ b/src/dashboard/templatetags/__init__.py @@ -6,5 +6,3 @@ # which accompanies this distribution, and is available at # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## - - diff --git a/src/dashboard/tests/__init__.py b/src/dashboard/tests/__init__.py index b5914ce..b6fef6c 100644 --- a/src/dashboard/tests/__init__.py +++ b/src/dashboard/tests/__init__.py @@ -6,5 +6,3 @@ # which accompanies this distribution, and is available at # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## - - diff --git a/src/dashboard/urls.py b/src/dashboard/urls.py index 0d7ee87..571a987 100644 --- a/src/dashboard/urls.py +++ b/src/dashboard/urls.py @@ -25,9 +25,14 @@ Including another URLconf 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ from django.conf.urls import url -from dashboard.views import * +from dashboard.views import ( + landing_view, + lab_list_view, + lab_detail_view, + host_profile_detail_view +) -app_name="dashboard" +app_name = "dashboard" urlpatterns = [ url(r'^$', landing_view, name='index'), url(r'^lab/$', lab_list_view, name='all_labs'), diff --git a/src/dashboard/views.py b/src/dashboard/views.py index 2d1f8b2..36c3253 100644 --- a/src/dashboard/views.py +++ b/src/dashboard/views.py @@ -14,12 +14,11 @@ from django.views.generic import TemplateView from django.shortcuts import render from django.http import HttpResponseRedirect -from booking.models import Booking from account.models import Lab -from resource_inventory.models import * -from workflow.views import * -from workflow.workflow_manager import * +from resource_inventory.models import Image, HostProfile +from workflow.views import create_session +from workflow.workflow_manager import ManagerTracker def lab_list_view(request): @@ -40,18 +39,27 @@ def lab_detail_view(request, lab_name): if user: images = images | Image.objects.filter(from_lab=lab).filter(owner=user) - return render(request, "dashboard/lab_detail.html", - {'title': "Lab Overview", - 'lab': lab, - 'hostprofiles': lab.hostprofiles.all(), - 'images': images}) + return render( + request, + "dashboard/lab_detail.html", + { + 'title': "Lab Overview", + 'lab': lab, + 'hostprofiles': lab.hostprofiles.all(), + 'images': images + } + ) def host_profile_detail_view(request): - return render(request, "dashboard/host_profile_detail.html", - {'title': "Host Types", - }) + return render( + request, + "dashboard/host_profile_detail.html", + { + 'title': "Host Types", + } + ) def landing_view(request): @@ -62,12 +70,11 @@ def landing_view(request): try: manager = ManagerTracker.managers[request.session['manager_session']] - - except KeyError as e: + except KeyError: pass if manager is not None: - #no manager detected, don't display continue button + # no manager detected, don't display continue button manager_detected = True if request.method == 'GET': @@ -84,7 +91,7 @@ def landing_view(request): request.session['manager_session'] = mgr_uuid return HttpResponseRedirect('/wf/') - except KeyError as e: + except KeyError: pass |