Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions libcloud/compute/drivers/openstack.py
Original file line number Diff line number Diff line change
Expand Up @@ -2092,6 +2092,30 @@ def ex_get_metadata_for_node(self, node):
"""
return node.extra['metadata']

def ex_pause_node(self, node):
uri = '/servers/%s/action' % (node.id)
data = {'pause': None}
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(I know it's not your fault, I'm more or less just complaining)

That's a weird API.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I couldn't agree more :).

resp = self.connection.request(uri, method='POST', data=data)
return resp.status == httplib.ACCEPTED

def ex_unpause_node(self, node):
uri = '/servers/%s/action' % (node.id)
data = {'pause': None}
resp = self.connection.request(uri, method='POST', data=data)
return resp.status == httplib.ACCEPTED

def ex_suspend_node(self, node):
uri = '/servers/%s/action' % (node.id)
data = {'suspend': None}
resp = self.connection.request(uri, method='POST', data=data)
return resp.status == httplib.ACCEPTED

def ex_resume_node(self, node):
uri = '/servers/%s/action' % (node.id)
data = {'resume': None}
resp = self.connection.request(uri, method='POST', data=data)
return resp.status == httplib.ACCEPTED


class OpenStack_1_1_FloatingIpPool(object):
"""
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"pause": null
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"resume": null
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"suspend": null
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"unpause": null
}
50 changes: 50 additions & 0 deletions libcloud/test/compute/test_openstack.py
Original file line number Diff line number Diff line change
Expand Up @@ -1492,6 +1492,38 @@ def test_ex_get_metadata_for_node(self):
self.assertEqual(metadata['My Server Name'], 'Apache1')
self.assertEqual(len(metadata), 1)

def test_ex_pause_node(self):
node = Node(
id='12063', name=None, state=None,
public_ips=None, private_ips=None, driver=self.driver,
)
ret = self.driver.ex_pause_node(node)
self.assertTrue(ret is True)

def test_ex_unpause_node(self):
node = Node(
id='12063', name=None, state=None,
public_ips=None, private_ips=None, driver=self.driver,
)
ret = self.driver.ex_unpause_node(node)
self.assertTrue(ret is True)

def test_ex_suspend_node(self):
node = Node(
id='12063', name=None, state=None,
public_ips=None, private_ips=None, driver=self.driver,
)
ret = self.driver.ex_suspend_node(node)
self.assertTrue(ret is True)

def test_ex_resume_node(self):
node = Node(
id='12063', name=None, state=None,
public_ips=None, private_ips=None, driver=self.driver,
)
ret = self.driver.ex_resume_node(node)
self.assertTrue(ret is True)


class OpenStack_1_1_FactoryMethodTests(OpenStack_1_1_Tests):
should_list_locations = False
Expand Down Expand Up @@ -1812,6 +1844,24 @@ def _v1_1_slug_os_networks_f13e5051_feea_416b_827a_1a0acc2dad14(self, method, ur
return (httplib.ACCEPTED, body, self.json_content_headers, httplib.responses[httplib.OK])
raise NotImplementedError()

def _v1_1_slug_servers_72258_action(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load('_servers_suspend.json')
return (httplib.ACCEPTED, body, self.json_content_headers, httplib.responses[httplib.OK])
else:
raise NotImplementedError()

return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK])

def _v1_1_slug_servers_12063_action(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load('_servers_unpause.json')
return (httplib.ACCEPTED, body, self.json_content_headers, httplib.responses[httplib.OK])
else:
raise NotImplementedError()

return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK])

# This exists because the nova compute url in devstack has v2 in there but the v1.1 fixtures
# work fine.

Expand Down