blob: 29858a447485fe75efa1020ee581a7e4d9552f07 [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 Mack38119372013-04-30 18:17:38 -040017 instance_name = models.CharField(blank=True, null=True, max_length=200, help_text="OpenStack generated name")
Tony Mack1eeeae92013-04-16 23:04:44 -040018 ip = models.GenericIPAddressField(help_text="Sliver ip address", blank=True, null=True)
Tony Mack771f4b92013-04-12 01:49:57 -040019 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 Tully4bc09f22013-04-10 21:15:21 -040024
Tony Mack29c287f2013-04-11 21:07:16 -040025 def __unicode__(self): return u'%s::%s' % (self.slice, self.deploymentNetwork)
Siobhan Tully4bc09f22013-04-10 21:15:21 -040026
Tony Mackcdec0902013-04-15 00:38:49 -040027 def save(self, *args, **kwds):
Tony Mack8e92dc52013-04-16 21:58:39 -040028 if not self.slice.subnet.exists():
Tony Mack2b241cf2013-04-16 21:57:55 -040029 raise exceptions.ValidationError, "Slice %s has no subnet" % self.slice.name
30
Tony Mackcdec0902013-04-15 00:38:49 -040031 if not self.instance_id:
Tony Mackfdd4d802013-04-27 13:02:33 -040032 instance = self.driver.spawn_instance(name=self.name,
Tony Mackcdec0902013-04-15 00:38:49 -040033 key_name = self.key.name,
Tony Mackcdec0902013-04-15 00:38:49 -040034 image_id = self.image.image_id,
35 hostname = self.node.name )
36 self.instance_id = instance.id
Tony Mack38119372013-04-30 18:17:38 -040037 self.instance_name = getattr(instance, 'OS-EXT-SRV-ATTR:instance_name')
Tony Mackcdec0902013-04-15 00:38:49 -040038
39 super(Sliver, self).save(*args, **kwds)
40
41 def delete(self, *args, **kwds):
Tony Mackcdec0902013-04-15 00:38:49 -040042 if self.instance_id:
Tony Mackfdd4d802013-04-27 13:02:33 -040043 self.driver.destroy_instance(self.instance_id)
Tony Mackcdec0902013-04-15 00:38:49 -040044
45 super(Sliver, self).delete(*args, **kwds)