diff --git a/openstackclient/common/extension.py b/openstackclient/common/extension.py index a3f94c09dd..91ee228be5 100644 --- a/openstackclient/common/extension.py +++ b/openstackclient/common/extension.py @@ -47,6 +47,11 @@ class ListExtension(lister.Lister): action='store_true', default=False, help='List extensions for the Compute API') + parser.add_argument( + '--volume', + action='store_true', + default=False, + help='List extensions for the Volume API') return parser def take_action(self, parsed_args): @@ -63,7 +68,8 @@ class ListExtension(lister.Lister): # by default we want to show everything, unless the # user specifies one or more of the APIs to show # for now, only identity and compute are supported. - show_all = (not parsed_args.identity and not parsed_args.compute) + show_all = (not parsed_args.identity and not parsed_args.compute + and not parsed_args.volume) if parsed_args.identity or show_all: identity_client = self.app.client_manager.identity @@ -81,6 +87,14 @@ class ListExtension(lister.Lister): message = "Extensions list not supported by Compute API" self.log.warning(message) + if parsed_args.volume or show_all: + volume_client = self.app.client_manager.volume + try: + data += volume_client.list_extensions.show_all() + except Exception: + message = "Extensions list not supported by Volume API" + self.log.warning(message) + return (columns, (utils.get_item_properties( s, columns, diff --git a/openstackclient/volume/client.py b/openstackclient/volume/client.py index 9b37b8f53c..98e787d682 100644 --- a/openstackclient/volume/client.py +++ b/openstackclient/volume/client.py @@ -15,8 +15,11 @@ import logging +from cinderclient import extension +from cinderclient.v1.contrib import list_extensions from cinderclient.v1 import volume_snapshots from cinderclient.v1 import volumes + from openstackclient.common import utils # Monkey patch for v1 cinderclient @@ -46,6 +49,7 @@ def make_client(instance): # Set client http_log_debug to True if verbosity level is high enough http_log_debug = utils.get_effective_log_level() <= logging.DEBUG + extensions = [extension.Extension('list_extensions', list_extensions)] client = volume_client( username=instance._username, api_key=instance._password, @@ -54,7 +58,8 @@ def make_client(instance): cacert=instance._cacert, insecure=instance._insecure, region_name=instance._region_name, - http_log_debug=http_log_debug + extensions=extensions, + http_log_debug=http_log_debug, ) # Populate the Cinder client to skip another auth query to Identity