From 7d138b94eccdc30487d3aa95c8bd6338933eefe6 Mon Sep 17 00:00:00 2001 From: Dean Troyer Date: Mon, 29 Jul 2013 12:28:53 -0500 Subject: [PATCH] Remove tenant round 3 - other commands Mostly options and help strings: * image, server, project usage, volume Change-Id: I788b0660f8c2daacde53c20a72dd1afc60cf5159 --- openstackclient/common/utils.py | 2 +- openstackclient/compute/v2/server.py | 8 ++++---- openstackclient/compute/v2/usage.py | 21 ++++++++++++++++++++- openstackclient/image/v1/image.py | 8 ++++---- openstackclient/volume/v1/volume.py | 12 ++++++++---- 5 files changed, 37 insertions(+), 14 deletions(-) diff --git a/openstackclient/common/utils.py b/openstackclient/common/utils.py index fd504ea17..a91301683 100644 --- a/openstackclient/common/utils.py +++ b/openstackclient/common/utils.py @@ -91,7 +91,7 @@ def format_dict(data): def get_item_properties(item, fields, mixed_case_fields=[], formatters={}): """Return a tuple containing the item properties. - :param item: a single item resource (e.g. Server, Tenant, etc) + :param item: a single item resource (e.g. Server, Project, etc) :param fields: tuple of strings with the desired field names :param mixed_case_fields: tuple of field names to preserve case :param formatters: dictionary mapping field names to callables diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py index 793461eba..124312296 100644 --- a/openstackclient/compute/v2/server.py +++ b/openstackclient/compute/v2/server.py @@ -414,10 +414,10 @@ class ListServer(lister.Lister): metavar='', help='regular expression to match instance name (admin only)') parser.add_argument( - '--all-tenants', + '--all-projects', action='store_true', - default=bool(int(os.environ.get("ALL_TENANTS", 0))), - help='display information from all tenants (admin only)') + default=bool(int(os.environ.get("ALL_PROJECTS", 0))), + help='Include all projects (admin only)') parser.add_argument( '--long', action='store_true', @@ -438,7 +438,7 @@ class ListServer(lister.Lister): 'flavor': parsed_args.flavor, 'image': parsed_args.image, 'host': parsed_args.host, - 'all_tenants': parsed_args.all_tenants, + 'all_tenants': parsed_args.all_projects, } self.log.debug('search options: %s', search_opts) diff --git a/openstackclient/compute/v2/usage.py b/openstackclient/compute/v2/usage.py index 0bfbc9b84..f60c2105b 100644 --- a/openstackclient/compute/v2/usage.py +++ b/openstackclient/compute/v2/usage.py @@ -47,6 +47,15 @@ class ListUsage(lister.Lister): def take_action(self, parsed_args): self.log.debug("take_action(%s)" % parsed_args) + + def _format_project(project): + if not project: + return "" + if project in project_cache.keys(): + return project_cache[project].name + else: + return project + compute_client = self.app.client_manager.compute columns = ( "tenant_id", @@ -55,7 +64,7 @@ class ListUsage(lister.Lister): "total_local_gb_usage" ) column_headers = ( - "Project ID", + "Project", "RAM MB-Hours", "CPU Hours", "Disk GB-Hours" @@ -76,6 +85,15 @@ class ListUsage(lister.Lister): usage_list = compute_client.usage.list(start, end) + # Cache the project list + project_cache = {} + try: + for p in self.app.client_manager.identity.tenants.list(): + project_cache[p.id] = p + except Exception: + # Just forget it if there's any trouble + pass + if len(usage_list) > 0: print("Usage from %s to %s:" % (start.strftime(dateformat), end.strftime(dateformat))) @@ -84,6 +102,7 @@ class ListUsage(lister.Lister): (utils.get_item_properties( s, columns, formatters={ + 'tenant_id': _format_project, 'total_memory_mb_usage': lambda x: float("%.2f" % x), 'total_vcpus_usage': lambda x: float("%.2f" % x), 'total_local_gb_usage': lambda x: float("%.2f" % x), diff --git a/openstackclient/image/v1/image.py b/openstackclient/image/v1/image.py index 0213ed1e2..8827d0797 100644 --- a/openstackclient/image/v1/image.py +++ b/openstackclient/image/v1/image.py @@ -71,8 +71,8 @@ class CreateImage(show.ShowOne): ) parser.add_argument( "--owner", - metavar="", - help="Owner of the image", + metavar="", + help="Image owner (project name or ID)", ) parser.add_argument( "--size", @@ -296,8 +296,8 @@ class SetImage(show.ShowOne): ) parser.add_argument( "--owner", - metavar="", - help="Owner of the image", + metavar="", + help="Image owner (project name or ID)", ) parser.add_argument( "--min-disk", diff --git a/openstackclient/volume/v1/volume.py b/openstackclient/volume/v1/volume.py index 97f8d31d0..c6690fd66 100644 --- a/openstackclient/volume/v1/volume.py +++ b/openstackclient/volume/v1/volume.py @@ -179,10 +179,10 @@ class ListVolume(lister.Lister): help='Filter results by name', ) parser.add_argument( - '--all-tenants', + '--all-projects', action='store_true', default=False, - help='Display information from all tenants (admin only)', + help='Include all projects (admin only)', ) parser.add_argument( '--long', @@ -232,7 +232,7 @@ class ListVolume(lister.Lister): 'Attached', ) search_opts = { - 'all_tenants': parsed_args.all_tenants, + 'all_tenants': parsed_args.all_projects, 'display_name': parsed_args.name, 'status': parsed_args.status, } @@ -322,7 +322,11 @@ class ShowVolume(show.ShowOne): volume._info.update( {'properties': utils.format_dict(volume._info.pop('metadata'))} ) - + if 'os-vol-tenant-attr:tenant_id' in volume._info: + volume._info.update( + {'project_id': volume._info.pop( + 'os-vol-tenant-attr:tenant_id')} + ) return zip(*sorted(six.iteritems(volume._info)))