Skip to content

Commit

Permalink
build new tree
Browse files Browse the repository at this point in the history
  • Loading branch information
retspen committed Feb 27, 2015
1 parent 4d48e79 commit dd5f98c
Show file tree
Hide file tree
Showing 22 changed files with 744 additions and 59 deletions.
18 changes: 9 additions & 9 deletions computes/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ def computes(request):
"""

if not request.user.is_authenticated():
return HttpResponseRedirect(reverse('login'))
return HttpResponseRedirect(reverse('index'))

def get_hosts_status(computes):
"""
Expand All @@ -23,13 +23,13 @@ def get_hosts_status(computes):
compute_data = []
for compute in computes:
compute_data.append({'id': compute.id,
'name': compute.name,
'hostname': compute.hostname,
'status': connection_manager.host_is_up(compute.type, compute.hostname),
'type': compute.type,
'login': compute.login,
'password': compute.password
})
'name': compute.name,
'hostname': compute.hostname,
'status': connection_manager.host_is_up(compute.type, compute.hostname),
'type': compute.type,
'login': compute.login,
'password': compute.password
})
return compute_data

computes = Compute.objects.filter()
Expand All @@ -44,7 +44,7 @@ def compute(request, compute_id):
"""

if not request.user.is_authenticated():
return HttpResponseRedirect(reverse('login'))
return HttpResponseRedirect(reverse('index'))

errors = []

Expand Down
4 changes: 2 additions & 2 deletions instances/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def instances(request):
"""

if not request.user.is_authenticated():
return HttpResponseRedirect(reverse('login'))
return HttpResponseRedirect(reverse('index'))

computes = Compute.objects.filter()
all_host_vms = {}
Expand All @@ -50,6 +50,6 @@ def instance(request, comptes_id, vname):
"""

if not request.user.is_authenticated():
return HttpResponseRedirect(reverse('login'))
return HttpResponseRedirect(reverse('index'))

return render(request, 'instances.html', locals())
73 changes: 73 additions & 0 deletions interfaces/forms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import re
from django import forms
from django.utils.translation import ugettext_lazy as _


class AddInterface(forms.Form):
name = forms.CharField(max_length=10, required=True)
itype = forms.ChoiceField(required=True, choices=(('bridge', 'bridge'), ('ethernet', 'ethernet')))
start_mode = forms.ChoiceField(required=True,
choices=(('none', 'none'), ('onboot', 'onboot'), ('hotplug', 'hotplug')))
netdev = forms.CharField(max_length=15, required=True)
ipv4_type = forms.ChoiceField(required=True, choices=(('dhcp', 'dhcp'), ('static', 'static'), ('none', 'none')))
ipv4_addr = forms.CharField(max_length=18, required=False)
ipv4_gw = forms.CharField(max_length=15, required=False)
ipv6_type = forms.ChoiceField(required=True, choices=(('dhcp', 'dhcp'), ('static', 'static'), ('none', 'none')))
ipv6_addr = forms.CharField(max_length=100, required=False)
ipv6_gw = forms.CharField(max_length=100, required=False)
stp = forms.ChoiceField(required=False, choices=(('on', 'on'), ('off', 'off')))
delay = forms.IntegerField(required=False)

def clean_ipv4_addr(self):
ipv4_addr = self.cleaned_data['ipv4_addr']
have_symbol = re.match('^[0-9./]+$', ipv4_addr)
if not have_symbol:
raise forms.ValidationError(_('The ipv4 must not contain any special characters'))
elif len(ipv4_addr) > 20:
raise forms.ValidationError(_('The ipv4 must not exceed 20 characters'))
return ipv4_addr

def clean_ipv4_gw(self):
ipv4_gw = self.cleaned_data['ipv4_gw']
have_symbol = re.match('^[0-9.]+$', ipv4_gw)
if not have_symbol:
raise forms.ValidationError(_('The ipv4 gateway must not contain any special characters'))
elif len(ipv4_gw) > 20:
raise forms.ValidationError(_('The ipv4 gateway must not exceed 20 characters'))
return ipv4_gw

def clean_ipv6_addr(self):
ipv6_addr = self.cleaned_data['ipv6_addr']
have_symbol = re.match('^[0-9a-f./:]+$', ipv6_addr)
if not have_symbol:
raise forms.ValidationError(_('The ipv6 must not contain any special characters'))
elif len(ipv6_addr) > 100:
raise forms.ValidationError(_('The ipv6 must not exceed 100 characters'))
return ipv6_addr

def clean_ipv6_gw(self):
ipv6_gw = self.cleaned_data['ipv6_gw']
have_symbol = re.match('^[0-9.]+$', ipv6_gw)
if not have_symbol:
raise forms.ValidationError(_('The ipv6 gateway must not contain any special characters'))
elif len(ipv6_gw) > 100:
raise forms.ValidationError(_('The ipv6 gateway must not exceed 100 characters'))
return ipv6_gw

def clean_name(self):
name = self.cleaned_data['name']
have_symbol = re.match('^[a-z0-9.]+$', name)
if not have_symbol:
raise forms.ValidationError(_('The interface must not contain any special characters'))
elif len(name) > 10:
raise forms.ValidationError(_('The interface must not exceed 10 characters'))
return name

def clean_netdev(self):
netdev = self.cleaned_data['netdev']
have_symbol = re.match('^[a-z0-9.]+$', netdev)
if not have_symbol:
raise forms.ValidationError(_('The interface must not contain any special characters'))
elif len(netdev) > 10:
raise forms.ValidationError(_('The interface must not exceed 10 characters'))
return netdev
96 changes: 95 additions & 1 deletion interfaces/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,97 @@
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from computes.models import Compute
from interfaces.forms import AddInterface
from vrtManager.interface import wvmInterface, wvmInterfaces
from libvirt import libvirtError

# Create your views here.

def interfaces(request, compute_id):
"""
:param request:
:return:
"""

if not request.user.is_authenticated():
return HttpResponseRedirect(reverse('index'))

errors = []
ifaces_all = []
compute = Compute.objects.get(id=compute_id)

try:
conn = wvmInterfaces(compute.hostname,
compute.login,
compute.password,
compute.type)
ifaces = conn.get_ifaces()
try:
netdevs = conn.get_net_device()
except:
netdevs = ['eth0', 'eth1']

for iface in ifaces:
ifaces_all.append(conn.get_iface_info(iface))

if request.method == 'POST':
if 'create' in request.POST:
form = AddInterface(request.POST)
if form.is_valid():
data = form.cleaned_data
conn.create_iface(data['name'], data['itype'], data['start_mode'], data['netdev'],
data['ipv4_type'], data['ipv4_addr'], data['ipv4_gw'],
data['ipv6_type'], data['ipv6_addr'], data['ipv6_gw'],
data['stp'], data['delay'])
return HttpResponseRedirect(request.get_full_path())
conn.close()
except libvirtError as err:
errors.append(err)

return render(request, 'interfaces.html', locals())


def interface(request, compute_id, iface):
"""
:param request:
:return:
"""

if not request.user.is_authenticated():
return HttpResponseRedirect(reverse('index'))

errors = []
ifaces_all = []
compute = Compute.objects.get(id=compute_id)

try:
conn = wvmInterface(compute.hostname,
compute.login,
compute.password,
compute.type,
iface)
start_mode = conn.get_start_mode()
state = conn.is_active()
mac = conn.get_mac()
itype = conn.get_type()
ipv4 = conn.get_ipv4()
ipv4_type = conn.get_ipv4_type()
ipv6 = conn.get_ipv6()
ipv6_type = conn.get_ipv6_type()
bridge = conn.get_bridge()

if request.method == 'POST':
if 'stop' in request.POST:
conn.stop_iface()
return HttpResponseRedirect(request.get_full_path())
if 'start' in request.POST:
conn.start_iface()
return HttpResponseRedirect(request.get_full_path())
if 'delete' in request.POST:
conn.delete_iface()
return HttpResponseRedirect(reverse('interfaces', args=[host_id]))
conn.close()
except libvirtError as err:
errors.append(err)

return render(request, 'interface.html', locals())
43 changes: 43 additions & 0 deletions networks/forms.py
Original file line number Diff line number Diff line change
@@ -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
120 changes: 119 additions & 1 deletion networks/views.py
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit dd5f98c

Please sign in to comment.