Merge "Add support of lock/unlock instance in client side"

This commit is contained in:
Jenkins 2017-02-17 09:00:01 +00:00 committed by Gerrit Code Review
commit 4c0935dcd5
4 changed files with 115 additions and 0 deletions

View File

@ -414,3 +414,25 @@ class RebootServer(ServersActionBase):
def take_action(self, parsed_args):
self._action_multiple_items(parsed_args, 'reboot', 'set_power_state',
power_state='reboot')
class LockServer(ServersActionBase):
"""Lock baremetal server(s)."""
def get_parser(self, prog_name):
return self._get_parser_with_action(prog_name, 'lock')
def take_action(self, parsed_args):
self._action_multiple_items(parsed_args, 'lock', 'set_lock_state',
lock_state=True)
class UnLockServer(ServersActionBase):
"""UnLock baremetal server(s)."""
def get_parser(self, prog_name):
return self._get_parser_with_action(prog_name, 'unlock')
def take_action(self, parsed_args):
self._action_multiple_items(parsed_args, 'unlock', 'set_lock_state',
lock_state=False)

View File

@ -549,3 +549,90 @@ class TestServerReboot(TestServerPowerActionBase):
mock_update_all, mock_find):
self._test_server_delete_more_than_one_partly_failed(
mock_update_all, mock_find)
class TestServerLockActionBase(test_base.TestBaremetalComputeV1):
def setUp(self):
super(TestServerLockActionBase, self).setUp()
self.action = None
self.action_name = None
def _test_server_lock_action_one(self, mock_update_all, mock_find):
fake_server = fakes.FakeServer.create_one_server()
mock_find.return_value = fake_server
args = [fake_server.uuid]
verify_args = [('server', [fake_server.uuid])]
parsed_args = self.check_parser(self.cmd, args, verify_args)
self.cmd.take_action(parsed_args)
mock_update_all.assert_called_with(
'/instances/%s/states/lock' % fake_server.uuid,
data={'target': self.action})
def _test_server_lock_action_multiple(self, mock_update_all,
mock_find):
fake_servers = fakes.FakeServer.create_servers(count=3)
mock_find.side_effect = fake_servers
args = [s.name for s in fake_servers]
verify_args = [('server', [s.name for s in fake_servers])]
parsed_args = self.check_parser(self.cmd, args, verify_args)
self.cmd.take_action(parsed_args)
expected = [mock.call(
'/instances/%s/states/lock' % s.uuid,
data={'target': self.action}) for s in fake_servers]
self.assertEqual(expected, mock_update_all.call_args_list)
def _test_server_lock_more_than_one_partly_failed(
self, mock_update_all, mock_find):
fake_servers = fakes.FakeServer.create_servers(count=3)
mock_find.side_effect = fake_servers
args = [s.name for s in fake_servers]
verify_args = [('server', [s.name for s in fake_servers])]
parsed_args = self.check_parser(self.cmd, args, verify_args)
mock_update_all.side_effect = [mock.Mock(), Exception(), mock.Mock()]
exc = self.assertRaises(exceptions.CommandError,
self.cmd.take_action, parsed_args)
self.assertEqual(
'1 of 3 baremetal servers failed to %s.' % self.action_name,
str(exc))
@mock.patch.object(utils, 'find_resource')
@mock.patch.object(server_mgr.ServerManager, '_update_all')
class TestServerLock(TestServerLockActionBase):
def setUp(self):
super(TestServerLock, self).setUp()
self.cmd = server.LockServer(self.app, None)
self.action = True
self.action_name = 'lock'
def test_server_lock_one(self, mock_update_all, mock_find):
self._test_server_lock_action_one(mock_update_all, mock_find)
def test_server_lock_multiple(self, mock_update_all, mock_find):
self._test_server_lock_action_multiple(mock_update_all, mock_find)
def test_server_lock_multiple_partly_failed(self,
mock_update_all, mock_find):
self._test_server_lock_more_than_one_partly_failed(
mock_update_all, mock_find)
@mock.patch.object(utils, 'find_resource')
@mock.patch.object(server_mgr.ServerManager, '_update_all')
class TestServerUnLock(TestServerLockActionBase):
def setUp(self):
super(TestServerUnLock, self).setUp()
self.cmd = server.UnLockServer(self.app, None)
self.action = False
self.action_name = 'unlock'
def test_server_unlock_one(self, mock_update_all, mock_find):
self._test_server_lock_action_one(mock_update_all, mock_find)
def test_server_unlock_multiple(self, mock_update_all, mock_find):
self._test_server_lock_action_multiple(mock_update_all, mock_find)
def test_server_unlock_multiple_partly_failed(self,
mock_update_all, mock_find):
self._test_server_lock_more_than_one_partly_failed(
mock_update_all, mock_find)

View File

@ -67,3 +67,7 @@ class ServerManager(base.ManagerWithFind):
def set_power_state(self, server_id, power_state):
url = '/instances/%s/states/power' % base.getid(server_id)
return self._update_all(url, data={'target': power_state})
def set_lock_state(self, server_id, lock_state):
url = '/instances/%s/states/lock' % base.getid(server_id)
return self._update_all(url, data={'target': lock_state})

View File

@ -40,11 +40,13 @@ openstack.baremetal_compute.v1 =
baremetal_server_create = moganclient.osc.v1.server:CreateServer
baremetal_server_delete = moganclient.osc.v1.server:DeleteServer
baremetal_server_list = moganclient.osc.v1.server:ListServer
baremetal_server_lock = moganclient.osc.v1.server:LockServer
baremetal_server_show = moganclient.osc.v1.server:ShowServer
baremetal_server_start = moganclient.osc.v1.server:StartServer
baremetal_server_stop = moganclient.osc.v1.server:StopServer
baremetal_server_reboot = moganclient.osc.v1.server:RebootServer
baremetal_server_update = moganclient.osc.v1.server:UpdateServer
baremetal_server_unlock = moganclient.osc.v1.server:UnLockServer
baremetal_availability_zone_list = moganclient.osc.v1.availability_zone:ListAvailabilityZone