Browse Source

Be site aware when aggregating node IDs of salt output.

Signed-off-by: Maximilian Wilhelm <max@rfc2324.org>
Maximilian Wilhelm 8 years ago
parent
commit
c35b0cbc90
1 changed files with 26 additions and 11 deletions
  1. 26 11
      modules/ffpb.py

+ 26 - 11
modules/ffpb.py

@@ -608,29 +608,44 @@ def ffpb_print_cached_messages (bot):
 
 
 def _ffpb_aggregate_node_ids (bot, nodes):
-    """Aggregate given list of node IDs as far as possbile (read: combine gateways)
+    """Aggregate given list of node IDs as far as possbile (read: combine gw*, lnx*, ...)
     and return aggregated and ordered list."""
 
+    aggr_patterns = ('gw', 'lnx')
+
     nodes_temp = {}
     nodes_aggr = []
 
     for node in nodes:
-        match = re.search ("^gw(\d+)(.*)?$", node)
+        match = re.search ("^([a-z-]+(\d+))(\.([a-z]+)\.?)?.*", node, re.I)
         if match:
-             expr = re.sub ("^gw(\d+)", "gw##", node)
-             if expr not in nodes_temp:
-                  nodes_temp[expr] = []
+             site = match.group (4) if match.group (4) else None
+
+             expr = match.group (1)
+             for pattern in aggr_patterns:
+                 expr = re.sub ("^%s(\d+)" % pattern, "%s##" % pattern, expr)
 
-             nodes_temp[expr].append (match.group (1))
+             if site not in nodes_temp:
+                  nodes_temp[site] = {}
+             if expr not in nodes_temp[site]:
+                  nodes_temp[site][expr] = []
+
+             nodes_temp[site][expr].append (match.group (2))
              continue
 
         nodes_aggr.append (node)
 
-    for node, n_list in nodes_temp.items ():
-        if len (n_list) == 1:
-            nodes_aggr.append (re.sub ("gw##", "gw%s" % n_list[0], node))
-        else:
-            nodes_aggr.append (re.sub ("gw##", "gw{%s}" % ",".join (sorted (n_list)), node))
+    for site, hosts in nodes_temp.items ():
+        for node, n_list in hosts.items ():
+            if len (n_list) == 1:
+                node = re.sub ("##", "%s" % n_list[0], node)
+            else:
+                node = re.sub ("##", "{%s}" % ",".join (sorted (n_list)), node)
+
+            if site:
+                node += "." + site
+
+            nodes_aggr.append (node)
 
     return ", ".join (sorted (nodes_aggr))