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):
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(),
93 class UserAdmin(admin.ModelAdmin):
96 ('User', {'fields': ['firstname', 'lastname', 'email', 'password', 'phone', 'user_url', 'is_admin', 'site']})
98 list_display = ['firstname', 'lastname', 'email', 'password', 'phone', 'user_url', 'is_admin', 'site']
99 search_fields = ['email']
101 class KeyAdmin(admin.ModelAdmin):
103 ('Key', {'fields': ['name', 'key', 'type', 'blacklisted', 'user']})
105 list_display = ['name', 'key', 'type', 'blacklisted', 'user']
107 class SliceAdmin(PlanetStackBaseAdmin):
108 fields = ['name', 'site', 'instantiation', 'description', 'slice_url']
109 list_display = ('name', 'site','slice_url', 'instantiation')
110 inlines = [SliverInline]
112 class SubnetAdmin(admin.ModelAdmin):
113 fields = ['cidr', 'ip_version', 'start', 'end', 'slice']
115 class ImageAdmin(admin.ModelAdmin):
116 fields = ['image_id', 'name', 'disk_format', 'container_format']
118 class NodeAdmin(admin.ModelAdmin):
119 list_display = ('name', 'site', 'deploymentNetwork')
120 list_filter = ('deploymentNetwork',)
122 class RoleAdmin(admin.ModelAdmin):
124 ('Role', {'fields': ['role_type']})
126 list_display = ('role_type',)
128 class PlainTextWidget(forms.Widget):
129 def render(self, _name, value, attrs):
130 return mark_safe(value) if value is not None else ''
132 class SliverForm(forms.ModelForm):
134 ip = forms.CharField(widget=PlainTextWidget)
137 'ip': PlainTextWidget(),
140 class SliverAdmin(admin.ModelAdmin):
143 ('Sliver', {'fields': ['ip', 'name', 'slice', 'flavor', 'image', 'key', 'node', 'deploymentNetwork']})
145 list_display = ['ip', 'name', 'slice', 'flavor', 'image', 'key', 'node', 'deploymentNetwork']
147 admin.site.register(Site, SiteAdmin)
148 admin.site.register(SitePrivilege)
149 admin.site.register(Slice, SliceAdmin)
150 admin.site.register(SliceMembership)
151 admin.site.register(Subnet, SubnetAdmin)
152 admin.site.register(Image, ImageAdmin)
153 admin.site.register(Node, NodeAdmin)
154 admin.site.register(Sliver, SliverAdmin)
155 admin.site.register(Flavor)
156 admin.site.register(Key, KeyAdmin)
157 admin.site.register(Role, RoleAdmin)
158 admin.site.register(User, UserAdmin)
159 admin.site.register(DeploymentNetwork, DeploymentNetworkAdmin)