commit c6158017a6a285de98723f4d42368b20b1c10206 Author: Eugene Agafonov Date: Fri Sep 30 00:48:22 2016 +0300 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fa66208 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/sandbox +/*.gv +/*.pdf diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..b7593f2 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "supermake"] + path = supermake + url = https://github.com/eagafonov/supermake diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..935c033 --- /dev/null +++ b/Makefile @@ -0,0 +1,4 @@ +all: + +include supermake/python-sandbox.mk + diff --git a/docker-net-graph.py b/docker-net-graph.py new file mode 100644 index 0000000..752765b --- /dev/null +++ b/docker-net-graph.py @@ -0,0 +1,77 @@ +from docker import Client + +import os +import pprint +import json + +from graphviz import Graph + +dot = Graph(comment='Docker Network Graph', + graph_attr=dict( rankdir="LR") + ) + +docker_client = Client(os.environ.get("DOCKER_HOST", "unix:///var/run/docker.sock")) + +#pprint.pprint(docker_client.networks()) +def dump_json(obj): + print json.dumps(obj, indent=4) + +for net in sorted(docker_client.networks()): + #print "Net" + net_name = net['Name'] + + #subnet = net['IPAM']['Config']['Subnet'] + + #dump_json(net) + + try: + gateway = net['IPAM']['Config'][0]['Gateway'] + except IndexError: + gateway = None + + try: + subnet = net['IPAM']['Config'][0]['Subnet'] + except IndexError: + subnet = None + + print "Network: %s %s gw:%s" % ( net_name, subnet,gateway) + + net_node_id = "net_%s" % (net_name,) + + net_label_html = '
'.join([s for s in ['net', net_name, subnet, gateway] if s != None]) + + dot.node(net_node_id, label="<%s>" % net_label_html, shape='note') + + + #pprint.pprint(net['Containers']) + + for container_id, container in sorted(net['Containers'].iteritems()): + print " * ", container['Name'], container['IPv4Address'], container['IPv6Address'] + + container_node_id = 'container_%s' % container_id + label_html = "container
%s" % container['Name'] + + dot.node(container_node_id, + label="<%s>" % label_html, + shape='component') + + + label_html = "%s
%s" % (container['IPv4Address'].split('/')[0], container['IPv6Address']) + + container_iface_id = "iface_%s" % container['IPv4Address'] + + dot.node(container_iface_id, + label="<%s>" % label_html, + shape='box') + + + + + dot.edge(container_node_id, container_iface_id) + dot.edge(container_iface_id, net_node_id) + + print + +print dot.source +dot.render('dng.gv') + diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 0000000..560d405 --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,2 @@ +docker-py +graphviz diff --git a/supermake b/supermake new file mode 160000 index 0000000..bfaf407 --- /dev/null +++ b/supermake @@ -0,0 +1 @@ +Subproject commit bfaf407946ae2a33e726b109cebf72d4e8de3215