Commit 9d3faa7b authored by Gabriel Detraz's avatar Gabriel Detraz

Merge branch 'unifi_ap_names' into 'master'

Unifi ap names

See merge request nounous/re2o!14
parents 835525a8 2d3391b9
......@@ -45,6 +45,9 @@ urlpatterns = [
url(r'^dns/srv/$', views.dns_srv),
url(r'^dns/zones/$', views.dns_zones),
# Unifi controler AP names
url(r'^unifi/ap_names/$', views.accesspoint_ip_dns),
# Firewall
url(r'^firewall/ouverture_ports/$', views.firewall_ouverture_ports),
......@@ -163,6 +163,36 @@ def dns_alias(request):
return JSONSuccess(
def accesspoint_ip_dns(request):
"""The list of all active interfaces with all the associated infos
(MAC, IP, IpType, DNS name and associated zone extension)
Only display access points. Use to gen unifi controler names
A JSON Success response with a field `data` containing:
* a list of dictionnaries (one for each interface) containing:
* a field `ipv4` containing:
* a field `ipv4`: the ip for this interface
* a field `ip_type`: the name of the IpType of this interface
* a field `ipv6` containing `null` if ipv6 is deactivated else:
* a field `ipv6`: the ip for this interface
* a field `ip_type`: the name of the IpType of this interface
* a field `mac_address`: the MAC of this interface
* a field `domain`: the DNS name for this interface
* a field `extension`: the extension for the DNS zone of this interface
interfaces = all_active_assigned_interfaces(full=True)\
seria = FullInterfaceSerializer(interfaces, many=True)
return JSONSuccess(
# ⁻*- mode: python; coding: utf-8 -*-
# Re2o est un logiciel d'administration développé initiallement au rezometz. Il
# se veut agnostique au réseau considéré, de manière à être installable en
# quelques clics.
# Copyright © 2018 Gabriel Detraz
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
from import BaseCommand, CommandError
from pymongo import MongoClient
from topologie.models import Borne
class Command(BaseCommand):
help = 'Ce script donne un nom aux bornes dans le controleur unifi.
A lancer sur le serveur en local où se trouve le controleur'
def handle(self, *args, **options):
# Connexion mongodb
client = MongoClient("mongodb://localhost:27117")
db = client.ace
device = db['device']
bornes = Borne.objects.all()
def set_bornes_names(liste_bornes):
"""Met à jour les noms des bornes dans la bdd du controleur"""
for borne in liste_bornes:
if borne.ipv4 and borne.domain:
device.find_one_and_update({'ip': str(borne.ipv4)}, {'$set': {'name': str(}})
self.stdout.write('Mise à jour de la base de donnée unifi avec succès'))
......@@ -40,7 +40,7 @@ from __future__ import unicode_literals
import itertools
from django.db import models
from django.db.models.signals import post_delete
from django.db.models.signals import post_save, post_delete
from django.dispatch import receiver
from django.core.exceptions import ValidationError
from django.db import IntegrityError
......@@ -538,6 +538,18 @@ class Room(models.Model):
@receiver(post_save, sender=AccessPoint)
def ap_post_save(sender, **kwargs):
"""Regeneration des noms des bornes vers le controleur"""
@receiver(post_delete, sender=AccessPoint)
def ap_post_delete(sender, **kwargs):
"""Regeneration des noms des bornes vers le controleur"""
@receiver(post_delete, sender=Stack)
def stack_post_delete(sender, **kwargs):
"""Vide les id des switches membres d'une stack supprimée"""
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment