diff options
| author | Igor_Bolotin <Igor_Bolotin@symantec.com> | 2015-01-30 13:04:45 -0800 |
|---|---|---|
| committer | Igor_Bolotin <igor_bolotin@symantec.com> | 2015-02-03 07:57:20 -0800 |
| commit | 6d4678185dfe70ef79e9e2ced9c682a0fdc9c033 (patch) | |
| tree | c18200f0aa33399c2dbc1b5448f7e46c142186f5 /openstackclient/compute | |
| parent | 6fd5fc2d27fdcc95e6aeac61ea89f83ce3477822 (diff) | |
| download | python-openstackclient-6d4678185dfe70ef79e9e2ced9c682a0fdc9c033.tar.gz | |
Added capabilities/options to 'openstack flavor list'
command to match capabilities already provided by
'nova flavor-list':
—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
Diffstat (limited to 'openstackclient/compute')
| -rw-r--r-- | openstackclient/compute/v2/flavor.py | 58 |
1 files changed, 52 insertions, 6 deletions
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)) |
