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]. --password PASSWORD Defaults to env[OS_PASSWORD].
--tenant_name TENANT_NAME Defaults to env[OS_TENANT_NAME]. --tenant_name TENANT_NAME Defaults to env[OS_TENANT_NAME].
--tenant_id TENANT_ID Defaults to env[OS_TENANT_ID]. --tenant_id TENANT_ID Defaults to env[OS_TENANT_ID].
--url AUTH_URL Defaults to env[OS_AUTH_URL] or --url AUTH_URL Defaults to env[OS_AUTH_URL].
--version VERSION Defaults to env[KEYSTONE_VERSION] or 2.0. --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 --region_name NAME The region name in the Keystone Service
Catalog to use after authentication. Catalog to use after authentication.
Defaults to env[KEYSTONE_REGION_NAME] or the 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. 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:: For example, in Bash you'd use::
@@ -52,7 +52,7 @@ For example, in Bash you'd use::
export OS_PASSWORD=yadayadayada export OS_PASSWORD=yadayadayada
export OS_TENANT_NAME=myproject export OS_TENANT_NAME=myproject
export OS_AUTH_URL=http://example.com:5000/v2.0/ 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:: 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 from keystoneclient.generic import shell as shell_generic
def env(e): def env(*vars, **kwargs):
return os.environ.get(e, '') """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): class OpenStackIdentityShell(object):
@@ -88,9 +98,9 @@ class OpenStackIdentityShell(object):
default=env('OS_REGION_NAME'), default=env('OS_REGION_NAME'),
help='Defaults to env[OS_REGION_NAME].') help='Defaults to env[OS_REGION_NAME].')
parser.add_argument('--version', parser.add_argument('--identity_api_version',
default=env('KEYSTONE_VERSION'), default=env('OS_IDENTITY_API_VERSION', 'KEYSTONE_VERSION'),
help='Accepts 1.0 or 1.1, defaults to env[KEYSTONE_VERSION].') help='Defaults to env[OS_IDENTITY_API_VERSION] or 2.0.')
return parser return parser
@@ -143,7 +153,8 @@ class OpenStackIdentityShell(object):
(options, args) = parser.parse_known_args(argv) (options, args) = parser.parse_known_args(argv)
# build available subcommands based on version # 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 self.parser = subcommand_parser
# Parse args again and call whatever callback was selected # Parse args again and call whatever callback was selected
@@ -183,7 +194,8 @@ class OpenStackIdentityShell(object):
if args.token and args.endpoint: if args.token and args.endpoint:
token = args.token token = args.token
endpoint = args.endpoint 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, username=args.username,
tenant_name=args.tenant_name, tenant_name=args.tenant_name,
tenant_id=args.tenant_id, tenant_id=args.tenant_id,

View File

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