From 43c11c356b92e11a27179a02d2aab1b56fe3bc07 Mon Sep 17 00:00:00 2001
From: Tang Chen <tangchen@cn.fujitsu.com>
Date: Tue, 17 Nov 2015 21:44:02 +0800
Subject: [PATCH] Add --limit option to "server list" command.

This option will limit the total amount of items the command will list up.

Change-Id: I46af0d479d795ebb6a74585d0f76629dd940b117
---
 doc/source/command-objects/server.rst |  7 +++++++
 openstackclient/compute/v2/server.py  | 13 ++++++++++++-
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/doc/source/command-objects/server.rst b/doc/source/command-objects/server.rst
index 41d484ee97..afa328ba36 100644
--- a/doc/source/command-objects/server.rst
+++ b/doc/source/command-objects/server.rst
@@ -188,6 +188,7 @@ List servers
         [--project <project> [--project-domain <project-domain>]]
         [--long]
         [--marker <server>]
+        [--limit <limit>]
 
 .. option:: --reservation-id <reservation-id>
 
@@ -256,6 +257,12 @@ List servers
     The last server (name or ID) of the previous page. Display list of servers
     after marker. Display all servers if not specified.
 
+.. option:: --limit <limit>
+
+    Maximum number of servers to display. If limit equals -1, all servers will
+    be displayed. If limit is greater than 'osapi_max_limit' option of Nova
+    API, 'osapi_max_limit' will be used instead.
+
 server lock
 -----------
 
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py
index 2e5cd99ce2..1d0de27e17 100644
--- a/openstackclient/compute/v2/server.py
+++ b/openstackclient/compute/v2/server.py
@@ -755,6 +755,16 @@ class ListServer(lister.Lister):
                   ' list of servers after marker. Display all servers if not'
                   ' specified.')
         )
+        parser.add_argument(
+            '--limit',
+            metavar='<limit>',
+            type=int,
+            default=None,
+            help=("Maximum number of servers to display. If limit equals -1,"
+                  " all servers will be displayed. If limit is greater than"
+                  " 'osapi_max_limit' option of Nova API,"
+                  " 'osapi_max_limit' will be used instead."),
+        )
         return parser
 
     @utils.log_method(log)
@@ -845,7 +855,8 @@ class ListServer(lister.Lister):
                                             parsed_args.marker).id
 
         data = compute_client.servers.list(search_opts=search_opts,
-                                           marker=marker_id)
+                                           marker=marker_id,
+                                           limit=parsed_args.limit)
         return (column_headers,
                 (utils.get_item_properties(
                     s, columns,