From 2b86c878a85b2ca9b305dcac0ddf0bb6818b5fc3 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Tue, 7 May 2019 16:19:30 -0400 Subject: [PATCH] Cleanly handle bad credentials in redfish Provide a similar experience to the ipmi plugin. --- .../confluent/plugins/hardwaremanagement/redfish.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/confluent_server/confluent/plugins/hardwaremanagement/redfish.py b/confluent_server/confluent/plugins/hardwaremanagement/redfish.py index 3ad26f42..727d8107 100644 --- a/confluent_server/confluent/plugins/hardwaremanagement/redfish.py +++ b/confluent_server/confluent/plugins/hardwaremanagement/redfish.py @@ -167,7 +167,15 @@ class IpmiCommandWrapper(ipmicommand.Command): kv = util.TLSCertVerifier(cfm, node, 'pubkeys.tls_hardwaremanager').verify_cert kwargs['verifycallback'] = kv - super(self.__class__, self).__init__(**kwargs) + try: + super(IpmiCommandWrapper, self).__init__(**kwargs) + except socket.error as se: + if se[1] == 'EHOSTUNREACH': + raise exc.TargetEndpointUnreachable('timeout') + raise + except pygexc.PyghmiException as pe: + if 'Access Denied' in str(pe): + raise exc.TargetEndpointBadCredentials() def close_confluent(self): if self._attribwatcher: @@ -304,6 +312,8 @@ def perform_request(operator, node, element, raise except exc.TargetEndpointUnreachable as tu: results.put(msg.ConfluentTargetTimeout(node, str(tu))) + except exc.TargetEndpointBadCredentials: + results.put(msg.ConfluentTargetInvalidCredentials(node)) except ssl.SSLEOFError: results.put(msg.ConfluentNodeError( node, 'Unable to communicate with the https server on '