From cf8468394027ffb1db420a72312b6a9f59b78381 Mon Sep 17 00:00:00 2001 From: Kirsten G Date: Tue, 19 Dec 2017 07:57:55 -0800 Subject: [PATCH] Add send_cluster_metrics configuration parameter Added configuration parameter, send_cluster_metrics, to magnum.conf with default value of True. If set to True, periodic tasks will pull COE data and send to ceilometer. This parameter can be set to False to disable periodic collection of data to avoid unnecessary load from the cluster. Closes-Bug: #1668330 Related-Bug: #1746510 Change-Id: I9945293e7b2b52731f6e220d0925c1f6ad097caa --- devstack/lib/magnum | 1 + magnum/conf/drivers.py | 6 ++++- magnum/service/periodic.py | 4 ++++ magnum/tests/unit/service/test_periodic.py | 27 ++++++++++++++++++++++ 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/devstack/lib/magnum b/devstack/lib/magnum index 110779ceab..4374a6d2b7 100644 --- a/devstack/lib/magnum +++ b/devstack/lib/magnum @@ -225,6 +225,7 @@ function create_magnum_conf { # default in magnum.conf default_volume_type=$(iniget /etc/cinder/cinder.conf DEFAULT default_volume_type) iniset $MAGNUM_CONF cinder default_docker_volume_type $default_volume_type + iniset $MAGNUM_CONF drivers send_cluster_metrics False } function create_api_paste_conf { diff --git a/magnum/conf/drivers.py b/magnum/conf/drivers.py index 3bb9891b64..674ab02531 100644 --- a/magnum/conf/drivers.py +++ b/magnum/conf/drivers.py @@ -29,7 +29,11 @@ drivers_opts = [ cfg.StrOpt('openstack_ca_file', default="", help='Path to the OpenStack CA-bundle file to pass and ' - 'install in all cluster nodes.') + 'install in all cluster nodes.'), + cfg.BoolOpt('send_cluster_metrics', + default=True, + help='Allow periodic tasks to pull COE data and send to ' + 'ceilometer.') ] diff --git a/magnum/service/periodic.py b/magnum/service/periodic.py index 7cbd286aee..2191d02593 100755 --- a/magnum/service/periodic.py +++ b/magnum/service/periodic.py @@ -141,6 +141,10 @@ class MagnumPeriodicTasks(periodic_task.PeriodicTasks): @periodic_task.periodic_task(run_immediately=True) @set_context def _send_cluster_metrics(self, ctx): + if not CONF.drivers.send_cluster_metrics: + LOG.debug('Skip sending cluster metrics') + return + LOG.debug('Starting to send cluster metrics') for cluster in objects.Cluster.list(ctx): if cluster.status not in ( diff --git a/magnum/tests/unit/service/test_periodic.py b/magnum/tests/unit/service/test_periodic.py index bb87cfa11d..416305d8c5 100644 --- a/magnum/tests/unit/service/test_periodic.py +++ b/magnum/tests/unit/service/test_periodic.py @@ -332,3 +332,30 @@ class PeriodicTestCase(base.TestCase): self.assertEqual(1, mock_create_monitor.call_count) self.assertEqual(0, notifier.info.call_count) + + @mock.patch('magnum.conductor.monitors.create_monitor') + @mock.patch('magnum.objects.Cluster.list') + @mock.patch('magnum.common.rpc.get_notifier') + @mock.patch('magnum.common.context.make_admin_context') + def test_send_cluster_metrics_disable_pull_data( + self, mock_make_admin_context, mock_get_notifier, + mock_cluster_list, mock_create_monitor): + mock_make_admin_context.return_value = self.context + notifier = mock.MagicMock() + mock_get_notifier.return_value = notifier + mock_cluster_list.return_value = [self.cluster1, self.cluster2, + self.cluster3, self.cluster4] + self.cluster4.status = cluster_status.CREATE_COMPLETE + monitor = mock.MagicMock() + monitor.get_metric_names.return_value = ['metric1', 'metric2'] + monitor.compute_metric_value.return_value = 30 + monitor.get_metric_unit.return_value = '%' + mock_create_monitor.return_value = monitor + + CONF.set_override('send_cluster_metrics', + False, group='drivers') + + periodic.MagnumPeriodicTasks(CONF)._send_cluster_metrics(self.context) + + self.assertEqual(0, mock_create_monitor.call_count) + self.assertEqual(0, notifier.info.call_count)