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_CACHE = None
|
||||||
|
|
||||||
|
SESSION_TYPE_CINDER = 'cinder'
|
||||||
SESSION_TYPE_GENERIC = 'generic'
|
SESSION_TYPE_GENERIC = 'generic'
|
||||||
SESSION_TYPE_KEYSTONE = 'keystone'
|
SESSION_TYPE_KEYSTONE = 'keystone'
|
||||||
SESSION_TYPE_NOVA = 'nova'
|
SESSION_TYPE_NOVA = 'nova'
|
||||||
@ -55,6 +56,7 @@ class SessionCache(object):
|
|||||||
'''create a new SessionCache'''
|
'''create a new SessionCache'''
|
||||||
self._sessions = {}
|
self._sessions = {}
|
||||||
self._session_funcs = {
|
self._session_funcs = {
|
||||||
|
SESSION_TYPE_CINDER: self.get_cinder_session,
|
||||||
SESSION_TYPE_GENERIC: self.get_generic_session,
|
SESSION_TYPE_GENERIC: self.get_generic_session,
|
||||||
SESSION_TYPE_KEYSTONE: self.get_keystone_session,
|
SESSION_TYPE_KEYSTONE: self.get_keystone_session,
|
||||||
SESSION_TYPE_NOVA: self.get_nova_session,
|
SESSION_TYPE_NOVA: self.get_nova_session,
|
||||||
@ -89,6 +91,17 @@ class SessionCache(object):
|
|||||||
_('Session type {type} not recognized').
|
_('Session type {type} not recognized').
|
||||||
format(type=session_type))
|
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):
|
def get_generic_session(self):
|
||||||
session = self._sessions.get(SESSION_TYPE_GENERIC)
|
session = self._sessions.get(SESSION_TYPE_GENERIC)
|
||||||
if not session:
|
if not session:
|
||||||
@ -115,5 +128,5 @@ class SessionCache(object):
|
|||||||
verify=CONF.nova.api_insecure)
|
verify=CONF.nova.api_insecure)
|
||||||
else:
|
else:
|
||||||
session = self.get_generic_session()
|
session = self.get_generic_session()
|
||||||
self._sessions[SESSION_TYPE_NOVA] = session
|
self._set_session(SESSION_TYPE_NOVA, session)
|
||||||
return session
|
return session
|
||||||
|
@ -71,3 +71,23 @@ class TestSessionCache(base.SaharaTestCase):
|
|||||||
keystone_session.reset_mock()
|
keystone_session.reset_mock()
|
||||||
sc.get_session(sessions.SESSION_TYPE_NOVA)
|
sc.get_session(sessions.SESSION_TYPE_NOVA)
|
||||||
self.assertFalse(keystone_session.called)
|
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,
|
username=username, tenant_id=tenant_id, token=token,
|
||||||
tenant_name=tenant_name, service_catalog=service_catalog, **kwargs)
|
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.v2.client.Client')
|
||||||
@mock.patch('cinderclient.v1.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')
|
self.override_config('api_version', 1, group='cinder')
|
||||||
patched1.return_value = FakeCinderClient(1)
|
patched1.return_value = FakeCinderClient(1)
|
||||||
patched2.return_value = FakeCinderClient(2)
|
patched2.return_value = FakeCinderClient(2)
|
||||||
@ -55,9 +56,10 @@ class TestCinder(test_base.SaharaTestCase):
|
|||||||
client = cinder.client()
|
client = cinder.client()
|
||||||
self.assertEqual(1, client.client.api_version)
|
self.assertEqual(1, client.client.api_version)
|
||||||
|
|
||||||
|
@mock.patch('sahara.utils.openstack.keystone.auth')
|
||||||
@mock.patch('cinderclient.v2.client.Client')
|
@mock.patch('cinderclient.v2.client.Client')
|
||||||
@mock.patch('cinderclient.v1.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')
|
self.override_config('api_version', 2, group='cinder')
|
||||||
patched1.return_value = FakeCinderClient(1)
|
patched1.return_value = FakeCinderClient(1)
|
||||||
patched2.return_value = FakeCinderClient(2)
|
patched2.return_value = FakeCinderClient(2)
|
||||||
|
@ -23,7 +23,9 @@ from oslo_log import log as logging
|
|||||||
from sahara import context
|
from sahara import context
|
||||||
from sahara import exceptions as ex
|
from sahara import exceptions as ex
|
||||||
from sahara.i18n import _LW
|
from sahara.i18n import _LW
|
||||||
|
from sahara.service import sessions
|
||||||
from sahara.utils.openstack import base
|
from sahara.utils.openstack import base
|
||||||
|
from sahara.utils.openstack import keystone
|
||||||
|
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
@ -65,23 +67,13 @@ def validate_config():
|
|||||||
|
|
||||||
|
|
||||||
def client():
|
def client():
|
||||||
ctx = context.current()
|
session = sessions.cache().get_session(sessions.SESSION_TYPE_CINDER)
|
||||||
args = {
|
auth = keystone.auth()
|
||||||
'insecure': CONF.cinder.api_insecure,
|
|
||||||
'cacert': CONF.cinder.ca_file
|
|
||||||
}
|
|
||||||
if CONF.cinder.api_version == 1:
|
if CONF.cinder.api_version == 1:
|
||||||
volume_url = base.url_for(ctx.service_catalog, 'volume')
|
cinder = cinder_client_v1.Client(session=session, auth=auth)
|
||||||
cinder = cinder_client_v1.Client(ctx.username, ctx.auth_token,
|
|
||||||
ctx.tenant_id, volume_url, **args)
|
|
||||||
else:
|
else:
|
||||||
volume_url = base.url_for(ctx.service_catalog, 'volumev2')
|
cinder = cinder_client_v2.Client(session=session, auth=auth)
|
||||||
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
|
|
||||||
|
|
||||||
return cinder
|
return cinder
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user