From 262de1d755ca3fa4c33207262c6681e4ad709f38 Mon Sep 17 00:00:00 2001 From: Luka Peschke Date: Mon, 19 Aug 2019 16:38:18 +0200 Subject: [PATCH] Add support for empty or missing "extra_args" in metrics config file This allow to have an empty or missing "extra_args" key in the monasca and prometheus collectors, which allows lighter configuration. Change-Id: I4d384ed980b82f530f9a7ddca32955c5d6be932e --- cloudkitty/collector/monasca.py | 2 +- cloudkitty/collector/prometheus.py | 2 +- .../tests/collectors/test_validation.py | 42 ++++++++++++++----- 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/cloudkitty/collector/monasca.py b/cloudkitty/collector/monasca.py index 97863cd8..b2141c6d 100644 --- a/cloudkitty/collector/monasca.py +++ b/cloudkitty/collector/monasca.py @@ -57,7 +57,7 @@ CONF.register_opts(collector_monasca_opts, COLLECTOR_MONASCA_OPTS) METRICS_CONF = ck_utils.load_conf(CONF.collect.metrics_conf) MONASCA_EXTRA_SCHEMA = { - Required('extra_args'): { + Required('extra_args', default={}): { # Key corresponding to the resource id in a metric's dimensions # Allows to adapt the resource identifier. Should not need to be # modified in a standard OpenStack installation diff --git a/cloudkitty/collector/prometheus.py b/cloudkitty/collector/prometheus.py index a130bbb5..f2876f3a 100644 --- a/cloudkitty/collector/prometheus.py +++ b/cloudkitty/collector/prometheus.py @@ -62,7 +62,7 @@ cfg.CONF.register_opts(collector_prometheus_opts, PROMETHEUS_COLLECTOR_OPTS) CONF = cfg.CONF PROMETHEUS_EXTRA_SCHEMA = { - Required('extra_args'): { + Required('extra_args', default={}): { Required('aggregation_method', default='max'): In([ 'avg', 'count', 'max', diff --git a/cloudkitty/tests/collectors/test_validation.py b/cloudkitty/tests/collectors/test_validation.py index 725baa1b..010ef615 100644 --- a/cloudkitty/tests/collectors/test_validation.py +++ b/cloudkitty/tests/collectors/test_validation.py @@ -81,11 +81,17 @@ class MetricConfigValidationTest(tests.TestCase): def test_monasca_minimal_config_no_extra_args(self): data = copy.deepcopy(self.base_data) - - self.assertRaises( - verror.MultipleInvalid, - collector.monasca.MonascaCollector.check_configuration, - data, + expected_output = copy.deepcopy(self.base_output) + expected_output['metric_one']['groupby'].extend( + ['project_id', 'resource_id']) + expected_output['metric_one']['extra_args'] = { + 'resource_key': 'resource_id', + 'aggregation_method': 'max', + 'forced_project_id': '' + } + self.assertEqual( + collector.monasca.MonascaCollector.check_configuration(data), + expected_output, ) def test_monasca_minimal_config_minimal_extra_args(self): @@ -107,12 +113,28 @@ class MetricConfigValidationTest(tests.TestCase): def test_prometheus_minimal_config_empty_extra_args(self): data = copy.deepcopy(self.base_data) - data['extra_args'] = {} + data['metrics']['metric_one']['extra_args'] = {} - self.assertRaises( - verror.MultipleInvalid, - collector.prometheus.PrometheusCollector.check_configuration, - data, + expected_output = copy.deepcopy(self.base_output) + expected_output['metric_one']['groupby'].append('project_id') + expected_output['metric_one']['extra_args'] = { + 'aggregation_method': 'max', + } + self.assertEqual( + collector.prometheus.PrometheusCollector.check_configuration(data), + expected_output, + ) + + def test_prometheus_minimal_config_no_extra_args(self): + data = copy.deepcopy(self.base_data) + expected_output = copy.deepcopy(self.base_output) + expected_output['metric_one']['groupby'].append('project_id') + expected_output['metric_one']['extra_args'] = { + 'aggregation_method': 'max', + } + self.assertEqual( + collector.prometheus.PrometheusCollector.check_configuration(data), + expected_output, ) def test_prometheus_minimal_config_minimal_extra_args(self):