mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-12-26 00:43:46 +00:00
Ajoute la possibilité de créer une série de ports pour un switch.
This commit is contained in:
parent
f95f842e70
commit
ba61a74cac
5 changed files with 68 additions and 2 deletions
|
@ -33,7 +33,8 @@ NewSwitchForm)
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from machines.models import Interface
|
from machines.models import Interface
|
||||||
from django.forms import ModelForm
|
from django import forms
|
||||||
|
from django.forms import ModelForm, Form
|
||||||
from .models import Port, Switch, Room, Stack
|
from .models import Port, Switch, Room, Stack
|
||||||
|
|
||||||
|
|
||||||
|
@ -136,3 +137,12 @@ class EditRoomForm(ModelForm):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
prefix = kwargs.pop('prefix', self.Meta.model.__name__)
|
prefix = kwargs.pop('prefix', self.Meta.model.__name__)
|
||||||
super(EditRoomForm, self).__init__(*args, prefix=prefix, **kwargs)
|
super(EditRoomForm, self).__init__(*args, prefix=prefix, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class CreatePortsForm(Form):
|
||||||
|
"""Permet de créer une liste de ports pour un switch."""
|
||||||
|
begin = forms.IntegerField(label="Début :", min_value=0)
|
||||||
|
end = forms.IntegerField(label="Fin :", min_value=0)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -120,7 +120,6 @@ class Switch(models.Model):
|
||||||
raise ValidationError({'stack_member_id': "L'id dans la stack\
|
raise ValidationError({'stack_member_id': "L'id dans la stack\
|
||||||
ne peut être nul"})
|
ne peut être nul"})
|
||||||
|
|
||||||
|
|
||||||
class Port(models.Model):
|
class Port(models.Model):
|
||||||
""" Definition d'un port. Relié à un switch(foreign_key),
|
""" Definition d'un port. Relié à un switch(foreign_key),
|
||||||
un port peut etre relié de manière exclusive à :
|
un port peut etre relié de manière exclusive à :
|
||||||
|
|
|
@ -53,6 +53,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% if is_infra %}
|
{% if is_infra %}
|
||||||
{% include 'buttons/edit.html' with href='topologie:edit-switch' id=switch.pk %}
|
{% include 'buttons/edit.html' with href='topologie:edit-switch' id=switch.pk %}
|
||||||
{% include 'buttons/suppr.html' with href='machines:del-interface' id=switch.switch_interface.id %}
|
{% include 'buttons/suppr.html' with href='machines:del-interface' id=switch.switch_interface.id %}
|
||||||
|
{% include 'buttons/add.html' with href='topologie:create-ports' id=switch.pk desc='Création de ports'%}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
@ -35,6 +35,7 @@ from . import views
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^$', views.index, name='index'),
|
url(r'^$', views.index, name='index'),
|
||||||
url(r'^new_switch/$', views.new_switch, name='new-switch'),
|
url(r'^new_switch/$', views.new_switch, name='new-switch'),
|
||||||
|
url(r'^create_ports/(?P<switch_id>[0-9]+)$', views.create_ports, name='create-ports'),
|
||||||
url(r'^index_room/$', views.index_room, name='index-room'),
|
url(r'^index_room/$', views.index_room, name='index-room'),
|
||||||
url(r'^new_room/$', views.new_room, name='new-room'),
|
url(r'^new_room/$', views.new_room, name='new-room'),
|
||||||
url(r'^edit_room/(?P<room_id>[0-9]+)$', views.edit_room, name='edit-room'),
|
url(r'^edit_room/(?P<room_id>[0-9]+)$', views.edit_room, name='edit-room'),
|
||||||
|
|
|
@ -35,6 +35,8 @@ coté models et forms de topologie
|
||||||
"""
|
"""
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import itertools
|
||||||
|
|
||||||
from django.shortcuts import render, redirect
|
from django.shortcuts import render, redirect
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth.decorators import login_required, permission_required
|
from django.contrib.auth.decorators import login_required, permission_required
|
||||||
|
@ -48,6 +50,7 @@ from reversion.models import Version
|
||||||
from topologie.models import Switch, Port, Room, Stack
|
from topologie.models import Switch, Port, Room, Stack
|
||||||
from topologie.forms import EditPortForm, NewSwitchForm, EditSwitchForm
|
from topologie.forms import EditPortForm, NewSwitchForm, EditSwitchForm
|
||||||
from topologie.forms import AddPortForm, EditRoomForm, StackForm
|
from topologie.forms import AddPortForm, EditRoomForm, StackForm
|
||||||
|
from topologie.forms import CreatePortsForm
|
||||||
from users.views import form
|
from users.views import form
|
||||||
from re2o.utils import SortTable
|
from re2o.utils import SortTable
|
||||||
from machines.forms import DomainForm, NewMachineForm, EditMachineForm, EditInterfaceForm, AddInterfaceForm
|
from machines.forms import DomainForm, NewMachineForm, EditMachineForm, EditInterfaceForm, AddInterfaceForm
|
||||||
|
@ -409,6 +412,58 @@ def new_switch(request):
|
||||||
'i_mbf_param': i_mbf_param
|
'i_mbf_param': i_mbf_param
|
||||||
}, 'topologie/switch.html', request)
|
}, 'topologie/switch.html', request)
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
@permission_required('infra')
|
||||||
|
def create_ports(request, switch_id):
|
||||||
|
""" Création d'une liste de ports pour un switch."""
|
||||||
|
try:
|
||||||
|
switch = Switch.objects.get(pk=switch_id)
|
||||||
|
except Switch.DoesNotExist:
|
||||||
|
messages.error(request, u"Switch inexistant")
|
||||||
|
return redirect("/topologie/")
|
||||||
|
|
||||||
|
ports = switch.ports.order_by('port')
|
||||||
|
s_begin = s_end = 0
|
||||||
|
if len(ports) > 0:
|
||||||
|
s_begin = ports[0].port
|
||||||
|
s_end = ports[len(ports)-1].port
|
||||||
|
|
||||||
|
port_form = CreatePortsForm(
|
||||||
|
request.POST or None,
|
||||||
|
initial={'begin':s_begin,'end':s_end}
|
||||||
|
)
|
||||||
|
if port_form.is_valid():
|
||||||
|
begin = port_form.cleaned_data['begin']
|
||||||
|
end = port_form.cleaned_data['end']
|
||||||
|
b = []
|
||||||
|
e = []
|
||||||
|
if end < begin:
|
||||||
|
messages.error(request, "Port de fin inférieur au port de début !")
|
||||||
|
return redirect("/topologie/")
|
||||||
|
if end - begin > switch.number:
|
||||||
|
messages.error(request, "Ce switch ne peut avoir autant de ports.")
|
||||||
|
return redirect("/topologie/")
|
||||||
|
|
||||||
|
if begin < s_begin:
|
||||||
|
b = range(begin, s_begin)
|
||||||
|
if end > s_end:
|
||||||
|
e = range(s_end+1, end+1)
|
||||||
|
for i in itertools.chain(b,e):
|
||||||
|
p = Port()
|
||||||
|
p.switch = switch
|
||||||
|
p.port = i
|
||||||
|
try:
|
||||||
|
with transaction.atomic(), reversion.create_revision():
|
||||||
|
p.save()
|
||||||
|
reversion.set_user(request.user)
|
||||||
|
reversion.set_comment("Création")
|
||||||
|
messages.success(request, "Création du port %d" % i)
|
||||||
|
except IntegrityError:
|
||||||
|
messages.error(request, "Création d'un port existant.")
|
||||||
|
return redirect("/topologie/")
|
||||||
|
|
||||||
|
return form({'topoform': port_form,}, 'topologie/switch.html', request)
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@permission_required('infra')
|
@permission_required('infra')
|
||||||
|
|
Loading…
Reference in a new issue