Skip to content

Commit

Permalink
Allow endpoint type to be specified.
Browse files Browse the repository at this point in the history
Fixes bug 1037690.

Change-Id: I36b3807b2f3234c778316f1e743d27304755aed8
  • Loading branch information
davidkranz committed Sep 4, 2012
1 parent c97a90c commit 4b4fbf0
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 15 deletions.
6 changes: 6 additions & 0 deletions bin/swift
Original file line number Diff line number Diff line change
Expand Up @@ -1025,6 +1025,7 @@ def parse_args(parser, args, enforce_requires=True):
'tenant_id': options.os_tenant_id,
'tenant_name': options.os_tenant_name,
'service_type': options.os_service_type,
'endpoint_type': options.os_endpoint_type,
'auth_token': options.os_auth_token,
'object_storage_url': options.os_storage_url,
}
Expand Down Expand Up @@ -1133,6 +1134,11 @@ Example:
'Defaults to env[OS_SERVICE_TYPE]')
parser.add_option('--os_service_type',
help=SUPPRESS_HELP)
parser.add_option('--os-endpoint-type',
metavar='<endpoint-type>',
default=environ.get('OS_ENDPOINT_TYPE'),
help='Openstack Endpoint type. (publicURL, e.g.)' \
'Defaults to env[OS_ENDPOINT_TYPE]')
parser.disable_interspersed_args()
(options, args) = parse_args(parser, argv[1:], enforce_requires=False)
parser.enable_interspersed_args()
Expand Down
7 changes: 4 additions & 3 deletions swiftclient/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -242,9 +242,10 @@ def get_keystoneclient_2_0(auth_url, user, key, os_options):
tenant_id=os_options.get('tenant_id'),
auth_url=auth_url)
service_type = os_options.get('service_type') or 'object-store'
endpoint_type = os_options.get('endpoint_type') or 'publicURL'
endpoint = _ksclient.service_catalog.url_for(
service_type=service_type,
endpoint_type='publicURL')
endpoint_type=endpoint_type)
return (endpoint, _ksclient.auth_token)


Expand Down Expand Up @@ -922,8 +923,8 @@ def __init__(self, authurl, user, key, retries=5, preauthurl=None,
:param tenant_name: The tenant/account name, required when connecting
to a auth 2.0 system.
:param os_options: The OpenStack options which can have tenant_id,
auth_token, service_type, tenant_name,
object_storage_url
auth_token, service_type, endpoint_type,
tenant_name, object_storage_url
"""
self.authurl = authurl
self.user = user
Expand Down
24 changes: 19 additions & 5 deletions tests/test_swiftclient.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,37 +175,51 @@ def test_auth_v1(self):
self.assertEquals(token, None)

def test_auth_v2(self):
c.get_keystoneclient_2_0 = fake_get_keystoneclient_2_0
os_options={'tenant_name': 'asdf'}
c.get_keystoneclient_2_0 = fake_get_keystoneclient_2_0(os_options)
url, token = c.get_auth('http://www.test.com', 'asdf', 'asdf',
os_options={'tenant_name': 'asdf'},
os_options=os_options,
auth_version="2.0")
self.assertTrue(url.startswith("http"))
self.assertTrue(token)

def test_auth_v2_no_tenant_name(self):
c.get_keystoneclient_2_0 = fake_get_keystoneclient_2_0
c.get_keystoneclient_2_0 = fake_get_keystoneclient_2_0({})
self.assertRaises(c.ClientException, c.get_auth,
'http://www.tests.com', 'asdf', 'asdf',
os_options={},
auth_version='2.0')

def test_auth_v2_with_tenant_user_in_user(self):
c.get_keystoneclient_2_0 = fake_get_keystoneclient_2_0
tenant_option = {'tenant_name': 'foo'}
c.get_keystoneclient_2_0 = fake_get_keystoneclient_2_0(tenant_option)
url, token = c.get_auth('http://www.test.com', 'foo:bar', 'asdf',
os_options={},
auth_version="2.0")
self.assertTrue(url.startswith("http"))
self.assertTrue(token)

def test_auth_v2_tenant_name_no_os_options(self):
c.get_keystoneclient_2_0 = fake_get_keystoneclient_2_0
tenant_option = {'tenant_name': 'asdf'}
c.get_keystoneclient_2_0 = fake_get_keystoneclient_2_0(tenant_option)
url, token = c.get_auth('http://www.test.com', 'asdf', 'asdf',
tenant_name='asdf',
os_options={},
auth_version="2.0")
self.assertTrue(url.startswith("http"))
self.assertTrue(token)

def test_auth_v2_with_os_options(self):
os_options={'service_type': 'object-store',
'endpoint_type': 'internalURL',
'tenant_name': 'asdf'}
c.get_keystoneclient_2_0 = fake_get_keystoneclient_2_0(os_options)
url, token = c.get_auth('http://www.test.com', 'asdf', 'asdf',
os_options=os_options,
auth_version="2.0")
self.assertTrue(url.startswith("http"))
self.assertTrue(token)


class TestGetAccount(MockHttpTest):

Expand Down
16 changes: 9 additions & 7 deletions tests/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,15 @@

from eventlet import Timeout, sleep


def fake_get_keystoneclient_2_0(auth_url,
username,
tenant_name,
password,
service_type='object-store'):
return ("http://url/", "token")
def fake_get_keystoneclient_2_0(os_options):
def fake_get_keystoneclient_2_0(auth_url,
user,
key,
actual_os_options):
if actual_os_options != os_options:
return "", None
return ("http://url/", "token")
return fake_get_keystoneclient_2_0


def fake_http_connect(*code_iter, **kwargs):
Expand Down

0 comments on commit 4b4fbf0

Please sign in to comment.