From 625505790fe4123c2d806afdc28c11df1d8114f3 Mon Sep 17 00:00:00 2001 From: Matthias Runge Date: Wed, 30 Jun 2021 19:45:36 +0200 Subject: [PATCH] Notify and update snapshot metrics when a volume with an attached snapshot is transferred to a different project. Change-Id: I907b9b1c912d9794ada796494b172d290901993a --- .../pipeline/data/event_definitions.yaml | 14 ++++-- .../publisher/data/gnocchi_resources.yaml | 5 ++- .../tests/unit/publisher/test_gnocchi.py | 44 +++++++++++++++++++ 3 files changed, 59 insertions(+), 4 deletions(-) diff --git a/ceilometer/pipeline/data/event_definitions.yaml b/ceilometer/pipeline/data/event_definitions.yaml index b8fcc8a510..8e6bdb00ca 100644 --- a/ceilometer/pipeline/data/event_definitions.yaml +++ b/ceilometer/pipeline/data/event_definitions.yaml @@ -69,7 +69,7 @@ audit_period_ending: type: datetime fields: payload.audit_period_ending -- event_type: ['volume.exists', 'volume.retype', 'volume.create.*', 'volume.delete.*', 'volume.resize.*', 'volume.attach.*', 'volume.detach.*', 'volume.update.*', 'snapshot.exists', 'snapshot.create.*', 'snapshot.delete.*', 'snapshot.update.*'] +- event_type: ['volume.exists', 'volume.retype', 'volume.create.*', 'volume.delete.*', 'volume.resize.*', 'volume.attach.*', 'volume.detach.*', 'volume.update.*', 'snapshot.exists', 'snapshot.create.*', 'snapshot.delete.*', 'snapshot.update.*', 'volume.transfer.accept.end', 'snapshot.transfer.accept.end'] traits: &cinder_traits user_id: fields: payload.user_id @@ -89,8 +89,8 @@ image_id: fields: payload.glance_metadata[?key=image_id].value instance_id: - fields: payload.volume_attachment[0].instance_uuid -- event_type: ['volume.transfer.*','volume.exists', 'volume.retype', 'volume.create.*', 'volume.delete.*', 'volume.resize.*', 'volume.attach.*', 'volume.detach.*', 'volume.update.*'] + fields: payload.volume_attachment[0].server_id +- event_type: ['volume.transfer.*', 'volume.exists', 'volume.retype', 'volume.create.*', 'volume.delete.*', 'volume.resize.*', 'volume.attach.*', 'volume.detach.*', 'volume.update.*', 'snapshot.transfer.accept.end'] traits: <<: *cinder_traits resource_id: @@ -104,6 +104,13 @@ fields: payload.volume_type replication_status: fields: payload.replication_status +- event_type: ['snapshot.transfer.accept.end'] + traits: + <<: *cinder_traits + resource_id: + fields: payload.snapshot_id + project_id: + fields: payload.tenant_id - event_type: ['share.create.*', 'share.delete.*', 'share.extend.*', 'share.shrink.*'] traits: &share_traits share_id: @@ -687,3 +694,4 @@ fields: payload.detail type: fields: payload.type + diff --git a/ceilometer/publisher/data/gnocchi_resources.yaml b/ceilometer/publisher/data/gnocchi_resources.yaml index bfb9fa394c..63afe58db0 100644 --- a/ceilometer/publisher/data/gnocchi_resources.yaml +++ b/ceilometer/publisher/data/gnocchi_resources.yaml @@ -250,7 +250,9 @@ resources: event_delete: - volume.delete.end - snapshot.delete.end - event_update: volume.transfer.accept.end + event_update: + - volume.transfer.accept.end + - snapshot.transfer.accept.end event_attributes: id: resource_id project_id: project_id @@ -414,3 +416,4 @@ resources: network.services.lb.total.connections: network.services.lb.active.connections: + diff --git a/ceilometer/tests/unit/publisher/test_gnocchi.py b/ceilometer/tests/unit/publisher/test_gnocchi.py index 770eea2bd6..dcaf8c1180 100644 --- a/ceilometer/tests/unit/publisher/test_gnocchi.py +++ b/ceilometer/tests/unit/publisher/test_gnocchi.py @@ -174,6 +174,28 @@ VOLUME_TRANSFER_ACCEPT_END = models.Event( message_id=u'9fc4ceee-d980-4098-a685-2ad660838ac1' ) +SNAPSHOT_TRANSFER_ACCEPT_END = models.Event( + event_type='snapshot.transfer.accept.end', + traits=[models.Trait(u'tenant_id', 1, '945e7d09220e4308abe4b3b734bf5fce>'), + models.Trait(u'project_id', 1, '85bc015f7a2342348593077a927c4aaa'), + models.Trait(u'user_id', 1, '945e7d09220e4308abe4b3b734bf5fce'), + models.Trait(u'service', 1, 'volume.controller-0'), + models.Trait( + u'request_id', 1, 'req-71dd1ae4-81ca-431a-b9fd-ac833eba889f'), + models.Trait( + u'resource_id', 1, '156b8d3f-ad99-429b-b84c-3f263fb2a801'), + models.Trait( + u'display_name', 1, 'test-vol'), + models.Trait( + u'type', 1, 'req-71dd1ae4-81ca-431a-b9fd-ac833eba889f'), + models.Trait(u'host', 1, 'hostgroup@tripleo_iscsi#tripleo_iscsi'), + models.Trait(u'created_at', 4, '2020-08-28 12:51:52'), + models.Trait(u'size', 2, 1)], + raw={}, + generated='2020-08-28T12:52:22.930413', + message_id=u'9fc4ceee-d980-4098-a685-2ad660838ac1' +) + class PublisherTest(base.BaseTestCase): @@ -645,6 +667,28 @@ class PublisherWorkflowTest(base.BaseTestCase, for call in expected_calls: self.assertIn(call, fakeclient.mock_calls) + @mock.patch('gnocchiclient.v1.client.Client') + def test_update_snapshot_event_workflow(self, fakeclient_cls): + url = netutils.urlsplit("gnocchi://") + self.publisher = gnocchi.GnocchiPublisher(self.conf.conf, url) + + fakeclient = fakeclient_cls.return_value + + now = timeutils.utcnow() + self.useFixture(utils_fixture.TimeFixture(now)) + + expected_calls = [ + mock.call.resource.update( + 'volume', + '156b8d3f-ad99-429b-b84c-3f263fb2a801', + {'project_id': '85bc015f7a2342348593077a927c4aaa'}), + ] + + self.publisher.publish_events([SNAPSHOT_TRANSFER_ACCEPT_END]) + self.assertEqual(1, len(fakeclient.mock_calls)) + for call in expected_calls: + self.assertIn(call, fakeclient.mock_calls) + @mock.patch('ceilometer.publisher.gnocchi.LOG') @mock.patch('gnocchiclient.v1.client.Client') def test_workflow(self, fakeclient_cls, logger):