diff --git a/doc/notification_samples/instance-create-end.json b/doc/notification_samples/instance-create-end.json index a1ea50e678..5b2c008f53 100644 --- a/doc/notification_samples/instance-create-end.json +++ b/doc/notification_samples/instance-create-end.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-create-error.json b/doc/notification_samples/instance-create-error.json index 1d5e39261d..8907ce02bc 100644 --- a/doc/notification_samples/instance-create-error.json +++ b/doc/notification_samples/instance-create-error.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-create-start.json b/doc/notification_samples/instance-create-start.json index 56b7b608de..fbdb4a2f81 100644 --- a/doc/notification_samples/instance-create-start.json +++ b/doc/notification_samples/instance-create-start.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-delete-end.json b/doc/notification_samples/instance-delete-end.json index 120fa5e2be..98bdefdfba 100644 --- a/doc/notification_samples/instance-delete-end.json +++ b/doc/notification_samples/instance-delete-end.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":"2012-10-29T13:42:11Z", "display_name":"some-server", diff --git a/doc/notification_samples/instance-delete-start.json b/doc/notification_samples/instance-delete-start.json index ba2dee44db..137d802c2a 100644 --- a/doc/notification_samples/instance-delete-start.json +++ b/doc/notification_samples/instance-delete-start.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-pause-end.json b/doc/notification_samples/instance-pause-end.json index 7a4b5692fd..4d20ee5c6c 100644 --- a/doc/notification_samples/instance-pause-end.json +++ b/doc/notification_samples/instance-pause-end.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-pause-start.json b/doc/notification_samples/instance-pause-start.json index dfc3f0465c..dd4df0dc44 100644 --- a/doc/notification_samples/instance-pause-start.json +++ b/doc/notification_samples/instance-pause-start.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-power_off-end.json b/doc/notification_samples/instance-power_off-end.json index 1b15f70577..4dff7a054f 100644 --- a/doc/notification_samples/instance-power_off-end.json +++ b/doc/notification_samples/instance-power_off-end.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-power_off-start.json b/doc/notification_samples/instance-power_off-start.json index 28dff447be..60f19a5cec 100644 --- a/doc/notification_samples/instance-power_off-start.json +++ b/doc/notification_samples/instance-power_off-start.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-power_on-end.json b/doc/notification_samples/instance-power_on-end.json index 086ad7c6cc..1ba3817a8e 100644 --- a/doc/notification_samples/instance-power_on-end.json +++ b/doc/notification_samples/instance-power_on-end.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-power_on-start.json b/doc/notification_samples/instance-power_on-start.json index 596c2c6105..7f4adc5206 100644 --- a/doc/notification_samples/instance-power_on-start.json +++ b/doc/notification_samples/instance-power_on-start.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-reboot-end.json b/doc/notification_samples/instance-reboot-end.json index 0887d04fa4..58b4d63ee8 100644 --- a/doc/notification_samples/instance-reboot-end.json +++ b/doc/notification_samples/instance-reboot-end.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":null, - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", @@ -71,4 +71,4 @@ }, "priority":"INFO", "publisher_id":"nova-compute:compute" -} \ No newline at end of file +} diff --git a/doc/notification_samples/instance-reboot-error.json b/doc/notification_samples/instance-reboot-error.json index d5e64fab51..016c104da1 100644 --- a/doc/notification_samples/instance-reboot-error.json +++ b/doc/notification_samples/instance-reboot-error.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture": null, - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", @@ -81,4 +81,4 @@ }, "priority":"ERROR", "publisher_id":"nova-compute:compute" -} \ No newline at end of file +} diff --git a/doc/notification_samples/instance-reboot-start.json b/doc/notification_samples/instance-reboot-start.json index 49f54fdbee..13386f7111 100644 --- a/doc/notification_samples/instance-reboot-start.json +++ b/doc/notification_samples/instance-reboot-start.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":null, - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", @@ -71,4 +71,4 @@ }, "priority":"INFO", "publisher_id":"nova-compute:compute" -} \ No newline at end of file +} diff --git a/doc/notification_samples/instance-rebuild-end.json b/doc/notification_samples/instance-rebuild-end.json index 787a301944..82eccf7ecc 100755 --- a/doc/notification_samples/instance-rebuild-end.json +++ b/doc/notification_samples/instance-rebuild-end.json @@ -62,7 +62,7 @@ "os_type": null, "uuid": "b271fcb9-75c3-4c76-84eb-6ccad1150ece", "locked": false, - "availability_zone": null, + "availability_zone": "nova", "ramdisk_id": "", "architecture": null, "progress": 0, diff --git a/doc/notification_samples/instance-rebuild-error.json b/doc/notification_samples/instance-rebuild-error.json index 9a1c447240..4939ede390 100755 --- a/doc/notification_samples/instance-rebuild-error.json +++ b/doc/notification_samples/instance-rebuild-error.json @@ -4,7 +4,7 @@ "nova_object.name": "InstanceActionPayload", "nova_object.data": { "state": "active", - "availability_zone": null, + "availability_zone": "nova", "kernel_id": "", "host_name": "some-server", "progress": 0, diff --git a/doc/notification_samples/instance-rebuild-start.json b/doc/notification_samples/instance-rebuild-start.json index 4120a39c01..23dc361325 100755 --- a/doc/notification_samples/instance-rebuild-start.json +++ b/doc/notification_samples/instance-rebuild-start.json @@ -64,7 +64,7 @@ } ], "tenant_id": "6f70656e737461636b20342065766572", - "availability_zone": null, + "availability_zone": "nova", "host": "compute", "image_uuid": "a2459075-d96c-40d5-893e-577ff92e721c", "state": "active", diff --git a/doc/notification_samples/instance-resize-end.json b/doc/notification_samples/instance-resize-end.json index b140408f7b..3f515bf9a1 100644 --- a/doc/notification_samples/instance-resize-end.json +++ b/doc/notification_samples/instance-resize-end.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-resize-start.json b/doc/notification_samples/instance-resize-start.json index f5f16a1dea..13a9c1fe88 100644 --- a/doc/notification_samples/instance-resize-start.json +++ b/doc/notification_samples/instance-resize-start.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-resize_finish-end.json b/doc/notification_samples/instance-resize_finish-end.json index 780f4f3ae2..a1de07edf8 100644 --- a/doc/notification_samples/instance-resize_finish-end.json +++ b/doc/notification_samples/instance-resize_finish-end.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-resize_finish-start.json b/doc/notification_samples/instance-resize_finish-start.json index 5dcbf95dc7..ae951f1e4b 100644 --- a/doc/notification_samples/instance-resize_finish-start.json +++ b/doc/notification_samples/instance-resize_finish-start.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-restore-end.json b/doc/notification_samples/instance-restore-end.json index 3ecb98bf95..b37f59e400 100644 --- a/doc/notification_samples/instance-restore-end.json +++ b/doc/notification_samples/instance-restore-end.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-restore-start.json b/doc/notification_samples/instance-restore-start.json index a8cd5171ae..ed36345156 100644 --- a/doc/notification_samples/instance-restore-start.json +++ b/doc/notification_samples/instance-restore-start.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-resume-end.json b/doc/notification_samples/instance-resume-end.json index 3e646a7fc2..28fe0ba87c 100644 --- a/doc/notification_samples/instance-resume-end.json +++ b/doc/notification_samples/instance-resume-end.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-resume-start.json b/doc/notification_samples/instance-resume-start.json index b96e0c63cf..2fb61188d4 100644 --- a/doc/notification_samples/instance-resume-start.json +++ b/doc/notification_samples/instance-resume-start.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-shelve-end.json b/doc/notification_samples/instance-shelve-end.json index 337cddf11f..0a9c8a5d9f 100644 --- a/doc/notification_samples/instance-shelve-end.json +++ b/doc/notification_samples/instance-shelve-end.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-shelve-start.json b/doc/notification_samples/instance-shelve-start.json index 1637a816d0..4f2179bd6d 100644 --- a/doc/notification_samples/instance-shelve-start.json +++ b/doc/notification_samples/instance-shelve-start.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-shelve_offload-end.json b/doc/notification_samples/instance-shelve_offload-end.json index cc78220f2e..ee7c5c8faf 100644 --- a/doc/notification_samples/instance-shelve_offload-end.json +++ b/doc/notification_samples/instance-shelve_offload-end.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-shelve_offload-start.json b/doc/notification_samples/instance-shelve_offload-start.json index b3a492c3b0..c7b709b8f7 100644 --- a/doc/notification_samples/instance-shelve_offload-start.json +++ b/doc/notification_samples/instance-shelve_offload-start.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-shutdown-end.json b/doc/notification_samples/instance-shutdown-end.json index c9e9d0950d..9a9e87aadb 100644 --- a/doc/notification_samples/instance-shutdown-end.json +++ b/doc/notification_samples/instance-shutdown-end.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-shutdown-start.json b/doc/notification_samples/instance-shutdown-start.json index afbbb01507..e71263b53d 100644 --- a/doc/notification_samples/instance-shutdown-start.json +++ b/doc/notification_samples/instance-shutdown-start.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-snapshot-end.json b/doc/notification_samples/instance-snapshot-end.json index b3e5fabead..b48a9379bb 100644 --- a/doc/notification_samples/instance-snapshot-end.json +++ b/doc/notification_samples/instance-snapshot-end.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-snapshot-start.json b/doc/notification_samples/instance-snapshot-start.json index 712e494f87..8c2c416306 100644 --- a/doc/notification_samples/instance-snapshot-start.json +++ b/doc/notification_samples/instance-snapshot-start.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-suspend-end.json b/doc/notification_samples/instance-suspend-end.json index a7351ea2d1..b6c6e1eeac 100644 --- a/doc/notification_samples/instance-suspend-end.json +++ b/doc/notification_samples/instance-suspend-end.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-suspend-start.json b/doc/notification_samples/instance-suspend-start.json index 91a97ea618..c6855b7c6c 100644 --- a/doc/notification_samples/instance-suspend-start.json +++ b/doc/notification_samples/instance-suspend-start.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-unpause-end.json b/doc/notification_samples/instance-unpause-end.json index 15b2e070f5..e9f707c3d1 100644 --- a/doc/notification_samples/instance-unpause-end.json +++ b/doc/notification_samples/instance-unpause-end.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-unpause-start.json b/doc/notification_samples/instance-unpause-start.json index fd31f02d90..94f4e6f3a1 100644 --- a/doc/notification_samples/instance-unpause-start.json +++ b/doc/notification_samples/instance-unpause-start.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-unshelve-end.json b/doc/notification_samples/instance-unshelve-end.json index 6457d0f2bb..88ffb588a5 100644 --- a/doc/notification_samples/instance-unshelve-end.json +++ b/doc/notification_samples/instance-unshelve-end.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-unshelve-start.json b/doc/notification_samples/instance-unshelve-start.json index 91d04a630b..4dfe58ef4e 100644 --- a/doc/notification_samples/instance-unshelve-start.json +++ b/doc/notification_samples/instance-unshelve-start.json @@ -3,7 +3,7 @@ "payload":{ "nova_object.data":{ "architecture":"x86_64", - "availability_zone":null, + "availability_zone": "nova", "created_at":"2012-10-29T13:42:11Z", "deleted_at":null, "display_name":"some-server", diff --git a/doc/notification_samples/instance-update.json b/doc/notification_samples/instance-update.json index 0aa5fd4e00..9ad4433b06 100644 --- a/doc/notification_samples/instance-update.json +++ b/doc/notification_samples/instance-update.json @@ -11,7 +11,7 @@ "nova_object.namespace": "nova", "nova_object.version": "1.0" }, - "availability_zone": null, + "availability_zone": "nova", "bandwidth": [], "created_at": "2012-10-29T13:42:11Z", "deleted_at": null, diff --git a/doc/notification_samples/instance-volume_swap-end.json b/doc/notification_samples/instance-volume_swap-end.json index ca8ee9f6f3..ed645546d5 100644 --- a/doc/notification_samples/instance-volume_swap-end.json +++ b/doc/notification_samples/instance-volume_swap-end.json @@ -3,7 +3,7 @@ "payload": { "nova_object.data": { "architecture": "x86_64", - "availability_zone": null, + "availability_zone": "nova", "created_at": "2012-10-29T13:42:11Z", "deleted_at": null, "display_name": "some-server", diff --git a/doc/notification_samples/instance-volume_swap-error.json b/doc/notification_samples/instance-volume_swap-error.json index 16c602f4be..6de10ad3e2 100644 --- a/doc/notification_samples/instance-volume_swap-error.json +++ b/doc/notification_samples/instance-volume_swap-error.json @@ -3,7 +3,7 @@ "payload": { "nova_object.data": { "architecture": "x86_64", - "availability_zone": null, + "availability_zone": "nova", "created_at": "2012-10-29T13:42:11Z", "deleted_at": null, "display_name": "some-server", diff --git a/doc/notification_samples/instance-volume_swap-start.json b/doc/notification_samples/instance-volume_swap-start.json index 01610f6201..1ac7efc411 100644 --- a/doc/notification_samples/instance-volume_swap-start.json +++ b/doc/notification_samples/instance-volume_swap-start.json @@ -3,7 +3,7 @@ "payload": { "nova_object.data": { "architecture": "x86_64", - "availability_zone": null, + "availability_zone": "nova", "created_at": "2012-10-29T13:42:11Z", "deleted_at": null, "display_name": "some-server", diff --git a/nova/conductor/manager.py b/nova/conductor/manager.py index d46a140729..905d14804c 100644 --- a/nova/conductor/manager.py +++ b/nova/conductor/manager.py @@ -25,6 +25,7 @@ from oslo_utils import excutils from oslo_utils import versionutils import six +from nova import availability_zones from nova.compute import instance_actions from nova.compute import rpcapi as compute_rpcapi from nova.compute import task_states @@ -575,8 +576,13 @@ class ComputeTaskManager(base.Base): return for (instance, host) in six.moves.zip(instances, hosts): + instance.availability_zone = ( + availability_zones.get_host_availability_zone(context, + host['host'])) try: - instance.refresh() + # NOTE(danms): This saves the az change above, refreshes our + # instance, and tells us if it has been deleted underneath us + instance.save() except (exception.InstanceNotFound, exception.InstanceInfoCacheNotFound): LOG.debug('Instance deleted during build', instance=instance) @@ -698,6 +704,9 @@ class ComputeTaskManager(base.Base): scheduler_utils.populate_filter_properties( filter_properties, host_state) (host, node) = (host_state['host'], host_state['nodename']) + instance.availability_zone = ( + availability_zones.get_host_availability_zone( + context, host)) self.compute_rpcapi.unshelve_instance( context, instance, host, image=image, filter_properties=filter_properties, node=node) @@ -790,6 +799,10 @@ class ComputeTaskManager(base.Base): compute_utils.notify_about_instance_usage( self.notifier, context, instance, "rebuild.scheduled") + instance.availability_zone = ( + availability_zones.get_host_availability_zone( + context, host)) + self.compute_rpcapi.rebuild_instance(context, instance=instance, new_pass=new_pass, @@ -947,6 +960,9 @@ class ComputeTaskManager(base.Base): 'was already deleted.', instance=instance) continue else: + instance.availability_zone = ( + availability_zones.get_host_availability_zone( + context, host['host'])) with obj_target_cell(instance, cell): instance.create() diff --git a/nova/conductor/tasks/migrate.py b/nova/conductor/tasks/migrate.py index e4a07a9450..5331200de0 100644 --- a/nova/conductor/tasks/migrate.py +++ b/nova/conductor/tasks/migrate.py @@ -12,6 +12,7 @@ from oslo_serialization import jsonutils +from nova import availability_zones from nova.conductor.tasks import base from nova import objects from nova.scheduler import utils as scheduler_utils @@ -67,6 +68,10 @@ class MigrationTask(base.TaskBase): (host, node) = (host_state['host'], host_state['nodename']) + self.instance.availability_zone = ( + availability_zones.get_host_availability_zone( + self.context, host)) + # FIXME(sbauza): Serialize/Unserialize the legacy dict because of # oslo.messaging #1529084 to transform datetime values into strings. # tl;dr: datetimes in dicts are not accepted as correct values by the diff --git a/nova/tests/unit/conductor/tasks/test_migrate.py b/nova/tests/unit/conductor/tasks/test_migrate.py index b75360c170..8c411374ae 100644 --- a/nova/tests/unit/conductor/tasks/test_migrate.py +++ b/nova/tests/unit/conductor/tasks/test_migrate.py @@ -54,14 +54,17 @@ class MigrationTaskTestCase(test.NoDBTestCase): compute_rpcapi.ComputeAPI(), scheduler_client.SchedulerClient()) + @mock.patch('nova.availability_zones.get_host_availability_zone') @mock.patch.object(objects.RequestSpec, 'from_components') @mock.patch.object(scheduler_utils, 'setup_instance_group') @mock.patch.object(scheduler_client.SchedulerClient, 'select_destinations') @mock.patch.object(compute_rpcapi.ComputeAPI, 'prep_resize') @mock.patch.object(objects.Quotas, 'from_reservations') def test_execute(self, quotas_mock, prep_resize_mock, - sel_dest_mock, sig_mock, request_spec_from_components): + sel_dest_mock, sig_mock, request_spec_from_components, + az_mock): sel_dest_mock.return_value = self.hosts + az_mock.return_value = 'myaz' task = self._generate_task() request_spec_from_components.return_value = self.request_spec legacy_request_spec = self.request_spec.to_legacy_request_spec_dict() @@ -74,7 +77,7 @@ class MigrationTaskTestCase(test.NoDBTestCase): self.context, self.instance.uuid, self.request_spec.image, task.flavor, self.instance.numa_topology, self.instance.pci_requests, expected_props, None, - self.instance.availability_zone) + None) quotas_mock.assert_called_once_with(self.context, self.reservations, instance=self.instance) sig_mock.assert_called_once_with(self.context, legacy_request_spec, @@ -88,6 +91,7 @@ class MigrationTaskTestCase(test.NoDBTestCase): filter_properties=self.filter_properties, node=self.hosts[0]['nodename'], clean_shutdown=self.clean_shutdown) self.assertFalse(quotas_mock.return_value.rollback.called) + az_mock.assert_called_once_with(self.context, 'host1') def test_rollback(self): task = self._generate_task() diff --git a/nova/tests/unit/conductor/test_conductor.py b/nova/tests/unit/conductor/test_conductor.py index c27bf1e62a..cb8ad23fc9 100644 --- a/nova/tests/unit/conductor/test_conductor.py +++ b/nova/tests/unit/conductor/test_conductor.py @@ -379,8 +379,9 @@ class _BaseTaskTestCase(object): def test_cold_migrate_forced_shutdown(self): self._test_cold_migrate(clean_shutdown=False) - @mock.patch('nova.objects.Instance.refresh') - def test_build_instances(self, mock_refresh): + @mock.patch('nova.availability_zones.get_host_availability_zone') + @mock.patch('nova.objects.Instance.save') + def test_build_instances(self, mock_save, mock_getaz): instance_type = flavors.get_default_flavor() # NOTE(danms): Avoid datetime timezone issues with converted flavors instance_type.created_at = None @@ -455,6 +456,8 @@ class _BaseTaskTestCase(object): # build_instances() is a cast, we need to wait for it to complete self.useFixture(cast_as_call.CastAsCall(self.stubs)) + mock_getaz.return_value = 'myaz' + self.conductor.build_instances(self.context, instances=instances, image={'fake_data': 'should_pass_silently'}, @@ -465,6 +468,9 @@ class _BaseTaskTestCase(object): security_groups='security_groups', block_device_mapping='block_device_mapping', legacy_bdm=False) + mock_getaz.assert_has_calls([ + mock.call(self.context, 'host1'), + mock.call(self.context, 'host2')]) @mock.patch.object(scheduler_utils, 'build_request_spec') @mock.patch.object(scheduler_utils, 'setup_instance_group') @@ -608,7 +614,7 @@ class _BaseTaskTestCase(object): state_mock.assert_has_calls(set_state_calls) cleanup_mock.assert_has_calls(cleanup_network_calls) - @mock.patch.object(objects.Instance, 'refresh') + @mock.patch.object(objects.Instance, 'save') @mock.patch.object(objects.InstanceMapping, 'get_by_instance_uuid', side_effect=exc.InstanceMappingNotFound(uuid='fake')) @mock.patch.object(objects.HostMapping, 'get_by_host') @@ -618,7 +624,7 @@ class _BaseTaskTestCase(object): '_set_vm_state_and_notify') def test_build_instances_no_instance_mapping(self, _mock_set_state, mock_select_dests, mock_get_by_host, mock_get_inst_map_by_uuid, - _mock_refresh): + _mock_save): mock_select_dests.return_value = [ {'host': 'host1', 'nodename': 'node1', 'limits': []}, @@ -649,7 +655,7 @@ class _BaseTaskTestCase(object): mock.call(self.context, instances[1].uuid)]) self.assertFalse(mock_get_by_host.called) - @mock.patch.object(objects.Instance, 'refresh') + @mock.patch.object(objects.Instance, 'save') @mock.patch.object(objects.InstanceMapping, 'get_by_instance_uuid') @mock.patch.object(objects.HostMapping, 'get_by_host', side_effect=exc.HostMappingNotFound(name='fake')) @@ -659,7 +665,7 @@ class _BaseTaskTestCase(object): '_set_vm_state_and_notify') def test_build_instances_no_host_mapping(self, _mock_set_state, mock_select_dests, mock_get_by_host, mock_get_inst_map_by_uuid, - _mock_refresh): + _mock_save): mock_select_dests.return_value = [ {'host': 'host1', 'nodename': 'node1', 'limits': []}, @@ -698,7 +704,7 @@ class _BaseTaskTestCase(object): mock_get_by_host.assert_has_calls([mock.call(self.context, 'host1'), mock.call(self.context, 'host2')]) - @mock.patch.object(objects.Instance, 'refresh') + @mock.patch.object(objects.Instance, 'save') @mock.patch.object(objects.InstanceMapping, 'get_by_instance_uuid') @mock.patch.object(objects.HostMapping, 'get_by_host') @mock.patch.object(scheduler_client.SchedulerClient, @@ -707,7 +713,7 @@ class _BaseTaskTestCase(object): '_set_vm_state_and_notify') def test_build_instances_update_instance_mapping(self, _mock_set_state, mock_select_dests, mock_get_by_host, mock_get_inst_map_by_uuid, - _mock_refresh): + _mock_save): mock_select_dests.return_value = [ {'host': 'host1', 'nodename': 'node1', 'limits': []}, @@ -751,7 +757,7 @@ class _BaseTaskTestCase(object): mock_get_by_host.assert_has_calls([mock.call(self.context, 'host1'), mock.call(self.context, 'host2')]) - @mock.patch.object(objects.Instance, 'refresh', new=mock.MagicMock()) + @mock.patch.object(objects.Instance, 'save', new=mock.MagicMock()) @mock.patch.object(objects.BuildRequest, 'get_by_instance_uuid') @mock.patch.object(scheduler_client.SchedulerClient, 'select_destinations') @@ -796,7 +802,7 @@ class _BaseTaskTestCase(object): for build_req in build_req_mocks: build_req.destroy.assert_called_once_with() - @mock.patch.object(objects.Instance, 'refresh', new=mock.MagicMock()) + @mock.patch.object(objects.Instance, 'save', new=mock.MagicMock()) @mock.patch.object(objects.BuildRequest, 'get_by_instance_uuid', side_effect=exc.BuildRequestNotFound(uuid='fake')) @mock.patch.object(scheduler_client.SchedulerClient, @@ -839,7 +845,7 @@ class _BaseTaskTestCase(object): do_test() @mock.patch.object(objects.Service, 'get_minimum_version', return_value=12) - @mock.patch.object(objects.Instance, 'refresh', new=mock.MagicMock()) + @mock.patch.object(objects.Instance, 'save', new=mock.MagicMock()) @mock.patch.object(objects.BuildRequest, 'get_by_instance_uuid', side_effect=exc.BuildRequestNotFound(uuid='fake')) @mock.patch.object(scheduler_client.SchedulerClient, @@ -886,7 +892,7 @@ class _BaseTaskTestCase(object): mock_service_version.assert_called_once_with(self.context, 'nova-osapi_compute') - @mock.patch.object(objects.Instance, 'refresh', new=mock.MagicMock()) + @mock.patch.object(objects.Instance, 'save', new=mock.MagicMock()) @mock.patch.object(scheduler_client.SchedulerClient, 'select_destinations') @mock.patch.object(conductor_manager.ComputeTaskManager, @@ -1432,13 +1438,16 @@ class ConductorTaskTestCase(_BaseTaskTestCase, test_compute.BaseTestCase): objects=[bdm]) self.params = params + @mock.patch('nova.availability_zones.get_host_availability_zone') @mock.patch('nova.compute.rpcapi.ComputeAPI.build_and_run_instance') @mock.patch('nova.scheduler.rpcapi.SchedulerAPI.select_destinations') def test_schedule_and_build_instances(self, select_destinations, - build_and_run_instance): + build_and_run_instance, + get_az): select_destinations.return_value = [{'host': 'fake-host', 'nodename': 'fake-nodename', 'limits': None}] + get_az.return_value = 'myaz' params = self.params details = {} @@ -1453,6 +1462,7 @@ class ConductorTaskTestCase(_BaseTaskTestCase, test_compute.BaseTestCase): build_and_run_instance.side_effect = _build_and_run_instance self.conductor.schedule_and_build_instances(**params) self.assertTrue(build_and_run_instance.called) + get_az.assert_called_once_with(mock.ANY, 'fake-host') instance_uuid = details['instance'].uuid bdms = objects.BlockDeviceMappingList.get_by_instance_uuid( @@ -2227,8 +2237,8 @@ class ConductorTaskTestCase(_BaseTaskTestCase, test_compute.BaseTestCase): def test_build_instances_instance_not_found(self): instances = [fake_instance.fake_instance_obj(self.context) for i in range(2)] - self.mox.StubOutWithMock(instances[0], 'refresh') - self.mox.StubOutWithMock(instances[1], 'refresh') + self.mox.StubOutWithMock(instances[0], 'save') + self.mox.StubOutWithMock(instances[1], 'save') image = {'fake-data': 'should_pass_silently'} spec = {'fake': 'specs', 'instance_properties': instances[0]} @@ -2244,9 +2254,9 @@ class ConductorTaskTestCase(_BaseTaskTestCase, test_compute.BaseTestCase): spec, filter_properties).AndReturn( [{'host': 'host1', 'nodename': 'node1', 'limits': []}, {'host': 'host2', 'nodename': 'node2', 'limits': []}]) - instances[0].refresh().AndRaise( + instances[0].save().AndRaise( exc.InstanceNotFound(instance_id=instances[0].uuid)) - instances[1].refresh() + instances[1].save() self.conductor_manager.compute_rpcapi.build_and_run_instance( self.context, instance=instances[1], host='host2', image={'fake-data': 'should_pass_silently'}, request_spec=spec, @@ -2289,16 +2299,16 @@ class ConductorTaskTestCase(_BaseTaskTestCase, test_compute.BaseTestCase): 'instance_properties': instances[0]} build_request_spec.return_value = spec with test.nested( - mock.patch.object(instances[0], 'refresh', + mock.patch.object(instances[0], 'save', side_effect=exc.InstanceInfoCacheNotFound( instance_uuid=instances[0].uuid)), - mock.patch.object(instances[1], 'refresh'), + mock.patch.object(instances[1], 'save'), mock.patch.object(objects.RequestSpec, 'from_primitives'), mock.patch.object(self.conductor_manager.scheduler_client, 'select_destinations', return_value=destinations), mock.patch.object(self.conductor_manager.compute_rpcapi, 'build_and_run_instance') - ) as (inst1_refresh, inst2_refresh, from_primitives, + ) as (inst1_save, inst2_save, from_primitives, select_destinations, build_and_run_instance):