Browse Source

Fix communication with dhcp config

devel
bashmak 8 years ago
parent
commit
5999637dbd
  1. 51
      devapp/models.py
  2. 39
      devapp/onu_register.sh
  3. 1
      devapp/views.py
  4. 2
      group_app/forms.py
  5. 3
      group_app/locale/ru/LC_MESSAGES/django.po
  6. 20
      group_app/migrations/0002_group_code.py
  7. 1
      group_app/models.py
  8. 8
      group_app/templates/group_app/group_list.html

51
devapp/models.py

@ -1,3 +1,4 @@
import os
from django.db import models
from djing.fields import MACAddressField
from .base_intr import DevBase
@ -81,45 +82,19 @@ class Device(models.Model):
def __str__(self):
return "%s: (%s) %s %s" % (self.comment, self.get_devtype_display(), self.ip_address or '', self.mac_addr or '')
def update_dhcp(self):
def update_dhcp(self, remove=False):
if self.devtype not in ('On', 'Dl'):
return
# raise ProgrammingError('переделать это безобразие')
# FIXME: переделать это безобразие
grp = self.group.id
code = ''
if grp == 87:
code = 'chk'
elif grp == 85:
code = 'drf'
elif grp == 86:
code = 'eme'
elif grp == 84:
code = 'kunc'
elif grp == 47:
code = 'mtr'
elif grp == 60:
code = 'nvg'
elif grp == 65:
code = 'ohot'
elif grp == 89:
code = 'psh'
elif grp == 92:
code = 'str'
elif grp == 80 or grp == 94:
code = 'uy'
elif grp == 79 or grp == 91:
code = 'zrk'
elif grp == 95:
code = 'yst'
elif grp == 96:
code = 'lzk'
elif grp == 51:
code = 'sad'
elif grp == 46:
code = 'zhem'
if self.group is None:
raise DeviceDBException(_('Device does not have a group, please fix that'))
code = self.group.code
newmac = str(self.mac_addr)
run(["%s/devapp/onu_register.sh" % settings.BASE_DIR, newmac, code])
filepath = os.path.join(settings.BASE_DIR, 'devapp', 'onu_register.sh')
if remove:
param = 'del'
else:
param = 'update'
run([filepath, param, newmac, code])
class Port(models.Model):
@ -128,11 +103,11 @@ class Port(models.Model):
descr = models.CharField(_('Description'), max_length=60, null=True, blank=True)
def __str__(self):
return "%d: %s" % (int(self.num), self.descr)
return "%d: %s" % (self.num, self.descr)
class Meta:
db_table = 'dev_port'
unique_together = (('device', 'num'))
unique_together = (('device', 'num'),)
permissions = (
('can_toggle_ports', _('Can toggle ports')),
)

39
devapp/onu_register.sh

@ -1,9 +1,16 @@
#!/bin/bash
# Action
ACT=$1
if [[ ${ACT} == '' ]]; then
echo 'Need the action type parameter'
exit
fi
# old mac address
if [[ $1 =~ ^([0-9A-Fa-f]{1,2}[:-]){5}([0-9A-Fa-f]{1,2})$ ]]; then
MAC=$1
if [[ $2 =~ ^([0-9A-Fa-f]{1,2}[:-]){5}([0-9A-Fa-f]{1,2})$ ]]; then
MAC=$2
else
echo "Bad mac $MAC addr"
exit
@ -11,24 +18,38 @@ fi
# part code
if [[ $2 =~ ^[a-zA-Z]+$ ]]; then
PART_CODE=$2
if [[ $3 =~ ^[a-zA-Z]+$ ]]; then
PART_CODE=$3
else
echo 'code must contains only letters'
exit
fi
DHCP_PATH='/etc/dhcp/macs'
DHCP_MACS='./macs.conf'
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/bin
if grep "${MAC}" "${DHCP_PATH}/${PART_CODE}.conf" > /dev/null; then
# mac is already exists
# if just remove device
if [[ ${ACT} == 'del' ]]; then
sed -i "/${MAC}/d" ${DHCP_MACS}
exit
fi
# If exist mac with code
if grep "^subclass\ \"${PART_CODE}\" \"${MAC}\";$" "${DHCP_MACS}" > /dev/null; then
# mac is already exists, quit
exit
else
# If mac existing in another group
if grep "${MAC}" ${DHCP_MACS} > /dev/null; then
# remove it
sed -i "/${MAC}/d" ${DHCP_MACS}
fi
# add new mac
echo "subclass \"${PART_CODE}\" \"${MAC}\";" >> "${DHCP_PATH}/${PART_CODE}.conf"
echo "subclass \"${PART_CODE}\" \"${MAC}\";" >> ${DHCP_MACS}
sudo systemctl restart isc-dhcp-server.service
fi

1
devapp/views.py

@ -74,6 +74,7 @@ def devdel(request, device_id):
try:
dev = Device.objects.get(pk=device_id)
back_url = resolve_url('devapp:devs', group_id=dev.group.pk if dev.group else 0)
dev.update_dhcp(remove=True)
dev.delete()
return res_success(request, back_url)
except Device.DoesNotExist:

2
group_app/forms.py

@ -5,4 +5,4 @@ from . import models
class GroupForm(forms.ModelForm):
class Meta:
model = models.Group
fields = ['title']
fields = '__all__'

3
group_app/locale/ru/LC_MESSAGES/django.po

@ -73,3 +73,6 @@ msgstr "Исправьте ошибки формы"
#: group_app/views.py:47
msgid "New group are created"
msgstr "Новая группа успешно создана"
msgid "Tech code"
msgstr "Технический код"

20
group_app/migrations/0002_group_code.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2018-04-26 15:43
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('group_app', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='group',
name='code',
field=models.CharField(blank=True, max_length=12, verbose_name='Tech code'),
),
]

1
group_app/models.py

@ -5,6 +5,7 @@ from django.db import models
class Group(models.Model):
title = models.CharField(_('Title'), max_length=127, unique=True)
code = models.CharField(_('Tech code'), blank=True, max_length=12)
def get_absolute_url(self):
url = resolve_url('group_app:edit', self.pk)

8
group_app/templates/group_app/group_list.html

@ -29,8 +29,12 @@
{% for gr in groups %}
<tr>
<td>{{ gr.pk }}</td>
<td><a href="{% url 'group_app:edit' gr.pk %}" class="btn-modal">{{ gr.title }}</a></td>
<td class="btn-group">
<td>
<a href="{% url 'group_app:edit' gr.pk %}" class="btn-modal"{% if gr.code %} title="{{ gr.code }}"{% endif %}>
{{ gr.title }}
</a>
</td>
<td>
<a href="{% url 'group_app:edit' gr.pk %}" class="btn btn-sm btn-default btn-modal">
<span class="glyphicon glyphicon-cog"></span>
</a>

Loading…
Cancel
Save