blob: fa658db194672668403429804f65a53360f4f663 [file] [log] [blame]
from django.contrib import admin
from services.vrouter.models import *
from django import forms
from django.utils.safestring import mark_safe
from django.contrib.auth.admin import UserAdmin
from django.contrib.admin.widgets import FilteredSelectMultiple
from django.contrib.auth.forms import ReadOnlyPasswordHashField
from django.contrib.auth.signals import user_logged_in
from django.utils import timezone
from django.contrib.contenttypes import generic
from suit.widgets import LinkedSelect
from core.models import AddressPool
from core.admin import ServiceAppAdmin, SliceInline, ServiceAttrAsTabInline, ReadOnlyAwareAdmin, XOSTabularInline, ServicePrivilegeInline, AddressPoolInline
from core.middleware import get_request
from functools import update_wrapper
from django.contrib.admin.views.main import ChangeList
from django.core.urlresolvers import reverse
from django.contrib.admin.utils import quote
class VRouterPortInline(XOSTabularInline):
model = VRouterPort
fields = ['openflow_id']
suit_classes = 'suit-tab suit-tab-vrouter_ports'
extra = 0
class VRouterInterfaceInline(XOSTabularInline):
model = VRouterInterface
fields = ['name', 'mac', 'vlan']
suit_classes = 'suit-tab suit-tab-vrouter_interfaces'
extra = 0
class VRouterIpInline(XOSTabularInline):
model = VRouterIp
fields = ['ip']
suit_classes = 'suit-tab suit-tab-vrouter_ips'
extra = 0
class VRouterServiceForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(VRouterServiceForm, self).__init__(*args, **kwargs)
def save(self, commit=True):
return super(VRouterServiceForm, self).save(commit=commit)
class Meta:
model = VRouterService
fields = '__all__'
class VRouterServiceAdmin(ReadOnlyAwareAdmin):
model = VRouterService
verbose_name = "vRouter Service"
verbose_name_plural = "vRouter Service"
list_display = ("backend_status_icon", "name", "enabled")
list_display_links = ('backend_status_icon', 'name', )
fieldsets = [(None, {
'fields': [
'backend_status_text',
'name',
'enabled',
'versionNumber',
'description',
'view_url',
'icon_url',
'rest_hostname',
'rest_port',
'rest_user',
'rest_pass',
],
'classes':['suit-tab suit-tab-general']})]
# NOTE make rest_* params editable
readonly_fields = (
'backend_status_text',
'rest_hostname',
'rest_port',
'rest_user',
'rest_pass'
)
inlines = [SliceInline, ServiceAttrAsTabInline, ServicePrivilegeInline, AddressPoolInline]
form = VRouterServiceForm
extracontext_registered_admins = True
user_readonly_fields = ["name", "enabled", "versionNumber", "description"]
suit_form_tabs = (
('general', 'vRouter Service Details'),
('administration', 'Administration'),
('addresspools', 'Addresses'),
# ('tools', 'Tools'),
('slices', 'Slices'),
('serviceattrs', 'Additional Attributes'),
('serviceprivileges', 'Privileges'),
)
suit_form_includes = ('vrouteradmin.html', 'top', 'administration') # ('hpctools.html', 'top', 'tools') )
def get_queryset(self, request):
return VRouterService.select_by_user(request.user)
class VRouterTenantForm(forms.ModelForm):
gateway_ip = forms.CharField(required=False)
gateway_mac = forms.CharField(required=False)
cidr = forms.CharField(required=False)
def __init__(self,*args,**kwargs):
super (VRouterTenantForm,self ).__init__(*args,**kwargs)
self.fields['kind'].widget.attrs['readonly'] = True
self.fields['provider_service'].queryset = VRouterService.objects.all()
if self.instance:
# fields for the attributes
self.fields['gateway_ip'].initial = self.instance.gateway_ip
self.fields['gateway_mac'].initial = self.instance.gateway_mac
self.fields['cidr'].initial = self.instance.cidr
if (not self.instance) or (not self.instance.pk):
# default fields for an 'add' form
self.fields['kind'].initial = VROUTER_KIND
if VRouterService.objects.exists():
self.fields["provider_service"].initial = VRouterService.objects.first()
def save(self, commit=True):
return super(VRouterTenantForm, self).save(commit=commit)
class Meta:
model = VRouterTenant
fields = '__all__'
class VRouterTenantAdmin(ReadOnlyAwareAdmin):
list_display = ('backend_status_icon', 'id', 'subscriber_tenant', 'public_ip')
list_display_links = ('backend_status_icon', 'id')
fieldsets = [(None, {
'fields': [
'backend_status_text', 'kind', 'provider_service', 'subscriber_tenant', 'subscriber_service',
'address_pool', 'public_ip', 'public_mac', 'gateway_ip', 'gateway_mac', 'cidr'],
'classes':['suit-tab suit-tab-general']
})]
readonly_fields = ('backend_status_text', 'service_specific_attribute', 'gateway_ip', 'gateway_mac', 'cidr')
form = VRouterTenantForm
suit_form_tabs = (('general', 'Details'),)
def get_queryset(self, request):
return VRouterTenant.select_by_user(request.user)
class VRouterDeviceAdmin(ReadOnlyAwareAdmin):
list_display = ('name', 'openflow_id', 'config_key', 'driver')
fieldsets = [(None, {
'fields': ['name', 'openflow_id', 'vrouter_service', 'config_key', 'driver'],
'classes':['suit-tab suit-tab-general']
})]
inlines = [VRouterPortInline]
suit_form_tabs = (
('general', 'Device Details'),
('vrouter_ports', 'Ports'),
)
class VRouterPortAdmin(ReadOnlyAwareAdmin):
list_display = ('name', 'openflow_id', 'vrouter_device')
fieldsets = [(None, {
'fields': ['name', 'openflow_id', 'vrouter_service', 'vrouter_device'],
'classes':['suit-tab suit-tab-general']
})]
inlines = [VRouterInterfaceInline]
suit_form_tabs = (
('general', 'Ports Details'),
('vrouter_interfaces', 'Interfaces'),
)
class VRouterInterfaceAdmin(ReadOnlyAwareAdmin):
list_display = ('name', 'mac', 'vlan')
fieldsets = [(None, {
'fields': ['name', 'vrouter_port', 'mac', 'vlan'],
'classes':['suit-tab suit-tab-general']
})]
inlines = [VRouterIpInline]
suit_form_tabs = (
('general', 'Interfaces Details'),
('vrouter_ips', 'Ips'),
)
class VRouterIpAdmin(ReadOnlyAwareAdmin):
list_display = ('name', 'ip', 'vrouter_interface')
fieldsets = [(None, {'fields': ['name', 'ip', 'vrouter_interface']})]
class VRouterAppAdmin(ReadOnlyAwareAdmin):
list_display = ('name', 'control_plane_connect_point', 'ospf_enabled')
fieldsets = [(None, {'fields': ['name', 'vrouter_service', 'control_plane_connect_point', 'ospf_enabled']})]
admin.site.register(VRouterService, VRouterServiceAdmin)
admin.site.register(VRouterTenant, VRouterTenantAdmin)
admin.site.register(VRouterDevice, VRouterDeviceAdmin)
admin.site.register(VRouterPort, VRouterPortAdmin)
admin.site.register(VRouterInterface, VRouterInterfaceAdmin)
admin.site.register(VRouterIp, VRouterIpAdmin)
admin.site.register(VRouterApp, VRouterAppAdmin)