Merge "cinder: link volume to image and instance"

This commit is contained in:
Zuul 2018-02-28 11:23:53 +00:00 committed by Gerrit Code Review
commit 44c61fee09
6 changed files with 59 additions and 1 deletions

View File

@ -128,6 +128,8 @@ metric:
metadata:
display_name: $.payload.display_name
volume_type: $.payload.volume_type
image_id: $.payload.glance_metadata[?key=image_id][0].value
instance_id: $.payload.volume_attachment[0].server_id
- name: 'snapshot.size'
event_type:

View File

@ -215,6 +215,15 @@ resources_update_operations = [
{"op": "add", "path": "/attributes/deleted_at",
"value": {"type": "datetime", "required": False}},
]},
{"desc": "add instance_id/image_id to volume",
"type": "update_attribute_type",
"resource_type": "volume",
"data": [
{"op": "add", "path": "/attributes/image_id",
"value": {"type": "uuid", "required": False}},
{"op": "add", "path": "/attributes/instance_id",
"value": {"type": "uuid", "required": False}},
]},
]
# NOTE(sileht): We use LooseVersion because pbr can generate invalid

View File

@ -81,6 +81,10 @@
fields: payload.status
created_at:
fields: payload.created_at
image_id:
fields: payload.glance_metadata[?key=image_id][0].value
instance_id:
fields: payload.volume_attachment[0].server_id
- event_type: ['volume.exists', 'volume.create.*', 'volume.delete.*', 'volume.resize.*', 'volume.attach.*', 'volume.detach.*', 'volume.update.*']
traits:
<<: *cinder_traits

View File

@ -196,6 +196,8 @@ resources:
attributes:
display_name: resource_metadata.(display_name|name)
volume_type: resource_metadata.volume_type
image_id: resource_metadata.image_id
instance_id: resource_metadata.instance_id
event_delete: volume.delete.start
event_attributes:
id: resource_id

View File

@ -50,6 +50,18 @@ VOLUME_LIST = [
u'multiattach': False,
u'source_volid': None,
u'consistencygroup_id': None,
u"volume_image_metadata": {
u"checksum": u"17d9daa4fb8e20b0f6b7dec0d46fdddf",
u"container_format": u"bare",
u"disk_format": u"raw",
u"hw_disk_bus": u"scsi",
u"hw_scsi_model": u"virtio-scsi",
u"image_id": u"f0019ee3-523c-45ab-b0b6-3adc529673e7",
u"image_name": u"debian-jessie-scsi",
u"min_disk": u"0",
u"min_ram": u"0",
u"size": u"1572864000"
},
u'os-vol-mig-status-attr:name_id': None,
u'name': None,
u'bootable': u'false',
@ -71,6 +83,18 @@ SNAPSHOT_LIST = [
u'volume_id': u'6f27bc42-c834-49ea-ae75-8d1073b37806',
u'metadata': {},
u'created_at': u'2016-10-19T07:56:55.000000',
u"volume_image_metadata": {
u"checksum": u"17d9daa4fb8e20b0f6b7dec0d46fdddf",
u"container_format": u"bare",
u"disk_format": u"raw",
u"hw_disk_bus": u"scsi",
u"hw_scsi_model": u"virtio-scsi",
u"image_id": u"f0019ee3-523c-45ab-b0b6-3adc529673e7",
u"image_name": u"debian-jessie-scsi",
u"min_disk": u"0",
u"min_ram": u"0",
u"size": u"1572864000"
},
u'name': None})
]
@ -119,6 +143,11 @@ class TestVolumeSizePollster(base.BaseTestCase):
volume_size_samples[0].project_id)
self.assertEqual('d94c18fb-b680-4912-9741-da69ee83c94f',
volume_size_samples[0].resource_id)
self.assertEqual('f0019ee3-523c-45ab-b0b6-3adc529673e7',
volume_size_samples[0].resource_metadata["image_id"])
self.assertEqual('1ae69721-d071-4156-a2bd-b11bb43ec2e3',
volume_size_samples[0].resource_metadata
["instance_id"])
class TestVolumeSnapshotSizePollster(base.BaseTestCase):
@ -142,6 +171,9 @@ class TestVolumeSnapshotSizePollster(base.BaseTestCase):
volume_snapshot_size_samples[0].project_id)
self.assertEqual('b1ea6783-f952-491e-a4ed-23a6a562e1cf',
volume_snapshot_size_samples[0].resource_id)
self.assertEqual('f0019ee3-523c-45ab-b0b6-3adc529673e7',
volume_snapshot_size_samples[0].resource_metadata
["image_id"])
class TestVolumeBackupSizePollster(base.BaseTestCase):

View File

@ -21,7 +21,16 @@ from ceilometer import sample
class _Base(plugin_base.PollsterBase):
def extract_metadata(self, obj):
return dict((k, getattr(obj, k)) for k in self.FIELDS)
metadata = dict((k, getattr(obj, k)) for k in self.FIELDS)
if getattr(obj, "volume_image_metadata", None):
metadata["image_id"] = obj.volume_image_metadata.get("image_id")
else:
metadata["image_id"] = None
if getattr(obj, "attachments", None):
metadata["instance_id"] = obj.attachments[0]["server_id"]
else:
metadata["instance_id"] = None
return metadata
class VolumeSizePollster(_Base):