programme:dhcpdnsadmin:dda_dict_class_20180531
- dda_dict_class.py
#!/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()
l_devices = devices.split()
l_macadr = macadr.split()
if len(l_macadr) > 0 and len(l_macadr) != len(l_devices):
raise OSError("Die Eingabelisten sind ungleich lang!")
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))
#
# 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)
#
# MAC-Adr finden
#
if len(l_macadr) == 0:
for vlandat in verzei:
vlan = VLAN(vlandat, l_devices)
# Lese die MAC Adresse aus der Datei falls diese die Devices aus der Eingabe enthält
l_macadr = vlan.read_vlan_mac(l_macadr)
if not l_macadr:
raise OSError("Zu diesen E-Nummer(n) wurde keine MAC-Adr. gefunden")
print(l_macadr)
#
# vlan Dateien einlesen
#
for vlandat in verzei:
vlan = VLAN(vlandat, l_devices)
d_vlan = vlan.read_vlan_make_dict()
print (vlandat)
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)
"""
if len(l_macadr) == 0:
print ("Zaehler für while-Schleife erstellen")
durchlaeufe = len(l_devices)
zaehler = 0
d_vlan_fkt = d_vlan.copy()
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]))
macadr = d_vlan_fkt.pop(l_devices[zaehler])
print(macadr)
zaehler += 1
except KeyError:
print("Das Device {} wurde nicht im {} gefunden ...".format(l_devices[zaehler], vlandat))
zaehler += 1
# Lese die MAC Adresse aus der Datei falls diese die Devices aus der Eingabe enthält
#print (d_vlan_fkt.pop(l_devices[zaehler]))
#macadr = d_vlan_fkt.pop(l_devices[zaehler])
#d_vlan_fkt.pop(l_devices[zaehler])
#print(macadr)
#print(l_macadr)
"""
programme/dhcpdnsadmin/dda_dict_class_20180531.txt · Zuletzt geändert: 2020/11/13 13:54 von pulsar