Stringify instance UUID

oslo.versionedobjects merged a patch [1] resulting in the referenced
bug. A second patch [2] was merged that was supposed to fix the issue.
If coerce's value arg is a unicode string, then the method will return
unicode [3]. Subsequent checks for isinstance(str) [4] will fail and a
TypeError will be raised trying to handle the uuid as an int in the
else block. This change ensures that the uuid is an instance of str so
that it is handled properly. This problem was fixed in pypowervm 1.1.15
[5] and the minimum version was bumped for master. However, we can't
backport the pypowervm requirements bump to the stable branches so we
have to fix it here.

[1] https://review.openstack.org/#/c/559815/
[2] https://review.openstack.org/#/c/561674/
[3] https://review.openstack.org/#/c/561674/2/oslo_versionedobjects/fields.py@367
[4] https://github.com/powervm/pypowervm/blob/1.1.10/pypowervm/utils/uuid.py#L50-L56
[5] https://github.com/powervm/pypowervm/commit/d55b4c84

Change-Id: I1baef962b4b8074f3f9b9ad5402970edc9a3a776
Related-Bug: #1766692
This commit is contained in:
esberglu 2018-05-10 09:08:14 -05:00
parent 00c2497209
commit 2386e015ef
1 changed files with 5 additions and 1 deletions

View File

@ -111,7 +111,11 @@ def get_pvm_uuid(instance):
:param instance: nova.objects.instance.Instance.
:return: The PowerVM UUID for the LPAR corresponding to the instance.
"""
return pvm_uuid.convert_uuid_to_pvm(instance.uuid).upper()
# NOTE(esberglu): To work around bug ##1766692, we explicitly use str()
# rather than six.text_type here because of this pypowervm check for
# isinstance(..., str) at L50 of
# https://github.com/powervm/pypowervm/blob/1.1.10/pypowervm/utils/uuid.py
return pvm_uuid.convert_uuid_to_pvm(str(instance.uuid)).upper()
def get_instance_wrapper(adapter, instance):