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 40cf447d28)
This commit is contained in:
Matt Riedemann 2017-05-25 21:35:09 -04:00
parent 74e2a400b2
commit 893d11be86
2 changed files with 4 additions and 1 deletions

View File

@ -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,

View File

@ -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']}