Merge "Add support of lock/unlock instance in client side"
This commit is contained in:
commit
4c0935dcd5
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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})
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user