add ex_hard_reboot in DigitalOcean_v2 driver implement power_cycle Closes #920
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/da5f6804 Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/da5f6804 Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/da5f6804 Branch: refs/heads/trunk Commit: da5f68045147a036d189fc606fb4720951bd03e0 Parents: 3a1928a Author: Rick van de Loo <[email protected]> Authored: Fri Oct 21 14:17:42 2016 +0200 Committer: Anthony Shaw <[email protected]> Committed: Mon Oct 24 13:37:43 2016 +0100 ---------------------------------------------------------------------- libcloud/compute/drivers/digitalocean.py | 6 ++++++ .../compute/fixtures/digitalocean/ex_hard_reboot.json | 12 ++++++++++++ .../fixtures/digitalocean_v2/ex_hard_reboot.json | 12 ++++++++++++ libcloud/test/compute/test_digitalocean_v2.py | 12 ++++++++++++ 4 files changed, 42 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/libcloud/blob/da5f6804/libcloud/compute/drivers/digitalocean.py ---------------------------------------------------------------------- diff --git a/libcloud/compute/drivers/digitalocean.py b/libcloud/compute/drivers/digitalocean.py index 7a676b6..335e065 100644 --- a/libcloud/compute/drivers/digitalocean.py +++ b/libcloud/compute/drivers/digitalocean.py @@ -256,6 +256,12 @@ class DigitalOcean_v2_NodeDriver(DigitalOcean_v2_BaseDriver, data=json.dumps(attr), method='POST') return res.status == httplib.CREATED + def ex_hard_reboot(self, node): + attr = {'type': 'power_cycle'} + res = self.connection.request('/v2/droplets/%s/actions' % (node.id), + data=json.dumps(attr), method='POST') + return res.status == httplib.CREATED + def ex_power_on_node(self, node): attr = {'type': 'power_on'} res = self.connection.request('/v2/droplets/%s/actions' % (node.id), http://git-wip-us.apache.org/repos/asf/libcloud/blob/da5f6804/libcloud/test/compute/fixtures/digitalocean/ex_hard_reboot.json ---------------------------------------------------------------------- diff --git a/libcloud/test/compute/fixtures/digitalocean/ex_hard_reboot.json b/libcloud/test/compute/fixtures/digitalocean/ex_hard_reboot.json new file mode 100644 index 0000000..891b32e --- /dev/null +++ b/libcloud/test/compute/fixtures/digitalocean/ex_hard_reboot.json @@ -0,0 +1,12 @@ +{ + "action": { + "id": 36077294, + "status": "in-progress", + "type": "power_cycle", + "started_at": "2014-11-04T17:08:03Z", + "completed_at": null, + "resource_id": 3067651, + "resource_type": "droplet", + "region": "ams3" + } +} http://git-wip-us.apache.org/repos/asf/libcloud/blob/da5f6804/libcloud/test/compute/fixtures/digitalocean_v2/ex_hard_reboot.json ---------------------------------------------------------------------- diff --git a/libcloud/test/compute/fixtures/digitalocean_v2/ex_hard_reboot.json b/libcloud/test/compute/fixtures/digitalocean_v2/ex_hard_reboot.json new file mode 100644 index 0000000..891b32e --- /dev/null +++ b/libcloud/test/compute/fixtures/digitalocean_v2/ex_hard_reboot.json @@ -0,0 +1,12 @@ +{ + "action": { + "id": 36077294, + "status": "in-progress", + "type": "power_cycle", + "started_at": "2014-11-04T17:08:03Z", + "completed_at": null, + "resource_id": 3067651, + "resource_type": "droplet", + "region": "ams3" + } +} http://git-wip-us.apache.org/repos/asf/libcloud/blob/da5f6804/libcloud/test/compute/test_digitalocean_v2.py ---------------------------------------------------------------------- diff --git a/libcloud/test/compute/test_digitalocean_v2.py b/libcloud/test/compute/test_digitalocean_v2.py index c7a916d..2ba7e90 100644 --- a/libcloud/test/compute/test_digitalocean_v2.py +++ b/libcloud/test/compute/test_digitalocean_v2.py @@ -148,6 +148,12 @@ class DigitalOcean_v2_Tests(LibcloudTestCase): result = self.driver.ex_shutdown_node(node) self.assertTrue(result) + def test_ex_hard_reboot_success(self): + node = self.driver.list_nodes()[0] + DigitalOceanMockHttp.type = 'POWERCYCLE' + result = self.driver.ex_hard_reboot(node) + self.assertTrue(result) + def test_destroy_node_success(self): node = self.driver.list_nodes()[0] DigitalOceanMockHttp.type = 'DESTROY' @@ -327,6 +333,12 @@ class DigitalOceanMockHttp(MockHttpTestCase): body = self.fixtures.load('ex_shutdown_node.json') return (httplib.CREATED, body, {}, httplib.responses[httplib.CREATED]) + def _v2_droplets_3164444_actions_POWERCYCLE(self, method, url, + body, headers): + # ex_hard_reboot + body = self.fixtures.load('ex_hard_reboot.json') + return (httplib.CREATED, body, {}, httplib.responses[httplib.OK]) + def _v2_account_keys(self, method, url, body, headers): body = self.fixtures.load('list_key_pairs.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK])
