list_display = ('name', 'site', 'deploymentNetwork')
list_filter = ('deploymentNetwork',)
+
+
+class IgnoredField(forms.Field):
+ def validate(self, value):
+ return
+
+
+
+class RoleForm(forms.ModelForm):
+ role_id = IgnoredField()
+ role_type = forms.CharField()
+
+
+class RoleAdmin(admin.ModelAdmin):
+ form = RoleForm
+ list_display = ('role_type',)
+
admin.site.register(Site, SiteAdmin)
admin.site.register(SitePrivilege)
admin.site.register(Slice, SliceAdmin)
admin.site.register(Sliver)
admin.site.register(Flavor)
admin.site.register(Key)
-admin.site.register(Role)
+admin.site.register(Role, RoleAdmin)
admin.site.register(User)
admin.site.register(DeploymentNetwork, DeploymentNetworkAdmin)
import datetime
from django.db import models
from plstackapi.core.models import PlCoreBase
+from plstackapi.openstack.driver import OpenStackDriver
# Create your models here.
class Role(PlCoreBase):
- ROLE_CHOICES = (('admin', 'Admin'), ('pi', 'Principle Investigator'), ('user','User'))
- role_id = models.CharField(max_length=256, unique=True)
- role_type = models.CharField(max_length=80, unique=True, choices=ROLE_CHOICES)
+ #ROLE_CHOICES = (('admin', 'Admin'), ('pi', 'Principle Investigator'), ('user','User'))
+ role_id = models.CharField(max_length=256, unique=True, blank=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)
+ self.role_id = keystone_role.id
+
+ super(Role, self).save(*args, **kwds)
+
+ def delete(self, *args, **kwds):
+ driver = OpenStackDriver()
+ if self.role_id:
+ driver.delete_role({'id': self.role_id})
+
+ super(Role, self).delete(*args, **kwds)
+
return self.shell.keystone.tenants.update(id, **kwds)
def delete_tenant(self, id):
- tenant = self.shell.keystone.tenants.find(id=id)
- return self.shell.keystone.tenants.delete(tenant)
+ tenants = self.shell.keystone.tenants.findall(id=id)
+ for tenant in tenants:
+ self.shell.keystone.tenants.delete(tenant)
+ return 1
def create_user(self, name, email, password, enabled):
users = self.shell.keystone.users.findall(email=email)
user = users[0]
return user
+ def delete_user(self, id):
+ users = self.shell.keystone.users.findall(id=id)
+ for user in users:
+ self.shell.keystone.users.delete(user)
+ return 1
+
def add_user_role(self, user_id, tenant_id, role_name):
user = self.shell.keystone.users.find(id=user_id)
tenant = self.shell.keystone.tenants.find(id=tenant_id)
def update_user(self, id, **kwds):
return self.shell.keystone.users.update(id, **kwds)
- def delete_user(self, id):
- user = self.shell.keystone.users.find(id=id)
- return self.shell.keystone.users.delete(user)
-
def create_router(self, name, set_gateway=True):
routers = self.shell.quantum.list_routers(name=name)['routers']
if routers:
for subnet_id in net['subnets']:
self.delete_subnet(subnet_id)
self.shell.quantum.delete_network(net['id'])
+ return 1
def create_subnet(self, name, network_id, cidr_ip, ip_version, start, end):
#nets = self.shell.quantum.list_networks(name=network_name)['networks']
return self.shell.quantum.update_subnet(id, fields)
def delete_subnet(self, id):
- return self.shell.quantum.delete_subnet(id=id)
+ #return self.shell.quantum.delete_subnet(id=id)
+ # inefficient but fault tolerant
+ subnets = self.shell.quantum.list_subnets()['subnets']
+ for subnet in subnets:
+ if subnet['id'] == id:
+ self.shell.quantum.delete_subnet(id=id)
+ return
def create_keypair(self, name, key):
keys = self.shell.nova.keypairs.findall(name=name)
for key in keys:
self.shell.nova.keypairs.delete(key)
+ return 1
def spawn_instance(self, name, key_name=None, hostname=None, flavor_id=None, image_id=None, security_group=None, pubkeys=[]):
#if not flavor_id: