From 6902a288f8e403cfa143e5c8946ad39bcb2dc396 Mon Sep 17 00:00:00 2001 From: jichenjc Date: Sat, 20 Feb 2016 06:32:13 +0800 Subject: [PATCH] [compute] Support restore server Server in soft-delete state can be restored, add this command. Change-Id: Id9d7246f89ae65273505f36dcb664996534ae986 --- doc/source/command-objects/server.rst | 15 +++++++++++++ doc/source/commands.rst | 2 +- openstackclient/compute/v2/server.py | 22 +++++++++++++++++++ .../tests/compute/v2/test_server.py | 20 +++++++++++++++++ .../add-restore-server-d8c73e0e83df17dd.yaml | 4 ++++ setup.cfg | 1 + 6 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/add-restore-server-d8c73e0e83df17dd.yaml diff --git a/doc/source/command-objects/server.rst b/doc/source/command-objects/server.rst index d50ad37edd..674172f007 100644 --- a/doc/source/command-objects/server.rst +++ b/doc/source/command-objects/server.rst @@ -514,6 +514,21 @@ process for the user: the first is to perform the resize, the second is to either confirm (verify) success and release the old server, or to declare a revert to release the new server and restart the old one. +server restore +-------------- + +Restore server(s) from soft-deleted state + +.. program:: server restore +.. code:: bash + + os server restore + [ ...] + +.. describe:: + + Server(s) to restore (name or ID) + server resume ------------- diff --git a/doc/source/commands.rst b/doc/source/commands.rst index 2195720f11..9a24afa394 100644 --- a/doc/source/commands.rst +++ b/doc/source/commands.rst @@ -199,7 +199,7 @@ Those actions with an opposite action are noted in parens if applicable. * ``remove`` (``add``) - remove an object from a group of objects * ``rescue`` (``unrescue``) - reboot a server in a special rescue mode allowing access to the original disks * ``resize`` - change a server's flavor -* ``restore`` - restore a heat stack snapshot +* ``restore`` - restore a heat stack snapshot or restore a server in soft-deleted state * ``resume`` (``suspend``) - return one or more suspended servers to running state * ``revoke`` (``issue``) - revoke a token * ``save`` - download an object locally diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py index 4cb94822bd..7088dd4c36 100644 --- a/openstackclient/compute/v2/server.py +++ b/openstackclient/compute/v2/server.py @@ -1273,6 +1273,28 @@ class ResizeServer(command.Command): compute_client.servers.revert_resize(server) +class RestoreServer(command.Command): + """Restore server(s)""" + + def get_parser(self, prog_name): + parser = super(RestoreServer, self).get_parser(prog_name) + parser.add_argument( + 'server', + metavar='', + nargs='+', + help=_('Server(s) to restore (name or ID)'), + ) + return parser + + def take_action(self, parsed_args): + compute_client = self.app.client_manager.compute + for server in parsed_args.server: + utils.find_resource( + compute_client.servers, + server + ).restore() + + class ResumeServer(command.Command): """Resume server(s)""" diff --git a/openstackclient/tests/compute/v2/test_server.py b/openstackclient/tests/compute/v2/test_server.py index d379b173f4..722a51a2a6 100644 --- a/openstackclient/tests/compute/v2/test_server.py +++ b/openstackclient/tests/compute/v2/test_server.py @@ -998,6 +998,26 @@ class TestServerResize(TestServer): ) +class TestServerRestore(TestServer): + + def setUp(self): + super(TestServerRestore, self).setUp() + + # Get the command object to test + self.cmd = server.RestoreServer(self.app, None) + + # Set methods to be tested. + self.methods = { + 'restore': None, + } + + def test_server_restore_one_server(self): + self.run_method_with_servers('restore', 1) + + def test_server_restore_multi_servers(self): + self.run_method_with_servers('restore', 3) + + class TestServerResume(TestServer): def setUp(self): diff --git a/releasenotes/notes/add-restore-server-d8c73e0e83df17dd.yaml b/releasenotes/notes/add-restore-server-d8c73e0e83df17dd.yaml new file mode 100644 index 0000000000..09d3b58289 --- /dev/null +++ b/releasenotes/notes/add-restore-server-d8c73e0e83df17dd.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add support for the ``server restore`` command. diff --git a/setup.cfg b/setup.cfg index 2bb2fa38f3..c16524e2be 100644 --- a/setup.cfg +++ b/setup.cfg @@ -121,6 +121,7 @@ openstack.compute.v2 = server_remove_volume = openstackclient.compute.v2.server:RemoveServerVolume server_rescue = openstackclient.compute.v2.server:RescueServer server_resize = openstackclient.compute.v2.server:ResizeServer + server_restore = openstackclient.compute.v2.server:RestoreServer server_resume = openstackclient.compute.v2.server:ResumeServer server_set = openstackclient.compute.v2.server:SetServer server_shelve = openstackclient.compute.v2.server:ShelveServer