Refator: use 'server start' to set a server power on
Change-Id: I5f5526e1bb240731684e5bd47a7eb7b883cd9c9d
This commit is contained in:
parent
693b93d77f
commit
51000d267b
@ -29,6 +29,41 @@ from moganclient.common.i18n import _
|
|||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class ServersActionBase(command.Command):
|
||||||
|
def _get_parser_with_action(self, prog_name, action):
|
||||||
|
parser = super(ServersActionBase, self).get_parser(prog_name)
|
||||||
|
parser.add_argument(
|
||||||
|
'server',
|
||||||
|
metavar='<server>',
|
||||||
|
nargs='+',
|
||||||
|
help=_("Baremetal server(s) to %s (name or UUID)") % action
|
||||||
|
)
|
||||||
|
return parser
|
||||||
|
|
||||||
|
def _action_multiple_items(self, parsed_args, action, method_name,
|
||||||
|
**kwargs):
|
||||||
|
bc_client = self.app.client_manager.baremetal_compute
|
||||||
|
result = 0
|
||||||
|
for one_server in parsed_args.server:
|
||||||
|
try:
|
||||||
|
data = utils.find_resource(
|
||||||
|
bc_client.server, one_server)
|
||||||
|
method = getattr(bc_client.server, method_name)
|
||||||
|
method(data.uuid, **kwargs)
|
||||||
|
except Exception as e:
|
||||||
|
result += 1
|
||||||
|
LOG.error(_("Failed to %(action)s server with name or UUID "
|
||||||
|
"'%(server)s': %(e)s") %
|
||||||
|
{'action': action, 'server': one_server, 'e': e})
|
||||||
|
|
||||||
|
if result > 0:
|
||||||
|
total = len(parsed_args.server)
|
||||||
|
msg = (_("%(result)s of %(total)s baremetal servers failed "
|
||||||
|
"to %(action)s.") % {'result': result, 'total': total,
|
||||||
|
'action': action})
|
||||||
|
raise exceptions.CommandError(msg)
|
||||||
|
|
||||||
|
|
||||||
class CreateServer(command.ShowOne):
|
class CreateServer(command.ShowOne):
|
||||||
"""Create a new baremetal server"""
|
"""Create a new baremetal server"""
|
||||||
|
|
||||||
@ -330,31 +365,12 @@ class UpdateServer(command.ShowOne):
|
|||||||
return zip(*sorted(six.iteritems(info)))
|
return zip(*sorted(six.iteritems(info)))
|
||||||
|
|
||||||
|
|
||||||
class SetServerPowerState(command.Command):
|
class StartServer(ServersActionBase):
|
||||||
"""Set the power state of baremetal server"""
|
"""Start a baremetal server."""
|
||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
parser = super(SetServerPowerState, self).get_parser(prog_name)
|
return self._get_parser_with_action(prog_name, 'start')
|
||||||
parser.add_argument(
|
|
||||||
'server',
|
|
||||||
metavar='<server>',
|
|
||||||
help=_("Baremetal server to update (name or UUID)")
|
|
||||||
)
|
|
||||||
parser.add_argument(
|
|
||||||
"--power-state",
|
|
||||||
metavar="<power-state>",
|
|
||||||
choices=['on', 'off', 'reboot'],
|
|
||||||
required=True,
|
|
||||||
help=_("Power state to be set to the baremetal server, must be "
|
|
||||||
"one of: 'on', 'off' and 'reboot'.")
|
|
||||||
)
|
|
||||||
return parser
|
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
bc_client = self.app.client_manager.baremetal_compute
|
self._action_multiple_items(parsed_args, 'start', 'set_power_state',
|
||||||
server = utils.find_resource(
|
power_state='on')
|
||||||
bc_client.server,
|
|
||||||
parsed_args.server,
|
|
||||||
)
|
|
||||||
bc_client.server.set_power_state(server_id=server.uuid,
|
|
||||||
power_state=parsed_args.power_state)
|
|
||||||
|
@ -18,7 +18,6 @@ import mock
|
|||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from osc_lib import exceptions
|
from osc_lib import exceptions
|
||||||
from osc_lib.tests import utils as osc_test_utils
|
|
||||||
from osc_lib import utils
|
from osc_lib import utils
|
||||||
|
|
||||||
from moganclient.osc.v1 import server
|
from moganclient.osc.v1 import server
|
||||||
@ -442,31 +441,67 @@ class TestServerShow(test_base.TestBaremetalComputeV1):
|
|||||||
self.assertEqual(expected, mock_get.call_args_list)
|
self.assertEqual(expected, mock_get.call_args_list)
|
||||||
|
|
||||||
|
|
||||||
@mock.patch.object(utils, 'find_resource')
|
class TestServerPowerActionBase(test_base.TestBaremetalComputeV1):
|
||||||
@mock.patch.object(server_mgr.ServerManager, '_update_all')
|
|
||||||
class TestSetServerPowerState(test_base.TestBaremetalComputeV1):
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestSetServerPowerState, self).setUp()
|
super(TestServerPowerActionBase, self).setUp()
|
||||||
self.cmd = server.SetServerPowerState(self.app, None)
|
self.action = None
|
||||||
self.fake_server = fakes.FakeServer.create_one_server()
|
self.action_name = None
|
||||||
|
|
||||||
def test_server_set_power_state(self, mock_update_all, mock_find):
|
def _test_server_power_action_one(self, mock_update_all, mock_find):
|
||||||
mock_find.return_value = self.fake_server
|
fake_server = fakes.FakeServer.create_one_server()
|
||||||
args = ['--power-state', 'off', self.fake_server.uuid]
|
mock_find.return_value = fake_server
|
||||||
verify_args = [('power_state', 'off'),
|
args = [fake_server.uuid]
|
||||||
('server', self.fake_server.uuid)]
|
verify_args = [('server', [fake_server.uuid])]
|
||||||
parsed_args = self.check_parser(self.cmd, args, verify_args)
|
parsed_args = self.check_parser(self.cmd, args, verify_args)
|
||||||
self.cmd.take_action(parsed_args)
|
self.cmd.take_action(parsed_args)
|
||||||
mock_update_all.assert_called_with(
|
mock_update_all.assert_called_with(
|
||||||
'/instances/%s/states/power' % self.fake_server.uuid,
|
'/instances/%s/states/power' % fake_server.uuid,
|
||||||
data={'target': 'off'})
|
data={'target': self.action})
|
||||||
|
|
||||||
def test_server_set_invalid_power_state(self,
|
def _test_server_power_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/power' % s.uuid,
|
||||||
|
data={'target': self.action}) for s in fake_servers]
|
||||||
|
self.assertEqual(expected, mock_update_all.call_args_list)
|
||||||
|
|
||||||
|
def _test_server_delete_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 TestServerStart(TestServerPowerActionBase):
|
||||||
|
def setUp(self):
|
||||||
|
super(TestServerStart, self).setUp()
|
||||||
|
self.cmd = server.StartServer(self.app, None)
|
||||||
|
self.action = 'on'
|
||||||
|
self.action_name = 'start'
|
||||||
|
|
||||||
|
def test_server_start_one(self, mock_update_all, mock_find):
|
||||||
|
self._test_server_power_action_one(mock_update_all, mock_find)
|
||||||
|
|
||||||
|
def test_server_start_multiple(self, mock_update_all, mock_find):
|
||||||
|
self._test_server_power_action_multiple(mock_update_all, mock_find)
|
||||||
|
|
||||||
|
def test_server_start_multiple_partly_failed(self,
|
||||||
mock_update_all, mock_find):
|
mock_update_all, mock_find):
|
||||||
mock_find.return_value = self.fake_server
|
self._test_server_delete_more_than_one_partly_failed(
|
||||||
args = ['--power-state', 'non_state', self.fake_server.uuid]
|
mock_update_all, mock_find)
|
||||||
verify_args = [('power_state', 'off'),
|
|
||||||
('server', self.fake_server.uuid)]
|
|
||||||
self.assertRaises(osc_test_utils.ParserException,
|
|
||||||
self.check_parser,
|
|
||||||
self.cmd, args, verify_args)
|
|
||||||
|
@ -41,7 +41,7 @@ openstack.baremetal_compute.v1 =
|
|||||||
baremetal_server_delete = moganclient.osc.v1.server:DeleteServer
|
baremetal_server_delete = moganclient.osc.v1.server:DeleteServer
|
||||||
baremetal_server_list = moganclient.osc.v1.server:ListServer
|
baremetal_server_list = moganclient.osc.v1.server:ListServer
|
||||||
baremetal_server_show = moganclient.osc.v1.server:ShowServer
|
baremetal_server_show = moganclient.osc.v1.server:ShowServer
|
||||||
baremetal_server_power = moganclient.osc.v1.server:SetServerPowerState
|
baremetal_server_start = moganclient.osc.v1.server:StartServer
|
||||||
baremetal_server_update = moganclient.osc.v1.server:UpdateServer
|
baremetal_server_update = moganclient.osc.v1.server:UpdateServer
|
||||||
baremetal_availability_zone_list = moganclient.osc.v1.availability_zone:ListAvailabilityZone
|
baremetal_availability_zone_list = moganclient.osc.v1.availability_zone:ListAvailabilityZone
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user