def RequireUnicastRoutes(self, target, afi, vrf, title, wantroutes, debug=0): vrfstr = '' if vrf != '': vrfstr = 'vrf %s' % (vrf) if (afi != 'ipv4') and (afi != 'ipv6'): print "ERROR invalid afi" str = 'show bgp %s %s unicast json' % (vrfstr, afi) cmd = 'vtysh -c "%s"' % str ret = luCommand(target, cmd, '.*', 'None', 'Get %s %s RIB' % (vrfstr, afi)) if re.search(r'^\s*$', ret): # degenerate case: empty json means no routes if len(wantroutes) > 0: luResult(target, False, title) return luResult(target, True, title) rib = json.loads(ret) table = rib['routes'] for want in wantroutes: if not self.routes_include_wanted(table, want, debug): luResult(target, False, title) return luResult(target, True, title)
def RequireVpnRoutes(self, target, title, wantroutes, debug=0): import json logstr = "RequireVpnRoutes " + str(wantroutes) #non json form for humans luCommand(target, 'vtysh -c "show bgp ipv4 vpn"', '.', 'None', 'Get VPN RIB (non-json)') ret = luCommand(target, 'vtysh -c "show bgp ipv4 vpn json"', '.*', 'None', 'Get VPN RIB (json)') if re.search(r'^\s*$', ret): # degenerate case: empty json means no routes if len(wantroutes) > 0: luResult(target, False, title, logstr) return luResult(target, True, title, logstr) rib = json.loads(ret) rds = rib['routes']['routeDistinguishers'] for want in wantroutes: found = 0 if debug: print "want rd " + want['rd'] for rd in rds.iterkeys(): if rd != want['rd']: continue if debug: print "found rd " + rd table = rds[rd] if self.routes_include_wanted(table, want, debug): found = 1 break if not found: luResult(target, False, title, logstr) return luResult(target, True, title, logstr)
def RequireUnicastRoutes(self, target, afi, vrf, title, wantroutes, debug=0): logstr = "RequireVpnRoutes %s" % str(wantroutes) vrfstr = "" if vrf != "": vrfstr = "vrf %s" % (vrf) if (afi != "ipv4") and (afi != "ipv6"): self.log("ERROR invalid afi") cmdstr = "show bgp %s %s unicast" % (vrfstr, afi) # non json form for humans cmd = 'vtysh -c "%s"' % cmdstr luCommand(target, cmd, ".", "None", "Get %s %s RIB (non-json)" % (vrfstr, afi)) cmd = 'vtysh -c "%s json"' % cmdstr ret = luCommand(target, cmd, ".*", "None", "Get %s %s RIB (json)" % (vrfstr, afi)) if re.search(r"^\s*$", ret): # degenerate case: empty json means no routes if len(wantroutes) > 0: luResult(target, False, title, logstr) return luResult(target, True, title, logstr) rib = json.loads(ret) try: table = rib["routes"] # KeyError: 'routes' probably means missing/bad VRF except KeyError as err: if vrf != "": errstr = "-script ERROR: check if wrong vrf (%s)" % (vrf) else: errstr = "-script ERROR: check if vrf missing" luResult(target, False, title + errstr, logstr) return #if debug: # self.log("table=%s" % table) for want in wantroutes: if debug: self.log("want=%s" % want) if not self.routes_include_wanted(table, want, debug): luResult(target, False, title, logstr) return luResult(target, True, title, logstr)
def RequireUnicastRoutes(self,target,afi,vrf,title,wantroutes,debug=0): logstr = "RequireVpnRoutes " + str(wantroutes) vrfstr = '' if vrf != '': vrfstr = 'vrf %s' % (vrf) if (afi != 'ipv4') and (afi != 'ipv6'): print "ERROR invalid afi"; cmdstr = 'show bgp %s %s unicast' % (vrfstr, afi) #non json form for humans cmd = 'vtysh -c "%s"' % cmdstr luCommand(target,cmd,'.','None','Get %s %s RIB (non-json)' % (vrfstr, afi)) cmd = 'vtysh -c "%s json"' % cmdstr ret = luCommand(target,cmd,'.*','None','Get %s %s RIB (json)' % (vrfstr, afi)) if re.search(r'^\s*$', ret): # degenerate case: empty json means no routes if len(wantroutes) > 0: luResult(target, False, title, logstr) return luResult(target, True, title, logstr) rib = json.loads(ret) try: table = rib['routes'] # KeyError: 'routes' probably means missing/bad VRF except KeyError as err: if vrf != '': errstr = '-script ERROR: check if wrong vrf (%s)' % (vrf) else: errstr = '-script ERROR: check if vrf missing' luResult(target, False, title + errstr, logstr) return for want in wantroutes: if not self.routes_include_wanted(table,want,debug): luResult(target, False, title, logstr) return luResult(target, True, title, logstr)
def RequireVpnRoutes(self, target, title, wantroutes, debug=0): import json logstr = "RequireVpnRoutes " + str(wantroutes) # non json form for humans luCommand( target, 'vtysh -c "show bgp ipv4 vpn"', ".", "None", "Get VPN RIB (non-json)", ) ret = luCommand( target, 'vtysh -c "show bgp ipv4 vpn json"', ".*", "None", "Get VPN RIB (json)", ) if re.search(r"^\s*$", ret): # degenerate case: empty json means no routes if len(wantroutes) > 0: luResult(target, False, title, logstr) return luResult(target, True, title, logstr) rib = json.loads(ret) rds = rib["routes"]["routeDistinguishers"] for want in wantroutes: found = 0 if debug: self.log("want rd %s" % want["rd"]) for rd in rds.iterkeys(): if rd != want["rd"]: continue if debug: self.log("found rd %s" % rd) table = rds[rd] if self.routes_include_wanted(table, want, debug): found = 1 break if not found: luResult(target, False, title, logstr) return luResult(target, True, title, logstr)