Benutzer-Werkzeuge

Webseiten-Werkzeuge


programme:dhcpdnsadmin:dda_dict_class_20180529

Dies ist eine alte Version des Dokuments!


dda_dict_class
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
#  dda_dict.py
 
from VLAN import VLAN
from glob import glob
from os import path
 
verzei = glob("vlans/*")
 
 
 
#
# Eingabe
#
print ("""\n\n Welche(r) Rechner/Drucker soll(en) modifiziert werden.
Mehrere Rechner mit Leerzeichen trennen. \n\n """)
 
devices = "e4001 e4002 e4003"
macadr = "11:11:11 22:22:22 33:33:33"
#macadr = ""
#devices = input("Eingabe der Geräte Namen: ").lower()
#macadr = input("Optional Eingabe der MAC Adresse in der dazugehörigen Reihenfolge: ").upper()
 
while True:
    vlanid = input("Eingabe der VLAN Nr.: ")
    try:
        i_vlanid = int(vlanid)
    except ValueError:
        print("Keine Nummer! Bitte nur Zahlen eingeben ...")
    # Alles in Ordnung:
    else:
        vlanid = "{:04d}".format(i_vlanid)    # Eingabe: 200 -> 0200
        break
 
 
# Gleich testen, ob Datei existiert:
vlanname = "vlans/vlan{}.in".format(vlanid)
if not path.exists(vlanname):
    raise FileNotFoundError("VLAN-Datei '{}' wurde nicht gefunden!".format(vlanname))
 
 
 
#
# Erzeuge Dict. aus zwei Eingabe Listen
#
l_devices = devices.split()
l_macadr = macadr.split()
d_eingabe = {}
 
for dev, mac in zip(l_devices, l_macadr):
    d_eingabe[dev] = [ mac,  None ]    # ip = None
 
print (d_eingabe)
 
#if len(l_devices) != len(l_macadr):
#   raise OSError("Die Eingabelisten sind ungleich lang!")
 
 
 
#
# Fkt. IP generieren
#
def ipgen(vlanid):
    """ IPs generieren für die jeweilige übergebene VLAN ID """
    l_ipgen = []
 
    # "0200" -> 200
    s_vlanid = str(int(vlanid))
 
    if len(s_vlanid) > 3:    # wenn 1400 -> 14
        s_vlanid = s_vlanid[:2]
    else:
        s_vlanid = s_vlanid[0]
 
    for zaehler in range(1, 254):
        ip = "172.16.{}.{}".format(s_vlanid, zaehler)
        l_ipgen.append(ip)
 
    return (l_ipgen)
 
 
 
#
# vlan Dateien einlesen
#
 
for vlandat in verzei:
    vlan = VLAN(vlandat)
    d_vlan = vlan.read_vlan_make_dict()
    print (vlandat)
 
    if len(l_macadr) != len(l_devices):  # oder wenn len_macadr = 0?
        print ("Zaehler für while-Schleife erstellen")
        durchlaeufe = len(l_devices)
        zaehler = 0
        d_vlan_fkt = d_vlan.copy()
        while zaehler < durchlaeufe:
            # Lese die MAC Adresse aus der Datei falls diese die Devices aus der Eingabe enthält
            l_macadr.append(d_vlan_fkt.pop(l_devices[zaehler]))
 
 
    if vlanname == vlandat:
        #
        # Das VLAN dem die Eingabe hinzugefügt wird
        #
        print ("Die Eingabe wird dem Ziel-Vlan hinzugefügt")
 
        # Im VLAN belegte IPs auflisten
        l_ip_vlan = []
        macip_d_vlan = list(d_vlan.values())
        for ipx in macip_d_vlan:
            l_ip_vlan.append(ipx[1])
 
        l_ipgen = ipgen(vlanid)
 
        # IPs filtern, von den generierte IPs 1-253 die IPs aus VLAN-Datei abziehen = noch freie IPs
        m_ipgen = set(l_ipgen)
        m_ipvlan = set(l_ip_vlan)
        m_freeips = m_ipgen.difference(m_ipvlan)
        l_freeips = list(m_freeips)
 
        #
        # Daten zusammenfügen und ins Dict des gesuchten VLANs eintragen
        #
        d_vlan_fkt = d_vlan.copy()
        print ("Zaehler für while-Schleife erstellen")
        durchlaeufe = len(l_devices)
        zaehler = 0
        while zaehler < durchlaeufe:
            dev = l_devices[zaehler]
            mac = l_macadr[zaehler]
            freeip = l_freeips[zaehler]
            d_vlan_fkt[dev] = [mac, freeip]
            zaehler += 1
 
        #
        # Schreibe Ziel VLAN-Datei
        #
        vlan.write_vlandat(d_vlan_fkt)
 
    else:
        #
        # Die restlichen VLANs aus denen die Eingabe abgezogen wird
        #
        d_vlan_fkt = d_vlan.copy()
        durchlaeufe = len(l_devices)
        print ("Anzahl Schleifen durchläufe", (durchlaeufe))
        zaehler = 0
        while zaehler < durchlaeufe:
                try:
                    # Lese die MAC Adresse aus der Datei falls diese die Devices aus der Eingabe enthält
                    print (d_vlan_fkt.pop(l_devices[zaehler]))
                    zaehler += 1
                except KeyError:
                    print("Das Device {} wurde nicht im {} gefunden ...".format(l_devices[zaehler], vlandat))
                    zaehler += 1
 
        if d_vlan_fkt != d_vlan:
            #
            # Schreibe VLAN Datei für die restlichen VLANs
            #
            vlan.write_vlandat(d_vlan_fkt)
programme/dhcpdnsadmin/dda_dict_class_20180529.1605271648.txt.gz · Zuletzt geändert: 2020/11/13 13:47 von pulsar