Initialize vmware session during store creation
The vmware store instance is reusable, there is no need to keep the vmware session object in the class data. This was earlier done when multiple store instances shared the session object. Change-Id: I856f7c743537326acc2a2bc9fed78ef473775f24
This commit is contained in:
@@ -268,21 +268,16 @@ class Store(glance_store.Store):
|
|||||||
capabilities.BitMasks.DRIVER_REUSABLE)
|
capabilities.BitMasks.DRIVER_REUSABLE)
|
||||||
OPTIONS = _VMWARE_OPTS
|
OPTIONS = _VMWARE_OPTS
|
||||||
WRITE_CHUNKSIZE = units.Mi
|
WRITE_CHUNKSIZE = units.Mi
|
||||||
# FIXME(arnaud): re-visit this code once the store API is cleaned up.
|
|
||||||
_VMW_SESSION = None
|
|
||||||
|
|
||||||
def __init__(self, conf):
|
def __init__(self, conf):
|
||||||
super(Store, self).__init__(conf)
|
super(Store, self).__init__(conf)
|
||||||
self.datastores = {}
|
self.datastores = {}
|
||||||
|
|
||||||
def reset_session(self, force=False):
|
def reset_session(self):
|
||||||
if Store._VMW_SESSION is None or force:
|
self.session = api.VMwareAPISession(
|
||||||
Store._VMW_SESSION = api.VMwareAPISession(
|
self.server_host, self.server_username, self.server_password,
|
||||||
self.server_host, self.server_username, self.server_password,
|
self.api_retry_count, self.tpoll_interval)
|
||||||
self.api_retry_count, self.tpoll_interval)
|
return self.session
|
||||||
return Store._VMW_SESSION
|
|
||||||
|
|
||||||
session = property(reset_session)
|
|
||||||
|
|
||||||
def get_schemes(self):
|
def get_schemes(self):
|
||||||
return (STORE_SCHEME,)
|
return (STORE_SCHEME,)
|
||||||
@@ -325,6 +320,7 @@ class Store(glance_store.Store):
|
|||||||
self.api_retry_count = self.conf.glance_store.vmware_api_retry_count
|
self.api_retry_count = self.conf.glance_store.vmware_api_retry_count
|
||||||
self.tpoll_interval = self.conf.glance_store.vmware_task_poll_interval
|
self.tpoll_interval = self.conf.glance_store.vmware_task_poll_interval
|
||||||
self.api_insecure = self.conf.glance_store.vmware_api_insecure
|
self.api_insecure = self.conf.glance_store.vmware_api_insecure
|
||||||
|
self.session = self.reset_session()
|
||||||
super(Store, self).configure()
|
super(Store, self).configure()
|
||||||
|
|
||||||
def _get_datacenter(self, datacenter_path):
|
def _get_datacenter(self, datacenter_path):
|
||||||
@@ -455,7 +451,7 @@ class Store(glance_store.Store):
|
|||||||
def _build_vim_cookie_header(self, verify_session=False):
|
def _build_vim_cookie_header(self, verify_session=False):
|
||||||
"""Build ESX host session cookie header."""
|
"""Build ESX host session cookie header."""
|
||||||
if verify_session and not self.session.is_current_session_active():
|
if verify_session and not self.session.is_current_session_active():
|
||||||
self.reset_session(force=True)
|
self.reset_session()
|
||||||
vim_cookies = self.session.vim.client.options.transport.cookiejar
|
vim_cookies = self.session.vim.client.options.transport.cookiejar
|
||||||
if len(list(vim_cookies)) > 0:
|
if len(list(vim_cookies)) > 0:
|
||||||
cookie = list(vim_cookies)[0]
|
cookie = list(vim_cookies)[0]
|
||||||
@@ -620,7 +616,7 @@ class Store(glance_store.Store):
|
|||||||
location.image_id})
|
location.image_id})
|
||||||
if resp.status >= 400:
|
if resp.status >= 400:
|
||||||
if resp.status == httplib.UNAUTHORIZED:
|
if resp.status == httplib.UNAUTHORIZED:
|
||||||
self.reset_session(force=True)
|
self.reset_session()
|
||||||
continue
|
continue
|
||||||
if resp.status == httplib.NOT_FOUND:
|
if resp.status == httplib.NOT_FOUND:
|
||||||
reason = _('VMware datastore could not find image at URI.')
|
reason = _('VMware datastore could not find image at URI.')
|
||||||
|
|||||||
@@ -95,7 +95,8 @@ class TestStore(base.StoreBaseTest,
|
|||||||
test_store_capabilities.TestStoreCapabilitiesChecking):
|
test_store_capabilities.TestStoreCapabilitiesChecking):
|
||||||
|
|
||||||
@mock.patch.object(vm_store.Store, '_get_datastore')
|
@mock.patch.object(vm_store.Store, '_get_datastore')
|
||||||
def setUp(self, mock_get_datastore):
|
@mock.patch('oslo_vmware.api.VMwareAPISession')
|
||||||
|
def setUp(self, mock_api_session, mock_get_datastore):
|
||||||
"""Establish a clean test environment."""
|
"""Establish a clean test environment."""
|
||||||
super(TestStore, self).setUp()
|
super(TestStore, self).setUp()
|
||||||
|
|
||||||
@@ -437,21 +438,11 @@ class TestStore(base.StoreBaseTest,
|
|||||||
|
|
||||||
@mock.patch.object(api, 'VMwareAPISession')
|
@mock.patch.object(api, 'VMwareAPISession')
|
||||||
def test_reset_session(self, mock_api_session):
|
def test_reset_session(self, mock_api_session):
|
||||||
# Initialize session and reset mock before testing.
|
|
||||||
self.store.reset_session()
|
self.store.reset_session()
|
||||||
mock_api_session.reset_mock()
|
|
||||||
self.store.reset_session(force=False)
|
|
||||||
self.assertFalse(mock_api_session.called)
|
|
||||||
self.store.reset_session()
|
|
||||||
self.assertFalse(mock_api_session.called)
|
|
||||||
self.store.reset_session(force=True)
|
|
||||||
self.assertTrue(mock_api_session.called)
|
self.assertTrue(mock_api_session.called)
|
||||||
|
|
||||||
@mock.patch.object(api, 'VMwareAPISession')
|
@mock.patch.object(api, 'VMwareAPISession')
|
||||||
def test_build_vim_cookie_header_active(self, mock_api_session):
|
def test_build_vim_cookie_header_active(self, mock_api_session):
|
||||||
# Initialize session and reset mock before testing.
|
|
||||||
self.store.reset_session()
|
|
||||||
mock_api_session.reset_mock()
|
|
||||||
self.store.session.is_current_session_active = mock.Mock()
|
self.store.session.is_current_session_active = mock.Mock()
|
||||||
self.store.session.is_current_session_active.return_value = True
|
self.store.session.is_current_session_active.return_value = True
|
||||||
self.store._build_vim_cookie_header(True)
|
self.store._build_vim_cookie_header(True)
|
||||||
@@ -459,9 +450,6 @@ class TestStore(base.StoreBaseTest,
|
|||||||
|
|
||||||
@mock.patch.object(api, 'VMwareAPISession')
|
@mock.patch.object(api, 'VMwareAPISession')
|
||||||
def test_build_vim_cookie_header_expired(self, mock_api_session):
|
def test_build_vim_cookie_header_expired(self, mock_api_session):
|
||||||
# Initialize session and reset mock before testing.
|
|
||||||
self.store.reset_session()
|
|
||||||
mock_api_session.reset_mock()
|
|
||||||
self.store.session.is_current_session_active = mock.Mock()
|
self.store.session.is_current_session_active = mock.Mock()
|
||||||
self.store.session.is_current_session_active.return_value = False
|
self.store.session.is_current_session_active.return_value = False
|
||||||
self.store._build_vim_cookie_header(True)
|
self.store._build_vim_cookie_header(True)
|
||||||
@@ -469,9 +457,6 @@ class TestStore(base.StoreBaseTest,
|
|||||||
|
|
||||||
@mock.patch.object(api, 'VMwareAPISession')
|
@mock.patch.object(api, 'VMwareAPISession')
|
||||||
def test_build_vim_cookie_header_expired_noverify(self, mock_api_session):
|
def test_build_vim_cookie_header_expired_noverify(self, mock_api_session):
|
||||||
# Initialize session and reset mock before testing.
|
|
||||||
self.store.reset_session()
|
|
||||||
mock_api_session.reset_mock()
|
|
||||||
self.store.session.is_current_session_active = mock.Mock()
|
self.store.session.is_current_session_active = mock.Mock()
|
||||||
self.store.session.is_current_session_active.return_value = False
|
self.store.session.is_current_session_active.return_value = False
|
||||||
self.store._build_vim_cookie_header()
|
self.store._build_vim_cookie_header()
|
||||||
|
|||||||
Reference in New Issue
Block a user