if (obj.enacted is not None) and obj.enacted >= obj.updated:
return '<span style="min-width:16px;"><img src="/static/admin/img/icon_success.gif"></span>'
else:
- if obj.backend_status == "Provisioning in progress" or obj.backend_status=="":
+ if ((obj.backend_status is not None) and obj.backend_status.startswith("0 -")) or obj.backend_status == "Provisioning in progress" or obj.backend_status=="":
return '<span style="min-width:16px;" title="%s"><img src="/static/admin/img/icon_clock.gif"></span>' % obj.backend_status
else:
return '<span style="min-width:16px;" title="%s"><img src="/static/admin/img/icon_error.gif"></span>' % html_escape(obj.backend_status, quote=True)
class SliverInline(PlStackTabularInline):
model = Sliver
- fields = ['backend_status_icon', 'all_ips_string', 'instance_name', 'slice', 'deployment', 'flavor', 'image', 'node']
+ fields = ['backend_status_icon', 'all_ips_string', 'instance_id', 'instance_name', 'slice', 'deployment', 'flavor', 'image', 'node']
extra = 0
- readonly_fields = ['backend_status_icon', 'all_ips_string', 'instance_name']
+ readonly_fields = ['backend_status_icon', 'all_ips_string', 'instance_id', 'instance_name']
suit_classes = 'suit-tab suit-tab-slivers'
def queryset(self, request):
def queryset(self, request):
return DeploymentPrivilege.select_by_user(request.user)
-class ControllerPrivilegeInline(PlStackTabularInline):
- model = ControllerPrivilege
- extra = 0
- suit_classes = 'suit-tab suit-tab-admin-only'
- fields = ['backend_status_icon', 'user','role','controller']
- readonly_fields = ('backend_status_icon', )
-
- def queryset(self, request):
- return ControllerPrivilege.select_by_user(request.user)
-
class ControllerSiteInline(PlStackTabularInline):
model = ControllerSite
extra = 0
# nodes no longer direclty connected to deployments
#suit_form_tabs =(('sites','Deployment Details'),('nodes','Nodes'),('deploymentprivileges','Privileges'),('tags','Tags'),('imagedeployments','Images'))
- suit_form_tabs =(('sites','Deployment Details'),('deploymentprivileges','Privileges'),('tags','Tags'),('imagedeployments','Images'))
+ suit_form_tabs =(('sites','Deployment Details'),('deploymentprivileges','Privileges'))
def get_form(self, request, obj=None, **kwargs):
if request.user.isReadOnlyUser():
super(ControllerAdminForm, self).__init__(*args, **kwargs)
if self.instance and self.instance.pk:
- self.fields['sites'].initial = [x.site_deployment for x in self.instance.controllersite.all()]
+ self.fields['sites'].initial = [x.site for x in self.instance.controllersite.all()]
def manipulate_m2m_objs(self, this_obj, selected_objs, all_relations, relation_class, local_attrname, foreign_attrname):
""" helper function for handling m2m relations from the MultipleChoiceField
class ControllerAdmin(PlanetStackBaseAdmin):
model = Controller
- fieldList = ['name', 'version', 'backend_type', 'auth_url', 'admin_user', 'admin_tenant','admin_password']
+ fieldList = ['name', 'backend_type', 'version', 'auth_url', 'admin_user', 'admin_tenant','admin_password']
#fieldsets = [(None, {'fields': fieldList, 'classes':['suit-tab suit-tab-general']})]
inlines = [ControllerSiteInline] # ,ControllerImagesInline]
list_display = ['backend_status_icon', 'name', 'version', 'backend_type']
return AdminFormMetaClass
+ def save_model(self, request, obj, form, change):
+ # update openstack connection to use this site/tenant
+ obj.save_by_user(request.user)
+
+ def delete_model(self, request, obj):
+ obj.delete_by_user(request.user)
+
class ServiceAttrAsTabInline(PlStackTabularInline):
model = ServiceAttribute
fields = ['name','value']
('serviceattrs','Additional Attributes'),
)
+class SiteNodeInline(PlStackTabularInline):
+ model = Node
+ fields = ['name', 'site_deployment']
+ extra = 0
+ 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']}),
]
- suit_form_tabs =(('general', 'Site Details'),
- ('users','Users'),
- ('siteprivileges','Privileges'),
- ('deployments','Deployments'),
- ('slices','Slices'),
- #('nodes','Nodes'),
- ('tags','Tags'),
- )
- 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', )
filter_horizontal = ('deployments',)
- inlines = [SliceInline,UserInline,TagInline, SitePrivilegeInline, SiteDeploymentInline]
+ inlines = [SliceInline,UserInline,TagInline, SitePrivilegeInline, SiteDeploymentInline, SiteNodeInline]
+ admin_inlines = [ControllerSiteInline]
search_fields = ['name']
+ @property
+ def suit_form_tabs(self):
+ tabs = [('general', 'Site Details'),
+ ('users','Users'),
+ ('siteprivileges','Privileges'),
+ ('deployments','Deployments'),
+ ('slices','Slices'),
+ ('nodes','Nodes'),
+ ]
+
+ request=getattr(_thread_locals, "request", None)
+ if request and request.user.is_admin:
+ tabs.append( ('admin-only', 'Admin-Only') )
+
+ return tabs
+
def queryset(self, request):
return Site.select_by_user(request.user)
verbose_name_plural = "Controller Slices"
suit_classes = 'suit-tab suit-tab-admin-only'
fields = ['backend_status_icon', 'controller', 'tenant_id']
- readonly_fields = ('backend_status_icon', )
+ readonly_fields = ('backend_status_icon', 'controller' )
class SliceAdmin(PlanetStackBaseAdmin):
form = SliceForm
('slicenetworks','Networks'),
('sliceprivileges','Privileges'),
('slivers','Slivers'),
+ #('reservations','Reservations'),
('tags','Tags'),
- ('reservations','Reservations'),
]
request=getattr(_thread_locals, "request", None)
def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None):
deployment_nodes = []
for node in Node.objects.all():
- deployment_nodes.append( (node.site_deployment.id, node.id, node.name) )
+ deployment_nodes.append( (node.site_deployment.deployment.id, node.id, node.name) )
deployment_flavors = []
for flavor in Flavor.objects.all():
user_readonly_fields = ['name','site_deployment']
user_readonly_inlines = [TagInline,SliverInline]
- suit_form_tabs =(('details','Node Details'),('slivers','Slivers'),('tags','Tags'))
+ suit_form_tabs =(('details','Node Details'),('slivers','Slivers'))
class SliverForm(forms.ModelForm):
widgets = {
'ip': PlainTextWidget(),
'instance_name': PlainTextWidget(),
+ 'instance_id': PlainTextWidget(),
'slice': LinkedSelect,
'deployment': LinkedSelect,
'node': LinkedSelect,
class SliverAdmin(PlanetStackBaseAdmin):
form = SliverForm
fieldsets = [
- ('Sliver Details', {'fields': ['backend_status_text', 'slice', 'deployment', 'node', 'ip', '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', ], 'classes': ['suit-tab suit-tab-general'], })
]
readonly_fields = ('backend_status_text', )
- list_display = ['backend_status_icon', 'ip', 'instance_name', 'slice', 'flavor', 'image', 'node', 'deployment']
+ list_display = ['backend_status_icon', 'ip', 'instance_id', 'instance_name', 'slice', 'flavor', 'image', 'node', 'deployment']
list_display_links = ('backend_status_icon', 'ip',)
- suit_form_tabs =(('general', 'Sliver Details'),
- ('tags','Tags'),
- )
+ suit_form_tabs =(('general', 'Sliver Details'),)
inlines = [TagInline]
suit_classes = 'suit-tab suit-tab-dashboards'
fields = ['user', 'dashboardView', 'order']
+class ControllerUserInline(PlStackTabularInline):
+ model = ControllerUser
+ extra = 0
+ suit_classes = 'suit-tab suit-tab-admin-only'
+ fields = ['controller', 'user', 'kuser_id']
+ readonly_fields=['controller']
+
+
class UserAdmin(PermissionCheckingAdminMixin, UserAdmin):
# Note: Make sure PermissionCheckingAdminMixin is listed before
# admin.ModelAdmin in the class declaration.
# The fields to be used in displaying the User model.
# These override the definitions on the base UserAdmin
# that reference specific fields on auth.User.
- list_display = ('email', 'firstname', 'lastname', 'site', 'last_login')
+ list_display = ('backend_status_icon', 'email', 'firstname', 'lastname', 'site', 'last_login')
+ list_display_links = ("email",)
list_filter = ('site',)
- inlines = [SlicePrivilegeInline,SitePrivilegeInline,ControllerPrivilegeInline,UserDashboardViewInline]
-
+ inlines = [SlicePrivilegeInline,SitePrivilegeInline,UserDashboardViewInline]
+ admin_inlines = [ControllerUserInline]
fieldListLoginDetails = ['backend_status_text', 'email','site','password','is_active','is_readonly','is_admin','public_key']
fieldListContactInfo = ['firstname','lastname','phone','timezone']
add_fieldsets = (
(None, {
'classes': ('wide',),
- 'fields': ('email', 'firstname', 'lastname', 'is_readonly', 'phone', 'public_key','password1', 'password2')},
+ 'fields': ('site', 'email', 'firstname', 'lastname', 'is_admin','is_admin', 'is_readonly', 'phone', 'public_key','password1', 'password2')},
),
)
readonly_fields = ('backend_status_text', )
if getattr(_thread_locals, "obj", None) is None:
return []
else:
- return (('general','Login Details'),
+ tabs = [('general','Login Details'),
('contact','Contact Information'),
('sliceprivileges','Slice Privileges'),
('siteprivileges','Site Privileges'),
- ('controllerprivileges','Controller Privileges'),
- ('dashboards','Dashboard Views'))
+ ('dashboards','Dashboard Views')]
+
+ request=getattr(_thread_locals, "request", None)
+ if request and request.user.is_admin:
+ tabs.append( ('admin-only', 'Admin-Only') )
+
+ return tabs
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'site':
def queryset(self, request):
return User.select_by_user(request.user)
+ def get_form(self, request, obj=None, **kwargs):
+ if not request.user.is_admin:
+ self.fieldsets = (
+ ('Login Details', {'fields': ['backend_status_text', 'email', 'site','password','public_key'], 'classes':['suit-tab suit-tab-general']}),
+ ('Contact Information', {'fields': ('firstname','lastname','phone', 'timezone'), 'classes':['suit-tab suit-tab-contact']}),
+ )
+ return super(UserAdmin, self).get_form(request, obj, **kwargs)
+
class ControllerDashboardViewInline(PlStackTabularInline):
model = ControllerDashboardView
extra = 0
class DashboardViewAdmin(PlanetStackBaseAdmin):
fieldsets = [('Dashboard View Details',
- {'fields': ['backend_status_text', 'name', 'url'],
+ {'fields': ['backend_status_text', 'name', 'url', 'enabled'],
'classes': ['suit-tab suit-tab-general']})
]
+ list_display = ["name", "enabled", "url"]
readonly_fields = ('backend_status_text', )
inlines = [ControllerDashboardViewInline]
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)