diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py
index 0c062a9e02..b3da73215f 100644
--- a/openstackclient/compute/v2/server.py
+++ b/openstackclient/compute/v2/server.py
@@ -25,7 +25,6 @@ import os
 from cliff import columns as cliff_columns
 import iso8601
 from novaclient import api_versions
-from novaclient.v2 import servers
 from openstack import exceptions as sdk_exceptions
 from openstack import utils as sdk_utils
 from osc_lib.cli import format_columns
@@ -3064,7 +3063,7 @@ class RebootServer(command.Command):
     _description = _("Perform a hard or soft server reboot")
 
     def get_parser(self, prog_name):
-        parser = super(RebootServer, self).get_parser(prog_name)
+        parser = super().get_parser(prog_name)
         parser.add_argument(
             'server',
             metavar='<server>',
@@ -3075,16 +3074,16 @@ class RebootServer(command.Command):
             '--hard',
             dest='reboot_type',
             action='store_const',
-            const=servers.REBOOT_HARD,
-            default=servers.REBOOT_SOFT,
+            const='HARD',
+            default='SOFT',
             help=_('Perform a hard reboot'),
         )
         group.add_argument(
             '--soft',
             dest='reboot_type',
             action='store_const',
-            const=servers.REBOOT_SOFT,
-            default=servers.REBOOT_SOFT,
+            const='SOFT',
+            default='SOFT',
             help=_('Perform a soft reboot'),
         )
         parser.add_argument(
@@ -3101,21 +3100,23 @@ class RebootServer(command.Command):
                 self.app.stdout.write('\rProgress: %s' % progress)
                 self.app.stdout.flush()
 
-        compute_client = self.app.client_manager.compute
-        server = utils.find_resource(
-            compute_client.servers, parsed_args.server)
-        server.reboot(parsed_args.reboot_type)
+        compute_client = self.app.client_manager.sdk_connection.compute
+        server_id = compute_client.find_server(
+            parsed_args.server,
+            ignore_missing=False,
+        ).id
+        compute_client.reboot_server(server_id, parsed_args.reboot_type)
 
         if parsed_args.wait:
+            # We use osc-lib's wait_for_status since that allows for a callback
             if utils.wait_for_status(
-                compute_client.servers.get,
-                server.id,
+                compute_client.get_server,
+                server_id,
                 callback=_show_progress,
             ):
                 self.app.stdout.write(_('Complete\n'))
             else:
-                LOG.error(_('Error rebooting server: %s'),
-                          server.id)
+                LOG.error(_('Error rebooting server: %s'), server_id)
                 self.app.stdout.write(_('Error rebooting server\n'))
                 raise SystemExit
 
diff --git a/openstackclient/tests/unit/compute/v2/test_server.py b/openstackclient/tests/unit/compute/v2/test_server.py
index 005f4b6697..93517f2f6e 100644
--- a/openstackclient/tests/unit/compute/v2/test_server.py
+++ b/openstackclient/tests/unit/compute/v2/test_server.py
@@ -5827,6 +5827,120 @@ class TestServerMigrate(TestServer):
         self.assertNotCalled(self.servers_mock.live_migrate)
 
 
+class TestServerReboot(TestServer):
+
+    def setUp(self):
+        super().setUp()
+
+        self.sdk_client.reboot_server.return_value = None
+
+        self.cmd = server.RebootServer(self.app, None)
+
+    def test_server_reboot(self):
+        servers = self.setup_sdk_servers_mock(count=1)
+
+        arglist = [
+            servers[0].id,
+        ]
+        verifylist = [
+            ('server', servers[0].id),
+            ('reboot_type', 'SOFT'),
+            ('wait', False),
+        ]
+        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+        result = self.cmd.take_action(parsed_args)
+
+        self.sdk_client.reboot_server.assert_called_once_with(
+            servers[0].id,
+            'SOFT',
+        )
+        self.assertIsNone(result)
+
+    def test_server_reboot_with_hard(self):
+        servers = self.setup_sdk_servers_mock(count=1)
+
+        arglist = [
+            '--hard',
+            servers[0].id,
+        ]
+        verifylist = [
+            ('server', servers[0].id),
+            ('reboot_type', 'HARD'),
+            ('wait', False),
+        ]
+        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+        result = self.cmd.take_action(parsed_args)
+
+        self.sdk_client.reboot_server.assert_called_once_with(
+            servers[0].id,
+            'HARD',
+        )
+        self.assertIsNone(result)
+
+    @mock.patch.object(common_utils, 'wait_for_status', return_value=True)
+    def test_server_reboot_with_wait(self, mock_wait_for_status):
+        servers = self.setup_sdk_servers_mock(count=1)
+
+        arglist = [
+            '--wait',
+            servers[0].id,
+        ]
+        verifylist = [
+            ('server', servers[0].id),
+            ('reboot_type', 'SOFT'),
+            ('wait', True),
+        ]
+        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+        result = self.cmd.take_action(parsed_args)
+
+        self.assertIsNone(result)
+        self.sdk_client.reboot_server.assert_called_once_with(
+            servers[0].id,
+            'SOFT',
+        )
+        mock_wait_for_status.assert_called_once_with(
+            self.sdk_client.get_server,
+            servers[0].id,
+            callback=mock.ANY,
+        )
+
+    @mock.patch.object(server.LOG, 'error')
+    @mock.patch.object(common_utils, 'wait_for_status', return_value=False)
+    def test_server_reboot_with_wait_fails(
+        self,
+        mock_wait_for_status,
+        mock_log,
+    ):
+        servers = self.setup_sdk_servers_mock(count=1)
+
+        arglist = [
+            '--wait',
+            servers[0].id,
+        ]
+        verifylist = [
+            ('server', servers[0].id),
+            ('reboot_type', 'SOFT'),
+            ('wait', True),
+        ]
+        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+        self.assertRaises(SystemExit, self.cmd.take_action, parsed_args)
+
+        self.assertIn('Error rebooting server', mock_log.call_args[0][0])
+        self.sdk_client.reboot_server.assert_called_once_with(
+            servers[0].id,
+            'SOFT',
+        )
+        mock_wait_for_status.assert_called_once_with(
+            self.sdk_client.get_server,
+            servers[0].id,
+            callback=mock.ANY,
+        )
+
+
 class TestServerPause(TestServer):
 
     def setUp(self):
diff --git a/releasenotes/notes/migrate-server-reboot-to-sdk-a49822810def4c8a.yaml b/releasenotes/notes/migrate-server-reboot-to-sdk-a49822810def4c8a.yaml
new file mode 100644
index 0000000000..e4c8c3ca25
--- /dev/null
+++ b/releasenotes/notes/migrate-server-reboot-to-sdk-a49822810def4c8a.yaml
@@ -0,0 +1,4 @@
+---
+features:
+  - |
+    Migrate ``server reboot`` command from novaclient to SDK.