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
This commit is contained in:
parent
6615160361
commit
fcead29c3f
|
@ -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()
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue