Move --version to --identity_api_version

* Default to OS_IDENTITY_API_VERSION before KEYSTONE_VERSION
* Copy in 'env' function from python-novaclient hat supports multiple env var names
* Fixes bug 936162

Change-Id: I3b4013408465ea45788517cb31afb7fc652e6e95
This commit is contained in:
Brian Waldon
2012-02-19 04:32:26 -08:00
parent f4297ce10d
commit c4093ec56e
4 changed files with 30 additions and 17 deletions

View File

@@ -82,8 +82,9 @@ You'll find complete documentation on the shell by running
--password PASSWORD Defaults to env[OS_PASSWORD].
--tenant_name TENANT_NAME Defaults to env[OS_TENANT_NAME].
--tenant_id TENANT_ID Defaults to env[OS_TENANT_ID].
--url AUTH_URL Defaults to env[OS_AUTH_URL] or
--version VERSION Defaults to env[KEYSTONE_VERSION] or 2.0.
--url AUTH_URL Defaults to env[OS_AUTH_URL].
--identity_api_version IDENTITY_API_VERSION
Defaults to env[OS_IDENTITY_API_VERSION] or 2.0.
--region_name NAME The region name in the Keystone Service
Catalog to use after authentication.
Defaults to env[KEYSTONE_REGION_NAME] or the

View File

@@ -42,9 +42,9 @@ options, it is easier to just set them as environment variables:
The OpenStack API server URL.
.. envvar:: KEYSTONE_VERSION
.. envvar:: OS_IDENTITY_API_VERSION
The OpenStack API version.
The OpenStack Identity API version.
For example, in Bash you'd use::
@@ -52,7 +52,7 @@ For example, in Bash you'd use::
export OS_PASSWORD=yadayadayada
export OS_TENANT_NAME=myproject
export OS_AUTH_URL=http://example.com:5000/v2.0/
export KEYSTONE_VERSION=2.0
export OS_IDENTITY_API_VERSION=2.0
From there, all shell commands take the form::

View File

@@ -29,8 +29,18 @@ from keystoneclient.v2_0 import shell as shell_v2_0
from keystoneclient.generic import shell as shell_generic
def env(e):
return os.environ.get(e, '')
def env(*vars, **kwargs):
"""Search for the first defined of possibly many env vars
Returns the first environment variable defined in vars, or
returns the default defined in kwargs.
"""
for v in vars:
value = os.environ.get(v, None)
if value:
return value
return kwargs.get('default', '')
class OpenStackIdentityShell(object):
@@ -88,9 +98,9 @@ class OpenStackIdentityShell(object):
default=env('OS_REGION_NAME'),
help='Defaults to env[OS_REGION_NAME].')
parser.add_argument('--version',
default=env('KEYSTONE_VERSION'),
help='Accepts 1.0 or 1.1, defaults to env[KEYSTONE_VERSION].')
parser.add_argument('--identity_api_version',
default=env('OS_IDENTITY_API_VERSION', 'KEYSTONE_VERSION'),
help='Defaults to env[OS_IDENTITY_API_VERSION] or 2.0.')
return parser
@@ -143,7 +153,8 @@ class OpenStackIdentityShell(object):
(options, args) = parser.parse_known_args(argv)
# build available subcommands based on version
subcommand_parser = self.get_subcommand_parser(options.version)
api_version = options.identity_api_version
subcommand_parser = self.get_subcommand_parser(api_version)
self.parser = subcommand_parser
# Parse args again and call whatever callback was selected
@@ -183,7 +194,8 @@ class OpenStackIdentityShell(object):
if args.token and args.endpoint:
token = args.token
endpoint = args.endpoint
self.cs = self.get_api_class(options.version)(
api_version = options.identity_api_version
self.cs = self.get_api_class(api_version)(
username=args.username,
tenant_name=args.tenant_name,
tenant_id=args.tenant_id,

View File

@@ -55,16 +55,16 @@ class ShellTest(utils.TestCase):
assert do_tenant_mock.called
((a, b), c) = do_tenant_mock.call_args
assert (b.auth_url, b.password, b.tenant_id,
b.tenant_name, b.username, b.version) == \
b.tenant_name, b.username, b.identity_api_version) == \
(DEFAULT_AUTH_URL, DEFAULT_PASSWORD, DEFAULT_TENANT_ID,
DEFAULT_TENANT_NAME, DEFAULT_USERNAME, '')
shell('--auth_url http://0.0.0.0:5000/ --password xyzpdq '
'--tenant_id 1234 --tenant_name fred --username barney '
'--version 2.0 user-list')
'--identity_api_version 2.0 user-list')
assert do_tenant_mock.called
((a, b), c) = do_tenant_mock.call_args
assert (b.auth_url, b.password, b.tenant_id,
b.tenant_name, b.username, b.version) == \
b.tenant_name, b.username, b.identity_api_version) == \
('http://0.0.0.0:5000/', 'xyzpdq', '1234',
'fred', 'barney', '2.0')
@@ -84,7 +84,7 @@ class ShellTest(utils.TestCase):
((a, b), c) = do_uc_mock.call_args
# restore os_tenant_id when review 4295 is merged
assert (b.auth_url, b.password, # b.os_tenant_id,
b.tenant_name, b.username, b.version) == \
b.tenant_name, b.username, b.identity_api_version) == \
(DEFAULT_AUTH_URL, DEFAULT_PASSWORD, # DEFAULT_TENANT_ID,
DEFAULT_TENANT_NAME, DEFAULT_USERNAME, '')
assert (b.tenant_id, b.name, b.passwd, b.enabled) == \
@@ -97,7 +97,7 @@ class ShellTest(utils.TestCase):
((a, b), c) = do_uc_mock.call_args
# restore os_tenant_id when review 4295 is merged
assert (b.auth_url, b.password, # b.os_tenant_id,
b.tenant_name, b.username, b.version) == \
b.tenant_name, b.username, b.identity_api_version) == \
(DEFAULT_AUTH_URL, DEFAULT_PASSWORD, # 'os-tenant',
DEFAULT_TENANT_NAME, DEFAULT_USERNAME, '')
assert (b.tenant_id, b.name, b.passwd, b.enabled) == \