Up until now drivers have been able to define their
own custom exception classes. In most cases these are
inherited from either a native python exception class
or at best the base cinder exception class.
The problem with this is that it makes it very difficult
for higher layers (such as volume manager) to do any intelligent
exception handling and the base Cinder.exception class is too broad.
This change takes the first step in cleaning this up. We create
new exception classes for all drivers to inherit from:
VolumeDriverException
VolumeBackendAPIException
BackupDriverException
This still allows the freedom to create custom exceptions for a
particular driver, however it also gives us a common exception
class to catch and check in higher levels. Further refinement
and standardization will be helpful going forward but this
should give us a good start.