Beispiel #1
0
    def get_vlans(self):
        vlan_list = self.ssh.do("show vlan brief")

        vlans = {}
        for line in vlan_list:
            if regex.match('^(\d+)\s+(\S+).*', line):
                number, name = regex

                if name == ("VLAN{}".format(number)):
                    name = None

                vlans[number] = Vlan(int(number),
                                     name,
                                     icmp_redirects=True,
                                     arp_routing=True,
                                     ntp=True)

        for ip_interface_data in split_on_dedent(
                self.ssh.do("show ip interface")):
            if regex.match("^Vlan(\d+)\s.*", ip_interface_data[0]):
                current_vlan = vlans.get(regex[0])
                if current_vlan:
                    apply_interface_running_config_data(
                        current_vlan,
                        self.ssh.do(
                            "show running-config interface vlan {}".format(
                                current_vlan.number)))
        return vlans.values()
Beispiel #2
0
    def get_interfaces(self):
        interfaces = []
        vlans = []
        interfaces_vlans = []

        for if_data in split_on_dedent(self.shell.do("show interfaces")):
            i = parse_interface(if_data)
            if i:
                interfaces.append(i)

        for vlan_data in split_on_bang(self.shell.do("show running-config vlan")):
            vlans.append(parse_vlan_runningconfig(vlan_data))

        for interface in interfaces:
            interfaces_vlans.append(get_interface_vlans_association(interface, vlans))

        for interface_vlans in interfaces_vlans:
            set_vlans_properties(interface_vlans)
        return interfaces
Beispiel #3
0
    def get_interfaces(self):
        interfaces = []
        vlans = []
        interfaces_vlans = []

        for if_data in split_on_dedent(self.shell.do("show interfaces")):
            i = parse_interface(if_data)
            if i:
                interfaces.append(i)

        for vlan_data in split_on_bang(self.shell.do("show running-config vlan")):
            vlans.append(parse_vlan_runningconfig(vlan_data))

        for interface in interfaces:
            interfaces_vlans.append(get_interface_vlans_association(interface, vlans))

        for interface_vlans in interfaces_vlans:
            set_vlans_properties(interface_vlans)
        return interfaces
Beispiel #4
0
    def _apply_interface_vlan_data(self, vlans):
        config = self._fetch_interface_vlans_config(vlans)

        for interface in split_on_dedent(config):
            if regex.match("^.*Vlan(\d+)$", interface[0]):
                vlan = _find_vlan_by_number(vlans, regex[0])
                for line in interface[1:]:
                    if regex.match(" *ip helper-address (.*)", line):
                        try:
                            vlan.dhcp_relay_servers.append(IPAddress(regex[0]))
                        except AddrFormatError:
                            self.logger.warning(
                                'Unsupported IP Helper address found in Vlan {} : {}'.format(vlan.number, regex[0]))
                    if regex.match(" *ip virtual-router address (.*)", line):
                        vlan.varp_ips.append(IPNetwork(regex[0]))
                    if regex.match(" *load-interval (.*)", line):
                        vlan.load_interval = int(regex[0])
                    if regex.match(" *no mpls ip", line):
                        vlan.mpls_ip = False
Beispiel #5
0
    def get_vlans(self):
        vlan_list = self.ssh.do("show vlan brief")

        vlans = {}
        for line in vlan_list:
            if regex.match('^(\d+)\s+(\S+).*', line):
                number, name = regex

                if name == ("VLAN{}".format(number)):
                    name = None

                vlans[number] = Vlan(int(number), name, icmp_redirects=True)

        for ip_interface_data in split_on_dedent(self.ssh.do("show ip interface")):
            if regex.match("^Vlan(\d+)\s.*", ip_interface_data[0]):
                current_vlan = vlans.get(regex[0])
                if current_vlan:
                    apply_interface_running_config_data(
                        current_vlan,
                        self.ssh.do("show running-config interface vlan {}".format(current_vlan.number))
                    )
        return vlans.values()
Beispiel #6
0
    def get_interfaces(self):
        interfaces = []
        interface_vlans = {}
        for if_data in split_on_dedent(self.shell.do("show interfaces")):
            if regex.match("^\w*Ethernet([^\s]*) is (\w*).*", if_data[0]):
                i = Interface(name="ethernet {}".format(regex[0]), port_mode=ACCESS, shutdown=regex[1] == "disabled")
                for line in if_data:
                    if regex.match("Port name is (.*)", line): i.description = regex[0]
                interfaces.append(i)
                interface_vlans[i.name] = {
                    "object": i,
                    "untagged": None,
                    "tagged": []
                }

        for vlan_data in split_on_bang(self.shell.do("show running-config vlan")):
            if regex.match("^vlan (\d*)", vlan_data[0]):
                vlan_id = int(regex[0])
                for line in vlan_data:
                    if regex.match(" untagged (.*)", line):
                        for name in _to_real_names(parse_if_ranges(regex[0])):
                            interface_vlans[name]["untagged"] = vlan_id
                    if regex.match(" tagged (.*)", line):
                        for name in _to_real_names(parse_if_ranges(regex[0])):
                            interface_vlans[name]["tagged"].append(vlan_id)

        for data in interface_vlans.values():
            if data["untagged"] is not None and len(data["tagged"]) == 0:
                data["object"].access_vlan = data["untagged"]
            elif data["untagged"] is not None and len(data["tagged"]) > 0:
                data["object"].trunk_native_vlan = data["untagged"]

            if len(data["tagged"]) > 0:
                data["object"].port_mode = TRUNK
                data["object"].trunk_vlans = data["tagged"]

        return interfaces