From ea71c758c3d8d302b53603d94357961c65a76872 Mon Sep 17 00:00:00 2001 From: Scott Baker Date: Wed, 15 Oct 2014 16:54:04 -0700 Subject: [PATCH] add admin-only tab for sliceadmine --- planetstack/core/admin.py | 55 ++++++++++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 7 deletions(-) diff --git a/planetstack/core/admin.py b/planetstack/core/admin.py index d2a9b53..47f9eab 100644 --- a/planetstack/core/admin.py +++ b/planetstack/core/admin.py @@ -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 = [ -- 2.43.0