blob: 529c1319230fa210a0f92ce59cebfa8d4342c129 [file] [log] [blame]
Siobhan Tully4bc09f22013-04-10 21:15:21 -04001import os
2from django.db import models
Tony Mack2b241cf2013-04-16 21:57:55 -04003from django.core import exceptions
Siobhan Tully4bc09f22013-04-10 21:15:21 -04004from plstackapi.core.models import PlCoreBase
5from plstackapi.core.models import Flavor
6from plstackapi.core.models import Image
7from plstackapi.core.models import Key
8from plstackapi.core.models import Slice
9from plstackapi.core.models import Node
10from plstackapi.core.models import Site
11from plstackapi.core.models import DeploymentNetwork
Siobhan Tully4bc09f22013-04-10 21:15:21 -040012
13# Create your models here.
14class Sliver(PlCoreBase):
15 instance_id = models.CharField(max_length=200, help_text="Nova instance id")
16 name = models.CharField(max_length=200, help_text="Sliver name")
Tony Mack1eeeae92013-04-16 23:04:44 -040017 ip = models.GenericIPAddressField(help_text="Sliver ip address", blank=True, null=True)
Tony Mack771f4b92013-04-12 01:49:57 -040018 flavor = models.ForeignKey(Flavor, related_name='slivers')
19 image = models.ForeignKey(Image, related_name='slivers')
20 key = models.ForeignKey(Key, related_name='slivers')
21 slice = models.ForeignKey(Slice, related_name='slivers')
22 node = models.ForeignKey(Node, related_name='slivers')
Siobhan Tully53437282013-04-26 19:30:27 -040023 deploymentNetwork = models.ForeignKey(DeploymentNetwork, verbose_name='deployment', related_name='sliver_deploymentNetwork')
Siobhan Tully231f4c82013-05-02 05:47:24 -040024 numberCores = models.IntegerField(verbose_name="Number of Cores", help_text="Number of cores for sliver", default=2)
25
Siobhan Tully4bc09f22013-04-10 21:15:21 -040026
Tony Mack29c287f2013-04-11 21:07:16 -040027 def __unicode__(self): return u'%s::%s' % (self.slice, self.deploymentNetwork)
Siobhan Tully4bc09f22013-04-10 21:15:21 -040028
Tony Mackcdec0902013-04-15 00:38:49 -040029 def save(self, *args, **kwds):
Tony Mack8e92dc52013-04-16 21:58:39 -040030 if not self.slice.subnet.exists():
Tony Mack2b241cf2013-04-16 21:57:55 -040031 raise exceptions.ValidationError, "Slice %s has no subnet" % self.slice.name
32
Tony Mackcdec0902013-04-15 00:38:49 -040033 if not self.instance_id:
Tony Mackfdd4d802013-04-27 13:02:33 -040034 instance = self.driver.spawn_instance(name=self.name,
Tony Mackcdec0902013-04-15 00:38:49 -040035 key_name = self.key.name,
36 flavor_id = self.flavor.flavor_id,
37 image_id = self.image.image_id,
38 hostname = self.node.name )
39 self.instance_id = instance.id
40
41 super(Sliver, self).save(*args, **kwds)
42
43 def delete(self, *args, **kwds):
Tony Mackcdec0902013-04-15 00:38:49 -040044 if self.instance_id:
Tony Mackfdd4d802013-04-27 13:02:33 -040045 self.driver.destroy_instance(self.instance_id)
Tony Mackcdec0902013-04-15 00:38:49 -040046
47 super(Sliver, self).delete(*args, **kwds)