svc/conntrack.in: Maintain config groups in a dictionary.
authorMark Wooding <mdw@distorted.org.uk>
Thu, 28 Sep 2017 23:15:19 +0000 (00:15 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Thu, 28 Jun 2018 23:29:24 +0000 (00:29 +0100)
Nothing cares about the relative order of the groups, and the
`showgroup' command wants to be able to look one up by name.  Really,
the question is why I didn't do it like this the first time.

svc/conntrack.in

index 83b2993..b840fc2 100644 (file)
@@ -207,7 +207,7 @@ class Config (object):
       testaddr = TESTADDR
 
     ## Scan the configuration file and build the groups structure.
-    groups = []
+    groups = {}
     for sec in cp.sections():
       pats = []
       for tag in cp.options(sec):
@@ -234,7 +234,7 @@ class Config (object):
                              (p and not pp) or \
                              (p == pp and n.withinp(nn)),
                            pats))
-      groups.append((sec, pats))
+      groups[sec] = pats
 
     ## Done.
     me.testaddr = testaddr
@@ -246,15 +246,11 @@ CF = None
 def cmd_showconfig():
   T.svcinfo('test-addr=%s' % CF.testaddr)
 def cmd_showgroups():
-  for sec, pats in CF.groups:
-    T.svcinfo(sec)
+  for g in sorted(CF.groups.iterkeys()):
+    T.svcinfo(g)
 def cmd_showgroup(g):
-  for s, p in CF.groups:
-    if s == g:
-      pats = p
-      break
-  else:
-    raise T.TripeJobError('unknown-group', g)
+  try: pats = CF.groups[g]
+  except KeyError: raise T.TripeJobError('unknown-group', g)
   for t, p, n in pats:
     T.svcinfo('peer', t,
               'target', p and str(p) or '(default)',
@@ -340,7 +336,7 @@ def kickpeers():
 
     ## Now decide what to do.
     changes = []
-    for g, pp in CF.groups:
+    for g, pp in CF.groups.iteritems():
       if T._debug: print '#   check group %s' % g
 
       ## Find out which peer in the group ought to be active.