diff --git a/cloudkitty/storage/v2/elasticsearch/client.py b/cloudkitty/storage/v2/elasticsearch/client.py index 98dc8a29..eb87934e 100644 --- a/cloudkitty/storage/v2/elasticsearch/client.py +++ b/cloudkitty/storage/v2/elasticsearch/client.py @@ -78,6 +78,9 @@ class ElasticsearchClient(object): must.append({'term': {'type': filters['type']}}) if metric_types: + if type(metric_types) is not list: + metric_types = [metric_types] + must.append({"terms": {"type": metric_types}}) return must diff --git a/cloudkitty/storage/v2/opensearch/client.py b/cloudkitty/storage/v2/opensearch/client.py index 868af2c4..b46122e4 100644 --- a/cloudkitty/storage/v2/opensearch/client.py +++ b/cloudkitty/storage/v2/opensearch/client.py @@ -78,6 +78,9 @@ class OpenSearchClient(object): must.append({'term': {'type': filters['type']}}) if metric_types: + if type(metric_types) is not list: + metric_types = [metric_types] + must.append({"terms": {"type": metric_types}}) return must diff --git a/cloudkitty/tests/storage/v2/elasticsearch/test_client.py b/cloudkitty/tests/storage/v2/elasticsearch/test_client.py index 5d3158b4..c3493574 100644 --- a/cloudkitty/tests/storage/v2/elasticsearch/test_client.py +++ b/cloudkitty/tests/storage/v2/elasticsearch/test_client.py @@ -53,6 +53,13 @@ class TestElasticsearchClient(unittest.TestCase): [{'term': {'type': 'awesome'}}], ) + def test_build_must_with_metric_type(self): + types = 'awesome' + self.assertEqual( + self.client._build_must(None, None, types, None), + [{'terms': {'type': ['awesome']}}], + ) + def test_build_must_with_metric_types(self): types = ['awesome', 'amazing'] self.assertEqual( diff --git a/cloudkitty/tests/storage/v2/opensearch/test_client.py b/cloudkitty/tests/storage/v2/opensearch/test_client.py index b33515c6..b3c2ae7a 100644 --- a/cloudkitty/tests/storage/v2/opensearch/test_client.py +++ b/cloudkitty/tests/storage/v2/opensearch/test_client.py @@ -53,6 +53,13 @@ class TestOpenSearchClient(unittest.TestCase): [{'term': {'type': 'awesome'}}], ) + def test_build_must_with_metric_type(self): + types = 'awesome' + self.assertEqual( + self.client._build_must(None, None, types, None), + [{'terms': {'type': ['awesome']}}], + ) + def test_build_must_with_metric_types(self): types = ['awesome', 'amazing'] self.assertEqual( diff --git a/releasenotes/notes/fix-elasticsearch-a9a37443f81b3a79.yaml b/releasenotes/notes/fix-elasticsearch-a9a37443f81b3a79.yaml new file mode 100644 index 00000000..7568dbfb --- /dev/null +++ b/releasenotes/notes/fix-elasticsearch-a9a37443f81b3a79.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Fix request to Elasticsearch/OpenSearch that has potentially not the + correct type.