#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # dda_dict.py #import sys from glob import glob verzei = glob("vlans/*") # Fkt. definition def read_vlan_make_dict(vlandat): ''' Lesefunktion für eine beliebige VLAN-Datei. Erzeugt ein Dict. aus VLAN-Dateien ''' l_devices_vlandat = [] l_macadr_ip_vlandat = [] l_ip_vlandat = [] d_vlan = {} with open((vlandat), 'r') as vlandatei: for line in vlandatei: l_elems = line.split() l_devices_vlandat.append(l_elems[0]) l_macadr_ip_vlandat.append(l_elems[1]) l_ip_vlandat.append(l_elems[2]) #print (l_devices_vlandat) #print ((l_macadr_ip_vlandat), "\n\n") for dev, mac, ip in zip(l_devices_vlandat, l_macadr_ip_vlandat, l_ip_vlandat ): d_vlan[dev] = [ mac, ip ] return (d_vlan) # # Eingabe # print ("""\n\n Welche(r) Rechner/Drucker soll(en) modifiziert werden. Mehrere Rechner mit Leerzeichen trennen. \n\n """) devices = "e1111 e2222 e3333" macadr = "11:11:11 22:22:22 33:33:33" #devices = input("Eingabe der Geräte Namen: ").lower() #macadr = input("Optional Eingabe der MAC Adresse in der dazugehörigen Reihenfolge: ").upper() while True: try: vlan = input("Eingabe der VLAN Nr.: ") vlan = int(vlan) break except ValueError: print("Keine Nummer! Bitte nur Zahlen eingeben ...") l_devices = devices.split() l_macadr = macadr.split() #if len(l_devices) != len(l_macadr): # raise OSError("Die Eingabelisten sind ungleich lang!") #print (l_devices) #print (l_macadr) # # Erzeuge Dict. aus zwei Eingabe Listen # d_eingabe = {} for dev, mac in zip(l_devices, l_macadr): d_eingabe[dev] = [ mac, None ] # ip = None print (d_eingabe) # # IP generieren # def ipgen(vlan): """ IPs generieren für das jeweilige übergebene VLAN """ zaehler = 1 l_ipgen = [] while zaehler < 254: ip = "172.16.{[0]}.{}".format(str(vlan), zaehler) l_ipgen.append(ip) #print(ip) zaehler += 1 return (l_ipgen) # # vlan Dateien einlesen # d_vlan = None for vlandat in verzei: d_vlan = read_vlan_make_dict(vlandat) vlanname = "vlans/vlan{:04d}.in".format(vlan) if vlanname == vlandat: print ("Ja, es ist das dict. des gesuchten vlans") # # Im VLAN belegte IPs auflisten # macip_d_vlan = list(d_vlan.values()) l_ip_vlan = [] for ipx in macip_d_vlan: l_ip_vlan.append(ipx[1]) # Dict. Eingabe und VLAN zusammenführen d_vlan.update(d_eingabe) print (d_vlan) l_ipgen = ipgen(vlan) m_ipgen = set(l_ipgen) m_ipvlan = set(l_ip_vlan) # IPs filtern, von den generierte IPs 1-253 die IPs aus VLAN-Datei abziehen = noch freie IPs m_freeips = m_ipgen.difference(m_ipvlan) l_freeips = list(m_freeips) # # Daten zusammenfügen und ins Dict des gesuchten VLANs eintragen # print ("Zaehler für while-Schleife erstellen") durchlaeufe = len(l_devices) print (durchlaeufe) zaehler = 0 while zaehler < durchlaeufe: #eingabeliste = "d_vlan['{}'] = ['{}', '{}']\n".format(l_devices[zaehler], l_macadr[zaehler], l_freeips[zaehler]) #d_vlan['{}'] = ['{}', '{}'].format(l_devices[zaehler], l_macadr[zaehler], l_freeips[zaehler]) dev = l_devices[zaehler] mac = l_macadr[zaehler] freeip = l_freeips[zaehler] d_vlan[dev] = [mac, freeip] #print (eingabeliste) #eingabeliste #print (d_vlan)(eingabeliste) zaehler += 1 #for i, j, k in zip(l_devices, l_macadr, m_freeips): # eingabeliste = "{} {} {}\n".format(l_devices, l_macadr, m_freeips) #d_vlan['e1111'] = '00:00:00:00:00:00' #d_vlan['e3333'] = ['33:33:33', '172.16.3.71'] # key, value for k, v in d_vlan.items(): print ("{}: {}".format(k, v))