Ticket #243: bcfg2-PluginTCheetah_with_Probes.patch
File bcfg2-PluginTCheetah_with_Probes.patch, 2.4 KB (added by [email protected]…, 16 years ago) |
---|
-
TCheetah.py
8 8 info = re.compile('^owner:(\s)*(?P<owner>\w+)$|group:(\s)*(?P<group>\w+)$|' + 9 9 'perms:(\s)*(?P<perms>\w+)$') 10 10 11 probeData = {} 12 11 13 class TemplateFile: 12 14 '''Template file creates Cheetah template structures for the loaded file''' 13 15 def __init__(self, name, properties): … … 48 50 self.template.metadata = metadata 49 51 self.template.properties = self.properties.properties 50 52 try: 53 self.template.probes = probeData[metadata.hostname] 54 except: 55 logger.info("No probes available in template.") 56 try: 51 57 entry.text = str(self.template) 52 58 except: 53 59 logger.error("Failed to template %s" % entry.get('name'), exc_info=1) … … 79 85 self.handles = {} 80 86 self.AddDirectoryMonitor('') 81 87 self.properties = CheetahProperties('%s/../etc/properties.xml' % self.data, self.core.fam) 88 try: 89 self.probes = Bcfg2.Server.Plugin.DirectoryBacked(datastore + '/Probes', self.core.fam ) 90 except: 91 self.probes = False 92 # eventually flush fam events here so that all entries built here 93 # ready to go 82 94 95 def GetProbes(self, _): 96 '''Return a set of probes for execution on client''' 97 ret = [] 98 bangline = re.compile('^#!(?P<interpreter>(/\w+)+)$') 99 if self.probes: 100 for name, entry in self.probes.entries.iteritems(): 101 probe = lxml.etree.Element('probe') 102 probe.set('name', name ) 103 probe.set('source', 'TCheetah') 104 probe.text = entry.data 105 match = bangline.match(entry.data.split('\n')[0]) 106 if match: 107 probe.set('interpreter', match.group('interpreter')) 108 ret.append(probe) 109 return ret 110 111 def ReceiveData(self, client, data): 112 '''Receive probe results pertaining to client''' 113 try: 114 probeData[client.hostname].update({ data.get('name'):data.text }) 115 except KeyError: 116 probeData[client.hostname] = { data.get('name'):data.text } 117 83 118 def BuildEntry(self, entry, metadata): 84 119 '''Dispatch fetch calls to the correct object''' 85 120 self.entries[entry.get('name')].BuildFile(entry, metadata)