adding cinder to sessions module
this change adds cinder to the sessions module and updates the cinder client usage to use sessions and auth plugins. * adding cinder options to sessions module * updating sahara.utils.openstack.cinder to use sessions and auth * fixing minor mistake in nova session generator * adding tests for cinder session * fixing tests for cinder client Change-Id: I494d9e1ac203609f58587904bbab92d3c8b3f879 Partial-Implements: blueprint keystone-sessions
This commit is contained in:
parent
5ef1302f1b
commit
5466269460
@ -27,6 +27,7 @@ LOG = logging.getLogger(__name__)
|
||||
|
||||
_SESSION_CACHE = None
|
||||
|
||||
SESSION_TYPE_CINDER = 'cinder'
|
||||
SESSION_TYPE_GENERIC = 'generic'
|
||||
SESSION_TYPE_KEYSTONE = 'keystone'
|
||||
SESSION_TYPE_NOVA = 'nova'
|
||||
@ -55,6 +56,7 @@ class SessionCache(object):
|
||||
'''create a new SessionCache'''
|
||||
self._sessions = {}
|
||||
self._session_funcs = {
|
||||
SESSION_TYPE_CINDER: self.get_cinder_session,
|
||||
SESSION_TYPE_GENERIC: self.get_generic_session,
|
||||
SESSION_TYPE_KEYSTONE: self.get_keystone_session,
|
||||
SESSION_TYPE_NOVA: self.get_nova_session,
|
||||
@ -89,6 +91,17 @@ class SessionCache(object):
|
||||
_('Session type {type} not recognized').
|
||||
format(type=session_type))
|
||||
|
||||
def get_cinder_session(self):
|
||||
session = self._sessions.get(SESSION_TYPE_CINDER)
|
||||
if not session:
|
||||
if CONF.cinder.ca_file:
|
||||
session = keystone.Session(cert=CONF.cinder.ca_file,
|
||||
verify=CONF.cinder.api_insecure)
|
||||
else:
|
||||
session = self.get_generic_session()
|
||||
self._set_session(SESSION_TYPE_CINDER, session)
|
||||
return session
|
||||
|
||||
def get_generic_session(self):
|
||||
session = self._sessions.get(SESSION_TYPE_GENERIC)
|
||||
if not session:
|
||||
@ -115,5 +128,5 @@ class SessionCache(object):
|
||||
verify=CONF.nova.api_insecure)
|
||||
else:
|
||||
session = self.get_generic_session()
|
||||
self._sessions[SESSION_TYPE_NOVA] = session
|
||||
self._set_session(SESSION_TYPE_NOVA, session)
|
||||
return session
|
||||
|
@ -71,3 +71,23 @@ class TestSessionCache(base.SaharaTestCase):
|
||||
keystone_session.reset_mock()
|
||||
sc.get_session(sessions.SESSION_TYPE_NOVA)
|
||||
self.assertFalse(keystone_session.called)
|
||||
|
||||
@mock.patch('keystoneclient.session.Session')
|
||||
def test_get_cinder_session(self, keystone_session):
|
||||
sc = sessions.SessionCache()
|
||||
self.override_config('ca_file', '/some/cacert', group='cinder')
|
||||
self.override_config('api_insecure', True, group='cinder')
|
||||
sc.get_session(sessions.SESSION_TYPE_CINDER)
|
||||
keystone_session.assert_called_once_with(cert='/some/cacert',
|
||||
verify=True)
|
||||
|
||||
sc = sessions.SessionCache()
|
||||
keystone_session.reset_mock()
|
||||
self.override_config('ca_file', None, group='cinder')
|
||||
self.override_config('api_insecure', None, group='cinder')
|
||||
sc.get_session(sessions.SESSION_TYPE_CINDER)
|
||||
keystone_session.assert_called_once_with()
|
||||
|
||||
keystone_session.reset_mock()
|
||||
sc.get_session(sessions.SESSION_TYPE_CINDER)
|
||||
self.assertFalse(keystone_session.called)
|
||||
|
@ -45,9 +45,10 @@ class TestCinder(test_base.SaharaTestCase):
|
||||
username=username, tenant_id=tenant_id, token=token,
|
||||
tenant_name=tenant_name, service_catalog=service_catalog, **kwargs)
|
||||
|
||||
@mock.patch('sahara.utils.openstack.keystone.auth')
|
||||
@mock.patch('cinderclient.v2.client.Client')
|
||||
@mock.patch('cinderclient.v1.client.Client')
|
||||
def test_get_cinder_client_api_v1(self, patched1, patched2):
|
||||
def test_get_cinder_client_api_v1(self, patched1, patched2, auth):
|
||||
self.override_config('api_version', 1, group='cinder')
|
||||
patched1.return_value = FakeCinderClient(1)
|
||||
patched2.return_value = FakeCinderClient(2)
|
||||
@ -55,9 +56,10 @@ class TestCinder(test_base.SaharaTestCase):
|
||||
client = cinder.client()
|
||||
self.assertEqual(1, client.client.api_version)
|
||||
|
||||
@mock.patch('sahara.utils.openstack.keystone.auth')
|
||||
@mock.patch('cinderclient.v2.client.Client')
|
||||
@mock.patch('cinderclient.v1.client.Client')
|
||||
def test_get_cinder_client_api_v2(self, patched1, patched2):
|
||||
def test_get_cinder_client_api_v2(self, patched1, patched2, auth):
|
||||
self.override_config('api_version', 2, group='cinder')
|
||||
patched1.return_value = FakeCinderClient(1)
|
||||
patched2.return_value = FakeCinderClient(2)
|
||||
|
@ -23,7 +23,9 @@ from oslo_log import log as logging
|
||||
from sahara import context
|
||||
from sahara import exceptions as ex
|
||||
from sahara.i18n import _LW
|
||||
from sahara.service import sessions
|
||||
from sahara.utils.openstack import base
|
||||
from sahara.utils.openstack import keystone
|
||||
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
@ -65,23 +67,13 @@ def validate_config():
|
||||
|
||||
|
||||
def client():
|
||||
ctx = context.current()
|
||||
args = {
|
||||
'insecure': CONF.cinder.api_insecure,
|
||||
'cacert': CONF.cinder.ca_file
|
||||
}
|
||||
session = sessions.cache().get_session(sessions.SESSION_TYPE_CINDER)
|
||||
auth = keystone.auth()
|
||||
|
||||
if CONF.cinder.api_version == 1:
|
||||
volume_url = base.url_for(ctx.service_catalog, 'volume')
|
||||
cinder = cinder_client_v1.Client(ctx.username, ctx.auth_token,
|
||||
ctx.tenant_id, volume_url, **args)
|
||||
cinder = cinder_client_v1.Client(session=session, auth=auth)
|
||||
else:
|
||||
volume_url = base.url_for(ctx.service_catalog, 'volumev2')
|
||||
cinder = cinder_client_v2.Client(ctx.username, ctx.auth_token,
|
||||
ctx.tenant_id, volume_url, **args)
|
||||
|
||||
cinder.client.auth_token = ctx.auth_token
|
||||
cinder.client.management_url = volume_url
|
||||
|
||||
cinder = cinder_client_v2.Client(session=session, auth=auth)
|
||||
return cinder
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user