Blob Blame History Raw
diff --git lsm/lsm/na.py lsm/lsm/na.py
index 06c74bc..44ceccc 100644
--- lsm/lsm/na.py
+++ lsm/lsm/na.py
@@ -22,6 +22,7 @@ import time
 from binascii import hexlify
 
 from M2Crypto import RC4
+from _ssl import SSLError
 
 from external.xmltodict import ConvertXmlToDict
 
@@ -112,6 +113,16 @@ def netapp_filer(host, username, password, timeout, command, parameters=None,
             raise e
     except socket.timeout:
         raise FilerError(Filer.ETIMEOUT, "Connection timeout")
+    except SSLError as sse:
+        # The ssl library doesn't give a good way to find specific reason.
+        # We are doing a string contains which is not ideal, but other than
+        # throwing a generic error in this case there isn't much we can do
+        # to be more specific.
+        if "timed out" in str(sse).lower():
+            raise FilerError(Filer.ETIMEOUT, "Connection timeout (SSL)")
+        else:
+            raise FilerError(Filer.EUNKNOWN,
+                             "SSL error occurred (%s)", str(sse))
     finally:
         if handler:
             handler.close()
@@ -148,6 +159,7 @@ class Filer(object):
     Class to handle NetApp API calls.
     Note: These are using lsm terminology.
     """
+    EUNKNOWN = 10                   # Non-specific error
     ENOSPC = 28                     # Out of space
     ETIMEOUT = 60                   # Time-out
     EINVALID_ISCSI_NAME = 9006      # Invalid ISCSI IQN
diff --git lsm/lsm/ontap.py lsm/lsm/ontap.py
index b742a36..060fc4b 100644
--- lsm/lsm/ontap.py
+++ lsm/lsm/ontap.py
@@ -45,7 +45,8 @@ e_map = {
     na.Filer.ECLONE_LICENSE_EXPIRED: ErrorNumber.NOT_LICENSED,
     na.Filer.ECLONE_NOT_LICENSED: ErrorNumber.NOT_LICENSED,
     na.Filer.EINVALID_ISCSI_NAME: ErrorNumber.INVALID_IQN,
-    na.Filer.ETIMEOUT: ErrorNumber.PLUGIN_TIMEOUT
+    na.Filer.ETIMEOUT: ErrorNumber.PLUGIN_TIMEOUT,
+    na.Filer.EUNKNOWN: ErrorNumber.PLUGIN_ERROR
 }