1 from plstackapi.core.models import Site
2 from plstackapi.core.models import *
3 from django.contrib import admin
4 from django import forms
5 from django.utils.safestring import mark_safe
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):
28 fields = ['ip', 'name', 'slice', 'flavor', 'image', 'key', 'node', 'deploymentNetwork']
31 class SiteInline(admin.TabularInline):
35 class NodeInline(admin.TabularInline):
39 class PlanetStackBaseAdmin(admin.ModelAdmin):
42 class DeploymentNetworkAdminForm(forms.ModelForm):
43 sites = forms.ModelMultipleChoiceField(
44 queryset=Site.objects.all(),
46 widget=FilteredSelectMultiple(
47 verbose_name=('Sites'), is_stacked=False
51 model = DeploymentNetwork
53 def __init__(self, *args, **kwargs):
54 super(DeploymentNetworkAdminForm, self).__init__(*args, **kwargs)
56 if self.instance and self.instance.pk:
57 self.fields['sites'].initial = self.instance.sites.all()
59 def save(self, commit=True):
60 deploymentNetwork = super(DeploymentNetworkAdminForm, self).save(commit=False)
63 deploymentNetwork.save()
65 if deploymentNetwork.pk:
66 deploymentNetwork.sites = self.cleaned_data['sites']
69 return deploymentNetwork
71 class DeploymentNetworkAdmin(PlanetStackBaseAdmin):
72 form = DeploymentNetworkAdminForm
73 inlines = [NodeInline,]
75 class SiteAdmin(admin.ModelAdmin):
77 (None, {'fields': ['name', 'site_url', 'enabled', 'is_public', 'login_base']}),
78 ('Location', {'fields': ['latitude', 'longitude']}),
79 ('Deployment Networks', {'fields': ['deployments']})
81 list_display = ('name', 'login_base','site_url', 'enabled')
82 filter_horizontal = ('deployments',)
83 inlines = [NodeInline,]
84 search_fields = ['name']
86 class UserForm(forms.ModelForm):
88 password = forms.CharField(widget=forms.PasswordInput)
91 'password': forms.PasswordInput(),
94 class UserAdmin(admin.ModelAdmin):
97 ('User', {'fields': ['firstname', 'lastname', 'email', 'password', 'phone', 'user_url', 'is_admin', 'site']})
99 list_display = ['firstname', 'lastname', 'email', 'password', 'phone', 'user_url', 'is_admin', 'site']
100 search_fields = ['email']
102 class KeyAdmin(admin.ModelAdmin):
104 ('Key', {'fields': ['name', 'key', 'type', 'blacklisted', 'user']})
106 list_display = ['name', 'key', 'type', 'blacklisted', 'user']
108 class SliceAdmin(PlanetStackBaseAdmin):
109 fields = ['name', 'site', 'instantiation', 'description', 'slice_url']
110 list_display = ('name', 'site','slice_url', 'instantiation')
111 inlines = [SliverInline]
113 class SubnetAdmin(admin.ModelAdmin):
114 fields = ['cidr', 'ip_version', 'start', 'end', 'slice']
116 class ImageAdmin(admin.ModelAdmin):
117 fields = ['image_id', 'name', 'disk_format', 'container_format']
119 class NodeAdmin(admin.ModelAdmin):
120 list_display = ('name', 'site', 'deploymentNetwork')
121 list_filter = ('deploymentNetwork',)
123 class RoleAdmin(admin.ModelAdmin):
125 ('Role', {'fields': ['role_type']})
127 list_display = ('role_type',)
129 class PlainTextWidget(forms.Widget):
130 def render(self, _name, value, attrs):
131 return mark_safe(value) if value is not None else ''
133 class SliverForm(forms.ModelForm):
135 ip = forms.CharField(widget=PlainTextWidget)
138 'ip': PlainTextWidget(),
141 class SliverAdmin(admin.ModelAdmin):
144 ('Sliver', {'fields': ['ip', 'name', 'slice', 'flavor', 'image', 'key', 'node', 'deploymentNetwork']})
146 list_display = ['ip', 'name', 'slice', 'flavor', 'image', 'key', 'node', 'deploymentNetwork']
148 admin.site.register(Site, SiteAdmin)
149 admin.site.register(SitePrivilege)
150 admin.site.register(Slice, SliceAdmin)
151 admin.site.register(SliceMembership)
152 admin.site.register(Subnet, SubnetAdmin)
153 admin.site.register(Image, ImageAdmin)
154 admin.site.register(Node, NodeAdmin)
155 admin.site.register(Sliver, SliverAdmin)
156 admin.site.register(Flavor)
157 admin.site.register(Key, KeyAdmin)
158 admin.site.register(Role, RoleAdmin)
159 admin.site.register(User, UserAdmin)
160 admin.site.register(DeploymentNetwork, DeploymentNetworkAdmin)