244 lines
8.9 KiB
Python
244 lines
8.9 KiB
Python
# Copyright 2013 Hewlett-Packard Development Company, L.P.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
from django.core.urlresolvers import reverse, reverse_lazy # noqa
|
|
from django.utils.translation import ugettext_lazy as _ # noqa
|
|
|
|
from horizon import exceptions
|
|
from horizon import forms
|
|
from horizon import tables
|
|
from horizon.views import HorizonTemplateView # noqa
|
|
|
|
from openstack_dashboard.api.network import tenant_floating_ip_list
|
|
from openstack_dashboard.api.nova import server_list
|
|
|
|
from designatedashboard import api
|
|
from designatedashboard.api import rest # noqa
|
|
|
|
from .forms import DomainCreate # noqa
|
|
from .forms import DomainUpdate # noqa
|
|
from .forms import RecordCreate # noqa
|
|
from .forms import RecordUpdate # noqa
|
|
from .tables import DomainsTable # noqa
|
|
from .tables import RecordsTable # noqa
|
|
from .utils import limit_records_to_fips # noqa
|
|
|
|
|
|
class IndexView(tables.DataTableView):
|
|
table_class = DomainsTable
|
|
template_name = 'project/dns_domains/index.html'
|
|
|
|
def get_data(self):
|
|
try:
|
|
return api.designate.domain_list(self.request)
|
|
except Exception:
|
|
exceptions.handle(self.request,
|
|
_('Unable to retrieve domain list.'))
|
|
return []
|
|
|
|
|
|
class CreateDomainView(forms.ModalFormView):
|
|
form_class = DomainCreate
|
|
template_name = 'project/dns_domains/create_domain.html'
|
|
success_url = reverse_lazy('horizon:project:dns_domains:index')
|
|
|
|
def get_object_display(self, obj):
|
|
return obj.ip
|
|
|
|
|
|
class DomainDetailView(HorizonTemplateView):
|
|
template_name = 'project/dns_domains/domain_detail.html'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(DomainDetailView, self).get_context_data(**kwargs)
|
|
domain_id = self.kwargs['domain_id']
|
|
try:
|
|
context["domain"] = api.designate.domain_get(self.request,
|
|
domain_id)
|
|
table = DomainsTable(self.request)
|
|
context["actions"] = table.render_row_actions(context["domain"])
|
|
except Exception:
|
|
redirect = reverse('horizon:project:dns_domains:index')
|
|
exceptions.handle(self.request,
|
|
_('Unable to retrieve domain record.'),
|
|
redirect=redirect)
|
|
return context
|
|
|
|
|
|
class UpdateDomainView(forms.ModalFormView):
|
|
form_class = DomainUpdate
|
|
template_name = 'project/dns_domains/update_domain.html'
|
|
success_url = reverse_lazy('horizon:project:dns_domains:index')
|
|
|
|
def get_object(self):
|
|
domain_id = self.kwargs['domain_id']
|
|
try:
|
|
return api.designate.domain_get(self.request, domain_id)
|
|
except Exception:
|
|
redirect = reverse('horizon:project:dns_domains:index')
|
|
exceptions.handle(self.request,
|
|
_('Unable to retrieve domain record.'),
|
|
redirect=redirect)
|
|
|
|
def get_initial(self):
|
|
self.domain = self.get_object()
|
|
return self.domain
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(UpdateDomainView, self).get_context_data(**kwargs)
|
|
context["domain"] = self.domain
|
|
return context
|
|
|
|
|
|
class RecordsView(tables.DataTableView):
|
|
table_class = RecordsTable
|
|
template_name = 'project/dns_domains/records.html'
|
|
|
|
def get_data(self):
|
|
domain_id = self.kwargs['domain_id']
|
|
records = []
|
|
try:
|
|
self.domain = api.designate.domain_get(self.request, domain_id)
|
|
self.servers = api.designate.server_list(self.request, domain_id)
|
|
records = api.designate.record_list(self.request, domain_id)
|
|
except Exception:
|
|
redirect = reverse('horizon:project:dns_domains:index')
|
|
exceptions.handle(self.request,
|
|
_('Unable to retrieve record list.'),
|
|
redirect=redirect)
|
|
|
|
return records
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(RecordsView, self).get_context_data(**kwargs)
|
|
context['domain'] = self.domain
|
|
context['servers'] = self.servers
|
|
|
|
return context
|
|
|
|
|
|
class BaseRecordFormView(forms.ModalFormView):
|
|
cancel_label = _("Cancel")
|
|
|
|
def get_success_url(self):
|
|
return reverse('horizon:project:dns_domains:records',
|
|
args=(self.kwargs['domain_id'],))
|
|
|
|
def get_domain(self):
|
|
domain_id = self.kwargs['domain_id']
|
|
try:
|
|
return api.designate.domain_get(self.request, domain_id)
|
|
except Exception:
|
|
redirect = reverse('horizon:project:dns_domains:records',
|
|
args=(self.kwargs['domain_id'],))
|
|
exceptions.handle(self.request,
|
|
('Unable to retrieve domain record.'),
|
|
redirect=redirect)
|
|
# NotAuthorized errors won't be redirected automatically. Need
|
|
# to force the issue
|
|
raise exceptions.Http302(redirect)
|
|
|
|
def get_initial(self):
|
|
self.domain = self.get_domain()
|
|
results = {'domain_id': self.domain.id,
|
|
'domain_name': self.domain.name, }
|
|
if limit_records_to_fips():
|
|
results.update({'fips': tenant_floating_ip_list(self.request),
|
|
'instances': server_list(self.request)[0]})
|
|
return results
|
|
|
|
def get_context_data(self, **kwargs):
|
|
"""Set the cancel url
|
|
|
|
the cancel_url needs a variable in it
|
|
so we cannot do this with a simple class attr
|
|
this is critical to perform before the super.get_context_data
|
|
"""
|
|
self.cancel_url = reverse('horizon:project:dns_domains:records',
|
|
args=(self.kwargs['domain_id'],))
|
|
context = super(BaseRecordFormView, self).get_context_data(**kwargs)
|
|
context['domain'] = self.domain
|
|
return context
|
|
|
|
|
|
class CreateRecordView(BaseRecordFormView):
|
|
form_class = RecordCreate
|
|
submit_label = _("Create Record")
|
|
template_name = 'project/dns_domains/create_record.html'
|
|
|
|
|
|
class ViewRecordDetailsView(HorizonTemplateView):
|
|
template_name = 'project/dns_domains/record_detail.html'
|
|
|
|
def get_record(self):
|
|
domain_id = self.kwargs['domain_id']
|
|
record_id = self.kwargs['record_id']
|
|
try:
|
|
return api.designate.record_get(self.request, domain_id, record_id)
|
|
except Exception:
|
|
redirect = reverse('horizon:project:dns_domains:records',
|
|
args=(self.kwargs['domain_id'],))
|
|
exceptions.handle(self.request,
|
|
_('Unable to retrieve domain record.'),
|
|
redirect=redirect)
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(ViewRecordDetailsView, self).get_context_data(**kwargs)
|
|
self.record = self.get_record()
|
|
context["record"] = self.record
|
|
context["domain_id"] = self.kwargs['domain_id']
|
|
return context
|
|
|
|
|
|
class UpdateRecordView(BaseRecordFormView):
|
|
form_class = RecordUpdate
|
|
submit_label = _("Update Record")
|
|
template_name = 'project/dns_domains/update_record.html'
|
|
|
|
def get_record(self):
|
|
domain_id = self.kwargs['domain_id']
|
|
record_id = self.kwargs['record_id']
|
|
|
|
try:
|
|
return api.designate.record_get(self.request, domain_id, record_id)
|
|
except Exception:
|
|
redirect = reverse('horizon:project:dns_domains:records',
|
|
args=(self.kwargs['domain_id'],))
|
|
exceptions.handle(self.request,
|
|
_('Unable to retrieve domain record.'),
|
|
redirect=redirect)
|
|
|
|
def get_initial(self):
|
|
initial = super(UpdateRecordView, self).get_initial()
|
|
self.record = self.get_record()
|
|
|
|
initial.update({
|
|
'id': self.record.id,
|
|
'name': self.record.name.replace("." + initial['domain_name'], ''),
|
|
'data': self.record.data,
|
|
'txt': self.record.data,
|
|
'priority': self.record.priority,
|
|
'ttl': self.record.ttl,
|
|
'type': self.record.type.lower(),
|
|
'description': self.record.description,
|
|
})
|
|
if limit_records_to_fips():
|
|
initial.update({'ip_addr': self.record.data})
|
|
|
|
return initial
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(UpdateRecordView, self).get_context_data(**kwargs)
|
|
context["record"] = self.record
|
|
return context
|