summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMonty Taylor <mordred@inaugust.com>2016-12-22 06:42:25 -0600
committerMonty Taylor <mordred@inaugust.com>2016-12-22 07:24:44 -0600
commitfcead29c3faa0d7f33e05cd527cbb475542d32ab (patch)
tree0aaadad173d2d6c4b545f6c926d99caf9133297d
parent6615160361f375f480ce66947957513ee3dd0134 (diff)
downloados-client-config-fcead29c3faa0d7f33e05cd527cbb475542d32ab.tar.gz
Update swift constructor to be Session aware
python-swiftclient has Session support now! Use it, and remove a pile of customization specific for swift. We still need to put a few parameters in different places, but that's no worse than glance or trove. Change-Id: Ic51aee2bc7b535aa4b6e261fb3deb59bd921f563
-rw-r--r--os_client_config/cloud_config.py80
-rw-r--r--os_client_config/tests/test_cloud_config.py96
2 files changed, 34 insertions, 142 deletions
diff --git a/os_client_config/cloud_config.py b/os_client_config/cloud_config.py
index f61c498..ecf60a6 100644
--- a/os_client_config/cloud_config.py
+++ b/os_client_config/cloud_config.py
@@ -312,9 +312,6 @@ class CloudConfig(object):
if not client_class:
client_class = _get_client(service_key)
- # Because of course swift is different
- if service_key == 'object-store':
- return self._get_swift_client(client_class=client_class, **kwargs)
interface = self.get_interface(service_key)
# trigger exception on lack of service
endpoint = self.get_session_endpoint(service_key)
@@ -326,12 +323,20 @@ class CloudConfig(object):
else:
interface_key = 'endpoint_type'
- constructor_kwargs = dict(
- session=self.get_session(),
- service_name=self.get_service_name(service_key),
- service_type=self.get_service_type(service_key),
- endpoint_override=endpoint_override,
- region_name=self.region)
+ if service_key == 'object-store':
+ constructor_kwargs = dict(
+ session=self.get_session(),
+ os_options=dict(
+ service_type=self.get_service_type(service_key),
+ object_storage_url=endpoint_override,
+ region_name=self.region))
+ else:
+ constructor_kwargs = dict(
+ session=self.get_session(),
+ service_name=self.get_service_name(service_key),
+ service_type=self.get_service_type(service_key),
+ endpoint_override=endpoint_override,
+ region_name=self.region)
if service_key == 'image':
# os-client-config does not depend on glanceclient, but if
@@ -350,8 +355,11 @@ class CloudConfig(object):
if not endpoint_override:
constructor_kwargs['endpoint_override'] = endpoint
constructor_kwargs.update(kwargs)
- constructor_kwargs[interface_key] = interface
- if pass_version_arg:
+ if service_key == 'object-store':
+ constructor_kwargs['os_options'][interface_key] = interface
+ else:
+ constructor_kwargs[interface_key] = interface
+ if pass_version_arg and service_key != 'object-store':
if not version:
version = self.get_api_version(service_key)
# Temporary workaround while we wait for python-openstackclient
@@ -377,56 +385,6 @@ class CloudConfig(object):
return client_class(**constructor_kwargs)
- def _get_swift_client(self, client_class, **kwargs):
- auth_args = self.get_auth_args()
- auth_version = self.get_api_version('identity')
- session = self.get_session()
- token = session.get_token()
- endpoint = self.get_session_endpoint(service_key='object-store')
- if not endpoint:
- return None
- # If we have a username/password, we want to pass them to
- # swift - because otherwise it will not re-up tokens appropriately
- # However, if we only have non-password auth, then get a token
- # and pass it in
- swift_kwargs = dict(
- auth_version=auth_version,
- preauthurl=endpoint,
- preauthtoken=token,
- os_options=dict(
- region_name=self.get_region_name(),
- auth_token=token,
- object_storage_url=endpoint,
- service_type=self.get_service_type('object-store'),
- endpoint_type=self.get_interface('object-store'),
-
- ))
- if self.config['api_timeout'] is not None:
- swift_kwargs['timeout'] = float(self.config['api_timeout'])
-
- # create with password
- swift_kwargs['user'] = auth_args.get('username')
- swift_kwargs['key'] = auth_args.get('password')
- swift_kwargs['authurl'] = auth_args.get('auth_url')
- os_options = {}
- if auth_version == '2.0':
- os_options['tenant_name'] = auth_args.get('project_name')
- os_options['tenant_id'] = auth_args.get('project_id')
- else:
- os_options['project_name'] = auth_args.get('project_name')
- os_options['project_id'] = auth_args.get('project_id')
-
- for key in (
- 'user_id',
- 'project_domain_id',
- 'project_domain_name',
- 'user_domain_id',
- 'user_domain_name'):
- os_options[key] = auth_args.get(key)
- swift_kwargs['os_options'].update(os_options)
-
- return client_class(**swift_kwargs)
-
def get_cache_expiration_time(self):
if self._openstack_config:
return self._openstack_config.get_cache_expiration_time()
diff --git a/os_client_config/tests/test_cloud_config.py b/os_client_config/tests/test_cloud_config.py
index dcbeb3a..f97f85b 100644
--- a/os_client_config/tests/test_cloud_config.py
+++ b/os_client_config/tests/test_cloud_config.py
@@ -272,26 +272,13 @@ class TestCloudConfig(base.TestCase):
"test1", "region-al", config_dict, auth_plugin=mock.Mock())
cc.get_legacy_client('object-store', mock_client)
mock_client.assert_called_with(
- preauthtoken=mock.ANY,
- auth_version=u'3',
- authurl='http://example.com',
- key='testpassword',
+ session=mock.ANY,
os_options={
- 'auth_token': mock.ANY,
'region_name': 'region-al',
- 'object_storage_url': 'http://swift.example.com',
- 'user_id': None,
- 'user_domain_name': None,
- 'project_name': 'testproject',
- 'project_domain_name': None,
- 'project_domain_id': None,
- 'project_id': None,
'service_type': 'object-store',
+ 'object_storage_url': None,
'endpoint_type': 'public',
- 'user_domain_id': None
- },
- preauthurl='http://swift.example.com',
- user='testuser')
+ })
@mock.patch.object(cloud_config.CloudConfig, 'get_auth_args')
@mock.patch.object(cloud_config.CloudConfig, 'get_session_endpoint')
@@ -311,26 +298,13 @@ class TestCloudConfig(base.TestCase):
"test1", "region-al", config_dict, auth_plugin=mock.Mock())
cc.get_legacy_client('object-store', mock_client)
mock_client.assert_called_with(
- preauthtoken=mock.ANY,
- auth_version=u'2.0',
- authurl='http://example.com',
- key='testpassword',
+ session=mock.ANY,
os_options={
- 'auth_token': mock.ANY,
'region_name': 'region-al',
- 'object_storage_url': 'http://swift.example.com',
- 'user_id': None,
- 'user_domain_name': None,
- 'tenant_name': 'testproject',
- 'project_domain_name': None,
- 'project_domain_id': None,
- 'tenant_id': None,
'service_type': 'object-store',
+ 'object_storage_url': None,
'endpoint_type': 'public',
- 'user_domain_id': None
- },
- preauthurl='http://swift.example.com',
- user='testuser')
+ })
@mock.patch.object(cloud_config.CloudConfig, 'get_auth_args')
@mock.patch.object(cloud_config.CloudConfig, 'get_session_endpoint')
@@ -345,26 +319,13 @@ class TestCloudConfig(base.TestCase):
"test1", "region-al", config_dict, auth_plugin=mock.Mock())
cc.get_legacy_client('object-store', mock_client)
mock_client.assert_called_with(
- preauthtoken=mock.ANY,
- auth_version=u'2.0',
- authurl=None,
- key=None,
+ session=mock.ANY,
os_options={
- 'auth_token': mock.ANY,
'region_name': 'region-al',
- 'object_storage_url': 'http://example.com/v2',
- 'user_id': None,
- 'user_domain_name': None,
- 'tenant_name': None,
- 'project_domain_name': None,
- 'project_domain_id': None,
- 'tenant_id': None,
'service_type': 'object-store',
+ 'object_storage_url': None,
'endpoint_type': 'public',
- 'user_domain_id': None
- },
- preauthurl='http://example.com/v2',
- user=None)
+ })
@mock.patch.object(cloud_config.CloudConfig, 'get_auth_args')
@mock.patch.object(cloud_config.CloudConfig, 'get_session_endpoint')
@@ -380,27 +341,13 @@ class TestCloudConfig(base.TestCase):
"test1", "region-al", config_dict, auth_plugin=mock.Mock())
cc.get_legacy_client('object-store', mock_client)
mock_client.assert_called_with(
- preauthtoken=mock.ANY,
- auth_version=u'2.0',
- authurl=None,
- key=None,
+ session=mock.ANY,
os_options={
- 'auth_token': mock.ANY,
'region_name': 'region-al',
- 'object_storage_url': 'http://example.com/v2',
- 'user_id': None,
- 'user_domain_name': None,
- 'tenant_name': None,
- 'project_domain_name': None,
- 'project_domain_id': None,
- 'tenant_id': None,
'service_type': 'object-store',
+ 'object_storage_url': None,
'endpoint_type': 'public',
- 'user_domain_id': None
- },
- preauthurl='http://example.com/v2',
- timeout=9.0,
- user=None)
+ })
@mock.patch.object(cloud_config.CloudConfig, 'get_auth_args')
def test_legacy_client_object_store_endpoint(
@@ -414,26 +361,13 @@ class TestCloudConfig(base.TestCase):
"test1", "region-al", config_dict, auth_plugin=mock.Mock())
cc.get_legacy_client('object-store', mock_client)
mock_client.assert_called_with(
- preauthtoken=mock.ANY,
- auth_version=u'2.0',
- authurl=None,
- key=None,
+ session=mock.ANY,
os_options={
- 'auth_token': mock.ANY,
'region_name': 'region-al',
- 'object_storage_url': 'http://example.com/swift',
- 'user_id': None,
- 'user_domain_name': None,
- 'tenant_name': None,
- 'project_domain_name': None,
- 'project_domain_id': None,
- 'tenant_id': None,
'service_type': 'object-store',
+ 'object_storage_url': 'http://example.com/swift',
'endpoint_type': 'public',
- 'user_domain_id': None
- },
- preauthurl='http://example.com/swift',
- user=None)
+ })
@mock.patch.object(cloud_config.CloudConfig, 'get_session_endpoint')
def test_legacy_client_image(self, mock_get_session_endpoint):