Correctly handle error during create_node and don't throw KeyError on error.
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/24f6f3ae Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/24f6f3ae Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/24f6f3ae Branch: refs/heads/trunk Commit: 24f6f3ae966366e4f0bfb113f8b986284e8bf0ae Parents: dc88ea9 Author: Tomaz Muraus <[email protected]> Authored: Sun Mar 29 17:14:06 2015 +0200 Committer: Tomaz Muraus <[email protected]> Committed: Sun Mar 29 17:14:06 2015 +0200 ---------------------------------------------------------------------- libcloud/compute/drivers/digitalocean.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/libcloud/blob/24f6f3ae/libcloud/compute/drivers/digitalocean.py ---------------------------------------------------------------------- diff --git a/libcloud/compute/drivers/digitalocean.py b/libcloud/compute/drivers/digitalocean.py index 0f4beef..32dd199 100644 --- a/libcloud/compute/drivers/digitalocean.py +++ b/libcloud/compute/drivers/digitalocean.py @@ -189,6 +189,14 @@ class DigitalOcean_v1_NodeDriver(DigitalOceanNodeDriver): params['ssh_key_ids'] = ','.join(ex_ssh_key_ids) data = self.connection.request('/v1/droplets/new', params=params) + + # TODO: Handle this in the response class + status = data.object.get('status', 'OK') + if status == 'ERROR': + message = data.object.get('message', None) + error_message = data.object.get('error_message', message) + raise ValueError('Failed to create node: %s' % (error_message)) + return self._to_node(data=data.object['droplet']) def reboot_node(self, node): @@ -337,6 +345,14 @@ class DigitalOcean_v2_NodeDriver(DigitalOceanNodeDriver): data = self.connection.request('/v2/droplets', params=params, method='POST').object + + # TODO: Handle this in the response class + status = data.object.get('status', 'OK') + if status == 'ERROR': + message = data.object.get('message', None) + error_message = data.object.get('error_message', message) + raise ValueError('Failed to create node: %s' % (error_message)) + return self._to_node(data=data['droplet']) def reboot_node(self, node):
