Add VNF to monitor after restarting tacker service

If you restart tacker service, it doesn't monitor previously
created VNFs.

This patch will read all VNFs from db and add to monitor
during initialization of VFNM plugin.

Change-Id: I1d49f9442dbc34794e01fbefb4ef82af21171956
Closes-Bug: #1616712
This commit is contained in:
bhagyashris 2018-11-08 10:35:49 +09:00
parent 7ca767fc26
commit 5ae9dd03c7
2 changed files with 73 additions and 0 deletions

View File

@ -56,6 +56,68 @@ class FakeVimClient(mock.Mock):
pass
class TestVNFMPluginMonitor(db_base.SqlTestCase):
def setUp(self):
super(TestVNFMPluginMonitor, self).setUp()
self._mock_vnf_manager()
def _mock_vnf_manager(self):
self._vnf_manager = mock.Mock(wraps=FakeDriverManager())
self._vnf_manager.__contains__ = mock.Mock(
return_value=True)
fake_vnf_manager = mock.Mock()
fake_vnf_manager.return_value = self._vnf_manager
self._mock(
'tacker.common.driver_manager.DriverManager', fake_vnf_manager)
@mock.patch('tacker.db.vnfm.vnfm_db.VNFMPluginDb.get_vnfs')
@mock.patch('tacker.vnfm.monitor.VNFMonitor.__run__')
def test_init_monitoring(self, mock_run, mock_get_vnfs):
vnf_id = uuidutils.generate_uuid()
vnfs = [{
'id': vnf_id,
'vnf': {
'id': vnf_id,
'status': 'ACTIVE',
'name': 'fake_vnf',
'attributes': {
'monitoring_policy':
'{"vdus": '
'{"VDU1": {"ping": {"actions": {"failure": "respawn"},'
'"name": "ping", "parameters": {"count": 3,'
'"interval": 1, "monitoring_delay": 45, "timeout": 2},'
'"monitoring_params": {"count": 3, "interval": 1,'
'"monitoring_delay": 45, "timeout": 2}}}}}'}
},
'name': 'fake_vnf',
'tenant_id': 'ad7ebc56538745a08ef7c5e97f8bd437',
'description': 'fake_vnf_description',
'instance_id': 'da85ea1a-4ec4-4201-bbb2-8d9249eca7ec',
'vnfd_id': 'eb094833-995e-49f0-a047-dfb56aaf7c4e',
'vim_id': '6261579e-d6f3-49ad-8bc3-a9cb974778ff',
'placement_attr': {'region': 'RegionOne'},
'status': 'ACTIVE',
'attributes': {
'monitoring_policy':
'{"vdus": '
'{"VDU1": {"ping": {"actions": {"failure": "respawn"},'
'"name": "ping", "parameters": {"count": 3,'
'"interval": 1, "monitoring_delay": 45, "timeout": 2},'
'"monitoring_params": {"count": 3, "interval": 1,'
'"monitoring_delay": 45, "timeout": 2}}}}}'},
'mgmt_url': '{"VDU1": "a.b.c.d"}',
'deleted_at': datetime.min,
'management_ip_addresses': 'a.b.c.d'
}]
mock_get_vnfs.return_value = vnfs
vnfm_plugin = plugin.VNFMPlugin()
hosting_vnfs = vnfm_plugin._vnf_monitor._hosting_vnfs.values()
hosting_vnf = hosting_vnfs[0]['vnf']
self.assertEqual('{"VDU1": "a.b.c.d"}', hosting_vnf['mgmt_url'])
self.assertEqual(1, len(hosting_vnfs))
class TestVNFMPlugin(db_base.SqlTestCase):
def setUp(self):
super(TestVNFMPlugin, self).setUp()

View File

@ -29,6 +29,7 @@ from tacker.api.v1 import attributes
from tacker.common import driver_manager
from tacker.common import exceptions
from tacker.common import utils
from tacker import context as t_context
from tacker.db.vnfm import vnfm_db
from tacker.extensions import vnfm
from tacker.plugins.common import constants
@ -144,6 +145,16 @@ class VNFMPlugin(vnfm_db.VNFMPluginDb, VNFMMgmtMixin):
self._vnf_monitor = monitor.VNFMonitor(self.boot_wait)
self._vnf_alarm_monitor = monitor.VNFAlarmMonitor()
self._vnf_app_monitor = monitor.VNFAppMonitor()
self._init_monitoring()
def _init_monitoring(self):
context = t_context.get_admin_context()
vnfs = self.get_vnfs(context)
for vnf in vnfs:
# Add tenant_id in context object as it is required
# to get VIM in monitoring.
context.tenant_id = vnf['tenant_id']
self.add_vnf_to_monitor(context, vnf)
def spawn_n(self, function, *args, **kwargs):
self._pool.spawn_n(function, *args, **kwargs)