#!/usr/bin/python3 ''' VLAN Klasse RH - Mo 28. Mai 09:50:05 CEST 2018 ''' class VLAN: ''' VLAN Klasse für Vlan-Dateien ''' def __init__(self, full_fn, l_devices): ''' Constructor ''' print(self.__class__.__name__) self._full_fn = full_fn self.l_devices = l_devices self._lines = [] #self.l_macadr = [] self.l_devices_vlandat = [] self.l_macadr_vlandat = [] self.l_ip_vlandat = [] def read_vlan_mac(self, l_macadr): """ Lese die MAC Adresse aus der Datei falls diese die Devices aus der Eingabe enthält """ print("read(): <-", self._full_fn) with open(self._full_fn) as f: #self._lines = f.readlines() # behält '\n' self._lines = f.read().splitlines() if not self._lines: raise OSError("'{}' ist leer!".format(self._full_fn) ) durchlaeufe = len(self.l_devices) zaehler = 0 while zaehler < durchlaeufe: dev = self.l_devices[zaehler] for line in self._lines: if line.startswith(dev): print("dev_name '{}' gefunden".format(self.l_devices)) print("Hole MAC-Adr. aus Line: '{}'".format(line)) l_line = line.split() l_macadr.append(l_line[1]) zaehler += 1 return l_macadr def read_vlan_make_dict(self): """ Lesefunktion für eine beliebige VLAN-Datei. Erzeugt ein Dict. aus VLAN-Dateien """ with open(self._full_fn, 'r') as vlandatei: for line in vlandatei: l_elems = line.split() self.l_devices_vlandat.append(l_elems[0]) self.l_macadr_vlandat.append(l_elems[1]) self.l_ip_vlandat.append(l_elems[2]) d_vlan = {} for dev, mac, ip in zip(self.l_devices_vlandat, self.l_macadr_vlandat, self.l_ip_vlandat ): d_vlan[dev] = [ mac, ip ] return d_vlan # # Fkt. Schreibe VLAN-Datei # def write_vlandat(self, d_vlan_fkt): ''' Schreibt die veränderten VLAN Dateien ''' with open(self._full_fn, 'w') as vlandatei: for k, v in d_vlan_fkt.items(): print ("{} {}".format(k, v)) l_data_write = [] l_data_write.append(k) l_data_write.extend(v) l_datadev_write = l_data_write[0] l_datamac_write = l_data_write[1] l_dataip_write = l_data_write[2] vlandatei.writelines("{} {} {}\n".format(l_datadev_write, l_datamac_write, l_dataip_write)) def remove_line_with_device(self, dev_name): for i, line in enumerate(self._lines): if line.startswith(dev_name): print("dev_name '{}' gefunden".format(dev_name)) print("entferne line: '{}'".format(line)) del self._lines[i] def print_lines(self): ''' Kontrolle: Ausgabe ''' for line in self._lines: print(line) if __name__ == "__main__": ''' zum TESTEN der Klasse ''' vlan_file = "/home/neutron/Dokumente/Projekte/vlan1234.in" devices = 'e1234 e1235 e1236' l_devices = devices.split() # Original: vlan = VLAN(vlan_file) vlan.read_vlan_mac() #vlan.print_lines() # Kontrolle #d_vlan = vlan.read_vlan_make_dict() #print(d_vlan) # Ändern: #vlan.remove_line_with_device(dev_name) #vlan.print_lines() # Kontrolle