mirror of
https://github.com/retspen/webvirtcloud
synced 2025-07-31 12:41:08 +00:00
build new tree
This commit is contained in:
parent
4d48e79341
commit
dd5f98cbe8
22 changed files with 745 additions and 60 deletions
43
networks/forms.py
Normal file
43
networks/forms.py
Normal file
|
@ -0,0 +1,43 @@
|
|||
import re
|
||||
from django import forms
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
|
||||
class AddNetPool(forms.Form):
|
||||
name = forms.CharField(error_messages={'required': _('No pool name has been entered')},
|
||||
max_length=20)
|
||||
subnet = forms.CharField(error_messages={'required': _('No subnet has been entered')},
|
||||
max_length=20)
|
||||
forward = forms.CharField(max_length=100)
|
||||
dhcp = forms.BooleanField(required=False)
|
||||
fixed = forms.BooleanField(required=False)
|
||||
bridge_name = forms.CharField(max_length=20, required=False)
|
||||
openvswitch = forms.BooleanField(required=False)
|
||||
|
||||
def clean_name(self):
|
||||
name = self.cleaned_data['name']
|
||||
have_symbol = re.match('^[a-zA-Z0-9._-]+$', name)
|
||||
if not have_symbol:
|
||||
raise forms.ValidationError(_('The pool name must not contain any special characters'))
|
||||
elif len(name) > 20:
|
||||
raise forms.ValidationError(_('The pool name must not exceed 20 characters'))
|
||||
return name
|
||||
|
||||
def clean_subnet(self):
|
||||
subnet = self.cleaned_data['subnet']
|
||||
have_symbol = re.match('^[0-9./]+$', subnet)
|
||||
if not have_symbol:
|
||||
raise forms.ValidationError(_('The pool subnet must not contain any special characters'))
|
||||
elif len(subnet) > 20:
|
||||
raise forms.ValidationError(_('The pool subnet must not exceed 20 characters'))
|
||||
return subnet
|
||||
|
||||
def clean_bridge_name(self):
|
||||
bridge_name = self.cleaned_data['bridge_name']
|
||||
if self.cleaned_data['forward'] == 'bridge':
|
||||
have_symbol = re.match('^[a-zA-Z0-9._-]+$', bridge_name)
|
||||
if not have_symbol:
|
||||
raise forms.ValidationError(_('The pool bridge name must not contain any special characters'))
|
||||
elif len(bridge_name) > 20:
|
||||
raise forms.ValidationError(_('The pool bridge name must not exceed 20 characters'))
|
||||
return bridge_name
|
|
@ -1,3 +1,121 @@
|
|||
from django.shortcuts import render
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.core.urlresolvers import reverse
|
||||
from computes.models import Compute
|
||||
from networks.forms import AddNetPool
|
||||
from vrtManager.network import wvmNetwork, wvmNetworks
|
||||
from vrtManager.network import network_size
|
||||
from libvirt import libvirtError
|
||||
|
||||
# Create your views here.
|
||||
|
||||
def networks(request, compute_id):
|
||||
"""
|
||||
:param request:
|
||||
:return:
|
||||
"""
|
||||
|
||||
if not request.user.is_authenticated():
|
||||
return HttpResponseRedirect(reverse('index'))
|
||||
|
||||
errors = []
|
||||
compute = Compute.objects.get(id=compute_id)
|
||||
|
||||
try:
|
||||
conn = wvmNetworks(compute.hostname,
|
||||
compute.login,
|
||||
compute.password,
|
||||
compute.type)
|
||||
networks = conn.get_networks_info()
|
||||
|
||||
if request.method == 'POST':
|
||||
if 'create' in request.POST:
|
||||
form = AddNetPool(request.POST)
|
||||
if form.is_valid():
|
||||
data = form.cleaned_data
|
||||
if data['name'] in networks:
|
||||
msg = _("Pool name already in use")
|
||||
errors.append(msg)
|
||||
if data['forward'] == 'bridge' and data['bridge_name'] == '':
|
||||
errors.append('Please enter bridge name')
|
||||
try:
|
||||
gateway, netmask, dhcp = network_size(data['subnet'], data['dhcp'])
|
||||
except:
|
||||
msg = _("Input subnet pool error")
|
||||
errors.append(msg)
|
||||
if not errors:
|
||||
conn.create_network(data['name'], data['forward'], gateway, netmask,
|
||||
dhcp, data['bridge_name'], data['openvswitch'], data['fixed'])
|
||||
return HttpResponseRedirect(reverse('network', args=[host_id, data['name']]))
|
||||
conn.close()
|
||||
except libvirtError as err:
|
||||
errors.append(err)
|
||||
|
||||
return render(request, 'network.html', locals())
|
||||
|
||||
|
||||
def network(request, compute_id, pool):
|
||||
"""
|
||||
:param request:
|
||||
:return:
|
||||
"""
|
||||
|
||||
if not request.user.is_authenticated():
|
||||
return HttpResponseRedirect(reverse('index'))
|
||||
|
||||
errors = []
|
||||
compute = Compute.objects.get(id=compute_id)
|
||||
|
||||
try:
|
||||
conn = wvmNetwork(compute.hostname,
|
||||
compute.login,
|
||||
compute.password,
|
||||
compute.type,
|
||||
pool)
|
||||
networks = conn.get_networks()
|
||||
state = conn.is_active()
|
||||
device = conn.get_bridge_device()
|
||||
autostart = conn.get_autostart()
|
||||
ipv4_forward = conn.get_ipv4_forward()
|
||||
ipv4_dhcp_range_start = conn.get_ipv4_dhcp_range_start()
|
||||
ipv4_dhcp_range_end = conn.get_ipv4_dhcp_range_end()
|
||||
ipv4_network = conn.get_ipv4_network()
|
||||
fixed_address = conn.get_mac_ipaddr()
|
||||
except libvirtError as err:
|
||||
errors.append(err)
|
||||
|
||||
if request.method == 'POST':
|
||||
if 'start' in request.POST:
|
||||
try:
|
||||
conn.start()
|
||||
return HttpResponseRedirect(request.get_full_path())
|
||||
except libvirtError as error_msg:
|
||||
errors.append(error_msg.message)
|
||||
if 'stop' in request.POST:
|
||||
try:
|
||||
conn.stop()
|
||||
return HttpResponseRedirect(request.get_full_path())
|
||||
except libvirtError as error_msg:
|
||||
errors.append(error_msg.message)
|
||||
if 'delete' in request.POST:
|
||||
try:
|
||||
conn.delete()
|
||||
return HttpResponseRedirect(reverse('networks', args=[host_id]))
|
||||
except libvirtError as error_msg:
|
||||
errors.append(error_msg.message)
|
||||
if 'set_autostart' in request.POST:
|
||||
try:
|
||||
conn.set_autostart(1)
|
||||
return HttpResponseRedirect(request.get_full_path())
|
||||
except libvirtError as error_msg:
|
||||
errors.append(error_msg.message)
|
||||
if 'unset_autostart' in request.POST:
|
||||
try:
|
||||
conn.set_autostart(0)
|
||||
return HttpResponseRedirect(request.get_full_path())
|
||||
except libvirtError as error_msg:
|
||||
errors.append(error_msg.message)
|
||||
|
||||
conn.close()
|
||||
|
||||
return render(request, 'network.html', locals())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue