summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNarayan Desai <desai@mcs.anl.gov>2009-01-15 03:40:46 +0000
committerNarayan Desai <desai@mcs.anl.gov>2009-01-15 03:40:46 +0000
commit522d1758b824a69fa196cee412532d6cefcd9a62 (patch)
tree71aff76502c7ea495d8473e51b219f5feb6bc2b2 /src
parentda1065ef071514f97d6bfbe104bd1040503da4aa (diff)
downloadbcfg2-522d1758b824a69fa196cee412532d6cefcd9a62.tar.gz
bcfg2-522d1758b824a69fa196cee412532d6cefcd9a62.tar.bz2
bcfg2-522d1758b824a69fa196cee412532d6cefcd9a62.zip
Uniqify probe returns so that a client only gets the most specific version, and map it to the probe basename (ie probe getmacs.H_hostname returns as getmacs)
git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@5026 ce84e21b-d406-0410-9b95-82705330c041
Diffstat (limited to 'src')
-rw-r--r--src/lib/Server/Plugins/Probes.py29
1 files changed, 13 insertions, 16 deletions
diff --git a/src/lib/Server/Plugins/Probes.py b/src/lib/Server/Plugins/Probes.py
index 7b82183ea..6c7590da0 100644
--- a/src/lib/Server/Plugins/Probes.py
+++ b/src/lib/Server/Plugins/Probes.py
@@ -1,6 +1,7 @@
import Bcfg2.Server.Plugin, lxml.etree, re
-probe_matcher = re.compile("(?P<basename>\S+)(.(?P<mode>[GH])_\S+)?")
+specific_probe_matcher = re.compile("(.*/)?(?P<basename>\S+)(.(?P<mode>[GH])_\S+)")
+probe_matcher = re.compile("(.*/)?(?P<basename>\S+)")
class ProbeSet(Bcfg2.Server.Plugin.EntrySet):
ignore = re.compile("^(\.#.*|.*~|\\..*\\.(tmp|sw[px])|probed\\.xml)$")
@@ -19,22 +20,18 @@ class ProbeSet(Bcfg2.Server.Plugin.EntrySet):
def get_probe_data(self, metadata):
ret = []
+ build = dict()
candidates = self.get_matching(metadata)
- temp = {}
- for cand in candidates:
- if cand.specific.all:
- if cand.name not in temp:
- temp[cand.name] = (cand, 0)
- continue
- mdata = probe_matcher.match(cand.name).groupdict()
- if mdata['basename'] in temp:
- if mdata['mode'] > temp[mdata['basename']][1]:
- temp[mdata['basename']] = (cand, mdata['mode'])
- else:
- temp[mdata['basename']] = (cand, mdata['mode'])
-
- for (name, data) in temp.iteritems():
- entry, prio = data
+ candidates.sort(lambda x,y: cmp(x.specific, y.specific))
+ for entry in candidates:
+ rem = specific_probe_matcher.match(entry.name)
+ if not rem:
+ rem = probe_matcher.match(entry.name)
+ pname = rem.group('basename')
+ if pname not in build:
+ build[pname] = entry
+
+ for (name, entry) in build.iteritems():
probe = lxml.etree.Element('probe')
probe.set('name', name.split('/')[-1])
probe.set('source', self.plugin_name)