diff options
-rwxr-xr-x | bin/swift | 6 | ||||
-rw-r--r-- | swiftclient/client.py | 7 | ||||
-rw-r--r-- | tests/test_swiftclient.py | 24 | ||||
-rw-r--r-- | tests/utils.py | 16 |
4 files changed, 38 insertions, 15 deletions
@@ -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, } @@ -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() diff --git a/swiftclient/client.py b/swiftclient/client.py index 88a0b1f..5425312 100644 --- a/swiftclient/client.py +++ b/swiftclient/client.py @@ -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) @@ -922,8 +923,8 @@ class Connection(object): :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 diff --git a/tests/test_swiftclient.py b/tests/test_swiftclient.py index 29233e0..0584d39 100644 --- a/tests/test_swiftclient.py +++ b/tests/test_swiftclient.py @@ -175,22 +175,24 @@ class TestGetAuth(MockHttpTest): 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") @@ -198,7 +200,8 @@ class TestGetAuth(MockHttpTest): 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={}, @@ -206,6 +209,17 @@ class TestGetAuth(MockHttpTest): 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): diff --git a/tests/utils.py b/tests/utils.py index 95f6335..ea6aeb3 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -16,13 +16,15 @@ from httplib import HTTPException 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): |