From 893d11be86588c8da744f6bbdf24b184c2d78dc0 Mon Sep 17 00:00:00 2001 From: Matt Riedemann Date: Thu, 25 May 2017 21:35:09 -0400 Subject: [PATCH] Avoid lazy-loading instance.id when cross_az_attach=False The instance is no longer created in the API so the id attribute won't be set, which means when checking the instance AZ against the volume AZ, if they don't match we can't put the instance.id in the error message. We shouldn't have been putting the instance primary key in the error message anyway. This fixes the bug by using the instance.uuid which is set in this object in _provision_instances. Change-Id: I396b767815b666706fec980ded482fa4746d2efc Closes-Bug: #1693654 (cherry picked from commit 40cf447d28a5c9842f3546c4e7fe4efa682293cf) --- nova/tests/unit/volume/test_cinder.py | 3 +++ nova/volume/cinder.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/nova/tests/unit/volume/test_cinder.py b/nova/tests/unit/volume/test_cinder.py index 7b325a3a60c4..c7d059aa545e 100644 --- a/nova/tests/unit/volume/test_cinder.py +++ b/nova/tests/unit/volume/test_cinder.py @@ -201,6 +201,9 @@ class CinderApiTestCase(test.NoDBTestCase): 'attach_status': 'detached', 'availability_zone': 'zone2'} instance = fake_instance_obj(self.ctx) + # Simulate _provision_instances in the compute API; the instance is not + # created in the API so the instance will not have an id attribute set. + delattr(instance, 'id') self.assertRaises(exception.InvalidVolume, self.api.check_availability_zone, diff --git a/nova/volume/cinder.py b/nova/volume/cinder.py index 91195efdb454..bd99dacd28ea 100644 --- a/nova/volume/cinder.py +++ b/nova/volume/cinder.py @@ -278,7 +278,7 @@ class API(object): msg = _("Instance %(instance)s and volume %(vol)s are not in " "the same availability_zone. Instance is in " "%(ins_zone)s. Volume is in %(vol_zone)s") % { - "instance": instance['id'], + "instance": instance.uuid, "vol": volume['id'], 'ins_zone': instance_az, 'vol_zone': volume['availability_zone']}