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
This commit is contained in:
Matt Riedemann 2017-05-25 21:35:09 -04:00 committed by Sean Dague
parent 0cd67d23bd
commit 40cf447d28
2 changed files with 4 additions and 1 deletions

View File

@ -189,6 +189,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

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