summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kranz <david.kranz@qrclab.com>2012-08-28 10:25:42 -0400
committerDavid Kranz <david.kranz@qrclab.com>2012-09-04 12:53:18 -0400
commit4b4fbf0dc0d2e918b88c1e387f462faca7e98ffd (patch)
treee76b4d5f0e2f6cfd279deaf3fb699bfadfd7fa1f
parentc97a90c847f8811e5eb766dd26ff8373675514ac (diff)
downloadpython-swiftclient-4b4fbf0dc0d2e918b88c1e387f462faca7e98ffd.tar.gz
Allow endpoint type to be specified.
Fixes bug 1037690. Change-Id: I36b3807b2f3234c778316f1e743d27304755aed8
-rwxr-xr-xbin/swift6
-rw-r--r--swiftclient/client.py7
-rw-r--r--tests/test_swiftclient.py24
-rw-r--r--tests/utils.py16
4 files changed, 38 insertions, 15 deletions
diff --git a/bin/swift b/bin/swift
index e855e54..550a7f1 100755
--- a/bin/swift
+++ b/bin/swift
@@ -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):