blob: fe2c10ca6194f017edb7d3e38138691df103acd0 [file] [log] [blame]
Scott Baker8e6647a2016-06-20 17:16:20 -07001from django.contrib import admin
2
3from services.volt.models import *
4from django import forms
5from django.utils.safestring import mark_safe
6from django.contrib.auth.admin import UserAdmin
7from django.contrib.admin.widgets import FilteredSelectMultiple
8from django.contrib.auth.forms import ReadOnlyPasswordHashField
9from django.contrib.auth.signals import user_logged_in
10from django.utils import timezone
11from django.contrib.contenttypes import generic
12from suit.widgets import LinkedSelect
13from core.admin import ServiceAppAdmin,SliceInline,ServiceAttrAsTabInline, ReadOnlyAwareAdmin, XOSTabularInline, ServicePrivilegeInline, TenantRootTenantInline, TenantRootPrivilegeInline
14from core.middleware import get_request
15
16from functools import update_wrapper
17from django.contrib.admin.views.main import ChangeList
18from django.core.urlresolvers import reverse
19from django.contrib.admin.utils import quote
20
21#-----------------------------------------------------------------------------
22# vOLT
23#-----------------------------------------------------------------------------
24
25class VOLTServiceAdmin(ReadOnlyAwareAdmin):
26 model = VOLTService
27 verbose_name = "vOLT Service"
28 verbose_name_plural = "vOLT Service"
29 list_display = ("backend_status_icon", "name", "enabled")
30 list_display_links = ('backend_status_icon', 'name', )
31 fieldsets = [(None, {'fields': ['backend_status_text', 'name','enabled','versionNumber', 'description',"view_url","icon_url" ], 'classes':['suit-tab suit-tab-general']})]
32 readonly_fields = ('backend_status_text', )
33 inlines = [SliceInline,ServiceAttrAsTabInline,ServicePrivilegeInline]
34
35 extracontext_registered_admins = True
36
37 user_readonly_fields = ["name", "enabled", "versionNumber", "description"]
38
39 suit_form_tabs =(('general', 'vOLT Service Details'),
40 ('administration', 'Administration'),
41 #('tools', 'Tools'),
42 ('slices','Slices'),
43 ('serviceattrs','Additional Attributes'),
44 ('serviceprivileges','Privileges'),
45 )
46
47 suit_form_includes = (('voltadmin.html', 'top', 'administration'),
48 ) #('hpctools.html', 'top', 'tools') )
49
Scott Baker8e6647a2016-06-20 17:16:20 -070050class VOLTTenantForm(forms.ModelForm):
51 s_tag = forms.CharField()
52 c_tag = forms.CharField()
53 creator = forms.ModelChoiceField(queryset=User.objects.all())
54
55 def __init__(self,*args,**kwargs):
56 super (VOLTTenantForm,self ).__init__(*args,**kwargs)
57 self.fields['kind'].widget.attrs['readonly'] = True
58 self.fields['provider_service'].queryset = VOLTService.get_service_objects().all()
59 if self.instance:
60 # fields for the attributes
61 self.fields['c_tag'].initial = self.instance.c_tag
62 self.fields['s_tag'].initial = self.instance.s_tag
63 self.fields['creator'].initial = self.instance.creator
64 if (not self.instance) or (not self.instance.pk):
65 # default fields for an 'add' form
66 self.fields['kind'].initial = VOLT_KIND
67 self.fields['creator'].initial = get_request().user
68 if VOLTService.get_service_objects().exists():
69 self.fields["provider_service"].initial = VOLTService.get_service_objects().all()[0]
70
71 def save(self, commit=True):
72 self.instance.s_tag = self.cleaned_data.get("s_tag")
73 self.instance.c_tag = self.cleaned_data.get("c_tag")
74 self.instance.creator = self.cleaned_data.get("creator")
75 return super(VOLTTenantForm, self).save(commit=commit)
76
77 class Meta:
78 model = VOLTTenant
Zack Williams56c12862016-06-27 08:28:55 -070079 fields = '__all__'
80
Scott Baker8e6647a2016-06-20 17:16:20 -070081
82class VOLTTenantAdmin(ReadOnlyAwareAdmin):
83 list_display = ('backend_status_icon', 'id', 'service_specific_id', 's_tag', 'c_tag', 'subscriber_root' )
84 list_display_links = ('backend_status_icon', 'id')
85 fieldsets = [ (None, {'fields': ['backend_status_text', 'kind', 'provider_service', 'subscriber_root', 'service_specific_id', # 'service_specific_attribute',
86 's_tag', 'c_tag', 'creator'],
87 'classes':['suit-tab suit-tab-general']})]
88 readonly_fields = ('backend_status_text', 'service_specific_attribute')
89 form = VOLTTenantForm
90
91 suit_form_tabs = (('general','Details'),)
92
Zack Williams1c8b5172016-06-27 13:18:23 -070093 def get_queryset(self, request):
Scott Baker8e6647a2016-06-20 17:16:20 -070094 return VOLTTenant.get_tenant_objects_by_user(request.user)
95
96class AccessDeviceInline(XOSTabularInline):
97 model = AccessDevice
98 fields = ['volt_device','uplink','vlan']
99 readonly_fields = []
100 extra = 0
101# max_num = 0
102 suit_classes = 'suit-tab suit-tab-accessdevices'
103
104# @property
105# def selflink_reverse_path(self):
106# return "admin:cord_volttenant_change"
107
108class VOLTDeviceAdmin(ReadOnlyAwareAdmin):
109 list_display = ('backend_status_icon', 'name', 'openflow_id', 'driver' )
110 list_display_links = ('backend_status_icon', 'name', 'openflow_id')
111 fieldsets = [ (None, {'fields': ['backend_status_text','name','volt_service','openflow_id','driver','access_agent'],
112 'classes':['suit-tab suit-tab-general']})]
113 readonly_fields = ('backend_status_text',)
114 inlines = [AccessDeviceInline]
115
116 suit_form_tabs = (('general','Details'), ('accessdevices','Access Devices'))
117
118class AccessDeviceAdmin(ReadOnlyAwareAdmin):
119 list_display = ('backend_status_icon', 'id', 'volt_device', 'uplink', 'vlan' )
120 list_display_links = ('backend_status_icon', 'id')
121 fieldsets = [ (None, {'fields': ['backend_status_text','volt_device','uplink','vlan'],
122 'classes':['suit-tab suit-tab-general']})]
123 readonly_fields = ('backend_status_text',)
124
125 suit_form_tabs = (('general','Details'),)
126
127class AgentPortMappingInline(XOSTabularInline):
128 model = AgentPortMapping
129 fields = ['access_agent', 'mac', 'port']
130 readonly_fields = []
131 extra = 0
132# max_num = 0
133 suit_classes = 'suit-tab suit-tab-accessportmaps'
134
135# @property
136# def selflink_reverse_path(self):
137# return "admin:cord_volttenant_change"
138
139class AccessAgentAdmin(ReadOnlyAwareAdmin):
140 list_display = ('backend_status_icon', 'name', 'mac' )
141 list_display_links = ('backend_status_icon', 'name')
142 fieldsets = [ (None, {'fields': ['backend_status_text','name','volt_service','mac'],
143 'classes':['suit-tab suit-tab-general']})]
144 readonly_fields = ('backend_status_text',)
145 inlines= [AgentPortMappingInline]
146
147 suit_form_tabs = (('general','Details'), ('accessportmaps', 'Port Mappings'))
148
Scott Baker8e6647a2016-06-20 17:16:20 -0700149admin.site.register(VOLTService, VOLTServiceAdmin)
150admin.site.register(VOLTTenant, VOLTTenantAdmin)
151admin.site.register(VOLTDevice, VOLTDeviceAdmin)
152admin.site.register(AccessDevice, AccessDeviceAdmin)
153admin.site.register(AccessAgent, AccessAgentAdmin)
154
Scott Baker8e6647a2016-06-20 17:16:20 -0700155