several bug fixes
diff --git a/planetstack/core/admin.py b/planetstack/core/admin.py
index 0c90b9a..aafa6e5 100644
--- a/planetstack/core/admin.py
+++ b/planetstack/core/admin.py
@@ -88,6 +88,7 @@
class SliceMembershipInline(admin.TabularInline):
model = SliceMembership
extra = 0
+ fields = ('user', 'role')
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'slice':
@@ -204,6 +205,17 @@
# hide MyInline in the add view
if obj is None:
continue
+ if isinstance(inline, SliceInline):
+ inline.model.caller = request.user
+ yield inline.get_formset(request, obj)
+
+ def get_formsets(self, request, obj=None):
+ for inline in self.get_inline_instances(request, obj):
+ # hide MyInline in the add view
+ if obj is None:
+ continue
+ if isinstance(inline, SliverInline):
+ inline.model.caller = request.user
yield inline.get_formset(request, obj)
class SitePrivilegeAdmin(PlanetStackBaseAdmin):
@@ -247,7 +259,7 @@
qs = qs.filter(site__in=sites)
return qs
-class SliceAdmin(OSModelAdmin):
+class SliceAdmin(PlanetStackBaseAdmin):
fields = ['name', 'site', 'serviceClass', 'description', 'slice_url']
list_display = ('name', 'site','serviceClass', 'slice_url')
inlines = [SliverInline, SliceMembershipInline, SliceTagInline]
@@ -280,11 +292,8 @@
# hide MyInline in the add view
if obj is None:
continue
- # give inline object access to driver and caller
- auth = request.session.get('auth', {})
- auth['tenant'] = obj.name # meed to connect using slice's tenant
- inline.model.os_manager = OpenStackManager(auth=auth, caller=request.user)
- inline.model.creator = request.user
+ if isinstance(inline, SliverInline):
+ inline.model.caller = request.user
yield inline.get_formset(request, obj)
def get_queryset(self, request):
@@ -292,7 +301,12 @@
if request.user.is_superuser:
return qs
# users can only see slices at their site
- return qs.filter(site=request.user.site)
+ return qs.filter(site=request.user.site)
+
+ def save_model(self, request, obj, form, change):
+ # update openstack connection to use this site/tenant
+ obj.caller = request.user
+ obj.save()
class SliceMembershipAdmin(PlanetStackBaseAdmin):
fieldsets = [
@@ -476,7 +490,7 @@
return self.initial["password"]
-class UserAdmin(UserAdmin, OSModelAdmin):
+class UserAdmin(UserAdmin):
class Meta:
app_label = "core"
diff --git a/planetstack/core/api/slivers.py b/planetstack/core/api/slivers.py
index 16a7e0b..2ce24c7 100644
--- a/planetstack/core/api/slivers.py
+++ b/planetstack/core/api/slivers.py
@@ -3,7 +3,6 @@
from openstack.manager import OpenStackManager
from core.models import Sliver, Slice
from core.api.images import _get_images
-from core.api.keys import _get_keys
from core.api.slices import _get_slices
from core.api.deployment_networks import _get_deployment_networks
from core.api.nodes import _get_nodes
@@ -26,12 +25,10 @@
password=auth.get('password'))
images = _get_images(fields.get('image'))
- keys = _get_keys(fields.get('key'))
slices = _get_slices(fields.get('slice'))
deployment_networks = _get_deployment_networks(fields.get('deploymentNetwork'))
nodes = _get_nodes(fields.get('node'))
if images: fields['image'] = images[0]
- if keys: fields['key'] = keys[0]
if slices: fields['slice'] = slices[0]
if deployment_networks: fields['deploymentNetwork'] = deployment_networks[0]
if nodes: fields['node'] = nodes[0]
diff --git a/planetstack/core/models/slice.py b/planetstack/core/models/slice.py
index d6908a7..da9379d 100644
--- a/planetstack/core/models/slice.py
+++ b/planetstack/core/models/slice.py
@@ -22,6 +22,7 @@
subnet_id = models.CharField(null=True, blank=True, max_length=256, help_text="Quantum subnet id")
serviceClass = models.ForeignKey(ServiceClass, related_name = "slices", null=True, default=ServiceClass.get_default)
+ creator = models.ForeignKey(User, related_name='slices', blank=True, null=True)
def __unicode__(self): return u'%s' % (self.name)
@@ -31,6 +32,8 @@
# will fail unless it is allowed. But, we we really don't want it to
# ever save None, so fix it up here.
self.serviceClass = ServiceClass.get_default()
+ if not self.creator and hasattr(self, 'caller'):
+ self.creator = self.caller
super(Slice, self).save(*args, **kwds)
class SliceMembership(PlCoreBase):
diff --git a/planetstack/core/models/sliver.py b/planetstack/core/models/sliver.py
index 72ad66d..13eb353 100644
--- a/planetstack/core/models/sliver.py
+++ b/planetstack/core/models/sliver.py
@@ -29,15 +29,6 @@
def save(self, *args, **kwds):
if not self.name:
self.name = self.slice.name
- if not hasattr(self, 'os_manager'):
- from openstack.manager import OpenStackManager
- setattr(self, 'os_manager', OpenStackManager())
- self.os_manager.save_sliver(self)
+ if not self.creator and hasattr(self, 'caller'):
+ self.creator = self.caller
super(Sliver, self).save(*args, **kwds)
-
- def delete(self, *args, **kwds):
- if not hasattr(self, 'os_manager'):
- from openstack.manager import OpenStackManager
- setattr(self, 'os_manager', OpenStackManager())
- self.os_manager.delete_sliver(self)
- super(Sliver, self).delete(*args, **kwds)