+ pycurl.global_cleanup()
+
+
+def _ConfigRpcCurl(curl):
+ noded_cert = str(constants.NODED_CERT_FILE)
+
+ curl.setopt(pycurl.FOLLOWLOCATION, False)
+ curl.setopt(pycurl.CAINFO, noded_cert)
+ curl.setopt(pycurl.SSL_VERIFYHOST, 0)
+ curl.setopt(pycurl.SSL_VERIFYPEER, True)
+ curl.setopt(pycurl.SSLCERTTYPE, "PEM")
+ curl.setopt(pycurl.SSLCERT, noded_cert)
+ curl.setopt(pycurl.SSLKEYTYPE, "PEM")
+ curl.setopt(pycurl.SSLKEY, noded_cert)
+ curl.setopt(pycurl.CONNECTTIMEOUT, _RPC_CONNECT_TIMEOUT)
+
+
+# Aliasing this module avoids the following warning by epydoc: "Warning: No
+# information available for ganeti.rpc._RpcThreadLocal's base threading.local"
+_threading = threading
+
+
+class _RpcThreadLocal(_threading.local):
+ def GetHttpClientPool(self):
+ """Returns a per-thread HTTP client pool.
+
+ @rtype: L{http.client.HttpClientPool}
+
+ """
+ try:
+ pool = self.hcp
+ except AttributeError:
+ pool = http.client.HttpClientPool(_ConfigRpcCurl)
+ self.hcp = pool
+
+ return pool
+
+
+# Remove module alias (see above)
+del _threading