From fb17e972745c747fc1e36eb28b84b0821c03e37b Mon Sep 17 00:00:00 2001 From: Thomas Goirand Date: Sat, 26 Apr 2014 23:12:57 +0800 Subject: [PATCH] Applied patch from Mike Perez to be able to create volume from glance image without checksum. Rewritten-From: 90770dccc197e1f1c43982e2aaec286593aa0c27 --- xenial/debian/changelog | 7 ++ ...o-None-on-missing-Glance-image-attrs.patch | 103 ++++++++++++++++++ xenial/debian/patches/series | 1 + 3 files changed, 111 insertions(+) create mode 100644 xenial/debian/patches/fallback-to-None-on-missing-Glance-image-attrs.patch diff --git a/xenial/debian/changelog b/xenial/debian/changelog index ffff55fe0..62de46ab0 100644 --- a/xenial/debian/changelog +++ b/xenial/debian/changelog @@ -1,3 +1,10 @@ +cinder (2014.1-2) unstable; urgency=medium + + * Applied patch from Mike Perez to be able to create + volume from glance image without checksum. + + -- Thomas Goirand Sat, 26 Apr 2014 23:12:30 +0800 + cinder (2014.1-1) unstable; urgency=medium * New upstream release. diff --git a/xenial/debian/patches/fallback-to-None-on-missing-Glance-image-attrs.patch b/xenial/debian/patches/fallback-to-None-on-missing-Glance-image-attrs.patch new file mode 100644 index 000000000..fc7c94790 --- /dev/null +++ b/xenial/debian/patches/fallback-to-None-on-missing-Glance-image-attrs.patch @@ -0,0 +1,103 @@ +Description: Fallback to None on missing Glance image attrs + It's possible for glance images to be missing attributes like name and + checksum. We'll just set those to None by default to avoid missing key + exceptions being raised. +Author: Mike Perez +Origin: upstream, https://review.openstack.org/#/c/88089/ +Bug-Ubuntu: https://launchpad.net/bugs/1308058 +Forwarded: not-needed +Reviewed-By: Sebastien Badia +Last-Update: 2014-04-25 + +diff --git a/cinder/image/glance.py b/cinder/image/glance.py +index 0c15ba0..e0e6ab2 100644 +--- a/cinder/image/glance.py ++++ b/cinder/image/glance.py +@@ -431,7 +431,7 @@ def _extract_attributes(image): + elif attr == 'checksum' and output['status'] != 'active': + output[attr] = None + else: +- output[attr] = getattr(image, attr) ++ output[attr] = getattr(image, attr, None) + + output['properties'] = getattr(image, 'properties', {}) + +diff --git a/cinder/tests/image/test_glance.py b/cinder/tests/image/test_glance.py +index 3be3568..7374372 100644 +--- a/cinder/tests/image/test_glance.py ++++ b/cinder/tests/image/test_glance.py +@@ -17,8 +17,7 @@ + import datetime + + import glanceclient.exc +-import glanceclient.v2.client +-from glanceclient.v2.client import Client as glanceclient_v2 ++from glanceclient.v2 import client as glance_client_v2 + from oslo.config import cfg + + from cinder import context +@@ -542,6 +541,50 @@ class TestGlanceImageService(test.TestCase): + self.assertEqual(same_id, image_id) + self.assertEqual(service._client.netloc, ipv6_url) + ++ def test_extracting_missing_attributes(self): ++ """Verify behavior from glance objects that are missing attributes ++ ++ This fakes the image class and is missing the checksum and name ++ attribute as the client would return if they're not set in the ++ database. Regression test for bug #1308058. ++ """ ++ class MyFakeGlanceImage(glance_stubs.FakeImage): ++ def __init__(self, metadata): ++ IMAGE_ATTRIBUTES = ['size', 'disk_format', 'owner', ++ 'container_format', 'id', 'created_at', ++ 'updated_at', 'deleted', 'status', ++ 'min_disk', 'min_ram', 'is_public'] ++ raw = dict.fromkeys(IMAGE_ATTRIBUTES) ++ raw.update(metadata) ++ self.__dict__['raw'] = raw ++ ++ metadata = { ++ 'id': 1, ++ 'created_at': self.NOW_DATETIME, ++ 'updated_at': self.NOW_DATETIME, ++ } ++ image = MyFakeGlanceImage(metadata) ++ actual = glance._extract_attributes(image) ++ expected = { ++ 'id': 1, ++ 'name': None, ++ 'is_public': None, ++ 'size': None, ++ 'min_disk': None, ++ 'min_ram': None, ++ 'disk_format': None, ++ 'container_format': None, ++ 'checksum': None, ++ 'created_at': self.NOW_DATETIME, ++ 'updated_at': self.NOW_DATETIME, ++ 'deleted_at': None, ++ 'deleted': None, ++ 'status': None, ++ 'properties': {}, ++ 'owner': None, ++ } ++ self.assertEqual(actual, expected) ++ + + class TestGlanceClientVersion(test.TestCase): + """Tests the version of the glance client generated.""" +@@ -551,11 +594,11 @@ class TestGlanceClientVersion(test.TestCase): + def fake_get_model(self): + return + +- self.stubs.Set(glanceclient_v2, '_get_image_model', ++ self.stubs.Set(glance_client_v2.Client, '_get_image_model', + fake_get_model) + + try: +- self.stubs.Set(glanceclient_v2, '_get_member_model', ++ self.stubs.Set(glance_client_v2.Client, '_get_member_model', + fake_get_model) + except AttributeError: + # method requires stubbing only with newer glanceclients. diff --git a/xenial/debian/patches/series b/xenial/debian/patches/series index ebd33f1a9..69f34a7a4 100644 --- a/xenial/debian/patches/series +++ b/xenial/debian/patches/series @@ -1,2 +1,3 @@ install-missing-files.patch re-add-filter-authtoken.patch +fallback-to-None-on-missing-Glance-image-attrs.patch -- 2.45.2