Merge "Add Keystone v3 compatibility"
This commit is contained in:
commit
84d9888d82
@ -276,6 +276,26 @@ class OpenStackMagnumShell(object):
|
|||||||
default=cliutils.env('OS_TENANT_ID'),
|
default=cliutils.env('OS_TENANT_ID'),
|
||||||
help='Defaults to env[OS_TENANT_ID].')
|
help='Defaults to env[OS_TENANT_ID].')
|
||||||
|
|
||||||
|
parser.add_argument('--os-user-domain-id',
|
||||||
|
metavar='<auth-user-domain-id>',
|
||||||
|
default=cliutils.env('OS_USER_DOMAIN_ID'),
|
||||||
|
help='Defaults to env[OS_USER_DOMAIN_ID].')
|
||||||
|
|
||||||
|
parser.add_argument('--os-user-domain-name',
|
||||||
|
metavar='<auth-user-domain-name>',
|
||||||
|
default=cliutils.env('OS_USER_DOMAIN_NAME'),
|
||||||
|
help='Defaults to env[OS_USER_DOMAIN_NAME].')
|
||||||
|
|
||||||
|
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-name',
|
||||||
|
metavar='<auth-project-domain-name>',
|
||||||
|
default=cliutils.env('OS_PROJECT_DOMAIN_NAME'),
|
||||||
|
help='Defaults to env[OS_PROJECT_DOMAIN_NAME].')
|
||||||
|
|
||||||
parser.add_argument('--service-type',
|
parser.add_argument('--service-type',
|
||||||
metavar='<service-type>',
|
metavar='<service-type>',
|
||||||
help='Defaults to container for all '
|
help='Defaults to container for all '
|
||||||
@ -440,9 +460,13 @@ class OpenStackMagnumShell(object):
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
(os_username, os_tenant_name, os_tenant_id,
|
(os_username, os_tenant_name, os_tenant_id,
|
||||||
|
os_user_domain_id, os_user_domain_name,
|
||||||
|
os_project_domain_id, os_project_domain_name,
|
||||||
os_auth_url, os_auth_system, endpoint_type,
|
os_auth_url, os_auth_system, endpoint_type,
|
||||||
service_type, bypass_url, insecure) = (
|
service_type, bypass_url, insecure) = (
|
||||||
(args.os_username, args.os_tenant_name, args.os_tenant_id,
|
(args.os_username, args.os_tenant_name, args.os_tenant_id,
|
||||||
|
args.os_user_domain_id, args.os_user_domain_name,
|
||||||
|
args.os_project_domain_id, args.os_project_domain_name,
|
||||||
args.os_auth_url, args.os_auth_system, args.endpoint_type,
|
args.os_auth_url, args.os_auth_system, args.endpoint_type,
|
||||||
args.service_type, args.bypass_url, args.insecure)
|
args.service_type, args.bypass_url, args.insecure)
|
||||||
)
|
)
|
||||||
@ -530,6 +554,10 @@ class OpenStackMagnumShell(object):
|
|||||||
api_key=os_password,
|
api_key=os_password,
|
||||||
project_id=os_tenant_id,
|
project_id=os_tenant_id,
|
||||||
project_name=os_tenant_name,
|
project_name=os_tenant_name,
|
||||||
|
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,
|
||||||
auth_url=os_auth_url,
|
auth_url=os_auth_url,
|
||||||
service_type=service_type,
|
service_type=service_type,
|
||||||
region_name=args.os_region_name,
|
region_name=args.os_region_name,
|
||||||
|
@ -40,6 +40,13 @@ FAKE_ENV3 = {'OS_USERNAME': 'username',
|
|||||||
'OS_TENANT_ID': 'tenant_id',
|
'OS_TENANT_ID': 'tenant_id',
|
||||||
'OS_AUTH_URL': 'http://no.where/v2.0'}
|
'OS_AUTH_URL': 'http://no.where/v2.0'}
|
||||||
|
|
||||||
|
FAKE_ENV4 = {'OS_USERNAME': 'username',
|
||||||
|
'OS_PASSWORD': 'password',
|
||||||
|
'OS_TENANT_ID': 'tenant_id',
|
||||||
|
'OS_USER_DOMAIN_NAME': 'Default',
|
||||||
|
'OS_PROJECT_DOMAIN_NAME': 'Default',
|
||||||
|
'OS_AUTH_URL': 'http://no.where/v3'}
|
||||||
|
|
||||||
|
|
||||||
def _create_ver_list(versions):
|
def _create_ver_list(versions):
|
||||||
return {'versions': {'values': versions}}
|
return {'versions': {'values': versions}}
|
||||||
@ -233,6 +240,8 @@ class ShellTest(utils.TestCase):
|
|||||||
endpoint_type='publicURL', project_id='',
|
endpoint_type='publicURL', project_id='',
|
||||||
project_name='tenant_name', auth_url=self.AUTH_URL,
|
project_name='tenant_name', auth_url=self.AUTH_URL,
|
||||||
service_type='container', region_name=expected_region_name,
|
service_type='container', region_name=expected_region_name,
|
||||||
|
project_domain_id='', project_domain_name='',
|
||||||
|
user_domain_id='', user_domain_name='',
|
||||||
magnum_url=None, insecure=False)
|
magnum_url=None, insecure=False)
|
||||||
|
|
||||||
def test_main_option_region(self):
|
def test_main_option_region(self):
|
||||||
@ -258,6 +267,8 @@ class ShellTest(utils.TestCase):
|
|||||||
endpoint_type='publicURL', project_id='',
|
endpoint_type='publicURL', project_id='',
|
||||||
project_name='tenant_name', auth_url=self.AUTH_URL,
|
project_name='tenant_name', auth_url=self.AUTH_URL,
|
||||||
service_type='container', region_name=None,
|
service_type='container', region_name=None,
|
||||||
|
project_domain_id='', project_domain_name='',
|
||||||
|
user_domain_id='', user_domain_name='',
|
||||||
magnum_url=None, insecure=False)
|
magnum_url=None, insecure=False)
|
||||||
|
|
||||||
@mock.patch('magnumclient.v1.client.Client')
|
@mock.patch('magnumclient.v1.client.Client')
|
||||||
@ -269,6 +280,8 @@ class ShellTest(utils.TestCase):
|
|||||||
endpoint_type='internalURL', project_id='',
|
endpoint_type='internalURL', project_id='',
|
||||||
project_name='tenant_name', auth_url=self.AUTH_URL,
|
project_name='tenant_name', auth_url=self.AUTH_URL,
|
||||||
service_type='container', region_name=None,
|
service_type='container', region_name=None,
|
||||||
|
project_domain_id='', project_domain_name='',
|
||||||
|
user_domain_id='', user_domain_name='',
|
||||||
magnum_url=None, insecure=False)
|
magnum_url=None, insecure=False)
|
||||||
|
|
||||||
|
|
||||||
@ -287,3 +300,16 @@ class ShellTestKeystoneV3(ShellTest):
|
|||||||
mreq.register_uri(
|
mreq.register_uri(
|
||||||
'GET', v3_url, json=_create_ver_list([v3_version]),
|
'GET', v3_url, json=_create_ver_list([v3_version]),
|
||||||
status_code=200)
|
status_code=200)
|
||||||
|
|
||||||
|
@mock.patch('magnumclient.v1.client.Client')
|
||||||
|
def test_main_endpoint_public(self, mock_client):
|
||||||
|
self.make_env(fake_env=FAKE_ENV4)
|
||||||
|
self.shell('--endpoint-type publicURL bay-list')
|
||||||
|
mock_client.assert_called_once_with(
|
||||||
|
username='username', api_key='password',
|
||||||
|
endpoint_type='publicURL', project_id='tenant_id',
|
||||||
|
project_name='', auth_url=self.AUTH_URL,
|
||||||
|
service_type='container', region_name=None,
|
||||||
|
project_domain_id='', project_domain_name='Default',
|
||||||
|
user_domain_id='', user_domain_name='Default',
|
||||||
|
magnum_url=None, insecure=False)
|
||||||
|
@ -66,6 +66,10 @@ class ClientTest(testtools.TestCase):
|
|||||||
auth_url='authurl',
|
auth_url='authurl',
|
||||||
project_id=None,
|
project_id=None,
|
||||||
project_name=None,
|
project_name=None,
|
||||||
|
project_domain_id=None,
|
||||||
|
project_domain_name=None,
|
||||||
|
user_domain_id=None,
|
||||||
|
user_domain_name=None,
|
||||||
token='mytoken')
|
token='mytoken')
|
||||||
http_client.assert_called_once_with(
|
http_client.assert_called_once_with(
|
||||||
interface='public',
|
interface='public',
|
||||||
@ -87,6 +91,10 @@ class ClientTest(testtools.TestCase):
|
|||||||
auth_url='authurl',
|
auth_url='authurl',
|
||||||
username='myuser',
|
username='myuser',
|
||||||
password=None,
|
password=None,
|
||||||
|
project_domain_id=None,
|
||||||
|
project_domain_name=None,
|
||||||
|
user_domain_id=None,
|
||||||
|
user_domain_name=None,
|
||||||
project_id=None,
|
project_id=None,
|
||||||
project_name=None)
|
project_name=None)
|
||||||
http_client.assert_called_once_with(
|
http_client.assert_called_once_with(
|
||||||
@ -114,6 +122,10 @@ class ClientTest(testtools.TestCase):
|
|||||||
auth_url='authurl',
|
auth_url='authurl',
|
||||||
username='myuser',
|
username='myuser',
|
||||||
password=None,
|
password=None,
|
||||||
|
project_domain_id=None,
|
||||||
|
project_domain_name=None,
|
||||||
|
user_domain_id=None,
|
||||||
|
user_domain_name=None,
|
||||||
project_id=None,
|
project_id=None,
|
||||||
project_name=None)
|
project_name=None)
|
||||||
http_client.assert_not_called()
|
http_client.assert_not_called()
|
||||||
|
@ -34,7 +34,9 @@ class Client(object):
|
|||||||
endpoint_type=None, service_type='container',
|
endpoint_type=None, service_type='container',
|
||||||
region_name=None, input_auth_token=None,
|
region_name=None, input_auth_token=None,
|
||||||
session=None, password=None, auth_type='password',
|
session=None, password=None, auth_type='password',
|
||||||
interface='public', service_name=None, insecure=False):
|
interface='public', service_name=None, insecure=False,
|
||||||
|
user_domain_id=None, user_domain_name=None,
|
||||||
|
project_domain_id=None, project_domain_name=None):
|
||||||
|
|
||||||
# We have to keep the api_key are for backwards compat, but let's
|
# We have to keep the api_key are for backwards compat, but let's
|
||||||
# remove it from the rest of our code since it's not a keystone
|
# remove it from the rest of our code since it's not a keystone
|
||||||
@ -57,22 +59,28 @@ class Client(object):
|
|||||||
token=input_auth_token,
|
token=input_auth_token,
|
||||||
auth_url=auth_url,
|
auth_url=auth_url,
|
||||||
project_id=project_id,
|
project_id=project_id,
|
||||||
project_name=project_name)
|
project_name=project_name,
|
||||||
|
user_domain_id=user_domain_id,
|
||||||
|
user_domain_name=user_domain_name,
|
||||||
|
project_domain_id=project_domain_id,
|
||||||
|
project_domain_name=project_domain_name)
|
||||||
else:
|
else:
|
||||||
loader_kwargs = dict(
|
loader_kwargs = dict(
|
||||||
username=username,
|
username=username,
|
||||||
password=password,
|
password=password,
|
||||||
auth_url=auth_url,
|
auth_url=auth_url,
|
||||||
project_id=project_id,
|
project_id=project_id,
|
||||||
project_name=project_name)
|
project_name=project_name,
|
||||||
|
user_domain_id=user_domain_id,
|
||||||
|
user_domain_name=user_domain_name,
|
||||||
|
project_domain_id=project_domain_id,
|
||||||
|
project_domain_name=project_domain_name)
|
||||||
|
|
||||||
# Backwards compatability for people not passing in Session
|
# Backwards compatability for people not passing in Session
|
||||||
if session is None:
|
if session is None:
|
||||||
loader = loading.get_plugin_loader(auth_type)
|
loader = loading.get_plugin_loader(auth_type)
|
||||||
|
|
||||||
# This only supports keystone v2 password auth - but we can
|
# This should be able to handle v2 and v3 Keystone Auth
|
||||||
# support other auth by passing in a Session, which is the
|
|
||||||
# right thing to do anyway
|
|
||||||
auth_plugin = loader.load_from_options(**loader_kwargs)
|
auth_plugin = loader.load_from_options(**loader_kwargs)
|
||||||
session = ksa_session.Session(
|
session = ksa_session.Session(
|
||||||
auth=auth_plugin, verify=(not insecure))
|
auth=auth_plugin, verify=(not insecure))
|
||||||
|
Loading…
Reference in New Issue
Block a user