summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSol Jerome <sol.jerome@gmail.com>2013-03-29 10:47:53 -0500
committerSol Jerome <sol.jerome@gmail.com>2013-03-29 10:47:53 -0500
commit20d1a9597bb039d693978c2b02e62e65826a5436 (patch)
tree6c2e58a63aba7c1a51ccab98f7340fd908238743
parent644da402180bfccfa3c033c88dabed6d8dfff6dd (diff)
downloadbcfg2-20d1a9597bb039d693978c2b02e62e65826a5436.tar.gz
bcfg2-20d1a9597bb039d693978c2b02e62e65826a5436.tar.bz2
bcfg2-20d1a9597bb039d693978c2b02e62e65826a5436.zip
Probes: Handle unicode probes
There is no good way of sending unicode probes to older clients which do not have support for them. This change will cause unicode probes to be skipped for unsupported clients and handled properly for new clients. Signed-off-by: Sol Jerome <sol.jerome@gmail.com>
-rw-r--r--src/lib/Bcfg2/Client/Client.py10
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Probes.py16
2 files changed, 18 insertions, 8 deletions
diff --git a/src/lib/Bcfg2/Client/Client.py b/src/lib/Bcfg2/Client/Client.py
index 5633764a8..613e10e75 100644
--- a/src/lib/Bcfg2/Client/Client.py
+++ b/src/lib/Bcfg2/Client/Client.py
@@ -91,7 +91,7 @@ class Client(object):
try:
script.write("#!%s\n" %
(probe.attrib.get('interpreter', '/bin/sh')))
- script.write(probe.text)
+ script.write(probe.text.encode('utf-8'))
script.close()
os.chmod(scriptname,
stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH |
@@ -105,7 +105,7 @@ class Client(object):
self._probe_failure(name, "Return value %s" % rv)
self.logger.info("Probe %s has result:" % name)
self.logger.info(rv.stdout)
- ret.text = rv.stdout
+ ret.text = rv.stdout.decode('utf-8')
finally:
os.unlink(scriptname)
except SystemExit:
@@ -167,7 +167,7 @@ class Client(object):
self.proxy.RecvProbeData(
Bcfg2.Client.XML.tostring(
probedata,
- xml_declaration=False).decode('UTF-8'))
+ xml_declaration=False).decode('utf-8'))
except Bcfg2.Proxy.ProxyError:
err = sys.exc_info()[1]
self.fatal_error("Failed to upload probe data: %s" % err)
@@ -229,7 +229,7 @@ class Client(object):
self.fatal_error("Failed to get decision list: %s" % err)
try:
- rawconfig = self.proxy.GetConfig().encode('UTF-8')
+ rawconfig = self.proxy.GetConfig().encode('utf-8')
except Bcfg2.Proxy.ProxyError:
err = sys.exc_info()[1]
self.fatal_error("Failed to download configuration from "
@@ -324,7 +324,7 @@ class Client(object):
self.proxy.RecvStats(
Bcfg2.Client.XML.tostring(
feedback,
- xml_declaration=False).decode('UTF-8'))
+ xml_declaration=False).decode('utf-8'))
except Bcfg2.Proxy.ProxyError:
err = sys.exc_info()[1]
self.logger.error("Failed to upload configuration statistics: "
diff --git a/src/lib/Bcfg2/Server/Plugins/Probes.py b/src/lib/Bcfg2/Server/Plugins/Probes.py
index a8001d9af..09e648750 100644
--- a/src/lib/Bcfg2/Server/Plugins/Probes.py
+++ b/src/lib/Bcfg2/Server/Plugins/Probes.py
@@ -63,7 +63,7 @@ class ProbeData(str): # pylint: disable=E0012,R0924
.json, and .yaml properties to provide convenient ways to use
ProbeData objects as XML, JSON, or YAML data """
def __new__(cls, data):
- return str.__new__(cls, data)
+ return str.__new__(cls, data.encode('utf-8'))
def __init__(self, data): # pylint: disable=W0613
str.__init__(self)
@@ -153,7 +153,17 @@ class ProbeSet(Bcfg2.Server.Plugin.EntrySet):
probe = lxml.etree.Element('probe')
probe.set('name', os.path.basename(name))
probe.set('source', self.plugin_name)
- probe.text = entry.data
+ if metadata.version_info and metadata.version_info > (1, 3, 1, '', 0):
+ probe.text = entry.data.decode('utf-8')
+ else:
+ # msg = "Client unable to handle unicode probes."
+ # raise Bcfg2.Server.Plugin.PluginExecutionError(msg)
+ try:
+ probe.text = entry.data
+ except:
+ self.logger.error("Client unable to handle unicode probes. "
+ "Skipping %s" % probe.get('name'))
+ continue
match = self.bangline.match(entry.data.split('\n')[0])
if match:
probe.set('interpreter', match.group('interpreter'))
@@ -210,7 +220,7 @@ class Probes(Bcfg2.Server.Plugin.Probing,
timestamp=str(int(probedata.timestamp)))
for probe in sorted(probedata):
lxml.etree.SubElement(ctag, 'Probe', name=probe,
- value=str(self.probedata[client][probe]))
+ value=str(self.probedata[client][probe]).decode('utf-8'))
for group in sorted(self.cgroups[client]):
lxml.etree.SubElement(ctag, "Group", name=group)
try: