/usr/src/openvswitch-1.4.0/ovsdb/ovsdb-dot.in is in openvswitch-datapath-dkms 1.4.0-1ubuntu1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | #! @PYTHON@
from datetime import date
import ovs.db.error
import ovs.db.schema
import getopt
import os
import re
import sys
argv0 = sys.argv[0]
def printEdge(tableName, type, baseType, label):
if baseType.ref_table_name:
if type.n_min == 0:
if type.n_max == 1:
arity = "?"
elif type.n_max == sys.maxint:
arity = "*"
else:
arity = "{,%d}" % type.n_max
elif type.n_min == 1:
if type.n_max == 1:
arity = ""
elif type.n_max == sys.maxint:
arity = "+"
else:
arity = "{1,%d}" % type.n_max
options = {}
options['label'] = '"%s%s"' % (label, arity)
if baseType.ref_type == 'weak':
options['constraint'] = 'false'
options['style'] = 'dotted'
print "\t%s -> %s [%s];" % (
tableName,
baseType.ref_table_name,
', '.join(['%s=%s' % (k,v) for k,v in options.items()]))
def schemaToDot(schemaFile):
schema = ovs.db.schema.DbSchema.from_json(ovs.json.from_file(schemaFile))
print "digraph %s {" % schema.name
print '\tsize="6.5,4";'
print '\tmargin="0";'
print "\tnode [shape=box];"
print "\tedge [dir=none, arrowhead=none, arrowtail=none];"
for tableName, table in schema.tables.iteritems():
options = {}
if table.is_root:
options['style'] = 'bold'
print "\t%s [%s];" % (
tableName,
', '.join(['%s=%s' % (k,v) for k,v in options.items()]))
for columnName, column in table.columns.iteritems():
if column.type.value:
printEdge(tableName, column.type, column.type.key, "%s key" % columnName)
printEdge(tableName, column.type, column.type.value, "%s value" % columnName)
else:
printEdge(tableName, column.type, column.type.key, columnName)
print "}";
def usage():
print """\
%(argv0)s: compiles ovsdb schemas to graphviz format
Prints a .dot file that "dot" can render to an entity-relationship diagram
usage: %(argv0)s [OPTIONS] SCHEMA
where SCHEMA is an OVSDB schema in JSON format
The following options are also available:
-h, --help display this help message
-V, --version display version information\
""" % {'argv0': argv0}
sys.exit(0)
if __name__ == "__main__":
try:
try:
options, args = getopt.gnu_getopt(sys.argv[1:], 'hV',
['help', 'version'])
except getopt.GetoptError, geo:
sys.stderr.write("%s: %s\n" % (argv0, geo.msg))
sys.exit(1)
for key, value in options:
if key in ['-h', '--help']:
usage()
elif key in ['-V', '--version']:
print "ovsdb-dot (Open vSwitch) @VERSION@"
else:
sys.exit(0)
if len(args) != 1:
sys.stderr.write("%s: exactly 1 non-option argument required "
"(use --help for help)\n" % argv0)
sys.exit(1)
schemaToDot(args[0])
except ovs.db.error.Error, e:
sys.stderr.write("%s: %s\n" % (argv0, e.msg))
sys.exit(1)
# Local variables:
# mode: python
# End:
|