Benutzer-Werkzeuge

Webseiten-Werkzeuge


programme:dhcpdnsadmin:vlan_20180604

vlan_20180604

VLAN.py
#!/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, t_devices):
        '''
        Constructor
        '''
        print(self.__class__.__name__)
 
        self._full_fn = full_fn
        self.l_devices = t_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 read(self):
        print("read(): <-", self._full_fn)
 
        with open(self._full_fn) as file:
            #self._lines = file.readlines()    # behält '\n'
            self._lines = file.readlines()
 
        if not self._lines:
            raise OSError("'{}' ist leer!".format(self._full_fn))
 
 
    def remove_line_with_device(self):
        # for i, line in zip(range(0, len(self.l_devices)), self._lines):
         #   print (self.l_devices[i])
         #   print("entferne line: '{}'".format(line))
        #print (self._lines)
 
        vlandatei = open(self._full_fn,"w")
        for line in self._lines:
            if not line.startswith(self.l_devices):
                vlandatei.write(line)
                print(line)
        vlandatei.close()
 
 
    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
programme/dhcpdnsadmin/vlan_20180604.txt · Zuletzt geändert: 2020/11/13 13:54 von pulsar