1 from plstackapi.core.models import Site
2 from plstackapi.core.models import *
3 from django.contrib import admin
4 from django import forms
6 from django.contrib.auth.admin import UserAdmin
7 from django.contrib.admin.widgets import FilteredSelectMultiple
10 class ReadonlyTabularInline(admin.TabularInline):
15 def get_readonly_fields(self, request, obj=None):
17 for field in self.model._meta.get_all_field_names():
18 if (not field == 'id'):
19 if (field not in self.editable_fields):
23 def has_add_permission(self, request):
26 class SliverInline(admin.TabularInline):
30 class SiteInline(admin.TabularInline):
34 class NodeInline(admin.TabularInline):
38 class PlanetStackBaseAdmin(admin.ModelAdmin):
41 class DeploymentNetworkAdminForm(forms.ModelForm):
42 sites = forms.ModelMultipleChoiceField(
43 queryset=Site.objects.all(),
45 widget=FilteredSelectMultiple(
46 verbose_name=('Sites'), is_stacked=False
50 model = DeploymentNetwork
52 def __init__(self, *args, **kwargs):
53 super(DeploymentNetworkAdminForm, self).__init__(*args, **kwargs)
55 if self.instance and self.instance.pk:
56 self.fields['sites'].initial = self.instance.sites.all()
58 def save(self, commit=True):
59 deploymentNetwork = super(DeploymentNetworkAdminForm, self).save(commit=False)
62 deploymentNetwork.save()
64 if deploymentNetwork.pk:
65 deploymentNetwork.sites = self.cleaned_data['sites']
68 return deploymentNetwork
70 class DeploymentNetworkAdmin(PlanetStackBaseAdmin):
71 form = DeploymentNetworkAdminForm
72 inlines = [NodeInline,]
74 class SiteAdmin(admin.ModelAdmin):
76 (None, {'fields': ['name', 'site_url', 'enabled', 'is_public', 'login_base']}),
77 ('Location', {'fields': ['latitude', 'longitude']}),
78 ('Deployment Networks', {'fields': ['deployments']})
80 list_display = ('name', 'login_base','site_url', 'enabled')
81 filter_horizontal = ('deployments',)
82 inlines = [NodeInline,]
83 search_fields = ['name']
85 class UserForm(forms.ModelForm):
87 password = forms.CharField(widget=forms.PasswordInput)
90 'password': forms.PasswordInput(),
92 class UserAdmin(admin.ModelAdmin):
95 ('User', {'fields': ['firstname', 'lastname', 'email', 'password', 'phone', 'user_url', 'is_admin', 'site']})
97 list_display = ['firstname', 'lastname', 'email', 'password', 'phone', 'user_url', 'is_admin', 'site']
98 search_fields = ['email']
100 class SliceAdmin(PlanetStackBaseAdmin):
101 fields = ['name', 'site', 'instantiation', 'description', 'slice_url']
102 list_display = ('name', 'site','slice_url', 'instantiation')
103 inlines = [SliverInline]
105 class SubnetAdmin(admin.ModelAdmin):
106 fields = ['cidr', 'ip_version', 'start', 'end', 'slice']
108 class ImageAdmin(admin.ModelAdmin):
109 fields = ['image_id', 'name', 'disk_format', 'container_format']
111 class NodeAdmin(admin.ModelAdmin):
112 list_display = ('name', 'site', 'deploymentNetwork')
113 list_filter = ('deploymentNetwork',)
116 class RoleAdmin(admin.ModelAdmin):
118 ('Role', {'fields': ['role_type']})
120 list_display = ('role_type',)
122 admin.site.register(Site, SiteAdmin)
123 admin.site.register(SitePrivilege)
124 admin.site.register(Slice, SliceAdmin)
125 admin.site.register(SliceMembership)
126 admin.site.register(Subnet, SubnetAdmin)
127 admin.site.register(Image, ImageAdmin)
128 admin.site.register(Node, NodeAdmin)
129 admin.site.register(Sliver)
130 admin.site.register(Flavor)
131 admin.site.register(Key)
132 admin.site.register(Role, RoleAdmin)
133 admin.site.register(User, UserAdmin)
134 admin.site.register(DeploymentNetwork, DeploymentNetworkAdmin)