From 4955117dff6ebebefcbe7bfafef0d8295e147d58 Mon Sep 17 00:00:00 2001
From: Tang Chen <tangchen@cn.fujitsu.com>
Date: Tue, 24 Nov 2015 18:47:26 +0800
Subject: [PATCH] Enable "openstack server suspend" command to take multiple
 servers.

Current "openstack server suspend" command could only suspend one server.
Improve it to be able to handle more than one servers. Also improve
the doc to reflect the new feature.

Change-Id: Ic0417ee28f46c9198a35744c0180342e61966b26
Implements: blueprint cmd-with-multi-servers
---
 doc/source/command-objects/server.rst |  6 +++---
 doc/source/commands.rst               |  2 +-
 openstackclient/compute/v2/server.py  | 14 ++++++++------
 3 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/doc/source/command-objects/server.rst b/doc/source/command-objects/server.rst
index 4aeef4d056..eb75ef87eb 100644
--- a/doc/source/command-objects/server.rst
+++ b/doc/source/command-objects/server.rst
@@ -628,17 +628,17 @@ Stop server(s)
 server suspend
 --------------
 
-Suspend server
+Suspend server(s)
 
 .. program:: server suspend
 .. code:: bash
 
     os server suspend
-        <server>
+        <server> [<server> ...]
 
 .. describe:: <server>
 
-    Server (name or ID)
+    Server(s) to suspend (name or ID)
 
 server unlock
 -------------
diff --git a/doc/source/commands.rst b/doc/source/commands.rst
index e69699b173..07dcd18d3f 100644
--- a/doc/source/commands.rst
+++ b/doc/source/commands.rst
@@ -185,7 +185,7 @@ Those actions with an opposite action are noted in parens if applicable.
 * ``show`` - display detailed information about the specific object
 * ``start`` (``stop``) - start one or more servers
 * ``stop`` (``start``) - stop one or more servers
-* ``suspend`` (``resume``) - stop a server and save to disk freeing memory
+* ``suspend`` (``resume``) - stop one or more servers and save to disk freeing memory
 * ``unlock`` (``lock``) - unlock one or more servers
 * ``unpause`` (``pause``) - return one or more paused servers to running state
 * ``unrescue`` (``rescue``) - return a server to normal boot mode
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py
index aa4569c3bb..db62f000a6 100644
--- a/openstackclient/compute/v2/server.py
+++ b/openstackclient/compute/v2/server.py
@@ -1585,7 +1585,7 @@ class StopServer(command.Command):
 
 
 class SuspendServer(command.Command):
-    """Suspend server"""
+    """Suspend server(s)"""
 
     log = logging.getLogger(__name__ + '.SuspendServer')
 
@@ -1594,7 +1594,8 @@ class SuspendServer(command.Command):
         parser.add_argument(
             'server',
             metavar='<server>',
-            help=_('Server (name or ID)'),
+            nargs='+',
+            help=_('Server(s) to suspend (name or ID)'),
         )
         return parser
 
@@ -1602,10 +1603,11 @@ class SuspendServer(command.Command):
     def take_action(self, parsed_args):
 
         compute_client = self.app.client_manager.compute
-        utils.find_resource(
-            compute_client.servers,
-            parsed_args.server,
-        ).suspend()
+        for server in parsed_args.server:
+            utils.find_resource(
+                compute_client.servers,
+                server,
+            ).suspend()
 
 
 class UnlockServer(command.Command):