From mboxrd@z Thu Jan 1 00:00:00 1970 From: rmccabe@sourceware.org Date: 8 Jun 2007 18:26:16 -0000 Subject: [Cluster-devel] conga/luci/site/luci/Extensions conga_constant ... Message-ID: <20070608182616.28562.qmail@sourceware.org> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit CVSROOT: /cvs/cluster Module name: conga Branch: EXPERIMENTAL Changes by: rmccabe at sourceware.org 2007-06-08 18:26:15 Modified files: luci/site/luci/Extensions: conga_constants.py ricci_communicator.py LuciSyslog.py Log message: Groundwork and part of the fix for 227852 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_constants.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.39.2.8&r2=1.39.2.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ricci_communicator.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.25.2.6&r2=1.25.2.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciSyslog.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.11.4.3&r2=1.11.4.4 --- conga/luci/site/luci/Extensions/conga_constants.py 2007/06/07 06:41:05 1.39.2.8 +++ conga/luci/site/luci/Extensions/conga_constants.py 2007/06/08 18:26:14 1.39.2.9 @@ -147,4 +147,5 @@ # to >= 2 to get full debugging output in syslog (LOG_DAEMON/LOG_DEBUG). LUCI_DEBUG_MODE = False +LUCI_DEBUG_NET = False LUCI_DEBUG_VERBOSITY = 0 --- conga/luci/site/luci/Extensions/ricci_communicator.py 2007/06/01 23:18:16 1.25.2.6 +++ conga/luci/site/luci/Extensions/ricci_communicator.py 2007/06/08 18:26:15 1.25.2.7 @@ -10,7 +10,7 @@ from xml.dom import minidom from LuciSyslog import get_logger from conga_ssl import SSLSocket -from conga_constants import LUCI_DEBUG_MODE +from conga_constants import LUCI_DEBUG_MODE, LUCI_DEBUG_NET CERTS_DIR_PATH = '/var/lib/luci/var/certs/' luci_log = get_logger() @@ -37,22 +37,23 @@ self.__timeout_init) if enforce_trust: if not self.ss.trusted(): + luci_log.info('The SSL certificate for host "%s" is not trusted. Aborting connection attempt.' % self.__hostname) raise RicciError, 'ricci\'s certificate is not trusted' except Exception, e: - raise RicciError, 'Error setting up SSL for connection to %s: %s' \ - % (self.__hostname, str(e)) - except: - raise RicciError, 'Error setting up SSL for connection to %s' \ - % self.__hostname + errmsg = 'Unable to establish an SSL connection to %s:%d: %s' \ + % ((self.__hostname, self.__port, str(e))) + luci_log.info(errmsg) + raise RicciError, errmsg # receive ricci header hello = self.__receive(self.__timeout_init) try: - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:init0: recv header from %s: \"%s\"' \ + if LUCI_DEBUG_NET is True: + luci_log.debug_net('RC:init0: recv header from %s: \"%s\"' \ % (self.__hostname, hello.toxml())) except: - pass + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('RC:init0: error receiving header from %s: %r %s' % (self.__hostname, e, str(e))) self.__authed = hello.firstChild.getAttribute('authenticated') == 'true' self.__cluname = hello.firstChild.getAttribute('clustername') @@ -62,43 +63,47 @@ self.__dom0 = hello.firstChild.getAttribute('xen_host') == 'true' def hostname(self): - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:hostname: [auth %d] hostname = %s' \ + if LUCI_DEBUG_NET is True: + luci_log.debug_net('RC:hostname: [auth %d] hostname = %s' \ % (self.__authed, self.__hostname)) return self.__hostname def authed(self): - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:authed: reported authed = %d for %s' \ + if LUCI_DEBUG_NET is True: + luci_log.debug_net('RC:authed: reported authed = %d for %s' \ % (self.__authed, self.__hostname)) return self.__authed def system_name(self): - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:system_name: [auth %d] system_name = %s for %s' % (self.__authed, self.__reported_hostname, self.__hostname)) + if LUCI_DEBUG_NET is True: + luci_log.debug_net('RC:SN: [auth %d] system_name = %s for %s' \ + % (self.__authed, self.__reported_hostname, self.__hostname)) return self.__reported_hostname def cluster_info(self): - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:cluster_info: [auth %d] reported cluster_info = (%s,%s) for %s' % (self.__authed, self.__cluname, self.__clualias, self.__hostname)) + if LUCI_DEBUG_NET is True: + luci_log.debug_net('RC:CI: [auth %d] (%s,%s) for %s' \ + % ( self.__authed, self.__cluname, + self.__clualias, self.__hostname)) + return (self.__cluname, self.__clualias) def os(self): - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:os: [auth %d] reported os = %s for %s' \ + if LUCI_DEBUG_NET is True: + luci_log.debug_net('RC:OS: [auth %d] reported os = %s for %s' \ % (self.__authed, self.__os, self.__hostname)) return self.__os def dom0(self): - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:dom0: [auth %d] dom0 = %s for %s' \ + if LUCI_DEBUG_NET is True: + luci_log.debug_net('RC:DOM0: [auth %d] dom0 = %s for %s' \ % (self.__authed, self.__dom0, self.__hostname)) return self.__dom0 def fingerprint(self): fp = self.ss.peer_fingerprint() - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:fp: [auth %d] fp for %s = %s' \ + if LUCI_DEBUG_NET is True: + luci_log.debug_net('RC:fp: [auth %d] fp for %s = %s' \ % (self.__authed, self.__hostname, fp)) return fp @@ -114,7 +119,7 @@ def auth(self, password): if self.authed(): if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:auth0: already authenticated to %s' \ + luci_log.debug_verbose('RC:AUTH0: already authenticated to %s' \ % self.__hostname) return True @@ -138,11 +143,13 @@ self.__reported_hostname = resp.firstChild.getAttribute('hostname') self.__os = resp.firstChild.getAttribute('os') self.__dom0 = resp.firstChild.getAttribute('xen_host') == 'true' - except: - pass + except Exception, e: + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('RC:AUTH1: %r %s for %s' \ + % (e, str(e), self.__hostname)) - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:auth1: auth call returning %d' \ + if LUCI_DEBUG_NET is True: + luci_log.debug_net('RC:auth1: auth call returning %d' \ % self.__authed) return self.__authed @@ -155,14 +162,10 @@ self.__send(doc, self.__timeout_auth) resp = self.__receive(self.__timeout_auth) - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:unauth0: unauthenticate %s' \ - % self.__hostname) - try: ret = resp.firstChild.getAttribute('success') - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:unauth1: unauthenticate %s for %s' \ + if LUCI_DEBUG_NET is True: + luci_log.debug_net('RC:UNAUTH0: unauthenticate %s for %s' \ % (ret, self.__hostname)) if ret != '0': raise Exception, 'Invalid response' @@ -172,36 +175,36 @@ except: pass except: - errstr = 'Error authenticating to host %s: %s' \ + errstr = 'Error authenticating host %s: %s' \ % (self.__hostname, str(ret)) - - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:unauth2: %s' % errstr) + luci_log.info(errstr) raise RicciError, errstr return True - def process_batch(self, batch_xml, async=False): - if LUCI_DEBUG_MODE is True: - try: - luci_log.debug_verbose('RC:PB0: [auth=%d] to %s for batch %s [async=%d]' % (self.__authed, self.__hostname, batch_xml.toxml(), async)) - except: - pass + try: + if LUCI_DEBUG_NET is True: + luci_log.debug_net_priv('RC:PB0: [auth=%d] to %s for batch %s [async=%d]' % (self.__authed, self.__hostname, batch_xml.toxml(), async)) + except: + pass if not self.authed(): + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('RC:PB1: not authenticated to %s' \ + % self.__hostname) raise RicciError, 'not authenticated to host %s' % self.__hostname # construct request doc = minidom.Document() - ricci = doc.createElement("ricci") - ricci.setAttribute("version", "1.0") - ricci.setAttribute("function", "process_batch") + ricci = doc.createElement('ricci') + ricci.setAttribute('version', '1.0') + ricci.setAttribute('function', 'process_batch') async_str = None if async: async_str = 'true' else: async_str = 'false' - ricci.setAttribute("async", async_str) + ricci.setAttribute('async', async_str) doc.appendChild(ricci) ricci.appendChild(batch_xml)#.cloneNode(True)) @@ -209,25 +212,25 @@ try: self.__send(doc, self.__timeout_short) except Exception, e: - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:PB1: Error sending XML \"%s\" to host %s' % (doc.toxml(), self.__hostname)) - raise RicciError, 'Error sending XML to host %s: %s' \ - % (self.__hostname, str(e)) - except: - raise RicciError, 'Error sending XML to host %s' % self.__hostname + errstr = 'Error sending XML batch command to %s:%d: %s' \ + % (self.__hostname, self.__port, str(e)) + luci_log.info(errstr) + if LUCI_DEBUG_NET is True: + luci_log.debug_net_priv('RC:PB2: Error sending XML \"%s\" to host %s' % (doc.toxml(), self.__hostname)) + raise RicciError, errstr # receive response doc = self.__receive(self.__timeout_long) - if LUCI_DEBUG_MODE is True: + if LUCI_DEBUG_NET is True: try: - luci_log.debug_verbose('RC:PB2: received from %s XML \"%s\"' \ + luci_log.debug_net_priv('RC:PB3: received from %s XML \"%s\"' \ % (self.__hostname, doc.toxml())) except: pass if doc.firstChild.getAttribute('success') != '0': if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:PB3: batch command failed') + luci_log.debug_verbose('RC:PB4: batch command failed') raise RicciError, 'The last ricci command to host %s failed' \ % self.__hostname @@ -238,7 +241,8 @@ batch_node = node#.cloneNode(True) if batch_node is None: if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:PB4: batch node missing ') + luci_log.debug_verbose('RC:PB5: no from %s' \ + % self.__hostname) raise RicciError, 'missing in ricci response from "%s"' \ % self.__hostname @@ -248,24 +252,24 @@ try: batch_xml_str = '%s' \ % batch_str - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:BRun0: attempting batch "%s" for host "%s"' % (batch_xml_str, self.__hostname)) + if LUCI_DEBUG_NET is True: + luci_log.debug_net_priv('RC:BRun0: attempting batch "%s" for host "%s"' % (batch_xml_str, self.__hostname)) batch_xml = minidom.parseString(batch_xml_str).firstChild except Exception, e: - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:BRun1: received invalid batch XML for %s: "%s": "%s"' % (self.__hostname, batch_xml_str, str(e))) + if LUCI_DEBUG_NET is True: + luci_log.debug_net_priv('RC:BRun1: received invalid batch XML for %s: "%s": "%s"' % (self.__hostname, batch_xml_str, str(e))) raise RicciError, 'batch XML is malformed' try: ricci_xml = self.process_batch(batch_xml, async) - if LUCI_DEBUG_MODE is True: + if LUCI_DEBUG_NET is True: try: - luci_log.debug_verbose('RC:BRun2: received XML "%s" from host %s in response to batch command.' % (ricci_xml.toxml(), self.__hostname)) + luci_log.debug_net_priv('RC:BRun2: received XML "%s" from host %s in response to batch command.' % (ricci_xml.toxml(), self.__hostname)) except: pass except: - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:BRun3: An error occurred while trying to process the batch job: "%s"' % batch_xml_str) + if LUCI_DEBUG_NET is True: + luci_log.debug_net_priv('RC:BRun3: An error occurred while trying to process the batch job: "%s"' % batch_xml_str) return None doc = minidom.Document() @@ -273,8 +277,8 @@ return doc def batch_report(self, batch_id): - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:BRep0: [auth=%d] asking for batchid# %s for host %s' % (self.__authed, batch_id, self.__hostname)) + if LUCI_DEBUG_NET is True: + luci_log.debug_net('RC:BRep0: [auth=%d] asking for batchid# %s for host %s' % (self.__authed, batch_id, self.__hostname)) if not self.authed(): raise RicciError, 'Not authenticated to host %s' % self.__hostname @@ -290,7 +294,6 @@ # send request self.__send(doc, self.__timeout_short) - # receive response doc = self.__receive(self.__timeout_short) if doc.firstChild.getAttribute('success') == '12': @@ -308,62 +311,63 @@ def __send(self, xml_doc, timeout): - buff = '%s\n' % xml_doc.toxml() try: - self.ss.send(buff, timeout) + self.ss.send(xml_doc.toxml(), timeout) + self.ss.send('\n', timeout) except Exception, e: - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:send0: Error sending XML "%s" to %s: %s' % (buff, self.__hostname, str(e))) - raise RicciError, 'write error while sending XML to host %s' \ - % self.__hostname - except: - raise RicciError, 'write error while sending XML to host %s' \ + if LUCI_DEBUG_NET is True: + luci_log.debug_net_priv('RC:send0: sending XML "%s" to %s: %s' \ + % (xml_doc.toxml(), self.__hostname, str(e))) + luci_log.info('Error sending batch command to %s:%d: %s' \ + % (self.__hostname, self.__port, str(e))) + raise RicciError, 'Write error while sending XML to host %s' \ % self.__hostname - if LUCI_DEBUG_MODE is True: + + if LUCI_DEBUG_NET is True: try: - luci_log.debug_verbose('RC:send1: Sent XML "%s" to host %s' \ + luci_log.debug_net_priv('RC:send1: Sent XML "%s" to host %s' \ % (xml_doc.toxml(), self.__hostname)) except: pass return def __receive(self, timeout): - doc = None xml_in = '' try: xml_in = self.ss.recv(timeout) except Exception, e: - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:recv0: Error reading from %s: %s' \ - % (self.__hostname, str(e))) - raise RicciError, 'Error reading data from host %s' \ - % self.__hostname - except: - raise RicciError, 'Error reading data from host %s' \ - % self.__hostname + errstr = 'Error reading from %s:%d: %s' \ + % (self.__hostname, self.__port, str(e)) + luci_log.info(errstr) + raise RicciError, errstr - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:recv1: Received XML "%s" from host %s' \ + if LUCI_DEBUG_NET is True: + luci_log.debug_net_priv('RC:recv1: Received XML "%s" from host %s' \ % (xml_in, self.__hostname)) + doc = None try: - if doc is None: - doc = minidom.parseString(xml_in) + doc = minidom.parseString(xml_in) except Exception, e: - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:recv2: parsing XML "%s" from %s' \ + errstr = 'Error parsing XML from host %s:%d: %s' \ + % (self.__hostname, self.__port, str(e)) + luci_log.info(errstr) + if LUCI_DEBUG_NET is True: + luci_log.debug_net_priv('RC:recv2: parsing XML "%s" from %s' \ % (xml_in, str(e))) - raise RicciError, 'Error parsing XML from host %s: %s' \ - % (self.__hostname, str(e)) + raise RicciError, errstr if not doc or not doc.firstChild: + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('RC:recv3: empty XML response from %s' \ + % self.__hostname) raise RicciError, 'Error an empty response was received from host %s' % self.__hostname try: if doc.firstChild.nodeName != 'ricci': - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:recv3: Expecting "ricci" got XML "%s" from %s' % (xml_in, self.__hostname)) - raise Exception, 'Expecting first XML child node to be "ricci"' + if LUCI_DEBUG_NET is True: + luci_log.debug_net_priv('RC:recv4: Expecting "" tag, got XML "%s" from %s' % (xml_in, self.__hostname)) + raise Exception, 'Expected first XML child node to be ""' except Exception, e: raise RicciError, 'Invalid XML ricci response from host %s' \ % self.__hostname @@ -374,10 +378,12 @@ return None try: - return RicciCommunicator(hostname) + rc = RicciCommunicator(hostname) + if not rc: + raise Exception, 'initialization failed' except Exception, e: - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:GRC0: Error creating a ricci connection to %s: %s' % (hostname, str(e))) + luci_log.info('Error creating a ricci connection to %s: %r %s' \ + % (hostname, e, str(e))) return None def ricci_get_called_hostname(self, ricci): @@ -413,9 +419,10 @@ def batch_status(batch_xml): if batch_xml.nodeName != 'batch': - if LUCI_DEBUG_MODE is True: + if LUCI_DEBUG_NET is True: try: - luci_log.debug_verbose('RC:BS0: Expecting an XML batch node. Got \"%s\"' % batch_xml.toxml()) + luci_log.debug_net_priv('RC:BS0: batch node. Got \"%s\"' \ + % batch_xml.toxml()) except: pass raise RicciError, 'Not an XML batch node' @@ -435,11 +442,12 @@ last = last + 1 last = last - 2 * last try: - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:BS1: Returning (%d, %d) for batch_status("%s")' % (last, total, batch_xml.toxml())) + if LUCI_DEBUG_NET is True: + luci_log.debug_net_priv('RC:BS1: (%d, %d) for batch_status("%s")' \ + % (last, total, batch_xml.toxml())) except Exception, e: if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:BS2: error %r %s: (last, total)' \ + luci_log.debug_verbose('RC:BS2: error %r %s: (%d, %d)' \ % (e, str(e), last, total)) return (last, total) @@ -464,8 +472,8 @@ def extract_module_status(batch_xml, module_num=1): if batch_xml.nodeName != 'batch': - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('RC:EMS0: Expecting "batch" got "%s"' \ + if LUCI_DEBUG_NET is True: + luci_log.debug_net_priv('RC:EMS0: Expecting "batch" got "%s"' \ % batch_xml.toxml()) raise RicciError, 'Invalid XML node; expecting a batch node' --- conga/luci/site/luci/Extensions/LuciSyslog.py 2007/05/18 02:36:59 1.11.4.3 +++ conga/luci/site/luci/Extensions/LuciSyslog.py 2007/06/08 18:26:15 1.11.4.4 @@ -32,37 +32,9 @@ def initialized(self): return self.__init > 0 - def info(self, msg): - if not self.__init: - return - try: - syslog(LOG_INFO, msg) - except: - #raise LuciSyslogError, 'syslog info call failed' - pass - - def warn(self, msg): - if not self.__init: - return - try: - syslog(LOG_WARNING, msg) - except: - #raise LuciSyslogError, 'syslog warn call failed' - pass - - def private(self, msg): + def log_msg(self, pri, msg): if not self.__init: return - try: - syslog(LOG_AUTH, msg) - except: - #raise LuciSyslogError, 'syslog private call failed' - pass - - def debug_verbose(self, msg): - if not LUCI_DEBUG_MODE or LUCI_DEBUG_VERBOSITY < 2 or not self.__init: - return - msg_len = len(msg) if msg_len < 1: return @@ -70,8 +42,9 @@ while True: cur_len = min(msg_len, 800) cur_msg = msg[:cur_len] + try: - syslog(LOG_DEBUG, cur_msg) + syslog(pri, cur_msg) except: pass @@ -81,14 +54,34 @@ else: break + def info(self, msg): + self.log_msg(LOG_INFO, msg) + + def warn(self, msg): + self.log_msg(LOG_WARNING, msg) + + def private(self, msg): + self.log_msg(LOG_AUTH, msg) + + def debug_verbose(self, msg): + if LUCI_DEBUG_MODE is not True or LUCI_DEBUG_VERBOSITY < 2: + return + self.log_msg(LOG_DEBUG, msg) + + def debug_net(self, msg): + if LUCI_DEBUG_MODE is not True or LUCI_DEBUG_VERBOSITY < 3: + return + self.log_msg(LOG_DEBUG, msg) + + def debug_net_priv(self, msg): + if LUCI_DEBUG_MODE is not True or LUCI_DEBUG_VERBOSITY < 3: + return + self.log_msg(LOG_AUTH, msg) + def debug(self, msg): - if not LUCI_DEBUG_MODE or not self.__init: + if LUCI_DEBUG_MODE is not True: return - try: - syslog(LOG_DEBUG, msg) - except: - #raise LuciSyslogError, 'syslog debug call failed' - pass + self.log_msg(LOG_DEBUG, msg) def close(self): try: