diff --git a/watcher/decision_engine/model/collector/nova.py b/watcher/decision_engine/model/collector/nova.py index d378a1422..a5fe3bd80 100644 --- a/watcher/decision_engine/model/collector/nova.py +++ b/watcher/decision_engine/model/collector/nova.py @@ -235,7 +235,8 @@ class ModelBuilder(object): "disk": flavor.disk, "disk_capacity": flavor.disk, "vcpus": flavor.vcpus, - "state": getattr(instance, "OS-EXT-STS:vm_state")} + "state": getattr(instance, "OS-EXT-STS:vm_state"), + "metadata": instance.metadata} # node_attributes = dict() # node_attributes["layer"] = "virtual" diff --git a/watcher/decision_engine/model/element/instance.py b/watcher/decision_engine/model/element/instance.py index 7cc0bc343..451998356 100644 --- a/watcher/decision_engine/model/element/instance.py +++ b/watcher/decision_engine/model/element/instance.py @@ -48,6 +48,7 @@ class Instance(compute_resource.ComputeResource): "disk": wfields.IntegerField(), "disk_capacity": wfields.NonNegativeIntegerField(), "vcpus": wfields.NonNegativeIntegerField(), + "metadata": wfields.DictField(), } def accept(self, visitor): diff --git a/watcher/decision_engine/model/notification/nova.py b/watcher/decision_engine/model/notification/nova.py index 0aa6a3cb6..3b578bbc2 100644 --- a/watcher/decision_engine/model/notification/nova.py +++ b/watcher/decision_engine/model/notification/nova.py @@ -66,6 +66,7 @@ class NovaNotification(base.NotificationEndpoint): memory_mb = instance_flavor_data['memory_mb'] num_cores = instance_flavor_data['vcpus'] disk_gb = instance_flavor_data['root_gb'] + instance_metadata = data['nova_object.data']['metadata'] instance.update({ 'state': instance_data['state'], @@ -75,6 +76,7 @@ class NovaNotification(base.NotificationEndpoint): 'vcpus': num_cores, 'disk': disk_gb, 'disk_capacity': disk_gb, + 'metadata': instance_metadata, }) try: @@ -90,6 +92,7 @@ class NovaNotification(base.NotificationEndpoint): memory_mb = data['memory_mb'] num_cores = data['vcpus'] disk_gb = data['root_gb'] + instance_metadata = data['metadata'] instance.update({ 'state': data['state'], @@ -99,6 +102,7 @@ class NovaNotification(base.NotificationEndpoint): 'vcpus': num_cores, 'disk': disk_gb, 'disk_capacity': disk_gb, + 'metadata': instance_metadata, }) try: diff --git a/watcher/tests/decision_engine/cluster/test_nova_cdmc.py b/watcher/tests/decision_engine/cluster/test_nova_cdmc.py index c679d2403..6f975bcac 100644 --- a/watcher/tests/decision_engine/cluster/test_nova_cdmc.py +++ b/watcher/tests/decision_engine/cluster/test_nova_cdmc.py @@ -54,6 +54,7 @@ class TestNovaClusterDataModelCollector(base.TestCase): id='ef500f7e-dac8-470f-960c-169486fce71b', human_id='fake_instance', flavor={'ram': 333, 'disk': 222, 'vcpus': 4, 'id': 1}, + metadata={'hi': 'hello'}, ) setattr(fake_instance, 'OS-EXT-STS:vm_state', 'VM_STATE') m_nova_helper.get_compute_node_list.return_value = [fake_compute_node]