NetApp cDOT driver enhanced support logging
The NetApp cDOT driver logs some info about OpenStack deployments already, and more info is needed about the specific storage resources managed by Manila. Implements: blueprint netapp-cdot-enhanced-support-logging Change-Id: I8e4f81b3f1291e3c88fc88ab71ac93a415990ee3
This commit is contained in:
parent
8f2fa31d8a
commit
04686f2d18
manila
share/drivers/netapp/dataontap/cluster_mode
tests/share/drivers/netapp/dataontap
@ -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."""
|
||||
|
@ -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."""
|
||||
|
@ -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."""
|
||||
|
@ -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,
|
||||
|
@ -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')
|
||||
|
@ -148,6 +148,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()
|
||||
|
@ -475,14 +475,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'
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user