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 copy
import json
import math import math
import socket import socket
@ -294,24 +295,49 @@ class NetAppCmodeFileStorageLibrary(object):
@na_utils.trace @na_utils.trace
def _handle_ems_logging(self): def _handle_ems_logging(self):
"""Build and send an EMS log message.""" """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_base_ems_log_message(self):
def _build_ems_log_message(self): """Construct EMS Autosupport log message common to all events."""
"""Construct EMS Autosupport log message."""
ems_log = { ems_log = {
'computer-name': socket.getfqdn() or 'Manila_node', 'computer-name': socket.gethostname() or 'Manila_node',
'event-id': '0',
'event-source': 'Manila driver %s' % self.driver_name, 'event-source': 'Manila driver %s' % self.driver_name,
'app-version': self._app_version, 'app-version': self._app_version,
'category': 'provisioning', 'category': 'provisioning',
'event-description': 'OpenStack Manila connected to cluster node', 'log-level': '5',
'log-level': '6',
'auto-support': 'false', 'auto-support': 'false',
} }
return ems_log 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 @na_utils.trace
def _handle_housekeeping_tasks(self): def _handle_housekeeping_tasks(self):
"""Handle various cleanup activities.""" """Handle various cleanup activities."""

View File

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

View File

@ -100,6 +100,14 @@ class NetAppCmodeSingleSVMFileStorageLibrary(
vserver_client = self._get_api_client(self._vserver) vserver_client = self._get_api_client(self._vserver)
return self._vserver, vserver_client return self._vserver, vserver_client
def _get_ems_pool_info(self):
return {
'pools': {
'vserver': self._vserver,
'aggregates': self._find_matching_aggregates(),
},
}
@na_utils.trace @na_utils.trace
def _handle_housekeeping_tasks(self): def _handle_housekeeping_tasks(self):
"""Handle various cleanup activities.""" """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 copy
import json
import math import math
import socket import socket
import time import time
@ -409,33 +410,54 @@ class NetAppFileStorageLibraryTestCase(test.TestCase):
def test_handle_ems_logging(self): def test_handle_ems_logging(self):
self.mock_object(self.library, self.mock_object(self.library,
'_build_ems_log_message', '_build_ems_log_message_0',
mock.Mock(return_value=fake.EMS_MESSAGE)) 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._handle_ems_logging()
self.library._client.send_ems_log_message.assert_called_with( self.library._client.send_ems_log_message.assert_has_calls([
fake.EMS_MESSAGE) 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, self.mock_object(socket,
'getfqdn', 'gethostname',
mock.Mock(return_value=fake.HOST_NAME)) 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 = { self.assertDictEqual(fake.EMS_MESSAGE_0, result)
'computer-name': fake.HOST_NAME,
'event-id': '0', def test_build_ems_log_message_1(self):
'event-source': 'Manila driver %s' % fake.DRIVER_NAME,
'app-version': fake.APP_VERSION, pool_info = {
'category': 'provisioning', 'pools': {
'event-description': 'OpenStack Manila connected to cluster node', 'vserver': 'fake_vserver',
'log-level': '6', 'aggregates': ['aggr1', 'aggr2'],
'auto-support': 'false' },
} }
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): def test_find_matching_aggregates(self):
self.assertRaises(NotImplementedError, self.assertRaises(NotImplementedError,

View File

@ -171,6 +171,22 @@ class NetAppFileStorageLibraryTestCase(test.TestCase):
self.assertTupleEqual((fake.VSERVER1, 'fake_client'), result) 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): def test_handle_housekeeping_tasks(self):
self.mock_object(self.client, 'prune_deleted_nfs_export_policies') 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.assertRaises(exception.VserverNotFound,
self.library._get_vserver) 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): def test_handle_housekeeping_tasks(self):
mock_vserver_client = mock.Mock() mock_vserver_client = mock.Mock()

View File

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