193 lines
7.0 KiB
Python
193 lines
7.0 KiB
Python
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
|
|
|
# Copyright 2011 United States Government as represented by the
|
|
# Administrator of the National Aeronautics and Space Administration.
|
|
# All Rights Reserved.
|
|
#
|
|
# Copyright 2011 Fourth Paradigm Development, Inc.
|
|
#
|
|
# 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.
|
|
|
|
"""
|
|
Views for managing api.quantum_api(request) network ports.
|
|
"""
|
|
import logging
|
|
|
|
from django import http
|
|
from django import shortcuts
|
|
from django import template
|
|
from django.conf import settings
|
|
from django.contrib import messages
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.utils.translation import ugettext as _
|
|
|
|
from django_openstack import forms
|
|
from django_openstack import api
|
|
|
|
|
|
LOG = logging.getLogger('django_openstack.dash.views.ports')
|
|
|
|
|
|
class CreatePort(forms.SelfHandlingForm):
|
|
network = forms.CharField(widget=forms.HiddenInput())
|
|
ports_num = forms.IntegerField(required=True, label="Number of Ports")
|
|
|
|
def handle(self, request, data):
|
|
try:
|
|
LOG.info('Creating %s ports on network %s' % (data['ports_num'], data['network']))
|
|
for i in range(0, data['ports_num']):
|
|
api.quantum_api(request).create_port(data['network'])
|
|
except Exception, e:
|
|
messages.error(request,
|
|
'Unable to create ports on network %s: %s' %
|
|
(data['network'], e.message,))
|
|
else:
|
|
msg = '%s ports created on network %s.' % (data['ports_num'], data['network'])
|
|
LOG.info(msg)
|
|
messages.success(request, msg)
|
|
|
|
return shortcuts.redirect(request.build_absolute_uri())
|
|
|
|
|
|
class DeletePort(forms.SelfHandlingForm):
|
|
network = forms.CharField(widget=forms.HiddenInput())
|
|
port = forms.CharField(widget=forms.HiddenInput())
|
|
|
|
def handle(self, request, data):
|
|
try:
|
|
LOG.info('Deleting %s ports on network %s' % (data['port'], data['network']))
|
|
api.quantum_api(request).delete_port(data['network'], data['port'])
|
|
except Exception, e:
|
|
messages.error(request,
|
|
'Unable to delete port %s: %s' %
|
|
(data['port'], e.message,))
|
|
else:
|
|
msg = 'Port %s deleted from network %s.' % (data['port'], data['network'])
|
|
LOG.info(msg)
|
|
messages.success(request, msg)
|
|
return shortcuts.redirect(request.build_absolute_uri())
|
|
|
|
|
|
class AttachPort(forms.SelfHandlingForm):
|
|
network = forms.CharField(widget=forms.HiddenInput())
|
|
port = forms.CharField(widget=forms.HiddenInput())
|
|
vif_id = forms.CharField(widget=forms.Select(), label="Select VIF to connect")
|
|
|
|
def handle(self, request, data):
|
|
try:
|
|
LOG.info('Attaching %s port to VIF %s' % (data['port'], data['vif_id']))
|
|
body = {'port': {'attachment-id': '%s' % data['vif_id']}}
|
|
api.quantum_api(request).attach_resource(data['network'], data['port'], body)
|
|
except Exception, e:
|
|
messages.error(request,
|
|
'Unable to attach port %s to VIF %s: %s' %
|
|
(data['port'], data['vif_id'], e.message,))
|
|
else:
|
|
msg = 'Port %s connect to VIF %s.' % (data['port'], data['vif_id'])
|
|
LOG.info(msg)
|
|
messages.success(request, msg)
|
|
return shortcuts.redirect(request.build_absolute_uri())
|
|
|
|
|
|
class DetachPort(forms.SelfHandlingForm):
|
|
network = forms.CharField(widget=forms.HiddenInput())
|
|
port = forms.CharField(widget=forms.HiddenInput())
|
|
|
|
def handle(self, request, data):
|
|
try:
|
|
LOG.info('Detaching port %s' % data['port'])
|
|
api.quantum_api(request).detach_resource(data['network'], data['port'])
|
|
except Exception, e:
|
|
messages.error(request,
|
|
'Unable to detach port %s: %s' %
|
|
(data['port'], e.message,))
|
|
else:
|
|
msg = 'Port %s detached.' % (data['port'])
|
|
LOG.info(msg)
|
|
messages.success(request, msg)
|
|
return shortcuts.redirect(request.build_absolute_uri())
|
|
|
|
|
|
class TogglePort(forms.SelfHandlingForm):
|
|
network = forms.CharField(widget=forms.HiddenInput())
|
|
port = forms.CharField(widget=forms.HiddenInput())
|
|
state = forms.CharField(widget=forms.HiddenInput())
|
|
|
|
def handle(self, request, data):
|
|
try:
|
|
LOG.info('Toggling port state to %s' % data['state'])
|
|
body = {'port': {'port-state': '%s' % data['state']}}
|
|
api.quantum_api(request).set_port_state(data['network'], data['port'], body)
|
|
except Exception, e:
|
|
messages.error(request,
|
|
'Unable to set port state to %s: %s' %
|
|
(data['state'], e.message,))
|
|
else:
|
|
msg = 'Port %s state set to %s.' % (data['port'],data['state'])
|
|
LOG.info(msg)
|
|
messages.success(request, msg)
|
|
return shortcuts.redirect(request.build_absolute_uri())
|
|
|
|
|
|
@login_required
|
|
def create(request, tenant_id, network_id):
|
|
create_form, handled = CreatePort.maybe_handle(request)
|
|
|
|
if handled:
|
|
return shortcuts.redirect(
|
|
'dash_networks_detail',
|
|
tenant_id=request.user.tenant,
|
|
network_id=network_id
|
|
)
|
|
|
|
return shortcuts.render_to_response('dash_ports_create.html', {
|
|
'network_id' : network_id,
|
|
'create_form' : create_form
|
|
}, context_instance=template.RequestContext(request))
|
|
|
|
|
|
@login_required
|
|
def attach(request, tenant_id, network_id, port_id):
|
|
attach_form, handled = AttachPort.maybe_handle(request)
|
|
|
|
if handled:
|
|
return shortcuts.redirect('dash_networks_detail', request.user.tenant, network_id)
|
|
|
|
# Get all avaliable vifs
|
|
vifs = _get_available_vifs(request)
|
|
|
|
return shortcuts.render_to_response('dash_port_attach.html', {
|
|
'network' : network_id,
|
|
'port' : port_id,
|
|
'attach_form' : attach_form,
|
|
'vifs' : vifs,
|
|
}, context_instance=template.RequestContext(request))
|
|
|
|
|
|
"""
|
|
Method to get a list of available virtual interfaces
|
|
"""
|
|
def _get_available_vifs(request):
|
|
vif_choices = []
|
|
vifs = api.get_vif_ids(request)
|
|
|
|
for vif in vifs:
|
|
if vif['available']:
|
|
name = "Instance %s VIF %s" % (str(vif['instance_name']), str(vif['id']))
|
|
vif_choices.append({
|
|
'name' : str(name),
|
|
'id' : str(vif['id'])
|
|
})
|
|
|
|
return vif_choices
|