blob: 6ab752459bf00ccca259f3b2e79e8335e16d003a [file] [log] [blame]
Matteo Scandolo5e293c92017-08-08 13:05:23 -07001
2# Copyright 2017-present Open Networking Foundation
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16
Scott Baker8e6647a2016-06-20 17:16:20 -070017from django.contrib import admin
18
19from services.volt.models import *
20from django import forms
21from django.utils.safestring import mark_safe
22from django.contrib.auth.admin import UserAdmin
23from django.contrib.admin.widgets import FilteredSelectMultiple
24from django.contrib.auth.forms import ReadOnlyPasswordHashField
25from django.contrib.auth.signals import user_logged_in
26from django.utils import timezone
27from django.contrib.contenttypes import generic
28from suit.widgets import LinkedSelect
Scott Bakerd7590f72017-07-18 11:37:22 -070029from core.admin import ServiceAppAdmin,SliceInline,ServiceAttrAsTabInline, ReadOnlyAwareAdmin, XOSTabularInline, ServicePrivilegeInline, SubscriberLinkInline, ProviderLinkInline, ProviderDependencyInline,SubscriberDependencyInline
Scott Baker8e6647a2016-06-20 17:16:20 -070030from core.middleware import get_request
31
32from functools import update_wrapper
33from django.contrib.admin.views.main import ChangeList
34from django.core.urlresolvers import reverse
35from django.contrib.admin.utils import quote
36
37#-----------------------------------------------------------------------------
38# vOLT
39#-----------------------------------------------------------------------------
40
41class VOLTServiceAdmin(ReadOnlyAwareAdmin):
42 model = VOLTService
43 verbose_name = "vOLT Service"
44 verbose_name_plural = "vOLT Service"
45 list_display = ("backend_status_icon", "name", "enabled")
46 list_display_links = ('backend_status_icon', 'name', )
47 fieldsets = [(None, {'fields': ['backend_status_text', 'name','enabled','versionNumber', 'description',"view_url","icon_url" ], 'classes':['suit-tab suit-tab-general']})]
48 readonly_fields = ('backend_status_text', )
Scott Bakerd7590f72017-07-18 11:37:22 -070049 inlines = [SliceInline,ServiceAttrAsTabInline,ServicePrivilegeInline,ProviderDependencyInline,SubscriberDependencyInline]
Scott Baker8e6647a2016-06-20 17:16:20 -070050
51 extracontext_registered_admins = True
52
53 user_readonly_fields = ["name", "enabled", "versionNumber", "description"]
54
55 suit_form_tabs =(('general', 'vOLT Service Details'),
56 ('administration', 'Administration'),
57 #('tools', 'Tools'),
58 ('slices','Slices'),
59 ('serviceattrs','Additional Attributes'),
Scott Bakerd7590f72017-07-18 11:37:22 -070060 ('servicetenants', 'Dependencies'),
Scott Baker8e6647a2016-06-20 17:16:20 -070061 ('serviceprivileges','Privileges'),
62 )
63
64 suit_form_includes = (('voltadmin.html', 'top', 'administration'),
65 ) #('hpctools.html', 'top', 'tools') )
66
Scott Baker8e6647a2016-06-20 17:16:20 -070067class VOLTTenantForm(forms.ModelForm):
68 s_tag = forms.CharField()
69 c_tag = forms.CharField()
70 creator = forms.ModelChoiceField(queryset=User.objects.all())
71
72 def __init__(self,*args,**kwargs):
73 super (VOLTTenantForm,self ).__init__(*args,**kwargs)
Scott Bakerd7590f72017-07-18 11:37:22 -070074 self.fields['owner'].queryset = VOLTService.objects.all()
Scott Baker8e6647a2016-06-20 17:16:20 -070075 if self.instance:
76 # fields for the attributes
77 self.fields['c_tag'].initial = self.instance.c_tag
78 self.fields['s_tag'].initial = self.instance.s_tag
79 self.fields['creator'].initial = self.instance.creator
80 if (not self.instance) or (not self.instance.pk):
81 # default fields for an 'add' form
Scott Baker8e6647a2016-06-20 17:16:20 -070082 self.fields['creator'].initial = get_request().user
Scott Bakerea848b22017-05-25 09:13:47 -070083 if VOLTService.objects.exists():
Scott Bakerd7590f72017-07-18 11:37:22 -070084 self.fields["owner"].initial = VOLTService.objects.all()[0]
Scott Baker8e6647a2016-06-20 17:16:20 -070085
86 def save(self, commit=True):
87 self.instance.s_tag = self.cleaned_data.get("s_tag")
88 self.instance.c_tag = self.cleaned_data.get("c_tag")
89 self.instance.creator = self.cleaned_data.get("creator")
90 return super(VOLTTenantForm, self).save(commit=commit)
91
92 class Meta:
93 model = VOLTTenant
Zack Williams56c12862016-06-27 08:28:55 -070094 fields = '__all__'
95
Scott Baker8e6647a2016-06-20 17:16:20 -070096
97class VOLTTenantAdmin(ReadOnlyAwareAdmin):
Scott Bakerd7590f72017-07-18 11:37:22 -070098 list_display = ('backend_status_icon', 'id', 'service_specific_id', 's_tag', 'c_tag', )
Scott Baker8e6647a2016-06-20 17:16:20 -070099 list_display_links = ('backend_status_icon', 'id')
Scott Bakerd7590f72017-07-18 11:37:22 -0700100 fieldsets = [ (None, {'fields': ['backend_status_text', 'owner', 'service_specific_id', # 'service_specific_attribute',
Scott Baker8e6647a2016-06-20 17:16:20 -0700101 's_tag', 'c_tag', 'creator'],
102 'classes':['suit-tab suit-tab-general']})]
103 readonly_fields = ('backend_status_text', 'service_specific_attribute')
Scott Bakerd7590f72017-07-18 11:37:22 -0700104 inlines = (ProviderLinkInline, SubscriberLinkInline)
Scott Baker8e6647a2016-06-20 17:16:20 -0700105 form = VOLTTenantForm
106
Scott Bakerd7590f72017-07-18 11:37:22 -0700107 suit_form_tabs = (('general','Details'), ('servicelinks','Links'),)
Scott Baker8e6647a2016-06-20 17:16:20 -0700108
Zack Williams1c8b5172016-06-27 13:18:23 -0700109 def get_queryset(self, request):
Scott Bakerea848b22017-05-25 09:13:47 -0700110 return VOLTTenant.select_by_user(request.user)
Scott Baker8e6647a2016-06-20 17:16:20 -0700111
112class AccessDeviceInline(XOSTabularInline):
113 model = AccessDevice
114 fields = ['volt_device','uplink','vlan']
115 readonly_fields = []
116 extra = 0
117# max_num = 0
118 suit_classes = 'suit-tab suit-tab-accessdevices'
119
120# @property
121# def selflink_reverse_path(self):
122# return "admin:cord_volttenant_change"
123
124class VOLTDeviceAdmin(ReadOnlyAwareAdmin):
125 list_display = ('backend_status_icon', 'name', 'openflow_id', 'driver' )
126 list_display_links = ('backend_status_icon', 'name', 'openflow_id')
127 fieldsets = [ (None, {'fields': ['backend_status_text','name','volt_service','openflow_id','driver','access_agent'],
128 'classes':['suit-tab suit-tab-general']})]
129 readonly_fields = ('backend_status_text',)
130 inlines = [AccessDeviceInline]
131
132 suit_form_tabs = (('general','Details'), ('accessdevices','Access Devices'))
133
134class AccessDeviceAdmin(ReadOnlyAwareAdmin):
135 list_display = ('backend_status_icon', 'id', 'volt_device', 'uplink', 'vlan' )
136 list_display_links = ('backend_status_icon', 'id')
137 fieldsets = [ (None, {'fields': ['backend_status_text','volt_device','uplink','vlan'],
138 'classes':['suit-tab suit-tab-general']})]
139 readonly_fields = ('backend_status_text',)
140
141 suit_form_tabs = (('general','Details'),)
142
143class AgentPortMappingInline(XOSTabularInline):
144 model = AgentPortMapping
145 fields = ['access_agent', 'mac', 'port']
146 readonly_fields = []
147 extra = 0
148# max_num = 0
149 suit_classes = 'suit-tab suit-tab-accessportmaps'
150
151# @property
152# def selflink_reverse_path(self):
153# return "admin:cord_volttenant_change"
154
155class AccessAgentAdmin(ReadOnlyAwareAdmin):
156 list_display = ('backend_status_icon', 'name', 'mac' )
157 list_display_links = ('backend_status_icon', 'name')
158 fieldsets = [ (None, {'fields': ['backend_status_text','name','volt_service','mac'],
159 'classes':['suit-tab suit-tab-general']})]
160 readonly_fields = ('backend_status_text',)
161 inlines= [AgentPortMappingInline]
162
163 suit_form_tabs = (('general','Details'), ('accessportmaps', 'Port Mappings'))
164
Scott Baker8e6647a2016-06-20 17:16:20 -0700165admin.site.register(VOLTService, VOLTServiceAdmin)
166admin.site.register(VOLTTenant, VOLTTenantAdmin)
167admin.site.register(VOLTDevice, VOLTDeviceAdmin)
168admin.site.register(AccessDevice, AccessDeviceAdmin)
169admin.site.register(AccessAgent, AccessAgentAdmin)
170
Scott Baker8e6647a2016-06-20 17:16:20 -0700171