Merge "NetApp cDOT driver enhanced support logging"

This commit is contained in:
Jenkins 2016-10-31 18:56:36 +00:00 committed by Gerrit Code Review
commit 78e500c52b
7 changed files with 139 additions and 32 deletions

View File

@ -20,6 +20,7 @@ single-SVM or multi-SVM functionality needed by the cDOT Manila drivers.
"""
import copy
import json
import math
import socket
@ -294,24 +295,49 @@ class NetAppCmodeFileStorageLibrary(object):
@na_utils.trace
def _handle_ems_logging(self):
"""Build and send an EMS log message."""
self._client.send_ems_log_message(self._build_ems_log_message())
self._client.send_ems_log_message(self._build_ems_log_message_0())
self._client.send_ems_log_message(self._build_ems_log_message_1())
@na_utils.trace
def _build_ems_log_message(self):
"""Construct EMS Autosupport log message."""
def _build_base_ems_log_message(self):
"""Construct EMS Autosupport log message common to all events."""
ems_log = {
'computer-name': socket.getfqdn() or 'Manila_node',
'event-id': '0',
'computer-name': socket.gethostname() or 'Manila_node',
'event-source': 'Manila driver %s' % self.driver_name,
'app-version': self._app_version,
'category': 'provisioning',
'event-description': 'OpenStack Manila connected to cluster node',
'log-level': '6',
'log-level': '5',
'auto-support': 'false',
}
return ems_log
@na_utils.trace
def _build_ems_log_message_0(self):
"""Construct EMS Autosupport log message with deployment info."""
ems_log = self._build_base_ems_log_message()
ems_log.update({
'event-id': '0',
'event-description': 'OpenStack Manila connected to cluster node',
})
return ems_log
@na_utils.trace
def _build_ems_log_message_1(self):
"""Construct EMS Autosupport log message with storage pool info."""
message = self._get_ems_pool_info()
ems_log = self._build_base_ems_log_message()
ems_log.update({
'event-id': '1',
'event-description': json.dumps(message),
})
return ems_log
def _get_ems_pool_info(self):
raise NotImplementedError()
@na_utils.trace
def _handle_housekeeping_tasks(self):
"""Handle various cleanup activities."""

View File

@ -88,6 +88,14 @@ class NetAppCmodeMultiSVMFileStorageLibrary(
vserver_client = self._get_api_client(vserver)
return vserver, vserver_client
def _get_ems_pool_info(self):
return {
'pools': {
'vserver': None,
'aggregates': self._find_matching_aggregates(),
},
}
@na_utils.trace
def _handle_housekeeping_tasks(self):
"""Handle various cleanup activities."""

View File

@ -100,6 +100,14 @@ class NetAppCmodeSingleSVMFileStorageLibrary(
vserver_client = self._get_api_client(self._vserver)
return self._vserver, vserver_client
def _get_ems_pool_info(self):
return {
'pools': {
'vserver': self._vserver,
'aggregates': self._find_matching_aggregates(),
},
}
@na_utils.trace
def _handle_housekeeping_tasks(self):
"""Handle various cleanup activities."""

View File

@ -17,6 +17,7 @@ Unit tests for the NetApp Data ONTAP cDOT base storage driver library.
"""
import copy
import json
import math
import socket
import time
@ -409,33 +410,54 @@ class NetAppFileStorageLibraryTestCase(test.TestCase):
def test_handle_ems_logging(self):
self.mock_object(self.library,
'_build_ems_log_message',
mock.Mock(return_value=fake.EMS_MESSAGE))
'_build_ems_log_message_0',
mock.Mock(return_value=fake.EMS_MESSAGE_0))
self.mock_object(self.library,
'_build_ems_log_message_1',
mock.Mock(return_value=fake.EMS_MESSAGE_1))
self.library._handle_ems_logging()
self.library._client.send_ems_log_message.assert_called_with(
fake.EMS_MESSAGE)
self.library._client.send_ems_log_message.assert_has_calls([
mock.call(fake.EMS_MESSAGE_0),
mock.call(fake.EMS_MESSAGE_1),
])
def test_build_ems_log_message(self):
def test_build_ems_log_message_0(self):
self.mock_object(socket,
'getfqdn',
'gethostname',
mock.Mock(return_value=fake.HOST_NAME))
result = self.library._build_ems_log_message()
result = self.library._build_ems_log_message_0()
fake_ems_log = {
'computer-name': fake.HOST_NAME,
'event-id': '0',
'event-source': 'Manila driver %s' % fake.DRIVER_NAME,
'app-version': fake.APP_VERSION,
'category': 'provisioning',
'event-description': 'OpenStack Manila connected to cluster node',
'log-level': '6',
'auto-support': 'false'
self.assertDictEqual(fake.EMS_MESSAGE_0, result)
def test_build_ems_log_message_1(self):
pool_info = {
'pools': {
'vserver': 'fake_vserver',
'aggregates': ['aggr1', 'aggr2'],
},
}
self.assertDictEqual(fake_ems_log, result)
self.mock_object(socket,
'gethostname',
mock.Mock(return_value=fake.HOST_NAME))
self.mock_object(self.library,
'_get_ems_pool_info',
mock.Mock(return_value=pool_info))
result = self.library._build_ems_log_message_1()
self.assertDictEqual(pool_info,
json.loads(result['event-description']))
result['event-description'] = ''
self.assertDictEqual(fake.EMS_MESSAGE_1, result)
def test_get_ems_pool_info(self):
self.assertRaises(NotImplementedError,
self.library._get_ems_pool_info)
def test_find_matching_aggregates(self):
self.assertRaises(NotImplementedError,

View File

@ -171,6 +171,22 @@ class NetAppFileStorageLibraryTestCase(test.TestCase):
self.assertTupleEqual((fake.VSERVER1, 'fake_client'), result)
def test_get_ems_pool_info(self):
self.mock_object(self.library,
'_find_matching_aggregates',
mock.Mock(return_value=['aggr1', 'aggr2']))
result = self.library._get_ems_pool_info()
expected = {
'pools': {
'vserver': None,
'aggregates': ['aggr1', 'aggr2'],
},
}
self.assertEqual(expected, result)
def test_handle_housekeeping_tasks(self):
self.mock_object(self.client, 'prune_deleted_nfs_export_policies')

View File

@ -150,6 +150,22 @@ class NetAppFileStorageLibraryTestCase(test.TestCase):
self.assertRaises(exception.VserverNotFound,
self.library._get_vserver)
def test_get_ems_pool_info(self):
self.mock_object(self.library,
'_find_matching_aggregates',
mock.Mock(return_value=['aggr1', 'aggr2']))
result = self.library._get_ems_pool_info()
expected = {
'pools': {
'vserver': fake.VSERVER1,
'aggregates': ['aggr1', 'aggr2'],
},
}
self.assertEqual(expected, result)
def test_handle_housekeeping_tasks(self):
mock_vserver_client = mock.Mock()

View File

@ -476,14 +476,25 @@ SHARE_ACCESS = {
'access_to': [LIF_ADDRESSES[0]]
}
EMS_MESSAGE = {
'computer-name': 'fake_host',
EMS_MESSAGE_0 = {
'computer-name': HOST_NAME,
'event-id': '0',
'event-source': 'fake_driver',
'app-version': 'fake_app_version',
'category': 'fake_category',
'event-description': 'fake_description',
'log-level': '6',
'event-source': 'Manila driver %s' % DRIVER_NAME,
'app-version': APP_VERSION,
'category': 'provisioning',
'event-description': 'OpenStack Manila connected to cluster node',
'log-level': '5',
'auto-support': 'false'
}
EMS_MESSAGE_1 = {
'computer-name': HOST_NAME,
'event-id': '1',
'event-source': 'Manila driver %s' % DRIVER_NAME,
'app-version': APP_VERSION,
'category': 'provisioning',
'event-description': '',
'log-level': '5',
'auto-support': 'false'
}