23
23
Views for Instances and Volumes.
28
from django import http
29
from django import shortcuts
30
27
from django.contrib import messages
31
from django.contrib.auth.decorators import login_required
32
28
from django.utils.translation import ugettext as _
33
29
from novaclient import exceptions as novaclient_exceptions
34
import openstackx.api.exceptions as api_exceptions
36
31
from horizon import api
37
from horizon import forms
38
from horizon import test
39
from horizon.dashboards.nova.access_and_security.keypairs.forms import \
41
from horizon.dashboards.nova.access_and_security.security_groups.forms import \
44
from horizon.dashboards.nova.access_and_security.floating_ips.forms import \
46
FloatingIpDisassociate,
32
from horizon import tables
33
from .keypairs.tables import KeypairsTable
34
from .floating_ips.tables import FloatingIPsTable
35
from .security_groups.tables import SecurityGroupsTable
50
38
LOG = logging.getLogger(__name__)
55
tenant_id = request.user.tenant_id
56
for f in (CreateGroup, DeleteGroup, DeleteKeypair, ReleaseFloatingIp,
57
FloatingIpDisassociate, FloatingIpAllocate):
58
_unused, handled = f.maybe_handle(request)
63
security_groups = api.security_group_list(request)
64
except novaclient_exceptions.ClientException, e:
66
LOG.exception("ClientException in security_groups index")
67
messages.error(request, _('Error fetching security_groups: %s')
70
floating_ips = api.tenant_floating_ip_list(request)
71
except novaclient_exceptions.ClientException, e:
73
LOG.exception("ClientException in floating ip index")
74
messages.error(request,
75
_('Error fetching floating ips: %s') % e.message)
77
keypairs = api.keypair_list(request)
78
except novaclient_exceptions.ClientException, e:
80
LOG.exception("ClientException in keypair index")
81
messages.error(request, _('Error fetching keypairs: %s') % e.message)
83
context = {'keypairs': keypairs,
84
'floating_ips': floating_ips,
85
'security_groups': security_groups,
86
'keypair_delete_form': DeleteKeypair(),
87
'disassociate_form': FloatingIpDisassociate(),
88
'release_form': ReleaseFloatingIp(),
89
'allocate_form': FloatingIpAllocate(initial={
90
'tenant_id': request.user.tenant_id}),
91
'sec_group_create_form': CreateGroup(
92
initial={'tenant_id': tenant_id}),
93
'sec_group_delete_form': DeleteGroup.maybe_handle(request,
94
initial={'tenant_id': tenant_id})}
97
template = 'nova/access_and_security/index_ajax.html'
98
context['hide'] = True
100
template = 'nova/access_and_security/index.html'
102
return shortcuts.render(request, template, context)
41
class IndexView(tables.MultiTableView):
42
table_classes = (KeypairsTable, SecurityGroupsTable, FloatingIPsTable)
43
template_name = 'nova/access_and_security/index.html'
45
def get_keypairs_data(self):
47
keypairs = api.nova.keypair_list(self.request)
50
LOG.exception("Exception in keypair index")
51
messages.error(self.request,
52
_('Keypair list is currently unavailable.'))
55
def get_security_groups_data(self):
57
security_groups = api.security_group_list(self.request)
58
except novaclient_exceptions.ClientException, e:
60
LOG.exception("ClientException in security_groups index")
61
messages.error(self.request,
62
_('Error fetching security_groups: %s') % e)
63
return security_groups
65
def get_floating_ips_data(self):
67
floating_ips = api.tenant_floating_ip_list(self.request)
68
except novaclient_exceptions.ClientException, e:
70
LOG.exception("ClientException in floating ip index")
71
messages.error(self.request,
72
_('Error fetching floating ips: %s') % e)