add admin-only tab for sliceadmine
authorScott Baker <smbaker@gmail.com>
Wed, 15 Oct 2014 23:54:04 +0000 (16:54 -0700)
committerScott Baker <smbaker@gmail.com>
Wed, 15 Oct 2014 23:54:04 +0000 (16:54 -0700)
planetstack/core/admin.py

index d2a9b53..47f9eab 100644 (file)
@@ -735,6 +735,15 @@ class SliceForm(forms.ModelForm):
             raise forms.ValidationError('slice name must begin with %s' % site.login_base)
         return cleaned_data
 
+class SliceDeploymentsInline(PlStackTabularInline):
+    model = SliceDeployments
+    extra = 0
+    verbose_name = "Slice Deployment"
+    verbose_name_plural = "Slice Deployments"
+    suit_classes = 'suit-tab suit-tab-admin-only'
+    fields = ['backend_status_icon', 'deployment', 'tenant_id']
+    readonly_fields = ('backend_status_icon', )
+
 class SliceAdmin(PlanetStackBaseAdmin):
     form = SliceForm
     fieldList = ['backend_status_text', 'site', 'name', 'serviceClass', 'enabled','description', 'service', 'slice_url', 'max_slivers']
@@ -743,16 +752,40 @@ class SliceAdmin(PlanetStackBaseAdmin):
     list_display = ('backend_status_icon', 'name', 'site','serviceClass', 'slice_url', 'max_slivers')
     list_display_links = ('backend_status_icon', 'name', )
     inlines = [SlicePrivilegeInline,SliverInline, TagInline, ReservationInline,SliceNetworkInline]
+    admin_inlines = [SliceDeploymentsInline]
 
     user_readonly_fields = fieldList
 
-    suit_form_tabs =(('general', 'Slice Details'),
-        ('slicenetworks','Networks'),
-        ('sliceprivileges','Privileges'),
-        ('slivers','Slivers'),
-        ('tags','Tags'),
-        ('reservations','Reservations'),
-    )
+#    suit_form_tabs =(('general', 'Slice Details'),
+#        ('slicenetworks','Networks'),
+#        ('sliceprivileges','Privileges'),
+#        ('slivers','Slivers'),
+#        ('tags','Tags'),
+#        ('reservations','Reservations'),
+#    )
+
+    def get_form(self, request, obj=None):
+        # Save obj in thread-local storage, so suit_form_tabs can use it to
+        # determine whether we're in edit or add mode.
+        _thread_locals.request = request
+        _thread_locals.obj = obj
+        return super(SliceAdmin, self).get_form(request, obj)
+
+    @property
+    def suit_form_tabs(self):
+        tabs =[('general', 'Slice Details'),
+          ('slicenetworks','Networks'),
+          ('sliceprivileges','Privileges'),
+          ('slivers','Slivers'),
+          ('tags','Tags'),
+          ('reservations','Reservations'),
+          ]
+
+        request=getattr(_thread_locals, "request", None)
+        if request and request.user.is_admin:
+            tabs.append( ('admin-only', 'Admin-Only') )
+
+        return tabs
 
     def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None):
         deployment_nodes = []
@@ -799,6 +832,14 @@ class SliceAdmin(PlanetStackBaseAdmin):
                 inline.model.caller = request.user
             yield inline.get_formset(request, obj)
 
+    def get_inline_instances(self, request, obj=None):
+        inlines = super(SliceAdmin, self).get_inline_instances(request, obj)
+
+        if request.user.is_admin:
+            for inline_class in self.admin_inlines:
+                inlines.append(inline_class(self.model, self.admin_site))
+
+        return inlines
 
 class SlicePrivilegeAdmin(PlanetStackBaseAdmin):
     fieldsets = [