Add a simple extension hook

This enables stand-alone modules to hook in to the command-line
handler in a dedicated API namespace.  These extensions have access
to the existing clients via the client manager but no way to add
another client to the manager is provided..

blueprint client-extensions

Change-Id: I4b2eaa780d8ba881db23d950d09b8702e9e314ef
This commit is contained in:
Dean Troyer 2013-03-08 15:39:48 -06:00
parent 6fae83b935
commit 4fd5dd3b1a

@ -298,7 +298,6 @@ class OpenStackShell(App):
super(OpenStackShell, self).initialize_app(argv)
# stash selected API versions for later
# TODO(dtroyer): how do extenstions add their version requirements?
self.api_version = {
'compute': self.options.os_compute_api_version,
'identity': self.options.os_identity_api_version,
@ -312,6 +311,19 @@ class OpenStackShell(App):
self.command_manager.add_command_group(
'openstack.' + api + version)
# This is the naive extension implementation referred to in
# blueprint 'client-extensions'
# Extension modules can register their commands in an
# 'openstack.extension' entry point group:
# entry_points={
# 'openstack.extension': [
# 'list_repo=qaz.github.repo:ListRepo',
# 'show_repo=qaz.github.repo:ShowRepo',
# ],
# }
self.command_manager.add_command_group(
'openstack.extension')
# Handle deferred help and exit
if self.options.deferred_help:
self.DeferredHelpAction(self.parser, self.parser, None, None)