blob: e53b245a318b457b4d707cdd3df08140c9abe555 [file] [log] [blame]
Siobhan Tully4bc09f22013-04-10 21:15:21 -04001from plstackapi.core.models import Site
Tony Mackf1c12242013-04-09 16:08:43 -04002from plstackapi.core.models import *
Tony Mack7130ac32013-03-22 21:58:00 -04003from django.contrib import admin
Siobhan Tully4bc09f22013-04-10 21:15:21 -04004from django import forms
Tony Mackd90cdbf2013-04-16 22:48:40 -04005from django.utils.safestring import mark_safe
Tony Mack7130ac32013-03-22 21:58:00 -04006from django.contrib.auth.admin import UserAdmin
Siobhan Tully4bc09f22013-04-10 21:15:21 -04007from django.contrib.admin.widgets import FilteredSelectMultiple
Tony Mack7130ac32013-03-22 21:58:00 -04008
Siobhan Tully4bc09f22013-04-10 21:15:21 -04009
10class ReadonlyTabularInline(admin.TabularInline):
11 can_delete = False
12 extra = 0
13 editable_fields = []
14
15 def get_readonly_fields(self, request, obj=None):
16 fields = []
17 for field in self.model._meta.get_all_field_names():
18 if (not field == 'id'):
19 if (field not in self.editable_fields):
20 fields.append(field)
21 return fields
22
23 def has_add_permission(self, request):
24 return False
25
26class SliverInline(admin.TabularInline):
27 model = Sliver
Siobhan Tullyc47c39d2013-04-17 06:47:26 -040028 fields = ['ip', 'name', 'slice', 'flavor', 'image', 'key', 'node', 'deploymentNetwork']
Siobhan Tully4bc09f22013-04-10 21:15:21 -040029 extra = 0
30
31class SiteInline(admin.TabularInline):
32 model = Site
33 extra = 0
34
35class NodeInline(admin.TabularInline):
36 model = Node
37 extra = 0
38
39class PlanetStackBaseAdmin(admin.ModelAdmin):
40 save_on_top = False
41
42class DeploymentNetworkAdminForm(forms.ModelForm):
43 sites = forms.ModelMultipleChoiceField(
44 queryset=Site.objects.all(),
45 required=False,
46 widget=FilteredSelectMultiple(
47 verbose_name=('Sites'), is_stacked=False
48 )
49 )
50 class Meta:
51 model = DeploymentNetwork
52
53 def __init__(self, *args, **kwargs):
54 super(DeploymentNetworkAdminForm, self).__init__(*args, **kwargs)
55
56 if self.instance and self.instance.pk:
57 self.fields['sites'].initial = self.instance.sites.all()
58
59 def save(self, commit=True):
60 deploymentNetwork = super(DeploymentNetworkAdminForm, self).save(commit=False)
61
62 if commit:
63 deploymentNetwork.save()
64
65 if deploymentNetwork.pk:
66 deploymentNetwork.sites = self.cleaned_data['sites']
67 self.save_m2m()
68
69 return deploymentNetwork
70
71class DeploymentNetworkAdmin(PlanetStackBaseAdmin):
72 form = DeploymentNetworkAdminForm
73 inlines = [NodeInline,]
74
75class SiteAdmin(admin.ModelAdmin):
76 fieldsets = [
77 (None, {'fields': ['name', 'site_url', 'enabled', 'is_public', 'login_base']}),
78 ('Location', {'fields': ['latitude', 'longitude']}),
79 ('Deployment Networks', {'fields': ['deployments']})
80 ]
81 list_display = ('name', 'login_base','site_url', 'enabled')
82 filter_horizontal = ('deployments',)
83 inlines = [NodeInline,]
84 search_fields = ['name']
85
Tony Mack8484bdb2013-04-14 20:26:03 -040086class UserForm(forms.ModelForm):
87 class Meta:
88 password = forms.CharField(widget=forms.PasswordInput)
89 model = User
90 widgets = {
91 'password': forms.PasswordInput(),
92 }
Tony Mack759b57a2013-04-14 21:03:31 -040093
Tony Mack8484bdb2013-04-14 20:26:03 -040094class UserAdmin(admin.ModelAdmin):
95 form = UserForm
96 fieldsets = [
97 ('User', {'fields': ['firstname', 'lastname', 'email', 'password', 'phone', 'user_url', 'is_admin', 'site']})
98 ]
99 list_display = ['firstname', 'lastname', 'email', 'password', 'phone', 'user_url', 'is_admin', 'site']
Tony Mack759b57a2013-04-14 21:03:31 -0400100 search_fields = ['email']
101
102class KeyAdmin(admin.ModelAdmin):
103 fieldsets = [
104 ('Key', {'fields': ['name', 'key', 'type', 'blacklisted', 'user']})
105 ]
106 list_display = ['name', 'key', 'type', 'blacklisted', 'user']
Tony Mack8484bdb2013-04-14 20:26:03 -0400107
Siobhan Tully4bc09f22013-04-10 21:15:21 -0400108class SliceAdmin(PlanetStackBaseAdmin):
109 fields = ['name', 'site', 'instantiation', 'description', 'slice_url']
110 list_display = ('name', 'site','slice_url', 'instantiation')
111 inlines = [SliverInline]
112
113class SubnetAdmin(admin.ModelAdmin):
114 fields = ['cidr', 'ip_version', 'start', 'end', 'slice']
115
116class ImageAdmin(admin.ModelAdmin):
117 fields = ['image_id', 'name', 'disk_format', 'container_format']
118
119class NodeAdmin(admin.ModelAdmin):
120 list_display = ('name', 'site', 'deploymentNetwork')
121 list_filter = ('deploymentNetwork',)
122
Tony Mackfd24d0d2013-04-14 00:59:17 -0400123class RoleAdmin(admin.ModelAdmin):
Tony Mackbc9cecf2013-04-14 13:56:38 -0400124 fieldsets = [
125 ('Role', {'fields': ['role_type']})
126 ]
Tony Mackfd24d0d2013-04-14 00:59:17 -0400127 list_display = ('role_type',)
128
Tony Mackd90cdbf2013-04-16 22:48:40 -0400129class PlainTextWidget(forms.Widget):
130 def render(self, _name, value, attrs):
131 return mark_safe(value) if value is not None else ''
132
133class SliverForm(forms.ModelForm):
134 class Meta:
135 ip = forms.CharField(widget=PlainTextWidget)
136 model = Sliver
137 widgets = {
138 'ip': PlainTextWidget(),
139 }
140
Tony Mackcdec0902013-04-15 00:38:49 -0400141class SliverAdmin(admin.ModelAdmin):
Tony Mackd90cdbf2013-04-16 22:48:40 -0400142 form = SliverForm
Tony Mackcdec0902013-04-15 00:38:49 -0400143 fieldsets = [
Tony Mackd90cdbf2013-04-16 22:48:40 -0400144 ('Sliver', {'fields': ['ip', 'name', 'slice', 'flavor', 'image', 'key', 'node', 'deploymentNetwork']})
Tony Mackcdec0902013-04-15 00:38:49 -0400145 ]
Tony Mackd90cdbf2013-04-16 22:48:40 -0400146 list_display = ['ip', 'name', 'slice', 'flavor', 'image', 'key', 'node', 'deploymentNetwork']
Tony Mackcdec0902013-04-15 00:38:49 -0400147
Siobhan Tully4bc09f22013-04-10 21:15:21 -0400148admin.site.register(Site, SiteAdmin)
149admin.site.register(SitePrivilege)
150admin.site.register(Slice, SliceAdmin)
151admin.site.register(SliceMembership)
152admin.site.register(Subnet, SubnetAdmin)
153admin.site.register(Image, ImageAdmin)
154admin.site.register(Node, NodeAdmin)
Tony Mackcdec0902013-04-15 00:38:49 -0400155admin.site.register(Sliver, SliverAdmin)
Tony Mack5cc16ba2013-04-09 10:30:45 -0400156admin.site.register(Flavor)
Tony Mack759b57a2013-04-14 21:03:31 -0400157admin.site.register(Key, KeyAdmin)
Tony Mackfd24d0d2013-04-14 00:59:17 -0400158admin.site.register(Role, RoleAdmin)
Tony Mack8484bdb2013-04-14 20:26:03 -0400159admin.site.register(User, UserAdmin)
Siobhan Tully4bc09f22013-04-10 21:15:21 -0400160admin.site.register(DeploymentNetwork, DeploymentNetworkAdmin)
Tony Mack7130ac32013-03-22 21:58:00 -0400161