3333from openstackclient .common import openstackkeyring
3434from openstackclient .common import restapi
3535from openstackclient .common import utils
36+ from openstackclient .identity import client as identity_client
3637
3738
3839KEYRING_SERVICE = 'openstack'
3940
40- DEFAULT_COMPUTE_API_VERSION = '2'
41- DEFAULT_IDENTITY_API_VERSION = '2.0'
42- DEFAULT_IMAGE_API_VERSION = '1'
43- DEFAULT_OBJECT_API_VERSION = '1'
44- DEFAULT_VOLUME_API_VERSION = '1'
4541DEFAULT_DOMAIN = 'default'
4642
4743
@@ -86,6 +82,15 @@ def __init__(self):
8682 # Assume TLS host certificate verification is enabled
8783 self .verify = True
8884
85+ # Get list of extension modules
86+ self .ext_modules = clientmanager .get_extension_modules (
87+ 'openstack.cli.extension' ,
88+ )
89+
90+ # Loop through extensions to get parser additions
91+ for mod in self .ext_modules :
92+ self .parser = mod .build_option_parser (self .parser )
93+
8994 # NOTE(dtroyer): This hack changes the help action that Cliff
9095 # automatically adds to the parser so we can defer
9196 # its execution until after the api-versioned commands
@@ -202,51 +207,6 @@ def build_option_parser(self, description, version):
202207 help = 'Default domain ID, default=' +
203208 DEFAULT_DOMAIN +
204209 ' (Env: OS_DEFAULT_DOMAIN)' )
205- parser .add_argument (
206- '--os-identity-api-version' ,
207- metavar = '<identity-api-version>' ,
208- default = env (
209- 'OS_IDENTITY_API_VERSION' ,
210- default = DEFAULT_IDENTITY_API_VERSION ),
211- help = 'Identity API version, default=' +
212- DEFAULT_IDENTITY_API_VERSION +
213- ' (Env: OS_IDENTITY_API_VERSION)' )
214- parser .add_argument (
215- '--os-compute-api-version' ,
216- metavar = '<compute-api-version>' ,
217- default = env (
218- 'OS_COMPUTE_API_VERSION' ,
219- default = DEFAULT_COMPUTE_API_VERSION ),
220- help = 'Compute API version, default=' +
221- DEFAULT_COMPUTE_API_VERSION +
222- ' (Env: OS_COMPUTE_API_VERSION)' )
223- parser .add_argument (
224- '--os-image-api-version' ,
225- metavar = '<image-api-version>' ,
226- default = env (
227- 'OS_IMAGE_API_VERSION' ,
228- default = DEFAULT_IMAGE_API_VERSION ),
229- help = 'Image API version, default=' +
230- DEFAULT_IMAGE_API_VERSION +
231- ' (Env: OS_IMAGE_API_VERSION)' )
232- parser .add_argument (
233- '--os-object-api-version' ,
234- metavar = '<object-api-version>' ,
235- default = env (
236- 'OS_OBJECT_API_VERSION' ,
237- default = DEFAULT_OBJECT_API_VERSION ),
238- help = 'Object API version, default=' +
239- DEFAULT_OBJECT_API_VERSION +
240- ' (Env: OS_OBJECT_API_VERSION)' )
241- parser .add_argument (
242- '--os-volume-api-version' ,
243- metavar = '<volume-api-version>' ,
244- default = env (
245- 'OS_VOLUME_API_VERSION' ,
246- default = DEFAULT_VOLUME_API_VERSION ),
247- help = 'Volume API version, default=' +
248- DEFAULT_VOLUME_API_VERSION +
249- ' (Env: OS_VOLUME_API_VERSION)' )
250210 parser .add_argument (
251211 '--os-token' ,
252212 metavar = '<token>' ,
@@ -270,6 +230,16 @@ def build_option_parser(self, description, version):
270230 help = 'Use keyring to store password, '
271231 'default=False (Env: OS_USE_KEYRING)' )
272232
233+ parser .add_argument (
234+ '--os-identity-api-version' ,
235+ metavar = '<identity-api-version>' ,
236+ default = env (
237+ 'OS_IDENTITY_API_VERSION' ,
238+ default = identity_client .DEFAULT_IDENTITY_API_VERSION ),
239+ help = 'Identity API version, default=' +
240+ identity_client .DEFAULT_IDENTITY_API_VERSION +
241+ ' (Env: OS_IDENTITY_API_VERSION)' )
242+
273243 return parser
274244
275245 def authenticate_user (self ):
@@ -391,17 +361,20 @@ def initialize_app(self, argv):
391361
392362 # Stash selected API versions for later
393363 self .api_version = {
394- 'compute' : self .options .os_compute_api_version ,
395364 'identity' : self .options .os_identity_api_version ,
396- 'image' : self .options .os_image_api_version ,
397- 'object-store' : self .options .os_object_api_version ,
398- 'volume' : self .options .os_volume_api_version ,
399365 }
366+ # Loop through extensions to get API versions
367+ for mod in self .ext_modules :
368+ ver = getattr (self .options , mod .API_VERSION_OPTION , None )
369+ if ver :
370+ self .api_version [mod .API_NAME ] = ver
371+ self .log .debug ('%s API version %s' % (mod .API_NAME , ver ))
400372
401373 # Add the API version-specific commands
402374 for api in self .api_version .keys ():
403375 version = '.v' + self .api_version [api ].replace ('.' , '_' )
404376 cmd_group = 'openstack.' + api .replace ('-' , '_' ) + version
377+ self .log .debug ('command group %s' % cmd_group )
405378 self .command_manager .add_command_group (cmd_group )
406379
407380 # Commands that span multiple APIs
@@ -420,6 +393,8 @@ def initialize_app(self, argv):
420393 # }
421394 self .command_manager .add_command_group (
422395 'openstack.extension' )
396+ # call InitializeXxx() here
397+ # set up additional clients to stuff in to client_manager??
423398
424399 # Handle deferred help and exit
425400 if self .options .deferred_help :
0 commit comments