Merge "NetApp cDOT driver enhanced support logging"
This commit is contained in:
commit
78e500c52b
|
@ -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."""
|
||||||
|
|
|
@ -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."""
|
||||||
|
|
|
@ -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."""
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue