]
list_display = ('role_type',)
+class SliverAdmin(admin.ModelAdmin):
+ fieldsets = [
+ ('Sliver', {'fields': ['name', 'slice', 'flavor', 'image', 'key', 'node', 'deploymentNetwork']})
+ ]
+ list_display = ['name', 'slice', 'flavor', 'image', 'key', 'node', 'deploymentNetwork']
+
admin.site.register(Site, SiteAdmin)
admin.site.register(SitePrivilege)
admin.site.register(Slice, SliceAdmin)
admin.site.register(Subnet, SubnetAdmin)
admin.site.register(Image, ImageAdmin)
admin.site.register(Node, NodeAdmin)
-admin.site.register(Sliver)
+admin.site.register(Sliver, SliverAdmin)
admin.site.register(Flavor)
admin.site.register(Key, KeyAdmin)
admin.site.register(Role, RoleAdmin)
class Key(PlCoreBase):
name = models.CharField(max_length=256, unique=True)
- key_id = models.CharField(max_length=256, unique=True, blank=True)
+ key_id = models.CharField(max_length=256, unique=True)
key = models.CharField(max_length=512)
type = models.CharField(max_length=256)
blacklisted = models.BooleanField(default=False)
class Role(PlCoreBase):
#ROLE_CHOICES = (('admin', 'Admin'), ('pi', 'Principle Investigator'), ('user','User'))
- role_id = models.CharField(max_length=256, unique=True, blank=True)
+ role_id = models.CharField(max_length=256, unique=True)
role_type = models.CharField(max_length=80, unique=True)
def __unicode__(self): return u'%s' % (self.role_type)
def save(self, *args, **kwds):
-
driver = OpenStackDriver()
if not self.role_id:
keystone_role = driver.create_role(name=self.role_type)
class Site(PlCoreBase):
- tenant_id = models.CharField(max_length=200, help_text="Keystone tenant id", blank=True)
+ tenant_id = models.CharField(max_length=200, help_text="Keystone tenant id")
name = models.CharField(max_length=200, help_text="Name for this Site")
site_url = models.URLField(null=True, blank=True, max_length=512, help_text="Site's Home URL Page")
enabled = models.BooleanField(default=True, help_text="Status for this Site")
# Create your models here.
class Slice(PlCoreBase):
- tenant_id = models.CharField(max_length=200, help_text="Keystone tenant id", blank=True)
+ tenant_id = models.CharField(max_length=200, help_text="Keystone tenant id")
name = models.CharField(unique=True, help_text="The Name of the Slice", max_length=80)
enabled = models.BooleanField(default=True, help_text="Status for this Slice")
SLICE_CHOICES = (('plc', 'PLC'), ('delegated', 'Delegated'), ('controller','Controller'), ('none','None'))
key = models.ForeignKey(Key, related_name='slivers')
slice = models.ForeignKey(Slice, related_name='slivers')
node = models.ForeignKey(Node, related_name='slivers')
- site = models.ForeignKey(Site, related_name='slivers')
+ #site = models.ForeignKey(Site, 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):
+ driver = OpenStackDriver()
+ if not self.instance_id:
+ 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)
# Create your models here.
class Subnet(PlCoreBase):
- subnet_id = models.CharField(max_length=256, unique=True, blank=True)
+ subnet_id = models.CharField(max_length=256, unique=True)
cidr = models.CharField(max_length=20)
ip_version = models.IntegerField()
start = models.IPAddressField()
# Create your models here.
class User(PlCoreBase):
- user_id = models.CharField(max_length=256, unique=True, blank=True)
+ user_id = models.CharField(max_length=256, unique=True)
firstname = models.CharField(help_text="person's given name", max_length=200)
lastname = models.CharField(help_text="person's surname", max_length=200)
email = models.EmailField(help_text="e-mail address", null=True)
scheduler_hints=hints)
return server
- def destroy_instance(self, name, id=None):
- args = {'name': name}
- if id:
- args['id'] = id
- servers = self.shell.nova.servers.findall(**args)
+ def destroy_instance(self, id):
+ servers = self.shell.nova.servers.findall(id=id)
for server in servers:
- if name == server.name:
- if not id or id == server.id:
- self.shell.nova.servers.delete(server)
+ self.shell.nova.servers.delete(server)