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()
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
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
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()
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