Index: /dns/staticDNS.yaml
===================================================================
--- /dns/staticDNS.yaml	(revision 10638)
+++ /dns/staticDNS.yaml	(revision 10642)
@@ -1,142 +1,145 @@
-Various:
-  RV : CNodeRV
-  RijnVliet : CNodeRV
-  RijnenVliet : CNodeRV
-  rustenborg : CNodeRustenborch
-  strkvrw : CNodeLMStruykVerwo1
-  roomburgh : CNodeRoomburgh1
+--- # Static DNS Entries
+# Various
+- RV : CNodeRV
+- RijnVliet : CNodeRV
+- RijnenVliet : CNodeRV
+- rustenborg : CNodeRustenborch
+- strkvrw : CNodeLMStruykVerwo1
+- roomburgh : CNodeRoomburgh1
 
-vosko:
-  apkerk1.CNodeVosko : 172.17.176.8
-  apkerk2.CNodeVosko : 172.17.176.9
+# vosko
+- apkerk1.CNodeVosko : 172.17.176.8
+- apkerk2.CNodeVosko : 172.17.176.9
 
-lijtweg:
-  bbLijtweg1 : CNodeLijtweg1
-  bbLijtweg2 : CNodeLijtweg2
-  lijtweg : CNodeLijtweg1
+# lijtweg
+- bbLijtweg1 : CNodeLijtweg1
+- bbLijtweg2 : CNodeLijtweg2
+- lijtweg : CNodeLijtweg1
 
-cetim:
-  apkerk.CNodeCeTIM : 172.17.143.9
-  hk : CNodeCeTIM1
-  hk1 : CNodeCeTIM1
-  hk2 : CNodeCeTIM2
-  hlk : CNodeCeTIM1
-  hlk1 : CNodeCeTIM1
-  hlk2 : CNodeCeTIM2
-  cetim : CNodeCeTIM1
+# cetim:
+- apkerk.CNodeCeTIM : 172.17.143.9
+- hk : CNodeCeTIM1
+- hk1 : CNodeCeTIM1
+- hk2 : CNodeCeTIM2
+- hlk : CNodeCeTIM1
+- hlk1 : CNodeCeTIM1
+- hlk2 : CNodeCeTIM2
+- cetim : CNodeCeTIM1
 
-proxy servers:
-  proxy : 172.31.255.1
-  welcome : 172.31.255.1
-  proxy.CNodeCeTIM : 172.17.143.254
-  proxy1 : 172.17.8.68
-  proxy2 : 172.17.143.4
-  proxy3 : 172.20.128.98
-  proxy4 : 172.16.2.254
-  proxy5 : 172.19.168.66
-  proxy40 : 172.20.136.19
+# proxy servers:
+- proxy : 172.31.255.1
+- welcome : 172.31.255.1
+- proxy.CNodeCeTIM : 172.17.143.254
+- proxy1 : 172.17.8.68
+- proxy2 : 172.17.143.4
+- proxy3 : 172.20.128.98
+- proxy4 : 172.16.2.254
+- proxy5 : 172.19.168.66
+- proxy40 : 172.20.136.19
 
 
-Diensten op het netwerk gehost op prive servers:
-  forum : 172.20.128.18
-  zeehos1.CNodeMeca : 172.26.0.8
-  zeehos1 : zeehos1.CNodeMeca
-  zeehos2.CNodeMeca : 172.26.0.9
-  zeehos2 : zeehos2.CNodeMeca
+# Diensten op het netwerk gehost op prive servers:
+- forum : 172.20.128.18
+- zeehos1.CNodeMeca : 172.26.0.8
+- zeehos1 : zeehos1.CNodeMeca
+- zeehos2.CNodeMeca : 172.26.0.9
+- zeehos2 : zeehos2.CNodeMeca
 
-dirkx:
-  boem.CNodeRund : 172.17.160.3
-  foem.CNodeRund : 172.17.160.2
-  gw.CNodeRund : 172.17.160.6
+# dirkx:
+- boem.CNodeRund : 172.17.160.3
+- foem.CNodeRund : 172.17.160.2
+- gw.CNodeRund : 172.17.160.6
 
-lvp:
-  lvp : 172.17.136.2
-  audiobro : 172.19.136.2
+# lvp:
+-  lvp : 172.17.136.2
+-  audiobro : 172.19.136.2
 
-rudi/xlexit:
-  rudi-gw.CNodeRudi : 172.23.0.70
-  xlexit-gw.CNodeRudi : 172.23.0.69
-  xlexit : xlexit-gw.CNodeRudi
-  xlexit2.CNodeRudi : 172.23.0.66
+# rudi/xlexit:
+- rudi-gw.CNodeRudi : 172.23.0.70
+- xlexit-gw.CNodeRudi : 172.23.0.69
+- xlexit : xlexit-gw.CNodeRudi
+- xlexit2.CNodeRudi : 172.23.0.66
 
 
-jasper:
-  smc.CNodeJasper : 172.18.8.67
-  tango.CNodeJasper : 172.18.8.66
-  tango : tango.CNodeJasper
+# jasper:
+- smc.CNodeJasper : 172.18.8.67
+- tango.CNodeJasper : 172.18.8.66
+- tango : tango.CNodeJasper
 
-cope:
-  server.CNodeCope : 172.17.8.67
-  vpn-cope : server.CNodeCope
+# cope:
+- server.CNodeCope : 172.17.8.67
+- vpn-cope : server.CNodeCope
 
+# vpn servers:
+- vpn.CNodeLvLn : 172.17.144.66
+- vpn.CNodeLvLz : 172.17.40.66
+- vpn.CNodeOBLc : 172.17.152.67
 
-vpn servers:
-  vpn.CNodeLvLn : 172.17.144.66
-  vpn.CNodeLvLz : 172.17.40.66
-  vpn.CNodeOBLc : 172.17.152.67
+# DHCP static addressen + vrijwilligers verwijzingen:
+- kovijn : 172.17.8.5
+- Johan : Johan.CNodeGandalf
+- Johan.CNodeGandalf : 172.25.128.2
+- eddy : 172.16.2.114
+- hiephoi1.CNodeAJSoft : 172.20.136.7
+- hiephoi1 : hiephoi1.CNodeAJSoft
+- hiephoi2.CNodeAJSoft : 172.20.136.8
+- hiephoi2 : hiephoi2.CNodeAJSoft
+- hiephoi3.CNodeAJSoft : 172.20.136.9
+- hiephoi3 : hiephoi3.CNodeAJSoft
+- jeroen.CNodeVeldbies : 172.25.0.18
+- jeroen : jeroen.CNodeVeldbies
+- kok.CNodeCope : 172.17.8.6
+- kok : kok.CNodeCope
+- lodewijk : 172.17.136.9
+- marcel.CNodeROCl : 172.21.0.5
+- marcel : marcel.CNodeROCl
+- mostaza.CNodeROCl : 172.21.0.6
+- mostaza : mostaza.CNodeROCl
+- timbolino.CNodeAZC : 172.19.144.5
+- timbolino : timbolino.CNodeAZC
+- trracer.CNodeJorg : 172.20.0.67
+- trracer : trracer.CNodeJorg
+- buffy: 172.17.143.6
+- factory : 172.19.128.69
+- www2 : 172.16.4.46
 
-DHCP static addressen + vrijwilligers verwijzingen:
-  kovijn : 172.17.8.5
+# Prive Servers:
+- buzz.CNodeZwet: 172.27.129.66
+- buzz: buzz.CNodeZwet
+- smarthost: buzz
   
-  Johan : Johan.CNodeGandalf
-  Johan.CNodeGandalf : 172.25.128.2
-  eddy : 172.16.2.114
-  hiephoi1.CNodeAJSoft : 172.20.136.7
-  hiephoi1 : hiephoi1.CNodeAJSoft
-  hiephoi2.CNodeAJSoft : 172.20.136.8
-  hiephoi2 : hiephoi2.CNodeAJSoft
-  hiephoi3.CNodeAJSoft : 172.20.136.9
-  hiephoi3 : hiephoi3.CNodeAJSoft
-  jeroen.CNodeVeldbies : 172.25.0.18
-  jeroen : jeroen.CNodeVeldbies
-  kok.CNodeCope : 172.17.8.6
-  kok : kok.CNodeCope
-  lodewijk : 172.17.136.9
-  marcel.CNodeROCl : 172.21.0.5
-  marcel : marcel.CNodeROCl
-  mostaza.CNodeROCl : 172.21.0.6
-  mostaza : mostaza.CNodeROCl
-  timbolino.CNodeAZC : 172.19.144.5
-  timbolino : timbolino.CNodeAZC
-  trracer.CNodeJorg : 172.20.0.67
-  trracer : trracer.CNodeJorg
-  buffy: 172.17.143.6
-  factory : 172.19.128.69
-  www2 : 172.16.4.46
+# WL Servers:
+- sunfire: 172.19.128.68
+- sunny : 172.16.4.46
+- dyndns : 172.16.4.46
+- wlconfig : sunny
+- loghost : 172.16.4.46
 
-Prive Servers:
-  buzz.CNodeZwet: 172.27.129.66
-  buzz: buzz.CNodeZwet
-  smarthost: buzz
-  
+# Overige:
+- aa-design : aa-design.CNodeCope
+- aa-design.CNodeCope : 172.17.8.7
+- binnen.CNodeBurcht : 172.17.184.129
+- dorsthorst.CNodeVeldbies : 172.25.0.66
+- www.CNodeOBLc : 172.17.152.66
+- bibliotheek : www.CNodeOBLc
+- bieb : www.CNodeOBLc
+- www.jvc : 172.18.32.5
+- eduroam : 172.17.169.67
+- pentaho : 172.17.0.21
 
-WL Servers:
-  sunfire: 172.19.128.68
-  sunny : 172.16.4.46
-  dyndns : 172.16.4.46
-  wlconfig : sunny
-  loghost : 172.16.4.46
+# Timelord pool:
+- timelord   : 0.pool.ntp
+- 0.timelord : 0.pool.ntp
+- 1.timelord : 1.pool.ntp
+- 2.timelord : 2.pool.ntp
+- 3.timelord : 3.pool.ntp
+- ntp        : 0.pool.ntp
+- pool.ntp   : 0.pool.ntp
+- 0.pool.ntp : [172.19.128.68, 172.17.16.1, 172.20.145.1, 172.16.18.38, 172.17.0.36]
+- 1.pool.ntp : [172.19.128.68, 172.17.16.1, 172.20.145.1, 172.16.18.38, 172.17.0.36]
+- 2.pool.ntp : [172.19.128.68, 172.17.16.1, 172.20.145.1, 172.16.18.38, 172.17.0.36]
+- 3.pool.ntp : [172.19.128.68, 172.17.16.1, 172.20.145.1, 172.16.18.38, 172.17.0.36]
 
-Overige:
-  aa-design : aa-design.CNodeCope
-  aa-design.CNodeCope : 172.17.8.7
-  binnen.CNodeBurcht : 172.17.184.129
-  dorsthorst.CNodeVeldbies : 172.25.0.66
-  www.CNodeOBLc : 172.17.152.66
-  bibliotheek : www.CNodeOBLc
-  bieb : www.CNodeOBLc
-  www.jvc : 172.18.32.5
-  eduroam : 172.17.169.67
-  pentaho : 172.17.0.21
-
-Timelord pool:
-  0.timelord : 172.19.137.66
-  0.timelord : 172.27.129.66
-  1.timelord : 172.17.8.68
-  1.timelord : 172.19.168.66
-  2.timelord : 172.17.143.4
-  3.timelord : 172.20.128.98
-
-raw:
-  dyndns: 'IN NS sunny.wleiden.net.'
-  localhost: 'IN A 127.0.0.1'
+# Raw:
+- dyndns: 'IN NS sunny.wleiden.net.'
+- localhost: 'IN A 127.0.0.1'
Index: /tools/gformat.py
===================================================================
--- /tools/gformat.py	(revision 10638)
+++ /tools/gformat.py	(revision 10642)
@@ -929,5 +929,5 @@
 
   # hostname is key, IP is value
-  wleiden_zone = dict()
+  wleiden_zone = defaultdict(list)
   wleiden_cname = dict()
 
@@ -941,5 +941,5 @@
       wleiden_cname[datadump['nodename']] = fqdn
 
-    wleiden_zone[fqdn] = datadump['masterip']
+    wleiden_zone[fqdn].append(datadump['masterip'])
 
     # Hacking to get proper DHCP IPs and hostnames
@@ -952,7 +952,7 @@
         dhcp_part = ".".join(ip.split('.')[0:3])
         if ip != datadump['masterip']:
-          wleiden_zone["dhcp-gateway-%s.%s" % (iface_name, fqdn)] = ip
+          wleiden_zone["dhcp-gateway-%s.%s" % (iface_name, fqdn)].append(ip)
         for i in range(int(dhcp_start), int(dhcp_stop) + 1):
-          wleiden_zone["dhcp-%s-%s.%s" % (i, iface_name, fqdn)] = "%s.%s" % (dhcp_part, i)
+          wleiden_zone["dhcp-%s-%s.%s" % (i, iface_name, fqdn)].append("%s.%s" % (dhcp_part, i))
       except (AttributeError, ValueError):
         # First push it into a pool, to indentify the counter-part later on
@@ -994,9 +994,9 @@
     if len(value) == 1:
       (iface_name, fqdn, ip) = value[0]
-      wleiden_zone["2unused-%s.%s" % (iface_name, fqdn)] = ip
+      wleiden_zone["2unused-%s.%s" % (iface_name, fqdn)].append(ip)
 
       # Device DNS names
       if 'cnode' in fqdn.lower():
-        wleiden_zone["d-at-%s.%s" % (iface_name, fqdn)] = showaddr(parseaddr(ip) + 1)
+        wleiden_zone["d-at-%s.%s" % (iface_name, fqdn)].append(showaddr(parseaddr(ip) + 1))
         wleiden_cname["d-at-%s.%s" % (iface_name,sn(fqdn))] = "d-at-%s.%s" % (iface_name, fqdn)
 
@@ -1004,11 +1004,11 @@
       (a_iface_name, a_fqdn, a_ip) = value[0]
       (b_iface_name, b_fqdn, b_ip) = value[1]
-      wleiden_zone["2%s.%s" % (b_fqdn,a_fqdn)] = a_ip
-      wleiden_zone["2%s.%s" % (a_fqdn,b_fqdn)] = b_ip
+      wleiden_zone["2%s.%s" % (b_fqdn,a_fqdn)].append(a_ip)
+      wleiden_zone["2%s.%s" % (a_fqdn,b_fqdn)].append(b_ip)
 
       # Device DNS names
       if 'cnode' in a_fqdn.lower() and 'cnode' in b_fqdn.lower():
-        wleiden_zone["d-at-%s.%s" % (a_iface_name, a_fqdn)] = showaddr(parseaddr(a_ip) + 1)
-        wleiden_zone["d-at-%s.%s" % (b_iface_name, b_fqdn)] = showaddr(parseaddr(b_ip) - 1)
+        wleiden_zone["d-at-%s.%s" % (a_iface_name, a_fqdn)].append(showaddr(parseaddr(a_ip) + 1))
+        wleiden_zone["d-at-%s.%s" % (b_iface_name, b_fqdn)].append(showaddr(parseaddr(b_ip) - 1))
         wleiden_cname["d-at-%s.%s" % (a_iface_name,sn(a_fqdn))] = "d-at-%s.%s" % (a_iface_name, a_fqdn)
         wleiden_cname["d-at-%s.%s" % (b_iface_name,sn(b_fqdn))] = "d-at-%s.%s" % (b_iface_name, b_fqdn)
@@ -1021,5 +1021,5 @@
         (iface_name, fqdn, ip) = item
         pool_name = "2pool-" + showaddr(key).replace('.','-') + "-" + pool_to_name(fqdn,pool_members)
-        wleiden_zone["%s.%s" % (pool_name, fqdn)] = ip
+        wleiden_zone["%s.%s" % (pool_name, fqdn)].append(ip)
 
   # Include static DNS entries
@@ -1030,16 +1030,19 @@
   ## roomburgh=CNodeRoomburgh1
   ## apkerk1.CNodeVosko=172.17.176.8 ;this as well
-  dns = yaml.load(open(os.path.join(NODE_DIR,'../dns/staticDNS.yaml'),'r'))
+  dns_list = yaml.load(open(os.path.join(NODE_DIR,'../dns/staticDNS.yaml'),'r'))
 
   # Hack to allow special entries, for development
-  wleiden_raw = dns['raw']
-  del dns['raw']
-
-  for comment, block in dns.iteritems():
-    for k,v in block.iteritems():
-      if valid_addr(v):
-        wleiden_zone[k] = v
+  wleiden_raw = {}
+
+  for line in dns_list:
+    k, items = line.items()[0]
+    items = [items] if type(items) == str else items
+    for item in items:
+      if item.startswith('IN '):
+        wleiden_raw[k] = item
+      elif valid_addr(item):
+        wleiden_zone[k].append(item)
       else:
-        wleiden_cname[k] = v
+        wleiden_cname[k] = item
 
   details = dict()
@@ -1070,7 +1073,8 @@
   f.write(dns_header % details)
 
-  for host,ip in wleiden_zone.iteritems():
-    if valid_addr(ip):
-      f.write("%s.wleiden.net. IN A %s \n" % (host.lower(), ip))
+  for host,ips in wleiden_zone.iteritems():
+    for ip in ips:
+      if valid_addr(ip):
+        f.write("%s.wleiden.net. IN A %s \n" % (host.lower(), ip))
   for source,dest in wleiden_cname.iteritems():
     f.write("%s.wleiden.net. IN CNAME %s.wleiden.net.\n" % (source.lower(), dest.lower()))
@@ -1087,9 +1091,10 @@
     #XXX: Not effient, fix to proper data structure and do checks at other
     # stages
-    for host,ip in wleiden_zone.iteritems():
-      if valid_addr(ip):
-        if int(ip.split('.')[1]) == s:
-          rev_ip = '.'.join(reversed(ip.split('.')))
-          f.write("%s.in-addr.arpa. IN PTR %s.wleiden.net.\n" % (rev_ip.lower(), host.lower()))
+    for host,ips in wleiden_zone.iteritems():
+      for ip in ips:
+        if valid_addr(ip):
+          if int(ip.split('.')[1]) == s:
+            rev_ip = '.'.join(reversed(ip.split('.')))
+            f.write("%s.in-addr.arpa. IN PTR %s.wleiden.net.\n" % (rev_ip.lower(), host.lower()))
     f.close()
 
