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:
Michael McCune 2015-08-25 14:25:54 -04:00
parent 5ef1302f1b
commit 5466269460
4 changed files with 45 additions and 18 deletions

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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