#!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import print_function import xml.dom.minidom tmp_file = '/tmp/graph.gv' out = file(tmp_file,'w') from sh import neato from sh import date groups = xml.dom.minidom.parse(file('/var/lib/bcfg2/Metadata/groups.xml','r')).documentElement print("""digraph G { edge [len=4.50, ratio=fill] """, file=out) def childGroups(parent): return [ x for x in parent.childNodes if \ x.nodeType == x.ELEMENT_NODE and x.tagName == u'Group'] # Les clients print(""" subgraph cluster_1 { node [style=filled]; """, file=out) for elem in childGroups(groups): if elem.hasAttribute('profile'): print('"%s";' % elem.getAttribute('name'), file=out) print(""" label = "process #2"; color=blue } """, file=out) # Le reste for elem in childGroups(groups): print('"%s" -> {%s};' % \ ( elem.getAttribute('name'), " ".join( [ '"%s"' % x.getAttribute('name') for x in childGroups(elem) ]), ), file=out) print(""" label = "\\n\\nBCFG2 Groups\\nLes Nounous\\n%s"; }""" % str(date())[0:-1], file=out) out.close() neato("-Tsvg", tmp_file, "-o", "/usr/scripts/var/doc/bcfg2/groups.svg")