From 6d4678185dfe70ef79e9e2ced9c682a0fdc9c033 Mon Sep 17 00:00:00 2001 From: Igor_Bolotin Date: Fri, 30 Jan 2015 13:04:45 -0800 Subject: Added capabilities/options to 'openstack flavor list' command to match capabilities already provided by 'nova flavor-list': MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit —public | --private | --all options allows to list public only (default), private only or all flavors. —long displays more field. This option also fetches properties (extra-specs) for each flavor using separate API call for each flavor and it’s too slow to be done by default. However as an administrator - sometimes I need to be able to see them for all flavors. Removed empty “Extra Specs” column as well as "Swap" and "RXTX Factor" from default output. DocImpact Closes-Bug: #1416780 Change-Id: I30cfa2c75e28daf17b936543a177c23ae1743c37 --- openstackclient/compute/v2/flavor.py | 58 ++++++++++++++++++++++++++++++++---- 1 file changed, 52 insertions(+), 6 deletions(-) (limited to 'openstackclient/compute') diff --git a/openstackclient/compute/v2/flavor.py b/openstackclient/compute/v2/flavor.py index bb89a85b..195c9a0d 100644 --- a/openstackclient/compute/v2/flavor.py +++ b/openstackclient/compute/v2/flavor.py @@ -152,6 +152,36 @@ class ListFlavor(lister.Lister): log = logging.getLogger(__name__ + ".ListFlavor") + def get_parser(self, prog_name): + parser = super(ListFlavor, self).get_parser(prog_name) + public_group = parser.add_mutually_exclusive_group() + public_group.add_argument( + "--public", + dest="public", + action="store_true", + default=True, + help="List only public flavors (default)", + ) + public_group.add_argument( + "--private", + dest="public", + action="store_false", + help="List only private flavors", + ) + public_group.add_argument( + "--all", + dest="all", + action="store_true", + default=False, + help="List all flavors, whether public or private", + ) + parser.add_argument( + '--long', + action='store_true', + default=False, + help='List additional fields in output') + return parser + def take_action(self, parsed_args): self.log.debug("take_action(%s)", parsed_args) compute_client = self.app.client_manager.compute @@ -161,16 +191,32 @@ class ListFlavor(lister.Lister): "RAM", "Disk", "Ephemeral", - "Swap", "VCPUs", - "RXTX Factor", "Is Public", - "Extra Specs" ) - data = compute_client.flavors.list() - return (columns, + + # is_public is ternary - None means give all flavors, + # True is public only and False is private only + # By default Nova assumes True and gives admins public flavors + # and flavors from their own projects only. + is_public = None if parsed_args.all else parsed_args.public + + data = compute_client.flavors.list(is_public=is_public) + + if parsed_args.long: + columns = columns + ( + "Swap", + "RXTX Factor", + "Properties", + ) + for f in data: + f.properties = f.get_keys() + + column_headers = columns + + return (column_headers, (utils.get_item_properties( - s, columns, + s, columns, formatters={'Properties': utils.format_dict}, ) for s in data)) -- cgit v1.2.1