Add support for rebuilding server
Change-Id: I6f85e68b34a0c928c7455e624d515f12eddb5596
This commit is contained in:
parent
9e24ea4212
commit
9fbfe4fab3
@ -51,6 +51,9 @@ Baremetalcompute server
|
||||
.. autoprogram-cliff:: openstack.baremetal_compute.v1
|
||||
:command: baremetalcompute server unset
|
||||
|
||||
.. autoprogram-cliff:: openstack.baremetal_compute.v1
|
||||
:command: baremetalcompute server rebuild
|
||||
|
||||
=============================
|
||||
Baremetalcompute server group
|
||||
=============================
|
||||
|
@ -556,6 +556,46 @@ class UnsetServer(command.Command):
|
||||
bc_client.server.update(server.uuid, updates)
|
||||
|
||||
|
||||
class RebuildServer(command.Command):
|
||||
"""Rebuild a baremetal server."""
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(RebuildServer, self).get_parser(prog_name)
|
||||
parser.add_argument(
|
||||
'server',
|
||||
metavar='<server>',
|
||||
help=_("Baremetal server to be rebuilt (name or UUID)")
|
||||
)
|
||||
parser.add_argument(
|
||||
"--image",
|
||||
metavar="<image>",
|
||||
help=_('Rebuild baremetal server with this image (name or ID)'),
|
||||
)
|
||||
parser.add_argument(
|
||||
'--preserve-ephemeral',
|
||||
action='store_true',
|
||||
default=False,
|
||||
help=_("Preserve the ephemeral disk partition when rebuilding")
|
||||
)
|
||||
return parser
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
bc_client = self.app.client_manager.baremetal_compute
|
||||
server = utils.find_resource(
|
||||
bc_client.server,
|
||||
parsed_args.server,
|
||||
)
|
||||
if parsed_args.image:
|
||||
image = utils.find_resource(
|
||||
self.app.client_manager.image.images,
|
||||
parsed_args.image)
|
||||
image_id = image.id
|
||||
else:
|
||||
image_id = None
|
||||
bc_client.server.rebuild(server.uuid, image_id,
|
||||
parsed_args.preserve_ephemeral)
|
||||
|
||||
|
||||
class StartServer(ServersActionBase):
|
||||
"""Start a baremetal server."""
|
||||
|
||||
|
@ -753,3 +753,39 @@ class TestServerRemoveInterface(TestServer):
|
||||
expected_url = '/servers/%(server)s/networks/interfaces/%(port_id)s' % \
|
||||
{'server': server, 'port_id': port_id}
|
||||
mock_delete.assert_called_once_with(expected_url)
|
||||
|
||||
|
||||
@mock.patch.object(utils, 'find_resource')
|
||||
@mock.patch.object(server_mgr.ServerManager, '_update_all')
|
||||
class TestServerRebuild(test_base.TestBaremetalComputeV1):
|
||||
def setUp(self):
|
||||
super(TestServerRebuild, self).setUp()
|
||||
self.cmd = server.RebuildServer(self.app, None)
|
||||
self.fake_server = fakes.FakeServer.create_one_server()
|
||||
|
||||
def test_server_rebuild(self, mock_update_all, mock_find):
|
||||
mock_find.return_value = self.fake_server
|
||||
args = [self.fake_server.uuid]
|
||||
verify_args = [('server', self.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(
|
||||
'/servers/%s/states/provision' % self.fake_server.uuid,
|
||||
data={'target': 'rebuild', 'preserve_ephemeral': False})
|
||||
|
||||
def test_server_rebuild_with_image(self, mock_update_all, mock_find):
|
||||
self.app.client_manager.image = mock.Mock()
|
||||
mocked_img = mock.Mock()
|
||||
mocked_img.id = 'mocked-img-id'
|
||||
mock_find.side_effect = [self.fake_server, mocked_img]
|
||||
args = ['--image', 'mocked-img-id', '--preserve-ephemeral',
|
||||
self.fake_server.uuid]
|
||||
verify_args = [('image', 'mocked-img-id'),
|
||||
('preserve_ephemeral', True),
|
||||
('server', self.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(
|
||||
'/servers/%s/states/provision' % self.fake_server.uuid,
|
||||
data={'target': 'rebuild', 'image_uuid': 'mocked-img-id',
|
||||
'preserve_ephemeral': True})
|
||||
|
@ -119,6 +119,14 @@ class ServerManager(base.ManagerWithFind):
|
||||
url = '/servers/%s' % base.getid(server_id)
|
||||
return self._update(url, data=updates)
|
||||
|
||||
def rebuild(self, server_id, image_uuid=None, preserve_ephemeral=None):
|
||||
url = '/servers/%s/states/provision' % base.getid(server_id)
|
||||
data = {"target": "rebuild"}
|
||||
data.update(preserve_ephemeral=preserve_ephemeral)
|
||||
if image_uuid:
|
||||
data.update(image_uuid=image_uuid)
|
||||
return self._update_all(url, data=data)
|
||||
|
||||
def set_power_state(self, server_id, power_state):
|
||||
url = '/servers/%s/states/power' % base.getid(server_id)
|
||||
return self._update_all(url, data={'target': power_state})
|
||||
|
@ -45,6 +45,7 @@ openstack.baremetal_compute.v1 =
|
||||
baremetalcompute_server_stop = moganclient.osc.v1.server:StopServer
|
||||
baremetalcompute_server_reboot = moganclient.osc.v1.server:RebootServer
|
||||
baremetalcompute_server_set = moganclient.osc.v1.server:SetServer
|
||||
baremetalcompute_server_rebuild = moganclient.osc.v1.server:RebuildServer
|
||||
baremetalcompute_server_unset = moganclient.osc.v1.server:UnsetServer
|
||||
baremetalcompute_server_unlock = moganclient.osc.v1.server:UnLockServer
|
||||
baremetalcompute_server_netinfo = moganclient.osc.v1.server:ShowServerNetworkInfo
|
||||
|
Loading…
x
Reference in New Issue
Block a user