Changeset 8268 in genesis


Ignore:
Timestamp:
Aug 8, 2010, 3:24:13 PM (14 years ago)
Author:
rick
Message:

Whole bunch of tools around the YAML config files for easy editing, formatting and syntax checking

Location:
nodes
Files:
2 added
2 edited

Legend:

Unmodified
Added
Removed
  • nodes/generate-config.py

    • Property svn:keywords set to Id
    r8230 r8268  
    3434# Configuratie gegenereerd met configurator versie %(version)s
    3535#
    36 $location="Locatie XXX, Straat XXX, XXXX XX, Leiden";
    37 $master_ip='%(master_ip)s'; 
    38 $nodetype='CNode';
    39 $nodename='%(nodename)s';
    40 $status='up';
    41 $release="8.0-RELEASE";
    42 $X='XXXXX';
    43 $Y='XXXXXX';
    44 $LON='4.XXX';
    45 $LAT='52.XXX';
     36location : "Locatie XXX, Straat XXX, XXXX XX, Leiden"
     37master_ip: '%(master_ip)s' 
     38nodetype: 'CNode'
     39nodename: '%(nodename)s'
     40status: 'up'
     41release: "8.0-RELEASE"
     42rndap_x: 'XXXXX'
     43rNdap_y: 'XXXXXX'
     44lon: '4.XXX'
     45lat: '52.XXX'
    4646""" % variables
    4747
    4848# Accesspoint
    4949print """
    50 $config{'ath0'}=sprintf <<ATH0;  # Access point Buurt
    51 TYPE=wireless
    52 IP=%(master_ip)s/26
    53 DESC=AP
    54 SDESC=ap
    55 DHCP=10-60
    56 MODE=master
    57 ESSID=ap-WirelessLeiden-%(nodename)s
    58 CHANNEL=8
    59 ATH0
     50iface_ath0:
     51  type: wireless
     52  ip: %(master_ip)s/26
     53  desc: ap
     54  sdesc: ap
     55  dhcp: 10-60
     56  mode: master
     57  essid: ap-WirelessLeiden-%(nodename)s
     58  channel: 8
    6059""" % variables
    6160
     
    6362for index, ifname in enumerate(interfaces):
    6463    print """
    65 $config{'%(ifname)s'}=sprintf <<%(ifname_caps)s;  # Link naar XXX
    66 TYPE=ethernet
    67 EXTRA_TYPE=eth2wifibridge
    68 IP=%(ip)s/29
    69 DESC=Link naar XXX
    70 SDESC=2xxx-%(ifname)s
    71 #MODE=XXX
    72 #ESSID=XX-XX.%(nodename_lower)s.wleiden.net
    73 #CHANNEL=XX
    74 #NSMAC=
    75 #NS_IP=%(ns_ip)s/29
    76 DHCP=no
    77 %(ifname_caps)s
     64iface_%(ifname)s:
     65  comment: Link naar XXX
     66  type: ethernet
     67  extra_type: eth2wifibridge
     68  ip: %(ip)s/29
     69  desc: Link naar XXX
     70  sdesc: 2xxx-%(ifname)s
     71  mode: XXX
     72  essid: XX-XX.%(nodename_lower)s.wleiden.net
     73  channel: XX
     74  nsmac:
     75  ns_ip: %(ns_ip)s/29
     76  dhcp: no
    7877""" % { 'nodename_lower' : nodename.lower(),
    7978        'ifname' : ifname,
  • nodes/make-network-graph.py

    • Property svn:keywords set to Id
    r8240 r8268  
    11#!/usr/bin/env python
    2 # zoek de eerste vrije (== niet in een wleiden.conf gedefinieerde) interlink
    3 # range
    4 # lodewijk@wirelessleiden.nl
     2# vim:ts=2:et:sw=2:ai
     3#
     4# Build topological network graph
     5# Rick van der Zwet <info@rickvanderzwet.nl>
    56import re
    67import sys
    78import glob
    8 import getrange
    99import tempfile
    1010import subprocess
     11import gformat
    1112
    1213OUTFILE = 'network.png'
    1314
    1415def make_graph():
    15         substre = re.compile("^(\$[a-zA-Z][^ =]*) ?= ?'([^']*)';")
    16        
    17        
    18         poel = {}
    19        
    20         #XXX: Make parsing global, merge with getrange.get_ranges if possible
    21         for fname in glob.glob("*/wleiden.conf"):
    22                 substs = {}
    23                 lineNr = 0
    24                 for l in open(fname):
    25                         lineNr += 1
    26                         l = l[:-1]
    27                         match = substre.match(l)
    28                         if match != None:
    29                                 substs[match.group(1)] = match.group(2)
    30                         if l.startswith("IP="):
    31                                 right = l[3:]
    32                                 if '/' not in right:
    33                                         addr = right
    34                                         mask = 32
    35                                 else:
    36                                         addr, mask = right.split('/')
    37                                         if addr in substs:
    38                                                 addr = substs[addr]
    39                                 try:
    40                                         addr = getrange.parseaddr(addr)
    41                                         mask = int(mask)
    42                                         addr = addr & ~((1 << (32 - mask)) - 1)
    43                                         cname = fname.split('/')[0]
    44                                         if poel.has_key(addr):
    45                                                 poel[addr] += [cname]
    46                                         else:
    47                                                 poel[addr] = [cname]
    48                                 except ValueError, e:
    49                                         print "[FOUT] in bestand '%s' regel '%i': %s" % (fname, lineNr, l)
     16  poel = {}
     17  link_type = {}
     18  try:
     19    for host in gformat.get_proxylist() + gformat.get_nodelist():
     20      print "## Processing host", host
     21      datadump = gformat.get_yaml(host)
     22      iface_keys = [elem for elem in datadump.keys() if (elem.startswith('iface_') and not "lo0" in elem)]
     23      for iface_key in iface_keys:
     24        l = datadump[iface_key]['ip']
     25        addr, mask = l.split('/')
    5026
    51         f = tempfile.NamedTemporaryFile(bufsize=0)
    52         sys.stderr.write("# Building temponary graph file\n")
    53         print >> f, "Graph WirelessLeidenNetwork {"
    54         print >> f ,"""
     27        addr = gformat.parseaddr(addr)
     28        mask = int(mask)
     29        addr = addr & ~((1 << (32 - mask)) - 1)
     30        if poel.has_key(addr):
     31          poel[addr] += [host]
     32        else:
     33          poel[addr] = [host]
     34          # Assume all eth2wifibridge to be 11a for a moment
     35          if datadump[iface_key].has_key('eth2wifibridge'):
     36            link_type[addr] = '11a'
     37          else:
     38            link_type[addr] = datadump[iface_key]['type']
     39          print "### %s [%s] is of type %s" % (gformat.showaddr(addr), iface_key, link_type[addr])
     40  except (KeyError, ValueError), e:
     41    print "[FOUT] in '%s' interface '%s'" % (host,iface_key)
     42    print e
     43    sys.exit(1)
     44
     45  f = tempfile.NamedTemporaryFile(bufsize=0)
     46  sys.stderr.write("# Building temponary graph file\n")
     47  print >> f, "Graph WirelessLeidenNetwork {"
     48  print >> f ,"""
    5549graph [ fontsize = 36,
    5650        overlap = scalexy,
     
    5852      ]
    5953"""
    60         for addr,leden in poel.iteritems():
    61                 leden = sorted(set(leden))
    62                 for index,lid in enumerate(leden[:-1]):
    63                         for buur in leden[index + 1:]:
    64                                 print >> f,'  %s -- %s [label="%s"]' % (lid, buur, getrange.showaddr(addr))
    65         print >> f, "}"
    66         sys.stderr.write("# Plotting temponary graph file using graphviz\n")
    67         retval = subprocess.call(["neato","-Tpng",f.name, "-o", OUTFILE])
    68         if retval != 0:
    69                 sys.stderr.write("# FAILED [%i]\n" % retval)
    70                 subprocess.call(["cat",f.name])
    71                 exit(1)
    72         sys.stderr.write("# COMPLETED find your output in %s\n" % OUTFILE)
     54  for addr,leden in poel.iteritems():
     55    if link_type[addr] == '11a':
     56      color = 'red'
     57      weight = 4
     58    elif link_type[addr] == 'eth':
     59      color = 'blue'
     60      weight = 8
     61    else:
     62      color = 'black'
     63      weight = 1
     64    leden = sorted(set(leden))
     65    for index,lid in enumerate(leden[:-1]):
     66      for buur in leden[index + 1:]:
     67        print >> f,'  %s -- %s [label="%s", color="%s", weight="%s"]' % (lid, buur, gformat.showaddr(addr), color, weight)
     68  print >> f, "}"
     69  sys.stderr.write("# Plotting temponary graph file using graphviz\n")
     70  retval = subprocess.call(["neato","-Tpng",f.name, "-o", OUTFILE])
     71  if retval != 0:
     72    sys.stderr.write("# FAILED [%i]\n" % retval)
     73    subprocess.call(["cat",f.name])
     74    exit(1)
     75  sys.stderr.write("# COMPLETED find your output in %s\n" % OUTFILE)
    7376   
    7477
    7578if __name__ == "__main__":
    76         make_graph()
     79  make_graph()
    7780
Note: See TracChangeset for help on using the changeset viewer.