This looks way better, but a the "libcloud way" would be to do the following:

* Modify `success` method to only return `True` if the status code indicates success
* If `success` returns `False`, `parse_error` will be called where you can parse error from the body and raise appropriate exception

This approach relies on provider returning appropriate status codes on error response though. Looking at the code bellow, this might not be the case though.