blob: 2eabf23fa47ea7f0d5664dfb226aa6ff882612e9 [file] [log] [blame]
import os
from django.db import models
from django.core import exceptions
from plstackapi.core.models import PlCoreBase
from plstackapi.core.models import Flavor
from plstackapi.core.models import Image
from plstackapi.core.models import Key
from plstackapi.core.models import Slice
from plstackapi.core.models import Node
from plstackapi.core.models import Site
from plstackapi.core.models import DeploymentNetwork
from plstackapi.openstack.driver import OpenStackDriver
# Create your models here.
class Sliver(PlCoreBase):
instance_id = models.CharField(max_length=200, help_text="Nova instance id")
name = models.CharField(max_length=200, help_text="Sliver name")
ip = models.GenericIPAddressField(help_text="Sliver ip address", blank=True, null=True)
flavor = models.ForeignKey(Flavor, related_name='slivers')
image = models.ForeignKey(Image, related_name='slivers')
key = models.ForeignKey(Key, related_name='slivers')
slice = models.ForeignKey(Slice, related_name='slivers')
node = models.ForeignKey(Node, related_name='slivers')
deploymentNetwork = models.ForeignKey(DeploymentNetwork, related_name='sliver_deploymentNetwork')
def __unicode__(self): return u'%s::%s' % (self.slice, self.deploymentNetwork)
def save(self, *args, **kwds):
if not self.slice.subnet.exists():
raise exceptions.ValidationError, "Slice %s has no subnet" % self.slice.name
if not self.instance_id:
driver = OpenStackDriver()
instance = driver.spawn_instance(name=self.name,
key_name = self.key.name,
flavor_id = self.flavor.flavor_id,
image_id = self.image.image_id,
hostname = self.node.name )
self.instance_id = instance.id
super(Sliver, self).save(*args, **kwds)
def delete(self, *args, **kwds):
driver = OpenStackDriver()
if self.instance_id:
driver.destroy_instance(self.instance_id)
super(Sliver, self).delete(*args, **kwds)