From 2c57f7bfb2dc39afd361b85639df1ac4e1d417f5 Mon Sep 17 00:00:00 2001 From: Boris Pavlovic Date: Thu, 29 Jun 2017 15:17:33 -0700 Subject: Add server list -n and --no-name-lookup arguments Remove translation of Image ID and Flavor ID to Image and Flavor names In large environments amount of images can be very large (thousands) Which requires ~hundreds of requests to Glance to get all images (by default client request only 20 images) As a result listing even few servers is going to take minutes This patch allows to avoid these queries by not doing translation, which allows one to get information about servers in seconds. Change-Id: I4ae00e6324a41c4c79bf5b620179dae99aea5431 --- openstackclient/compute/v2/server.py | 45 +++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 16 deletions(-) (limited to 'openstackclient/compute/v2') diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py index e8846d16..cb520d62 100644 --- a/openstackclient/compute/v2/server.py +++ b/openstackclient/compute/v2/server.py @@ -921,6 +921,12 @@ class ListServer(command.Lister): default=False, help=_('List additional fields in output'), ) + parser.add_argument( + '-n', '--no-name-lookup', + action='store_true', + default=False, + help=_('Skip flavor and image name lookup.'), + ) parser.add_argument( '--marker', metavar='', @@ -1054,21 +1060,26 @@ class ListServer(command.Lister): 'OS-EXT-AZ:availability_zone', 'OS-EXT-SRV-ATTR:host', ] - else: + elif parsed_args.no_name_lookup: columns = ( 'ID', 'Name', 'Status', - 'Networks', - 'Image Name', + 'Image ID', + 'Flavor ID', ) - column_headers = ( + column_headers = tuple(columns) + mixed_case_fields = [] + + else: + columns = ( 'ID', 'Name', 'Status', 'Networks', 'Image Name', ) + column_headers = tuple(columns) mixed_case_fields = [] marker_id = None @@ -1084,23 +1095,25 @@ class ListServer(command.Lister): # Create a dict that maps image_id to image object. # Needed so that we can display the "Image Name" column. # "Image Name" is not crucial, so we swallow any exceptions. - try: - images_list = self.app.client_manager.image.images.list() - for i in images_list: - images[i.id] = i - except Exception: - pass + if not parsed_args.no_name_lookup: + try: + images_list = self.app.client_manager.image.images.list() + for i in images_list: + images[i.id] = i + except Exception: + pass flavors = {} # Create a dict that maps flavor_id to flavor object. # Needed so that we can display the "Flavor Name" column. # "Flavor Name" is not crucial, so we swallow any exceptions. - try: - flavors_list = compute_client.flavors.list() - for i in flavors_list: - flavors[i.id] = i - except Exception: - pass + if not parsed_args.no_name_lookup: + try: + flavors_list = compute_client.flavors.list() + for i in flavors_list: + flavors[i.id] = i + except Exception: + pass # Populate image_name, image_id, flavor_name and flavor_id attributes # of server objects so that we can display those columns. -- cgit v1.2.1