Revision: 243
Author:
wat...@google.com
Date: Fri Jul 19 10:42:40 2013
Log: Adding Capirca 'grep' tool, cgrep.py, to the tools directory.
This is a simply util to allow grep'ing and diff'ing of network definitions.
Read the text at the top of the file for specifics and examples.
--
Tony
http://code.google.com/p/capirca/source/detail?r=243
Added:
/trunk/tools/cgrep.py
=======================================
--- /dev/null
+++ /trunk/tools/cgrep.py Fri Jul 19 10:42:40 2013
@@ -0,0 +1,80 @@
+#!/usr/bin/python
+#
+# Simply util to grep through network definitions.
+# Examples:
+# To find out which tokens contain "10.4.3.1" use
+# $ cgrep.py -i 10.4.3.1
+#
+# To find out if token 'FOO' includes ip "1.2.3.4" use
+# $ cgrep.py -t FOO -i 1.2.3.4
+#
+# To find the difference and union of tokens 'FOO' and 'BAR' use
+# $ cgrep.py -c FOO BAR
+#
+__author__ = "
wat...@google.com (Tony Watson)"
+
+import sys
+sys.path.append('../')
+from lib import naming
+from lib import nacaddr
+from optparse import OptionParser
+
+def main(argv):
+ parser = OptionParser()
+
+ parser.add_option("-d", "--def", dest="defs", action="store",
+ help="Network Definitions directory location",
+ default="../def")
+ parser.add_option("-i", "--ip", dest="ip", action="store",
+ help="Return list of defintions containing this IP. "
+ "Multiple IPs permitted.")
+
+ parser.add_option("-t", "--token", dest="token", action="store",
+ help="See if an IP is contained within this token."
+ "Must be used in conjunction with --ip [addr].")
+
+ parser.add_option("-c", "--cmp", dest="cmp", action="store_true",
+ help="Compare two network definition tokens")
+
+ (options, args) = parser.parse_args()
+
+ db = naming.Naming(options.defs)
+
+ if options.ip is not None and options.token is None:
+ for arg in sys.argv[2:]:
+ print "%s: " % arg
+ rval = db.GetIpParents(arg)
+ print rval
+
+ if options.token is not None and options.ip is None:
+ print "You must specify and IP Address with --ip [addr] to check."
+ sys.exit(0)
+
+ if options.token is not None and options.ip is not None:
+ token = options.token
+ ip = options.ip
+ rval = db.GetIpParents(ip)
+ if token in rval:
+ print '%s is in %s' % (ip, token)
+ else:
+ print '%s is not in %s' % (ip, token)
+
+ if options.cmp is not None:
+ t1 = argv[2]
+ t2 = argv[3]
+ d1 = db.GetNet(t1)
+ d2 = db.GetNet(t2)
+ union = list(set(d1 + d2))
+ print 'Union of %s and %s:\n %s\n' % (t1, t2, union)
+ print 'Diff of %s and %s:' % (t1, t2)
+ for el in set(d1 + d2):
+ el = nacaddr.IP(el)
+ if el in d1 and el in d2:
+ print ' %s' % el
+ elif el in d1:
+ print '+ %s' % el
+ elif el in d2:
+ print '- %s' % el
+
+if __name__ == '__main__':
+ main(sys.argv)