from core.models.site import SitePrivilege
from core.models import User
from core.models import Role
-from core.models import Deployment
+from core.models import Controller,ControllerLinkManager,ControllerLinkDeletionManager
from core.models import ServiceClass
from core.models.serviceclass import get_default_serviceclass
from core.models import Tag
from django.contrib.contenttypes import generic
from core.models import Service
-from core.models import Deployment
+from core.models import Controller
+from core.models import Flavor, Image
from django.core.exceptions import ValidationError
# Create your models here.
slice_url = models.URLField(blank=True, max_length=512)
site = models.ForeignKey(Site, related_name='slices', help_text="The Site this Slice belongs to")
max_slivers = models.IntegerField(default=10)
- imagePreference = models.CharField(default="Ubuntu 12.04 LTS", null=True, blank=True, max_length=256)
service = models.ForeignKey(Service, related_name='service', null=True, blank=True)
network = models.CharField(default="Private Only",null=True, blank=True, max_length=256)
- mountDataSets = models.CharField(default="GenBank",null=True, blank=True, max_length=256)
tags = generic.GenericRelation(Tag)
-
serviceClass = models.ForeignKey(ServiceClass, related_name = "slices", null=True, default=get_default_serviceclass)
creator = models.ForeignKey(User, related_name='slices', blank=True, null=True)
+ # for tenant view
+ default_flavor = models.ForeignKey(Flavor, related_name = "slices", null=True, blank=True)
+ default_image = models.ForeignKey(Image, related_name = "slices", null=True, blank=True);
+ mount_data_sets = models.CharField(default="GenBank",null=True, blank=True, max_length=256)
+
def __unicode__(self): return u'%s' % (self.name)
@property
def save(self, *args, **kwds):
site = Site.objects.get(id=self.site.id)
- if not self.name.startswith(site.login_base):
+ # allow preexisting slices to keep their original name for now
+ if not self.id and not self.name.startswith(site.login_base):
raise ValidationError('slice name must begin with %s' % site.login_base)
if self.serviceClass is None:
qs = Slice.objects.filter(id__in=slice_ids)
return qs
+ def delete(self, *args, **kwds):
+ # delete networks associated with this slice
+ from core.models.network import Network
+ nets = Network.objects.filter(slices=self)
+ nets.delete()
+ # delete slice controllers
+ slice_controllers = ControllerSlice.objects.filter(slice=self)
+ slice_controllers.delete()
+ # delete slice privilege
+ slice_privileges = SlicePrivilege.objects.filter(slice=self)
+ slice_privileges.delete()
+ # continue with normal delete
+ super(Slice, self).delete(*args, **kwds)
+
+
class SliceRole(PlCoreBase):
ROLE_CHOICES = (('admin','Admin'),('default','Default'))
def __unicode__(self): return u'%s' % (self.role)
class SlicePrivilege(PlCoreBase):
- user = models.ForeignKey('User', related_name='slice_privileges')
- slice = models.ForeignKey('Slice', related_name='slice_privileges')
- role = models.ForeignKey('SliceRole')
+ user = models.ForeignKey('User', related_name='sliceprivileges')
+ slice = models.ForeignKey('Slice', related_name='sliceprivileges')
+ role = models.ForeignKey('SliceRole',related_name='sliceprivileges')
def __unicode__(self): return u'%s %s %s' % (self.slice, self.user, self.role)
qs = SlicePrivilege.objects.filter(id__in=sp_ids)
return qs
-class SliceDeployments(PlCoreBase):
- slice = models.ForeignKey(Slice)
- deployment = models.ForeignKey(Deployment)
+class ControllerSlice(PlCoreBase):
+ objects = ControllerLinkManager()
+ deleted_objects = ControllerLinkDeletionManager()
+
+ controller = models.ForeignKey(Controller, related_name='controllerslices')
+ slice = models.ForeignKey(Slice, related_name='controllerslices')
tenant_id = models.CharField(null=True, blank=True, max_length=200, help_text="Keystone tenant id")
- network_id = models.CharField(null=True, blank=True, max_length=256, help_text="Quantum network")
- router_id = models.CharField(null=True, blank=True, max_length=256, help_text="Quantum router id")
- subnet_id = models.CharField(null=True, blank=True, max_length=256, help_text="Quantum subnet id")
- def __unicode__(self): return u'%s %s' % (self.slice, self.deployment)
+ def __unicode__(self): return u'%s %s' % (self.slice, self.controller)
@staticmethod
def select_by_user(user):
if user.is_admin:
- qs = SliceDeployments.objects.all()
+ qs = ControllerSlice.objects.all()
else:
slices = Slice.select_by_user(user)
- qs = SliceDeployments.objects.filter(slice__in=slices)
+ qs = ControllerSlice.objects.filter(slice__in=slices)
return qs
+
+ def get_cpu_stats(self):
+ filter = 'project_id=%s'%self.tenant_id
+ return monitor.get_meter('cpu',filter,None)
+
+ def get_bw_stats(self):
+ filter = 'project_id=%s'%self.tenant_id
+ return monitor.get_meter('network.outgoing.bytes',filter,None)
+
+ def get_node_stats(self):
+ return len(self.slice.slivers)