X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Fcore%2Fadmin.py;h=73296e092f73b7b5a2f11004e3c76eaaa02e8bf1;hb=HEAD;hp=3818f0b6994dfb546e7db44ffbb82eb7950e4592;hpb=c114a1f632f8559c6c30bef9e241963b6990c452;p=plstackapi.git diff --git a/planetstack/core/admin.py b/planetstack/core/admin.py index 3818f0b..73296e0 100644 --- a/planetstack/core/admin.py +++ b/planetstack/core/admin.py @@ -28,7 +28,7 @@ _thread_locals = threading.local() def backend_icon(obj): # backend_status, enacted, updated): #return "%s %s %s" % (str(obj.updated), str(obj.enacted), str(obj.backend_status)) - if (obj.enacted is not None) and obj.enacted >= obj.updated: + if (obj.enacted is not None) and obj.enacted >= obj.updated or obj.backend_status.startswith("1 -"): return '' else: if ((obj.backend_status is not None) and obj.backend_status.startswith("0 -")) or obj.backend_status == "Provisioning in progress" or obj.backend_status=="": @@ -777,14 +777,17 @@ class SiteNodeInline(PlStackTabularInline): suit_classes = 'suit-tab suit-tab-nodes' class SiteAdmin(PlanetStackBaseAdmin): - fieldList = ['backend_status_text', 'name', 'site_url', 'enabled', 'is_public', 'login_base', 'accountLink','location'] + #fieldList = ['backend_status_text', 'name', 'site_url', 'enabled', 'is_public', 'login_base', 'accountLink','location'] + fieldList = ['backend_status_text', 'name', 'site_url', 'enabled', 'is_public', 'login_base', 'location'] fieldsets = [ (None, {'fields': fieldList, 'classes':['suit-tab suit-tab-general']}), #('Deployment Networks', {'fields': ['deployments'], 'classes':['suit-tab suit-tab-deployments']}), ] - readonly_fields = ['backend_status_text', 'accountLink'] + #readonly_fields = ['backend_status_text', 'accountLink'] + readonly_fields = ['backend_status_text'] - user_readonly_fields = ['name', 'deployments','site_url', 'enabled', 'is_public', 'login_base', 'accountLink'] + #user_readonly_fields = ['name', 'deployments','site_url', 'enabled', 'is_public', 'login_base', 'accountLink'] + user_readonly_fields = ['name', 'deployments','site_url', 'enabled', 'is_public', 'login_base'] list_display = ('backend_status_icon', 'name', 'login_base','site_url', 'enabled') list_display_links = ('backend_status_icon', 'name', ) @@ -934,7 +937,7 @@ class SliceAdmin(PlanetStackBaseAdmin): ('slicenetworks','Networks'), ('sliceprivileges','Privileges'), ('slivers','Slivers'), - ('reservations','Reservations'), + #('reservations','Reservations'), ('tags','Tags'), ] @@ -1104,9 +1107,9 @@ class TagAdmin(PlanetStackBaseAdmin): class SliverAdmin(PlanetStackBaseAdmin): form = SliverForm fieldsets = [ - ('Sliver Details', {'fields': ['backend_status_text', 'slice', 'deployment', 'node', 'ip', 'instance_id', 'instance_name', 'flavor', 'image', ], 'classes': ['suit-tab suit-tab-general'], }) + ('Sliver Details', {'fields': ['backend_status_text', 'slice', 'deployment', 'node', 'ip', 'instance_id', 'instance_name', 'flavor', 'image', 'ssh_command'], 'classes': ['suit-tab suit-tab-general'], }) ] - readonly_fields = ('backend_status_text', ) + readonly_fields = ('backend_status_text', 'ssh_command', ) list_display = ['backend_status_icon', 'ip', 'instance_id', 'instance_name', 'slice', 'flavor', 'image', 'node', 'deployment'] list_display_links = ('backend_status_icon', 'ip',) @@ -1116,6 +1119,13 @@ class SliverAdmin(PlanetStackBaseAdmin): user_readonly_fields = ['slice', 'deployment', 'node', 'ip', 'instance_name', 'flavor', 'image'] + def ssh_command(self, obj): + ssh_command = obj.get_ssh_command() + if ssh_command: + return ssh_command + else: + return "(not available)" + def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == 'slice': kwargs['queryset'] = Slice.select_by_user(request.user) @@ -1131,11 +1141,9 @@ class SliverAdmin(PlanetStackBaseAdmin): def get_formsets(self, request, obj=None): # make some fields read only if we are updating an existing record if obj == None: - #self.readonly_fields = ('ip', 'instance_name') - self.readonly_fields = ('backend_status_text',) + self.readonly_fields = ('backend_status_text', 'ssh_command', ) else: - self.readonly_fields = ('backend_status_text',) - #self.readonly_fields = ('ip', 'instance_name', 'slice', 'image', 'key') + self.readonly_fields = ('backend_status_text', 'ssh_command',) for inline in self.get_inline_instances(request, obj): # hide MyInline in the add view @@ -1237,7 +1245,7 @@ class UserAdmin(PermissionCheckingAdminMixin, UserAdmin): list_display = ('backend_status_icon', 'email', 'firstname', 'lastname', 'site', 'last_login') list_display_links = ("email",) list_filter = ('site',) - inlines = [SlicePrivilegeInline,SitePrivilegeInline,UserDashboardViewInline] + inlines = [SlicePrivilegeInline,SitePrivilegeInline] admin_inlines = [ControllerUserInline] fieldListLoginDetails = ['backend_status_text', 'email','site','password','is_active','is_readonly','is_admin','public_key'] fieldListContactInfo = ['firstname','lastname','phone','timezone'] @@ -1245,13 +1253,12 @@ class UserAdmin(PermissionCheckingAdminMixin, UserAdmin): fieldsets = ( ('Login Details', {'fields': ['backend_status_text', 'email', 'site','password', 'is_active', 'is_readonly', 'is_admin', 'public_key'], 'classes':['suit-tab suit-tab-general']}), ('Contact Information', {'fields': ('firstname','lastname','phone', 'timezone'), 'classes':['suit-tab suit-tab-contact']}), - #('Dashboard Views', {'fields': ('dashboards',), 'classes':['suit-tab suit-tab-dashboards']}), #('Important dates', {'fields': ('last_login',)}), ) add_fieldsets = ( (None, { 'classes': ('wide',), - 'fields': ('site', 'email', 'firstname', 'lastname', 'is_readonly', 'phone', 'public_key','password1', 'password2')}, + 'fields': ('site', 'email', 'firstname', 'lastname', 'is_admin', 'is_readonly', 'phone', 'public_key','password1', 'password2')}, ), ) readonly_fields = ('backend_status_text', ) @@ -1269,8 +1276,7 @@ class UserAdmin(PermissionCheckingAdminMixin, UserAdmin): tabs = [('general','Login Details'), ('contact','Contact Information'), ('sliceprivileges','Slice Privileges'), - ('siteprivileges','Site Privileges'), - ('dashboards','Dashboard Views')] + ('siteprivileges','Site Privileges')] request=getattr(_thread_locals, "request", None) if request and request.user.is_admin: @@ -1287,6 +1293,24 @@ class UserAdmin(PermissionCheckingAdminMixin, UserAdmin): def queryset(self, request): return User.select_by_user(request.user) + def get_form(self, request, obj=None, **kwargs): + # copy login details list + login_details_fields = list(self.fieldListLoginDetails) + if not request.user.is_admin: + # only admins can see 'is_admin' and 'is_readonly' fields + if 'is_admin' in login_details_fields: + login_details_fields.remove('is_admin') + if 'is_readonly' in login_details_fields: + login_details_fields.remove('is_readonly') + #if len(request.user.siteprivileges.filter(role__role = 'pi')) > 0: + # only admins and pis can change a user's site + # self.readonly_fields = ('backend_status_text', 'site') + self.fieldsets = ( + ('Login Details', {'fields': login_details_fields, 'classes':['suit-tab suit-tab-general']}), + ('Contact Information', {'fields': self.fieldListContactInfo, 'classes':['suit-tab suit-tab-contact']}), + ) + return super(UserAdmin, self).get_form(request, obj, **kwargs) + class ControllerDashboardViewInline(PlStackTabularInline): model = ControllerDashboardView extra = 0 @@ -1714,12 +1738,12 @@ admin.site.register(Controller, ControllerAdmin) admin.site.register(Site, SiteAdmin) admin.site.register(Slice, SliceAdmin) admin.site.register(Service, ServiceAdmin) -admin.site.register(Reservation, ReservationAdmin) +#admin.site.register(Reservation, ReservationAdmin) admin.site.register(Network, NetworkAdmin) admin.site.register(Router, RouterAdmin) admin.site.register(NetworkTemplate, NetworkTemplateAdmin) -admin.site.register(Account, AccountAdmin) -admin.site.register(Invoice, InvoiceAdmin) +#admin.site.register(Account, AccountAdmin) +#admin.site.register(Invoice, InvoiceAdmin) if True: admin.site.register(NetworkParameterType, NetworkParameterTypeAdmin)