diff --git a/ceilometer/compute/nova_notifier.py b/ceilometer/compute/nova_notifier.py index 47e800b90..3a191af82 100644 --- a/ceilometer/compute/nova_notifier.py +++ b/ceilometer/compute/nova_notifier.py @@ -122,6 +122,10 @@ class Instance(object): return { 'id': self.instance_type_id, 'name': self.flavor_name, + 'vcpus': self.vcpus, + 'ram': self.memory_mb, + 'disk': self.root_gb + self.ephemeral_gb, + 'ephemeral': self.ephemeral_gb } @property diff --git a/ceilometer/compute/pollsters/util.py b/ceilometer/compute/pollsters/util.py index a0994e1c6..b8d84977e 100644 --- a/ceilometer/compute/pollsters/util.py +++ b/ceilometer/compute/pollsters/util.py @@ -33,12 +33,7 @@ INSTANCE_PROPERTIES = [ 'kernel_id', 'os_type', 'ramdisk_id', - # Capacity properties - 'disk_gb', - 'ephemeral_gb', - 'memory_mb', - 'root_gb', - 'vcpus'] +] OPTS = [ cfg.ListOpt('reserved_metadata_namespace', @@ -92,7 +87,16 @@ def _get_metadata_from_object(instance): metadata['image_ref_url'] = None for name in INSTANCE_PROPERTIES: - metadata[name] = getattr(instance, name, u'') + if hasattr(instance, name): + metadata[name] = getattr(instance, name) + + metadata['vcpus'] = instance.flavor['vcpus'] + metadata['memory_mb'] = instance.flavor['ram'] + metadata['disk_gb'] = instance.flavor['disk'] + metadata['ephemeral_gb'] = instance.flavor['ephemeral'] + metadata['root_gb'] = int(metadata['disk_gb']) - \ + int(metadata['ephemeral_gb']) + return _add_reserved_user_metadata(instance, metadata) diff --git a/ceilometer/nova_client.py b/ceilometer/nova_client.py index 40726e265..5db255db0 100644 --- a/ceilometer/nova_client.py +++ b/ceilometer/nova_client.py @@ -70,7 +70,9 @@ class Client(object): flavor = None attr_defaults = [('name', 'unknown-id-%s' % fid), - ('vcpus', 0), ('ram', 0), ('disk', 0)] + ('vcpus', 0), ('ram', 0), ('disk', 0), + ('ephemeral', 0)] + for attr, default in attr_defaults: if not flavor: instance.flavor[attr] = default diff --git a/tests/compute/pollsters/base.py b/tests/compute/pollsters/base.py index 65014d7c5..88e29a26d 100644 --- a/tests/compute/pollsters/base.py +++ b/tests/compute/pollsters/base.py @@ -37,4 +37,4 @@ class TestPollsterBase(test_base.TestCase): self.instance.name) self.instance.id = 1 self.instance.flavor = {'name': 'm1.small', 'id': 2, 'vcpus': 1, - 'ram': 512, 'disk': 0} + 'ram': 512, 'disk': 20, 'ephemeral': 0} diff --git a/tests/compute/pollsters/test_instance.py b/tests/compute/pollsters/test_instance.py index 4574a204c..23dfcde23 100644 --- a/tests/compute/pollsters/test_instance.py +++ b/tests/compute/pollsters/test_instance.py @@ -40,6 +40,11 @@ class TestInstancePollster(base.TestPollsterBase): samples = list(pollster.get_samples(mgr, {}, self.instance)) self.assertEqual(len(samples), 1) self.assertEqual(samples[0].name, 'instance') + self.assertEqual(samples[0].resource_metadata['vcpus'], 1) + self.assertEqual(samples[0].resource_metadata['memory_mb'], 512) + self.assertEqual(samples[0].resource_metadata['disk_gb'], 20) + self.assertEqual(samples[0].resource_metadata['root_gb'], 20) + self.assertEqual(samples[0].resource_metadata['ephemeral_gb'], 0) @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def test_get_samples_instance_flavor(self): diff --git a/tests/compute/pollsters/test_location_metadata.py b/tests/compute/pollsters/test_location_metadata.py index a2e5c1899..a14ddfc69 100644 --- a/tests/compute/pollsters/test_location_metadata.py +++ b/tests/compute/pollsters/test_location_metadata.py @@ -61,16 +61,18 @@ class TestLocationMetadata(test_base.TestCase): 'kernel_id': 'kernel id', 'os_type': 'linux', 'ramdisk_id': 'ramdisk id', - 'ephemeral_gb': 7, - 'root_gb': 3, + 'ephemeral_gb': 0, + 'root_gb': 20, + 'disk_gb': 20, 'image': {'id': 1, 'links': [{"rel": "bookmark", 'href': 2}]}, 'hostId': '1234-5678', 'flavor': {'id': 1, - 'disk': 0, + 'disk': 20, 'ram': 512, - 'vcpus': 2}, + 'vcpus': 2, + 'ephemeral': 0}, 'metadata': {'metering.autoscale.group': 'X' * 512, 'metering.ephemeral_gb': 42}}