Skip to content

Commit 864f51f

Browse files
committed
compute: Migrate 'reboot server' to SDK
Change-Id: Ibad4078f680d3b2615b9ca6f6c72c4fd28030b55 Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
1 parent 5282bd2 commit 864f51f

3 files changed

Lines changed: 133 additions & 14 deletions

File tree

openstackclient/compute/v2/server.py

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
from cliff import columns as cliff_columns
2626
import iso8601
2727
from novaclient import api_versions
28-
from novaclient.v2 import servers
2928
from openstack import exceptions as sdk_exceptions
3029
from openstack import utils as sdk_utils
3130
from osc_lib.cli import format_columns
@@ -3064,7 +3063,7 @@ class RebootServer(command.Command):
30643063
_description = _("Perform a hard or soft server reboot")
30653064

30663065
def get_parser(self, prog_name):
3067-
parser = super(RebootServer, self).get_parser(prog_name)
3066+
parser = super().get_parser(prog_name)
30683067
parser.add_argument(
30693068
'server',
30703069
metavar='<server>',
@@ -3075,16 +3074,16 @@ def get_parser(self, prog_name):
30753074
'--hard',
30763075
dest='reboot_type',
30773076
action='store_const',
3078-
const=servers.REBOOT_HARD,
3079-
default=servers.REBOOT_SOFT,
3077+
const='HARD',
3078+
default='SOFT',
30803079
help=_('Perform a hard reboot'),
30813080
)
30823081
group.add_argument(
30833082
'--soft',
30843083
dest='reboot_type',
30853084
action='store_const',
3086-
const=servers.REBOOT_SOFT,
3087-
default=servers.REBOOT_SOFT,
3085+
const='SOFT',
3086+
default='SOFT',
30883087
help=_('Perform a soft reboot'),
30893088
)
30903089
parser.add_argument(
@@ -3101,21 +3100,23 @@ def _show_progress(progress):
31013100
self.app.stdout.write('\rProgress: %s' % progress)
31023101
self.app.stdout.flush()
31033102

3104-
compute_client = self.app.client_manager.compute
3105-
server = utils.find_resource(
3106-
compute_client.servers, parsed_args.server)
3107-
server.reboot(parsed_args.reboot_type)
3103+
compute_client = self.app.client_manager.sdk_connection.compute
3104+
server_id = compute_client.find_server(
3105+
parsed_args.server,
3106+
ignore_missing=False,
3107+
).id
3108+
compute_client.reboot_server(server_id, parsed_args.reboot_type)
31083109

31093110
if parsed_args.wait:
3111+
# We use osc-lib's wait_for_status since that allows for a callback
31103112
if utils.wait_for_status(
3111-
compute_client.servers.get,
3112-
server.id,
3113+
compute_client.get_server,
3114+
server_id,
31133115
callback=_show_progress,
31143116
):
31153117
self.app.stdout.write(_('Complete\n'))
31163118
else:
3117-
LOG.error(_('Error rebooting server: %s'),
3118-
server.id)
3119+
LOG.error(_('Error rebooting server: %s'), server_id)
31193120
self.app.stdout.write(_('Error rebooting server\n'))
31203121
raise SystemExit
31213122

openstackclient/tests/unit/compute/v2/test_server.py

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5827,6 +5827,120 @@ def test_server_migrate_with_wait_fails(self, mock_wait_for_status):
58275827
self.assertNotCalled(self.servers_mock.live_migrate)
58285828

58295829

5830+
class TestServerReboot(TestServer):
5831+
5832+
def setUp(self):
5833+
super().setUp()
5834+
5835+
self.sdk_client.reboot_server.return_value = None
5836+
5837+
self.cmd = server.RebootServer(self.app, None)
5838+
5839+
def test_server_reboot(self):
5840+
servers = self.setup_sdk_servers_mock(count=1)
5841+
5842+
arglist = [
5843+
servers[0].id,
5844+
]
5845+
verifylist = [
5846+
('server', servers[0].id),
5847+
('reboot_type', 'SOFT'),
5848+
('wait', False),
5849+
]
5850+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
5851+
5852+
result = self.cmd.take_action(parsed_args)
5853+
5854+
self.sdk_client.reboot_server.assert_called_once_with(
5855+
servers[0].id,
5856+
'SOFT',
5857+
)
5858+
self.assertIsNone(result)
5859+
5860+
def test_server_reboot_with_hard(self):
5861+
servers = self.setup_sdk_servers_mock(count=1)
5862+
5863+
arglist = [
5864+
'--hard',
5865+
servers[0].id,
5866+
]
5867+
verifylist = [
5868+
('server', servers[0].id),
5869+
('reboot_type', 'HARD'),
5870+
('wait', False),
5871+
]
5872+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
5873+
5874+
result = self.cmd.take_action(parsed_args)
5875+
5876+
self.sdk_client.reboot_server.assert_called_once_with(
5877+
servers[0].id,
5878+
'HARD',
5879+
)
5880+
self.assertIsNone(result)
5881+
5882+
@mock.patch.object(common_utils, 'wait_for_status', return_value=True)
5883+
def test_server_reboot_with_wait(self, mock_wait_for_status):
5884+
servers = self.setup_sdk_servers_mock(count=1)
5885+
5886+
arglist = [
5887+
'--wait',
5888+
servers[0].id,
5889+
]
5890+
verifylist = [
5891+
('server', servers[0].id),
5892+
('reboot_type', 'SOFT'),
5893+
('wait', True),
5894+
]
5895+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
5896+
5897+
result = self.cmd.take_action(parsed_args)
5898+
5899+
self.assertIsNone(result)
5900+
self.sdk_client.reboot_server.assert_called_once_with(
5901+
servers[0].id,
5902+
'SOFT',
5903+
)
5904+
mock_wait_for_status.assert_called_once_with(
5905+
self.sdk_client.get_server,
5906+
servers[0].id,
5907+
callback=mock.ANY,
5908+
)
5909+
5910+
@mock.patch.object(server.LOG, 'error')
5911+
@mock.patch.object(common_utils, 'wait_for_status', return_value=False)
5912+
def test_server_reboot_with_wait_fails(
5913+
self,
5914+
mock_wait_for_status,
5915+
mock_log,
5916+
):
5917+
servers = self.setup_sdk_servers_mock(count=1)
5918+
5919+
arglist = [
5920+
'--wait',
5921+
servers[0].id,
5922+
]
5923+
verifylist = [
5924+
('server', servers[0].id),
5925+
('reboot_type', 'SOFT'),
5926+
('wait', True),
5927+
]
5928+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
5929+
5930+
self.assertRaises(SystemExit, self.cmd.take_action, parsed_args)
5931+
5932+
self.assertIn('Error rebooting server', mock_log.call_args[0][0])
5933+
self.sdk_client.reboot_server.assert_called_once_with(
5934+
servers[0].id,
5935+
'SOFT',
5936+
)
5937+
mock_wait_for_status.assert_called_once_with(
5938+
self.sdk_client.get_server,
5939+
servers[0].id,
5940+
callback=mock.ANY,
5941+
)
5942+
5943+
58305944
class TestServerPause(TestServer):
58315945

58325946
def setUp(self):
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
features:
3+
- |
4+
Migrate ``server reboot`` command from novaclient to SDK.

0 commit comments

Comments
 (0)