From 4feebb05447f6f10ce529eae947e2300d0eebe76 Mon Sep 17 00:00:00 2001 From: tengqm Date: Mon, 19 Dec 2016 04:40:08 -0500 Subject: [PATCH] Support to more nova server operations With SDK release 0.9.11, we now have more nova server operations to use, this patch adds support from nova server profile. Ref: http://git.openstack.org/cgit/openstack/python-openstacksdk/tag/?h=0.9.11 Change-Id: I9d9a93a1ed62e1e693b6454b769671e30c854f60 --- senlin/drivers/openstack/nova_v2.py | 46 ++++++++ senlin/tests/unit/drivers/test_nova_v2.py | 134 ++++++++++++++++++++++ 2 files changed, 180 insertions(+) diff --git a/senlin/drivers/openstack/nova_v2.py b/senlin/drivers/openstack/nova_v2.py index 21d033fd9..4b926df04 100644 --- a/senlin/drivers/openstack/nova_v2.py +++ b/senlin/drivers/openstack/nova_v2.py @@ -90,6 +90,52 @@ class NovaClient(base.DriverBase): def server_change_password(self, server, new_password): return self.conn.compute.change_server_password(server, new_password) + @sdk.translate_exception + def server_pause(self, server): + return self.conn.compute.pause_server(server) + + @sdk.translate_exception + def server_unpause(self, server): + return self.conn.compute.unpause_server(server) + + @sdk.translate_exception + def server_suspend(self, server): + return self.conn.compute.suspend_server(server) + + @sdk.translate_exception + def server_resume(self, server): + return self.conn.compute.resume_server(server) + + @sdk.translate_exception + def server_lock(self, server): + return self.conn.compute.lock_server(server) + + @sdk.translate_exception + def server_unlock(self, server): + return self.conn.compute.unlock_server(server) + + @sdk.translate_exception + def server_start(self, server): + return self.conn.compute.start_server(server) + + @sdk.translate_exception + def server_stop(self, server): + return self.conn.compute.stop_server(server) + + @sdk.translate_exception + def server_rescue(self, server, admin_pass=None, image_ref=None): + return self.conn.compute.rescue_server(server, admin_pass=admin_pass, + image_ref=image_ref) + + @sdk.translate_exception + def server_unrescue(self, server): + return self.conn.compute.unrescue_server(server) + + @sdk.translate_exception + def server_evacuate(self, server, host=None, admin_pass=None, force=None): + return self.conn.compute.evacuate_server( + server, host=host, admin_pass=admin_pass, force=force) + @sdk.translate_exception def wait_for_server(self, server, status='ACTIVE', failures=['ERROR'], interval=2, timeout=None): diff --git a/senlin/tests/unit/drivers/test_nova_v2.py b/senlin/tests/unit/drivers/test_nova_v2.py index cb35b3bd2..f2f4b9833 100644 --- a/senlin/tests/unit/drivers/test_nova_v2.py +++ b/senlin/tests/unit/drivers/test_nova_v2.py @@ -158,6 +158,140 @@ class TestNovaV2(base.SenlinTestCase): self.assertEqual(target.return_value, res) target.assert_called_once_with('fakeid', 'new_password') + def test_server_pause(self): + d = nova_v2.NovaClient(self.conn_params) + server = mock.Mock() + target = d.conn.compute.pause_server + + res = d.server_pause(server) + + self.assertEqual(target.return_value, res) + target.assert_called_once_with(server) + + def test_server_unpause(self): + d = nova_v2.NovaClient(self.conn_params) + server = mock.Mock() + target = d.conn.compute.unpause_server + + res = d.server_unpause(server) + + self.assertEqual(target.return_value, res) + target.assert_called_once_with(server) + + def test_server_suspend(self): + d = nova_v2.NovaClient(self.conn_params) + server = mock.Mock() + target = d.conn.compute.suspend_server + + res = d.server_suspend(server) + + self.assertEqual(target.return_value, res) + target.assert_called_once_with(server) + + def test_server_resume(self): + d = nova_v2.NovaClient(self.conn_params) + server = mock.Mock() + target = d.conn.compute.resume_server + + res = d.server_resume(server) + + self.assertEqual(target.return_value, res) + target.assert_called_once_with(server) + + def test_server_lock(self): + d = nova_v2.NovaClient(self.conn_params) + server = mock.Mock() + target = d.conn.compute.lock_server + + res = d.server_lock(server) + + self.assertEqual(target.return_value, res) + target.assert_called_once_with(server) + + def test_server_unlock(self): + d = nova_v2.NovaClient(self.conn_params) + server = mock.Mock() + target = d.conn.compute.unlock_server + + res = d.server_unlock(server) + + self.assertEqual(target.return_value, res) + target.assert_called_once_with(server) + + def test_server_start(self): + d = nova_v2.NovaClient(self.conn_params) + server = mock.Mock() + target = d.conn.compute.start_server + + res = d.server_start(server) + + self.assertEqual(target.return_value, res) + target.assert_called_once_with(server) + + def test_server_stop(self): + d = nova_v2.NovaClient(self.conn_params) + server = mock.Mock() + target = d.conn.compute.stop_server + + res = d.server_stop(server) + + self.assertEqual(target.return_value, res) + target.assert_called_once_with(server) + + def test_server_rescue(self): + d = nova_v2.NovaClient(self.conn_params) + server = mock.Mock() + target = d.conn.compute.rescue_server + + res = d.server_rescue(server) + + self.assertEqual(target.return_value, res) + target.assert_called_once_with(server, admin_pass=None, image_ref=None) + + def test_server_rescue_with_params(self): + d = nova_v2.NovaClient(self.conn_params) + server = mock.Mock() + target = d.conn.compute.rescue_server + + res = d.server_rescue(server, admin_pass='PASS', image_ref='IMAGE') + + self.assertEqual(target.return_value, res) + target.assert_called_once_with(server, admin_pass='PASS', + image_ref='IMAGE') + + def test_server_unrescue(self): + d = nova_v2.NovaClient(self.conn_params) + server = mock.Mock() + target = d.conn.compute.unrescue_server + + res = d.server_unrescue(server) + + self.assertEqual(target.return_value, res) + target.assert_called_once_with(server) + + def test_server_evacuate(self): + d = nova_v2.NovaClient(self.conn_params) + server = mock.Mock() + target = d.conn.compute.evacuate_server + + res = d.server_evacuate(server) + + self.assertEqual(target.return_value, res) + target.assert_called_once_with(server, host=None, admin_pass=None, + force=None) + + def test_server_evacuate_with_params(self): + d = nova_v2.NovaClient(self.conn_params) + server = mock.Mock() + target = d.conn.compute.evacuate_server + + res = d.server_evacuate(server, host='HOST', admin_pass='PASS', + force='True') + + self.assertEqual(target.return_value, res) + target.assert_called_once_with(server, host='HOST', admin_pass='PASS', + force='True') + def test_wait_for_server(self): self.compute.find_server.return_value = 'foo'