diff options
author | Monty Taylor <mordred@inaugust.com> | 2016-12-22 06:42:25 -0600 |
---|---|---|
committer | Monty Taylor <mordred@inaugust.com> | 2016-12-22 07:24:44 -0600 |
commit | fcead29c3faa0d7f33e05cd527cbb475542d32ab (patch) | |
tree | 0aaadad173d2d6c4b545f6c926d99caf9133297d | |
parent | 6615160361f375f480ce66947957513ee3dd0134 (diff) | |
download | os-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.py | 80 | ||||
-rw-r--r-- | os_client_config/tests/test_cloud_config.py | 96 |
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): |