Add Keystone v3 API support

Keystone is used for authentication in Manila and the latter's
client does not support latest version of it that exists for long time.

So, add support of Keystone v3 API and make Manila client to use it
at first priority if it is available.

Change-Id: I3e2f505f46f7ab60c66bcb0b1d65a38bea602df4
Closes-Bug: #1499260
This commit is contained in:
Valeriy Ponomaryov
2015-10-08 16:55:18 +03:00
parent 0a731dcafa
commit 997cc43433
7 changed files with 552 additions and 99 deletions

View File

@@ -139,6 +139,13 @@ class OpenStackManilaShell(object):
action='store_true',
help='Delete cached password and auth token.')
parser.add_argument('--os-user-id',
metavar='<auth-user-id>',
default=cliutils.env('OS_USER_ID'),
help=('Defaults to env [OS_USER_ID].'))
parser.add_argument('--os_user_id',
help=argparse.SUPPRESS)
parser.add_argument('--os-username',
metavar='<auth-user-name>',
default=cliutils.env('OS_USERNAME',
@@ -163,6 +170,16 @@ class OpenStackManilaShell(object):
parser.add_argument('--os_tenant_name',
help=argparse.SUPPRESS)
parser.add_argument('--os-project-name',
metavar='<auth-project-name>',
default=cliutils.env('OS_PROJECT_NAME'),
help=('Another way to specify tenant name. '
'This option is mutually exclusive with '
'--os-tenant-name. '
'Defaults to env[OS_PROJECT_NAME].'))
parser.add_argument('--os_project_name',
help=argparse.SUPPRESS)
parser.add_argument('--os-tenant-id',
metavar='<auth-tenant-id>',
default=cliutils.env('OS_TENANT_ID',
@@ -171,6 +188,46 @@ class OpenStackManilaShell(object):
parser.add_argument('--os_tenant_id',
help=argparse.SUPPRESS)
parser.add_argument('--os-project-id',
metavar='<auth-project-id>',
default=cliutils.env('OS_PROJECT_ID'),
help=('Another way to specify tenant ID. '
'This option is mutually exclusive with '
'--os-tenant-id. '
'Defaults to env[OS_PROJECT_ID].'))
parser.add_argument('--os_project_id',
help=argparse.SUPPRESS)
parser.add_argument('--os-user-domain-id',
metavar='<auth-user-domain-id>',
default=cliutils.env('OS_USER_DOMAIN_ID'),
help=('OpenStack user domain ID. '
'Defaults to env[OS_USER_DOMAIN_ID].'))
parser.add_argument('--os_user_domain_id',
help=argparse.SUPPRESS)
parser.add_argument('--os-user-domain-name',
metavar='<auth-user-domain-name>',
default=cliutils.env('OS_USER_DOMAIN_NAME'),
help=('OpenStack user domain name. '
'Defaults to env[OS_USER_DOMAIN_NAME].'))
parser.add_argument('--os_user_domain_name',
help=argparse.SUPPRESS)
parser.add_argument('--os-project-domain-id',
metavar='<auth-project-domain-id>',
default=cliutils.env('OS_PROJECT_DOMAIN_ID'),
help='Defaults to env[OS_PROJECT_DOMAIN_ID].')
parser.add_argument('--os_project_domain_id',
help=argparse.SUPPRESS)
parser.add_argument('--os-project-domain-name',
metavar='<auth-project-domain-name>',
default=cliutils.env('OS_PROJECT_DOMAIN_NAME'),
help='Defaults to env[OS_PROJECT_DOMAIN_NAME].')
parser.add_argument('--os_project_domain_name',
help=argparse.SUPPRESS)
parser.add_argument('--os-auth-url',
metavar='<auth-url>',
default=cliutils.env('OS_AUTH_URL',
@@ -246,6 +303,13 @@ class OpenStackManilaShell(object):
default=0,
help='Number of retries.')
parser.add_argument('--os-cert',
metavar='<certificate>',
default=cliutils.env('OS_CERT'),
help='Defaults to env[OS_CERT].')
parser.add_argument('--os_cert',
help=argparse.SUPPRESS)
return parser
def get_subcommand_parser(self, version):
@@ -386,12 +450,18 @@ class OpenStackManilaShell(object):
(os_username, os_password, os_tenant_name, os_auth_url,
os_region_name, os_tenant_id, endpoint_type, insecure,
service_type, service_name, share_service_name,
cacert, os_cache, os_reset_cache) = (
cacert, os_cache, os_reset_cache, os_user_id, os_user_domain_id,
os_user_domain_name, os_project_domain_id, os_project_domain_name,
os_project_name, os_project_id, os_cert) = (
args.os_username, args.os_password, args.os_tenant_name,
args.os_auth_url, args.os_region_name, args.os_tenant_id,
args.endpoint_type, args.insecure, args.service_type,
args.service_name, args.share_service_name,
args.os_cacert, args.os_cache, args.os_reset_cache)
args.os_cacert, args.os_cache, args.os_reset_cache,
args.os_user_id, args.os_user_domain_id, args.os_user_domain_name,
args.os_project_domain_id, args.os_project_domain_name,
args.os_project_name, args.os_project_id, args.os_cert,
)
if share_service_name:
service_name = share_service_name
@@ -403,29 +473,19 @@ class OpenStackManilaShell(object):
service_type = DEFAULT_MANILA_SERVICE_TYPE
service_type = cliutils.get_service_type(args.func) or service_type
# FIXME(usrleon): Here should be restrict for project id same as
# for os_username or os_password but for compatibility it is not.
if not cliutils.isunauthenticated(args.func):
if not os_username:
raise exc.CommandError(
"You must provide a username "
"via either --os-username or env[OS_USERNAME]")
if not (os_tenant_name or os_tenant_id):
raise exc.CommandError("You must provide a tenant_id "
"via either --os-tenant-id or "
"env[OS_TENANT_ID]")
if not os_auth_url:
raise exc.CommandError(
"You must provide an auth url "
"via either --os-auth-url or env[OS_AUTH_URL]")
if not (os_tenant_name or os_tenant_id):
if not (os_tenant_name or os_tenant_id or os_project_name or
os_project_id):
raise exc.CommandError(
"You must provide a tenant_id "
"via either --os-tenant-id or env[OS_TENANT_ID]")
"You must provide a tenant_name, tenant_id, "
"project_id or project_name (with "
"project_domain_name or project_domain_id) via "
"--os-tenant-name (env[OS_TENANT_NAME]), "
"--os-tenant-id (env[OS_TENANT_ID]), "
"--os-project-id (env[OS_PROJECT_ID]), "
"--os-project-name (env[OS_PROJECT_NAME]), "
"--os-project-domain-id (env[OS_PROJECT_DOMAIN_ID]) and "
"--os-project-domain-name (env[OS_PROJECT_DOMAIN_NAME])."
)
if not os_auth_url:
raise exc.CommandError(
@@ -434,11 +494,12 @@ class OpenStackManilaShell(object):
self.cs = client.Client(options.os_share_api_version,
username=os_username,
api_key=os_password,
project_name=os_tenant_name,
password=os_password,
project_name=os_project_name or os_tenant_name,
auth_url=os_auth_url,
insecure=insecure, region_name=os_region_name,
tenant_id=os_tenant_id,
insecure=insecure,
region_name=os_region_name,
tenant_id=os_project_id or os_tenant_id,
endpoint_type=endpoint_type,
extensions=self.extensions,
service_type=service_type,
@@ -448,7 +509,13 @@ class OpenStackManilaShell(object):
cacert=cacert,
use_keyring=os_cache,
force_new_token=os_reset_cache,
api_version=options.os_share_api_version)
api_version=options.os_share_api_version,
user_id=os_user_id,
user_domain_id=os_user_domain_id,
user_domain_name=os_user_domain_name,
project_domain_id=os_project_domain_id,
project_domain_name=os_project_domain_name,
cert=os_cert)
args.func(self.cs, args)