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 SliceAdmin(PlanetStackBaseAdmin):
86 fields = ['name', 'site', 'instantiation', 'description', 'slice_url']
87 list_display = ('name', 'site','slice_url', 'instantiation')
88 inlines = [SliverInline]
90 class SubnetAdmin(admin.ModelAdmin):
91 fields = ['cidr', 'ip_version', 'start', 'end', 'slice']
93 class ImageAdmin(admin.ModelAdmin):
94 fields = ['image_id', 'name', 'disk_format', 'container_format']
96 class NodeAdmin(admin.ModelAdmin):
97 list_display = ('name', 'site', 'deploymentNetwork')
98 list_filter = ('deploymentNetwork',)
101 class RoleAdmin(admin.ModelAdmin):
103 ('Role', {'fields': ['role_type']})
105 list_display = ('role_type',)
107 admin.site.register(Site, SiteAdmin)
108 admin.site.register(SitePrivilege)
109 admin.site.register(Slice, SliceAdmin)
110 admin.site.register(SliceMembership)
111 admin.site.register(Subnet, SubnetAdmin)
112 admin.site.register(Image, ImageAdmin)
113 admin.site.register(Node, NodeAdmin)
114 admin.site.register(Sliver)
115 admin.site.register(Flavor)
116 admin.site.register(Key)
117 admin.site.register(Role, RoleAdmin)
118 admin.site.register(User)
119 admin.site.register(DeploymentNetwork, DeploymentNetworkAdmin)