Merge lp:~gandelman-a/ubuntu/precise/glance/UCA_2012.2.1 into lp:~ubuntu-cloud-archive/ubuntu/precise/glance/folsom

Proposed by Adam Gandelman
Status: Merged
Approved by: Chuck Short
Approved revision: 64
Merged at revision: 63
Proposed branch: lp:~gandelman-a/ubuntu/precise/glance/UCA_2012.2.1
Merge into: lp:~ubuntu-cloud-archive/ubuntu/precise/glance/folsom
Diff against target: 1611 lines (+763/-205)
28 files modified
.gitreview (+1/-0)
.pc/disable-swift-tests.patch/glance/tests/functional/v2/test_images.py (+12/-0)
.pc/disable-swift-tests.patch/glance/tests/unit/test_clients.py (+1/-1)
AUTHORS (+3/-0)
ChangeLog (+376/-103)
PKG-INFO (+1/-1)
debian/changelog (+94/-59)
debian/control (+2/-1)
debian/patches/sql_conn.patch (+8/-8)
glance.egg-info/PKG-INFO (+1/-1)
glance.egg-info/requires.txt (+1/-1)
glance/api/v1/images.py (+25/-5)
glance/api/v2/images.py (+18/-10)
glance/common/utils.py (+17/-0)
glance/openstack/common/setup.py (+4/-3)
glance/store/rbd.py (+11/-1)
glance/tests/functional/v2/test_images.py (+12/-0)
glance/tests/stubs.py (+7/-1)
glance/tests/unit/test_clients.py (+1/-1)
glance/tests/unit/test_store_location.py (+30/-0)
glance/tests/unit/test_utils.py (+11/-0)
glance/tests/unit/v1/test_api.py (+84/-1)
glance/tests/unit/v2/test_images_resource.py (+32/-0)
glance/tests/utils.py (+3/-2)
glance/version.py (+1/-1)
glance/versioninfo (+1/-1)
run_tests.sh (+5/-3)
tools/pip-requires (+1/-1)
To merge this branch: bzr merge lp:~gandelman-a/ubuntu/precise/glance/UCA_2012.2.1
Reviewer Review Type Date Requested Status
Chuck Short Pending
Review via email: mp+142221@code.launchpad.net

Description of the change

Syncs the lp:~ubuntu-cloud-archive branch to current state of the package in the U.C.A., and imports current SRU pending in quantal-proposed.

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file '.gitreview'
--- .gitreview 2012-07-06 11:13:13 +0000
+++ .gitreview 2013-01-08 00:34:25 +0000
@@ -2,3 +2,4 @@
2host=review.openstack.org2host=review.openstack.org
3port=294183port=29418
4project=openstack/glance.git4project=openstack/glance.git
5defaultbranch=stable/folsom
56
=== modified file '.pc/disable-swift-tests.patch/glance/tests/functional/v2/test_images.py'
--- .pc/disable-swift-tests.patch/glance/tests/functional/v2/test_images.py 2012-09-26 12:32:50 +0000
+++ .pc/disable-swift-tests.patch/glance/tests/functional/v2/test_images.py 2013-01-08 00:34:25 +0000
@@ -218,6 +218,12 @@
218 self.assertEqual(201, response.status_code)218 self.assertEqual(201, response.status_code)
219 image_id = json.loads(response.text)['id']219 image_id = json.loads(response.text)['id']
220220
221 # Upload some image data
222 path = self._url('/v2/images/%s/file' % image_id)
223 headers = self._headers({'Content-Type': 'application/octet-stream'})
224 response = requests.put(path, headers=headers, data='ZZZZZ')
225 self.assertEqual(201, response.status_code)
226
221 # TENANT1 should see the image in their list227 # TENANT1 should see the image in their list
222 path = self._url('/v2/images')228 path = self._url('/v2/images')
223 response = requests.get(path, headers=self._headers())229 response = requests.get(path, headers=self._headers())
@@ -300,6 +306,12 @@
300 response = requests.delete(path, headers=headers)306 response = requests.delete(path, headers=headers)
301 self.assertEqual(404, response.status_code)307 self.assertEqual(404, response.status_code)
302308
309 # Image data should still be present after the failed delete
310 path = self._url('/v2/images/%s/file' % image_id)
311 response = requests.get(path, headers=self._headers())
312 self.assertEqual(200, response.status_code)
313 self.assertEqual(response.text, 'ZZZZZ')
314
303 self.stop_servers()315 self.stop_servers()
304316
305 def test_tag_lifecycle(self):317 def test_tag_lifecycle(self):
306318
=== modified file '.pc/disable-swift-tests.patch/glance/tests/unit/test_clients.py'
--- .pc/disable-swift-tests.patch/glance/tests/unit/test_clients.py 2012-09-17 07:44:11 +0000
+++ .pc/disable-swift-tests.patch/glance/tests/unit/test_clients.py 2013-01-08 00:34:25 +0000
@@ -39,7 +39,7 @@
39UUID2 = _gen_uuid()39UUID2 = _gen_uuid()
4040
41#NOTE(bcwaldon): needed to init config_dir cli opt41#NOTE(bcwaldon): needed to init config_dir cli opt
42config.parse_args()42config.parse_args(args=[])
4343
4444
45class TestBadClients(test_utils.BaseTestCase):45class TestBadClients(test_utils.BaseTestCase):
4646
=== modified file 'AUTHORS'
--- AUTHORS 2012-09-17 07:44:11 +0000
+++ AUTHORS 2013-01-08 00:34:25 +0000
@@ -28,6 +28,7 @@
28Eoghan Glynn <eglynn@redhat.com>28Eoghan Glynn <eglynn@redhat.com>
29Ewan Mellor <ewan.mellor@citrix.com>29Ewan Mellor <ewan.mellor@citrix.com>
30Gabriel Hurley <gabriel@strikeawe.com>30Gabriel Hurley <gabriel@strikeawe.com>
31Gerardo Porras <gporras@yahoo-inc.com>
31Hengqing Hu <hudayou@hotmail.com>32Hengqing Hu <hudayou@hotmail.com>
32iccha <iccha.sethi@rackspace.com>33iccha <iccha.sethi@rackspace.com>
33Ionuț Arțăriși <iartarisi@suse.cz>34Ionuț Arțăriși <iartarisi@suse.cz>
@@ -59,6 +60,7 @@
59Lorin Hochstein <lorin@nimbisservices.com>60Lorin Hochstein <lorin@nimbisservices.com>
60lzyeval <lzyeval@gmail.com>61lzyeval <lzyeval@gmail.com>
61Major Hayden <major@mhtx.net>62Major Hayden <major@mhtx.net>
63Mark J. Washenberger <mark.washenberger@markwash.net>
62Mark J. Washenberger <mark.washenberger@rackspace.com>64Mark J. Washenberger <mark.washenberger@rackspace.com>
63Mark McLoughlin <markmc@redhat.com>65Mark McLoughlin <markmc@redhat.com>
64Mark Washenberger <mark.washenberger@rackspace.com>66Mark Washenberger <mark.washenberger@rackspace.com>
@@ -94,6 +96,7 @@
94Thierry Carrez <thierry@openstack.org>96Thierry Carrez <thierry@openstack.org>
95Tomas Hancock <tom.hancock@hp.com>97Tomas Hancock <tom.hancock@hp.com>
96Tom Hancock <tom.hancock@hp.com>98Tom Hancock <tom.hancock@hp.com>
99Unmesh Gurjar <unmesh.gurjar@nttdata.com>
97Unmesh Gurjar <unmesh.gurjar@vertex.co.in>100Unmesh Gurjar <unmesh.gurjar@vertex.co.in>
98Vincent Untz <vuntz@suse.com>101Vincent Untz <vuntz@suse.com>
99Vishvananda Ishaya <vishvananda@gmail.com>102Vishvananda Ishaya <vishvananda@gmail.com>
100103
=== modified file 'ChangeLog'
--- ChangeLog 2012-09-26 12:37:00 +0000
+++ ChangeLog 2013-01-08 00:34:25 +0000
@@ -1,3 +1,276 @@
1commit a4062940b804f524ada38df3c62c14b9c98f82bc
2Merge: 91aaa48 49408e9
3Author: Jenkins <jenkins@review.openstack.org>
4Date: Tue Nov 27 23:16:35 2012 +0000
5
6 Merge "Ensure strings passed to librbd are not unicode" into stable/folsom
7
8commit 49408e9f846ab08ed4f1ac32c3e4e934cd448990
9Author: Josh Durgin <josh.durgin@inktank.com>
10Date: Fri Nov 9 09:28:19 2012 -0800
11
12 Ensure strings passed to librbd are not unicode
13
14 librbd rejects unicode by throwing an exception. If the location uri
15 was unicode, this would result in deletes failing. Convert all rbd
16 StoreLocation properties to ascii strings to avoid this problem.
17
18 Fixes bug #1075580
19 Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
20
21 Change-Id: I445902bb1b72b8c814585f1481e6bf9e758b4e07
22 (cherry picked from commit 3aea9320d20d0291c5b4b027a585370d8e658a95)
23
24 glance/store/rbd.py | 12 +++++++++++-
25 glance/tests/unit/test_store_location.py | 30 ++++++++++++++++++++++++++++++
26 2 files changed, 41 insertions(+), 1 deletion(-)
27
28commit 91aaa487d34ed57718f0183b27e79c02ac70941e
29Author: Mark J. Washenberger <mark.washenberger@markwash.net>
30Date: Tue Nov 20 12:41:48 2012 -0800
31
32 Make cooperative reader always support read()
33
34 glance.common.utils.CooperativeReader provides eventlet-friendly
35 cooperation on top of backends that support either read() or __iter__().
36 However, in the case of backends that only support __iter__(), such as
37 images returned by store.get(...), read() is not defined. This patch
38 adds read() in all cases.
39
40 Fixes bug 1057322.
41
42 Change-Id: I67d9b3e4d93fbefd7eeaf7cfc947ab635fe09534
43
44 glance/common/utils.py | 17 +++++++++++++++++
45 glance/tests/unit/test_utils.py | 11 +++++++++++
46 2 files changed, 28 insertions(+)
47
48commit a296a5b3686aeb9c337b46a5a066888e6863e7a4
49Author: Unmesh Gurjar <unmesh.gurjar@nttdata.com>
50Date: Tue Oct 23 03:34:31 2012 -0700
51
52 Return 403 when admin deletes a deleted image
53
54 1. Returned a 403 Forbidden error when an admin user tries to delete a deleted
55 image.
56 2. Added unit test coverage.
57
58 Fixes LP: #1060944
59
60 Change-Id: I1a5c4ca18e2e70d8a614b3132bfcea1f56c5f59c
61
62 glance/api/v1/images.py | 6 +++++
63 glance/tests/unit/v1/test_api.py | 45 ++++++++++++++++++++++++++++++++++++++
64 2 files changed, 51 insertions(+)
65
66commit a98768169c3a7ff23987b15f32333400c41f322f
67Merge: 5dac0b1 3e58a6a
68Author: Jenkins <jenkins@review.openstack.org>
69Date: Mon Nov 19 19:06:53 2012 +0000
70
71 Merge "Disallow updating deleted images." into stable/folsom
72
73commit 5dac0b1933514c2e9380eed4625a2ece25f458a0
74Merge: 7336c8d 26c8085
75Author: Jenkins <jenkins@review.openstack.org>
76Date: Wed Nov 14 20:31:57 2012 +0000
77
78 Merge "Return HTTP 404 for deleted images in v2" into stable/folsom
79
80commit 7336c8d0073bff0a106530dd782c567956bbe32e
81Merge: 517e059 8321ca6
82Author: Jenkins <jenkins@review.openstack.org>
83Date: Wed Nov 14 20:27:56 2012 +0000
84
85 Merge "Add noseopts and replace noseargs where needed to run_test.sh" into stable/folsom
86
87commit 517e059aac38c69d03ddb040ad127b14a59adced
88Merge: fc0ee76 c3bea11
89Author: Jenkins <jenkins@review.openstack.org>
90Date: Mon Nov 12 14:18:18 2012 +0000
91
92 Merge "Pull in a versioning fix from openstack-common." into stable/folsom
93
94commit fc0ee7623ec59c87ac6fc671e95a9798d6f2e2c3
95Author: Mark J. Washenberger <mark.washenberger@markwash.net>
96Date: Thu Nov 8 10:56:07 2012 -0800
97
98 Ensure authorization before deleting from store
99
100 This fixes bug 1076506.
101
102 Change-Id: I3794c14fe523a9a27e943d73dd0248489d2b91f6
103
104 glance/api/v2/images.py | 21 ++++++++++++---------
105 glance/tests/functional/v2/test_images.py | 12 ++++++++++++
106 2 files changed, 24 insertions(+), 9 deletions(-)
107
108commit 90bcdc5a89e350a358cf320a03f5afe99795f6f6
109Author: Mark Washenberger <mark.washenberger@rackspace.com>
110Date: Wed Nov 7 09:59:56 2012 -0500
111
112 Delete from store after registry delete.
113
114 Because we rely on the registry to determine authorization in the glance
115 v1 api, we must attempt a registry delete before deleting an image from
116 the image store.
117
118 This patch includes the test for the bug, which was posted separately
119 on the bug.
120
121 Fixes bug 1065187.
122
123 Change-Id: I1a06b7c7421524066c684539e2f3516c4ed2c475
124
125 glance/api/v1/images.py | 16 +++++++++++-----
126 glance/tests/stubs.py | 8 +++++++-
127 glance/tests/unit/v1/test_api.py | 20 ++++++++++++++++++++
128 glance/tests/utils.py | 1 +
129 4 files changed, 39 insertions(+), 6 deletions(-)
130
131commit 7841cc93050fa48a1fbd8847cec887f0360be9a3
132Author: Mark Washenberger <mark.washenberger@rackspace.com>
133Date: Sun Oct 7 02:12:52 2012 +0000
134
135 FakeAuth not always admin
136
137 The FakeAuthMiddleware was defaulting to admin=True for request
138 contexts. This creates a situation where it is impossible to test
139 non-admin requests in some situations.
140
141 Change-Id: I949f708efed9f07a43b8506870c5b38fce4b3752
142
143 glance/tests/unit/v1/test_api.py | 3 ++-
144 glance/tests/utils.py | 2 +-
145 2 files changed, 3 insertions(+), 2 deletions(-)
146
147commit c3bea11ede57c6d46b7a90f932255624f549de46
148Author: Monty Taylor <mordred@inaugust.com>
149Date: Fri Oct 26 11:09:16 2012 -0400
150
151 Pull in a versioning fix from openstack-common.
152
153 Fixes bug 1059634. Related to I6cff4ee7f6c1dc970397b66fd2d15fa22b0a63a3
154
155 (Cherry-picked from 68253587f0d5a5b5f0dde63dd6036c7977e4f3d6)
156
157 Change-Id: I4c8daa8bf4a57849bd8d1e512a388d982f79b7d5
158
159 glance/openstack/common/setup.py | 7 ++++---
160 1 file changed, 4 insertions(+), 3 deletions(-)
161
162commit 26c80856620f2ac3a662028eb3d53c3196b66a82
163Author: Mark Washenberger <mark.washenberger@rackspace.com>
164Date: Thu Oct 25 19:46:10 2012 +0000
165
166 Return HTTP 404 for deleted images in v2
167
168 For admin contexts, the db api will return deleted images. This patch
169 manually checks for deleted images in the v2 controller code to treat
170 these cases as if the images didn't exist.
171
172 Fixes bug 1071446
173
174 Change-Id: I33075f94e9d560a279085e2afd18c8052f57d60b
175
176 glance/api/v2/images.py | 7 +++++-
177 glance/tests/unit/v2/test_images_resource.py | 32 ++++++++++++++++++++++++++
178 2 files changed, 38 insertions(+), 1 deletion(-)
179
180commit 3e58a6a6658f0e9a1e1f167f8b9cec4e9f32b3e4
181Author: Unmesh Gurjar <unmesh.gurjar@nttdata.com>
182Date: Mon Oct 22 07:38:33 2012 -0700
183
184 Disallow updating deleted images.
185
186 1. Return a 403 Forbidden error when an admin user tries to update a deleted
187 image.
188 2. Also added unit test coverage.
189
190 Fixes LP: #1060930
191
192 Change-Id: I8290c8c9f1bcbbfbff7d54f141bdcfa1c40aab6f
193
194 glance/api/v1/images.py | 8 ++++++++
195 glance/tests/unit/v1/test_api.py | 17 +++++++++++++++++
196 2 files changed, 25 insertions(+)
197
198commit ddad2752b3afb480f5be1352cd2ef56739d3cdad
199Author: Sean Dague <sdague@linux.vnet.ibm.com>
200Date: Wed Oct 31 11:38:47 2012 -0400
201
202 pin sqlalchemy to the 0.7.x series
203
204 sqlalchemy 0.8beta is now out and has internal changes
205 which mean it's not an in place seemless upgrade. This pins
206 sqlalchemy to the 0.7.x series to avoid those breaks.
207
208 Fixes bug #1073569
209
210 Change-Id: Ia8976843a7e0a132fe38e80f2bcb01a16e12b8de
211
212 tools/pip-requires | 2 +-
213 1 file changed, 1 insertion(+), 1 deletion(-)
214
215commit 8321ca6ff4d2ab15bece70d7ff84f2e3dd3f6896
216Author: Gerardo Porras <gporras@yahoo-inc.com>
217Date: Wed Oct 17 16:00:48 2012 -0700
218
219 Add noseopts and replace noseargs where needed to run_test.sh
220
221 Add of noseopts to the run_tests script so users can be
222 able to run tests adding extra options to be passed to
223 nosetests.
224 This option is currently in keystone but not in glance.
225 Fixes bug 1065758
226
227 Change-Id: I7c78749adb90b126da5bd9580da6bfd7c9e1bf54
228
229 run_tests.sh | 8 +++++---
230 1 file changed, 5 insertions(+), 3 deletions(-)
231
232commit 1d5c651321a87e218995821b0d148867db977988
233Author: Mark Washenberger <mark.washenberger@rackspace.com>
234Date: Tue Sep 25 19:57:10 2012 +0000
235
236 Pass empty args to test config parser.
237
238 This fixes bug 1056420, which allows users to pass nosetests options
239 through run_tests.sh again.
240
241 Change-Id: I03e84488a24e2552b61aa0cab842d8325e8e856f
242 (cherry picked from commit ef641597dbfc0fcb856c143b213be493ab44cc65)
243
244 glance/tests/unit/test_clients.py | 2 +-
245 glance/tests/utils.py | 2 +-
246 2 files changed, 2 insertions(+), 2 deletions(-)
247
248commit ac223e243736ba98a0ec480d3f80e39a555d3343
249Author: Mark McLoughlin <markmc@redhat.com>
250Date: Sat Oct 13 22:44:12 2012 +0100
251
252 Set defaultbranch in .gitreview to stable/folsom
253
254 This allows people run git-review without any arguments.
255
256 Change-Id: I2b2488ffffd783b64e5c760324e7d4a00d5a39db
257
258 .gitreview | 1 +
259 1 file changed, 1 insertion(+)
260
261commit 6740af2f8186aa903c45afa2c2329564fce90fdf
262Author: Thierry Carrez <thierry@openstack.org>
263Date: Fri Sep 28 16:14:02 2012 +0200
264
265 Bump next version to 2012.2.1
266
267 Open stable/folsom by bumping next version to 2012.2.1.
268
269 Change-Id: Ia452eaf82c873a6b19f155f21a79116d32530b5b
270
271 glance/version.py | 2 +-
272 1 file changed, 1 insertion(+), 1 deletion(-)
273
1commit a9f0a4c4dbac0c92c431150161915bd5459a42d0274commit a9f0a4c4dbac0c92c431150161915bd5459a42d0
2Author: Eoghan Glynn <eglynn@redhat.com>275Author: Eoghan Glynn <eglynn@redhat.com>
3Date: Tue Sep 25 22:13:56 2012 +0100276Date: Tue Sep 25 22:13:56 2012 +0100
@@ -1273,7 +1546,7 @@
1273 1546
1274 Change-Id: I6dc2afa735fb2f82df71d58b10c1e1530fce2f891547 Change-Id: I6dc2afa735fb2f82df71d58b10c1e1530fce2f89
12751548
1276 .../versions/014_add_image_tags_table.py | 5 +++++1549 .../sqlalchemy/migrate_repo/versions/014_add_image_tags_table.py | 5 +++++
1277 1 file changed, 5 insertions(+)1550 1 file changed, 5 insertions(+)
12781551
1279commit 80c099e0b41b3f2f9684b06f1f4eee8e2776969e1552commit 80c099e0b41b3f2f9684b06f1f4eee8e2776969e
@@ -4074,48 +4347,48 @@
4074 4347
4075 Change-Id: Ia1a7b5062e7f882971f2061274f6a4a44cfc8ced4348 Change-Id: Ia1a7b5062e7f882971f2061274f6a4a44cfc8ced
40764349
4077 glance/api/middleware/cache.py | 2 +-4350 glance/api/middleware/cache.py | 2 +-
4078 glance/api/middleware/cache_manage.py | 3 +--4351 glance/api/middleware/cache_manage.py | 3 +--
4079 glance/api/middleware/context.py | 3 ++-4352 glance/api/middleware/context.py | 3 ++-
4080 glance/api/middleware/version_negotiation.py | 3 +--4353 glance/api/middleware/version_negotiation.py | 3 +--
4081 glance/api/policy.py | 2 +-4354 glance/api/policy.py | 2 +-
4082 glance/api/v1/controller.py | 3 +--4355 glance/api/v1/controller.py | 3 +--
4083 glance/api/v1/images.py | 2 +-4356 glance/api/v1/images.py | 2 +-
4084 glance/api/v1/members.py | 3 +--4357 glance/api/v1/members.py | 3 +--
4085 glance/api/v2/images.py | 2 +-4358 glance/api/v2/images.py | 2 +-
4086 glance/common/auth.py | 2 +-4359 glance/common/auth.py | 2 +-
4087 glance/common/client.py | 2 +-4360 glance/common/client.py | 2 +-
4088 glance/common/utils.py | 2 +-4361 glance/common/utils.py | 2 +-
4089 glance/common/wsgi.py | 3 ++-4362 glance/common/wsgi.py | 3 ++-
4090 glance/db/simple/api.py | 2 +-4363 glance/db/simple/api.py | 2 +-
4091 glance/db/sqlalchemy/api.py | 3 ++-4364 glance/db/sqlalchemy/api.py | 3 ++-
4092 glance/db/sqlalchemy/migrate_repo/schema.py | 4 ++--4365 glance/db/sqlalchemy/migrate_repo/schema.py | 4 ++--
4093 .../versions/015_quote_swift_credentials.py | 2 +-4366 .../migrate_repo/versions/015_quote_swift_credentials.py | 2 +-
4094 glance/db/sqlalchemy/migration.py | 2 +-4367 glance/db/sqlalchemy/migration.py | 2 +-
4095 glance/image_cache/__init__.py | 3 +--4368 glance/image_cache/__init__.py | 3 +--
4096 glance/image_cache/drivers/base.py | 2 +-4369 glance/image_cache/drivers/base.py | 2 +-
4097 glance/image_cache/drivers/sqlite.py | 2 +-4370 glance/image_cache/drivers/sqlite.py | 2 +-
4098 glance/image_cache/drivers/xattr.py | 2 +-4371 glance/image_cache/drivers/xattr.py | 2 +-
4099 glance/image_cache/prefetcher.py | 3 +--4372 glance/image_cache/prefetcher.py | 3 +--
4100 glance/notifier/__init__.py | 2 +-4373 glance/notifier/__init__.py | 2 +-
4101 glance/notifier/notify_kombu.py | 2 +-4374 glance/notifier/notify_kombu.py | 2 +-
4102 glance/notifier/notify_log.py | 4 +---4375 glance/notifier/notify_log.py | 4 +---
4103 glance/notifier/notify_qpid.py | 2 +-4376 glance/notifier/notify_qpid.py | 2 +-
4104 glance/registry/__init__.py | 2 +-4377 glance/registry/__init__.py | 2 +-
4105 glance/registry/api/v1/images.py | 3 +--4378 glance/registry/api/v1/images.py | 3 +--
4106 glance/registry/api/v1/members.py | 3 +--4379 glance/registry/api/v1/members.py | 3 +--
4107 glance/store/__init__.py | 2 +-4380 glance/store/__init__.py | 2 +-
4108 glance/store/base.py | 3 +--4381 glance/store/base.py | 3 +--
4109 glance/store/filesystem.py | 2 +-4382 glance/store/filesystem.py | 2 +-
4110 glance/store/http.py | 2 +-4383 glance/store/http.py | 2 +-
4111 glance/store/location.py | 2 +-4384 glance/store/location.py | 2 +-
4112 glance/store/rbd.py | 2 +-4385 glance/store/rbd.py | 2 +-
4113 glance/store/s3.py | 2 +-4386 glance/store/s3.py | 2 +-
4114 glance/store/scrubber.py | 2 +-4387 glance/store/scrubber.py | 2 +-
4115 glance/store/swift.py | 2 +-4388 glance/store/swift.py | 2 +-
4116 glance/tests/unit/test_notifier.py | 3 +--4389 glance/tests/unit/test_notifier.py | 3 +--
4117 glance/tests/unit/utils.py | 3 +--4390 glance/tests/unit/utils.py | 3 +--
4118 tools/migrate_image_owners.py | 2 +-4391 tools/migrate_image_owners.py | 2 +-
4119 42 files changed, 46 insertions(+), 56 deletions(-)4392 42 files changed, 46 insertions(+), 56 deletions(-)
41204393
4121commit 69d3cd58b755ac6c50b1aef31131819c911e41f64394commit 69d3cd58b755ac6c50b1aef31131819c911e41f6
@@ -5342,13 +5615,13 @@
5342 5615
5343 Change-Id: I10c677cfd5186edce3ca96495eafc732168cac865616 Change-Id: I10c677cfd5186edce3ca96495eafc732168cac86
53445617
5345 .../migrate_repo/versions/003_add_disk_format.py | 1 -5618 glance/db/sqlalchemy/migrate_repo/versions/003_add_disk_format.py | 1 -
5346 .../migrate_repo/versions/004_add_checksum.py | 1 -5619 glance/db/sqlalchemy/migrate_repo/versions/004_add_checksum.py | 1 -
5347 .../migrate_repo/versions/006_key_to_name.py | 1 -5620 glance/db/sqlalchemy/migrate_repo/versions/006_key_to_name.py | 1 -
5348 .../migrate_repo/versions/007_add_owner.py | 1 -5621 glance/db/sqlalchemy/migrate_repo/versions/007_add_owner.py | 1 -
5349 .../versions/008_add_image_members_table.py | 4 ++--5622 .../migrate_repo/versions/008_add_image_members_table.py | 4 ++--
5350 .../versions/009_add_mindisk_and_minram.py | 1 -5623 .../sqlalchemy/migrate_repo/versions/009_add_mindisk_and_minram.py | 1 -
5351 .../migrate_repo/versions/012_id_to_uuid.py | 1 -5624 glance/db/sqlalchemy/migrate_repo/versions/012_id_to_uuid.py | 1 -
5352 7 files changed, 2 insertions(+), 8 deletions(-)5625 7 files changed, 2 insertions(+), 8 deletions(-)
53535626
5354commit 9c8c630d53877c5a9b0dda856b207468fdb4062c5627commit 9c8c630d53877c5a9b0dda856b207468fdb4062c
@@ -5472,13 +5745,13 @@
5472 5745
5473 Change-Id: I3c4d98c81dee6676916c60e71a749037ae1edc815746 Change-Id: I3c4d98c81dee6676916c60e71a749037ae1edc81
54745747
5475 glance/common/exception.py | 2 +-5748 glance/common/exception.py | 2 +-
5476 .../versions/015_quote_swift_credentials.py | 15 +++++++++++----5749 .../versions/015_quote_swift_credentials.py | 15 +++++++++++----
5477 glance/store/filesystem.py | 5 +++--5750 glance/store/filesystem.py | 5 +++--
5478 glance/store/http.py | 9 +++++++--5751 glance/store/http.py | 9 +++++++--
5479 glance/store/rbd.py | 5 +++--5752 glance/store/rbd.py | 5 +++--
5480 glance/store/s3.py | 13 ++++++++-----5753 glance/store/s3.py | 13 ++++++++-----
5481 glance/store/swift.py | 14 +++++++++-----5754 glance/store/swift.py | 14 +++++++++-----
5482 7 files changed, 42 insertions(+), 21 deletions(-)5755 7 files changed, 42 insertions(+), 21 deletions(-)
54835756
5484commit b3b4d64ae23fd3a662e6ebc98642c42fe6631cad5757commit b3b4d64ae23fd3a662e6ebc98642c42fe6631cad
@@ -5502,13 +5775,13 @@
5502 5775
5503 Change-Id: I68c6f1735e5001641994ed4f84ad879397ba87135776 Change-Id: I68c6f1735e5001641994ed4f84ad879397ba8713
55045777
5505 glance/tests/functional/store_utils.py | 3 ++-5778 glance/tests/functional/store_utils.py | 3 ++-
5506 glance/tests/functional/test_bin_glance.py | 10 +++++++---5779 glance/tests/functional/test_bin_glance.py | 10 +++++++---
5507 .../tests/functional/v1/test_cache_middleware.py | 4 +++-5780 glance/tests/functional/v1/test_cache_middleware.py | 4 +++-
5508 glance/tests/functional/v1/test_copy_to_file.py | 4 +++-5781 glance/tests/functional/v1/test_copy_to_file.py | 4 +++-
5509 glance/tests/functional/v1/test_s3.py | 4 +++-5782 glance/tests/functional/v1/test_s3.py | 4 +++-
5510 glance/tests/functional/v1/test_swift.py | 4 +++-5783 glance/tests/functional/v1/test_swift.py | 4 +++-
5511 glance/tests/utils.py | 5 +++--5784 glance/tests/utils.py | 5 +++--
5512 7 files changed, 24 insertions(+), 10 deletions(-)5785 7 files changed, 24 insertions(+), 10 deletions(-)
55135786
5514commit c44e16a538113293c7e73eea22c2ebc0f84c365f5787commit c44e16a538113293c7e73eea22c2ebc0f84c365f
@@ -8228,9 +8501,9 @@
8228 8501
8229 Change-Id: Ie4f4c13846de727647abe168aeb193a93f03e0bf8502 Change-Id: Ie4f4c13846de727647abe168aeb193a93f03e0bf
82308503
8231 glance/tests/functional/test_bin_glance.py | 1 +8504 glance/tests/functional/test_bin_glance.py | 1 +
8232 .../functional/v1/test_bin_glance_cache_manage.py | 1 +8505 glance/tests/functional/v1/test_bin_glance_cache_manage.py | 1 +
8233 glance/tests/functional/v1/test_misc.py | 10 ++++++++++8506 glance/tests/functional/v1/test_misc.py | 10 ++++++++++
8234 3 files changed, 12 insertions(+)8507 3 files changed, 12 insertions(+)
82358508
8236commit ca84ec7d5550c0978ac80fad7972e77c1c9711078509commit ca84ec7d5550c0978ac80fad7972e77c1c971107
@@ -8562,21 +8835,21 @@
8562 8835
8563 Change-Id: I9d602ed429caff8ffb00e40f623c473c5425e1cc8836 Change-Id: I9d602ed429caff8ffb00e40f623c473c5425e1cc
85648837
8565 glance/tests/functional/test_logging.py | 2 --8838 glance/tests/functional/test_logging.py | 2 --
8566 glance/tests/functional/test_respawn.py | 2 +-8839 glance/tests/functional/test_respawn.py | 2 +-
8567 glance/tests/functional/test_scrubber.py | 3 ---8840 glance/tests/functional/test_scrubber.py | 3 ---
8568 .../functional/v1/test_bin_glance_cache_manage.py | 4 ----8841 glance/tests/functional/v1/test_bin_glance_cache_manage.py | 4 ----
8569 .../tests/functional/v1/test_cache_middleware.py | 1 -8842 glance/tests/functional/v1/test_cache_middleware.py | 1 -
8570 glance/tests/functional/v1/test_s3.py | 5 +----8843 glance/tests/functional/v1/test_s3.py | 5 +----
8571 glance/tests/functional/v1/test_ssl.py | 6 +-----8844 glance/tests/functional/v1/test_ssl.py | 6 +-----
8572 glance/tests/functional/v1/test_swift.py | 1 -8845 glance/tests/functional/v1/test_swift.py | 1 -
8573 glance/tests/stubs.py | 2 --8846 glance/tests/stubs.py | 2 --
8574 glance/tests/unit/test_clients.py | 8 --------8847 glance/tests/unit/test_clients.py | 8 --------
8575 glance/tests/unit/test_context.py | 2 --8848 glance/tests/unit/test_context.py | 2 --
8576 glance/tests/unit/test_db.py | 1 -8849 glance/tests/unit/test_db.py | 1 -
8577 glance/tests/unit/test_filesystem_store.py | 3 ---8850 glance/tests/unit/test_filesystem_store.py | 3 ---
8578 glance/tests/unit/test_image_cache.py | 1 -8851 glance/tests/unit/test_image_cache.py | 1 -
8579 glance/tests/unit/test_s3_store.py | 5 +----8852 glance/tests/unit/test_s3_store.py | 5 +----
8580 15 files changed, 4 insertions(+), 42 deletions(-)8853 15 files changed, 4 insertions(+), 42 deletions(-)
85818854
8582commit 35ed3105552cf6c182c76b6f13f719bfe7eb596b8855commit 35ed3105552cf6c182c76b6f13f719bfe7eb596b
@@ -8707,8 +8980,8 @@
8707 8980
8708 Change-Id: Iab80a65464a591b732ecce4c00d04df50624e9128981 Change-Id: Iab80a65464a591b732ecce4c00d04df50624e912
87098982
8710 Authors | 1 +8983 Authors | 1 +
8711 .../db/migrate_repo/versions/006_key_to_name.py | 2 +-8984 glance/registry/db/migrate_repo/versions/006_key_to_name.py | 2 +-
8712 2 files changed, 2 insertions(+), 1 deletion(-)8985 2 files changed, 2 insertions(+), 1 deletion(-)
87138986
8714commit 257be28b8c77bd1fa3e402d2bd2f5ee67ac4e60e8987commit 257be28b8c77bd1fa3e402d2bd2f5ee67ac4e60e
@@ -10302,12 +10575,12 @@
10302 Change-Id: I5ad5042dbc9785829694553f2657df3eb6e3ef2010575 Change-Id: I5ad5042dbc9785829694553f2657df3eb6e3ef20
10303 Signed-off-by: Chuck Short <chuck.short@canonical.com>10576 Signed-off-by: Chuck Short <chuck.short@canonical.com>
1030410577
10305 .../migrate_repo/versions/001_add_images_table.py | 2 +-10578 glance/registry/db/migrate_repo/versions/001_add_images_table.py | 2 +-
10306 .../versions/002_add_image_properties_table.py | 2 +-10579 .../db/migrate_repo/versions/002_add_image_properties_table.py | 2 +-
10307 .../db/migrate_repo/versions/004_add_checksum.py | 2 +-10580 glance/registry/db/migrate_repo/versions/004_add_checksum.py | 2 +-
10308 .../db/migrate_repo/versions/007_add_owner.py | 2 +-10581 glance/registry/db/migrate_repo/versions/007_add_owner.py | 2 +-
10309 .../versions/008_add_image_members_table.py | 2 +-10582 .../registry/db/migrate_repo/versions/008_add_image_members_table.py | 2 +-
10310 .../versions/009_add_mindisk_and_minram.py | 2 +-10583 .../registry/db/migrate_repo/versions/009_add_mindisk_and_minram.py | 2 +-
10311 6 files changed, 6 insertions(+), 6 deletions(-)10584 6 files changed, 6 insertions(+), 6 deletions(-)
1031210585
10313commit 3b229c394521e5b1b81e4629c6ff9c09e3b866c910586commit 3b229c394521e5b1b81e4629c6ff9c09e3b866c9
@@ -10991,8 +11264,8 @@
10991 11264
10992 Change-Id: Ic248fdfe3933437928f0b393d8cde993b96bf2cb11265 Change-Id: Ic248fdfe3933437928f0b393d8cde993b96bf2cb
1099311266
10994 .mailmap | 1 +11267 .mailmap | 1 +
10995 .../migrate_repo/versions/003_add_disk_format.py | 2 +-11268 glance/registry/db/migrate_repo/versions/003_add_disk_format.py | 2 +-
10996 2 files changed, 2 insertions(+), 1 deletion(-)11269 2 files changed, 2 insertions(+), 1 deletion(-)
1099711270
10998commit 59ca8b0b44bbb2276d7e5903bfe9d14a6a26d90111271commit 59ca8b0b44bbb2276d7e5903bfe9d14a6a26d901
@@ -11352,7 +11625,7 @@
11352 11625
11353 Change-Id: Iab1c3e7a52d739a445cf52eb9a67f61a6907502611626 Change-Id: Iab1c3e7a52d739a445cf52eb9a67f61a69075026
1135411627
11355 .../db/migrate_repo/versions/012_id_to_uuid.py | 8 ++------11628 glance/registry/db/migrate_repo/versions/012_id_to_uuid.py | 8 ++------
11356 1 file changed, 2 insertions(+), 6 deletions(-)11629 1 file changed, 2 insertions(+), 6 deletions(-)
1135711630
11358commit 300d4031a94b85539a30bde726131231008c80a611631commit 300d4031a94b85539a30bde726131231008c80a6
@@ -13740,7 +14013,7 @@
13740 14013
13741 Change-Id: I66307cb355120b992913c8a1d8d5855b30f7050414014 Change-Id: I66307cb355120b992913c8a1d8d5855b30f70504
1374214015
13743 .../db/migrate_repo/versions/012_id_to_uuid.py | 4 ++--14016 glance/registry/db/migrate_repo/versions/012_id_to_uuid.py | 4 ++--
13744 1 file changed, 2 insertions(+), 2 deletions(-)14017 1 file changed, 2 insertions(+), 2 deletions(-)
1374514018
13746commit 94dcf3acd0b3ef7adcb61b90bf4bdcc733cf61ac14019commit 94dcf3acd0b3ef7adcb61b90bf4bdcc733cf61ac
@@ -21103,8 +21376,8 @@
2110321376
21104 Add migration scripts for revising the datatype of the 'size' column in the images table.21377 Add migration scripts for revising the datatype of the 'size' column in the images table.
2110521378
21106 .../migrate_repo/versions/006_mysql_downgrade.sql | 2 ++21379 glance/registry/db/migrate_repo/versions/006_mysql_downgrade.sql | 2 ++
21107 .../db/migrate_repo/versions/006_mysql_upgrade.sql | 2 ++21380 glance/registry/db/migrate_repo/versions/006_mysql_upgrade.sql | 2 ++
21108 2 files changed, 4 insertions(+)21381 2 files changed, 4 insertions(+)
2110921382
21110commit 84051230f523294a1ea57bcdb3560bcdb4fda84e21383commit 84051230f523294a1ea57bcdb3560bcdb4fda84e
@@ -23083,8 +23356,8 @@
2308323356
23084 Creating indexes23357 Creating indexes
2308523358
23086 .../migrate_repo/versions/001_add_images_table.py | 9 +++++----23359 .../db/migrate_repo/versions/001_add_images_table.py | 9 +++++----
23087 .../versions/002_add_image_properties_table.py | 14 +++++++++-----23360 .../versions/002_add_image_properties_table.py | 14 +++++++++-----
23088 2 files changed, 14 insertions(+), 9 deletions(-)23361 2 files changed, 14 insertions(+), 9 deletions(-)
2308923362
23090commit d060da4993312aa803371464d876a63ded7afba323363commit d060da4993312aa803371464d876a63ded7afba3
@@ -23114,8 +23387,8 @@
2311423387
23115 Small cleanups23388 Small cleanups
2311623389
23117 .../migrate_repo/versions/001_add_images_table.py | 12 +++---------23390 .../db/migrate_repo/versions/001_add_images_table.py | 12 +++---------
23118 .../versions/002_add_image_properties_table.py | 12 +++---------23391 .../versions/002_add_image_properties_table.py | 12 +++---------
23119 2 files changed, 6 insertions(+), 18 deletions(-)23392 2 files changed, 6 insertions(+), 18 deletions(-)
2312023393
23121commit a436b433ca746864aed9fdec8bbe345c3bf147a723394commit a436b433ca746864aed9fdec8bbe345c3bf147a7
@@ -23220,9 +23493,9 @@
2322023493
23221 Better logging23494 Better logging
2322223495
23223 glance/registry/db/migrate_repo/schema.py | 19 +++++++++++++++++++23496 glance/registry/db/migrate_repo/schema.py | 19 +++++++++++++++++++
23224 .../migrate_repo/versions/001_add_images_table.py | 12 ++++++------23497 .../migrate_repo/versions/001_add_images_table.py | 12 ++++++------
23225 .../versions/002_add_image_properties_table.py | 13 ++++++-------23498 .../versions/002_add_image_properties_table.py | 13 ++++++-------
23226 3 files changed, 31 insertions(+), 13 deletions(-)23499 3 files changed, 31 insertions(+), 13 deletions(-)
2322723500
23228commit d923a0417537552f672fd5b38b63f40c695f5cd523501commit d923a0417537552f672fd5b38b63f40c695f5cd5
2322923502
=== modified file 'PKG-INFO'
--- PKG-INFO 2012-06-22 09:18:07 +0000
+++ PKG-INFO 2013-01-08 00:34:25 +0000
@@ -1,6 +1,6 @@
1Metadata-Version: 1.11Metadata-Version: 1.1
2Name: glance2Name: glance
3Version: 2012.23Version: 2012.2.1
4Summary: The Glance project provides services for discovering, registering, and retrieving virtual machine images4Summary: The Glance project provides services for discovering, registering, and retrieving virtual machine images
5Home-page: http://glance.openstack.org/5Home-page: http://glance.openstack.org/
6Author: OpenStack6Author: OpenStack
77
=== modified file 'debian/changelog'
--- debian/changelog 2012-10-19 23:02:14 +0000
+++ debian/changelog 2013-01-08 00:34:25 +0000
@@ -1,8 +1,66 @@
1glance (2012.2-0ubuntu2~cloud0) precise-folsom; urgency=low1glance (2012.2.1-0ubuntu1~cloud0) precise-folsom; urgency=low
22
3 * New release candidate for the Ubuntu Cloud Archive.3 * Stable update for the Ubuntu Cloud Archive.
44
5 -- Adam Gandelman <adamg@canonical.com> Fri, 19 Oct 2012 23:02:14 -07005 -- Adam Gandelman <adamg@ubuntu.com> Mon, 07 Jan 2013 16:02:15 -0800
6
7glance (2012.2.1-0ubuntu1) quantal-proposed; urgency=low
8
9 * Dropped patches, applied upstream:
10 - debian/patches/CVE-2012-4573.patch
11 - debian/patches/CVE-2012-4573b.patch
12 * Resynchronize with stable/folsom (199783ce) (LP: #1085255):
13 - [49408e9] Glance image-delete HTTPInternalServerError HTTP 500
14 (LP: #1075580)
15 - [91aaa48] Image fails to upload to swift: TypeError: object of type
16 'CooperativeReader' has no len( (LP: #1057322)
17 - [a296a5b] Return 403 when admin deletes a deleted image (LP: #1060944)
18 - [3e58a6a] Disallow updating deleted images. (LP: #1060930)
19 - [26c8085] admins can see deleted images in v2 api (LP: #1071446)
20 - [8321ca6] No exclude option to skip tests in run_tests.sh (LP: #1065758)
21 - [c3bea11] Badly named stable/folsom Glance tarballs (LP: #1059634)
22 - [fc0ee76] Non-admin users can cause public glance images to be deleted
23 from the backend storage repository in the v2 api (LP: #1076506)
24 - [90bcdc5] Non-admin users can cause public glance images to be deleted
25 from the backend storage repository (LP: #1065187)
26 - [7841cc9] FakeAuth not always admin
27 - [ddad275] Jenkins jobs fail because of incompatibility between sqlalchemy-
28 migrate and the newest sqlalchemy-0.8.0b1 (LP: #1073569)
29 - [1d5c651] nosetest options cause no such option errors (LP: #1056420)
30 - [ac223e2] Set defaultbranch in .gitreview to stable/folsom
31
32 -- Adam Gandelman <adamg@ubuntu.com> Tue, 04 Dec 2012 09:19:35 -0800
33
34glance (2012.2-0ubuntu2.3~cloud0) precise-folsom; urgency=low
35
36 * New package update for the Ubuntu Cloud Archive.
37
38 -- Chuck Short <zulcss@ubuntu.com> Wed, 21 Nov 2012 15:04:26 -0500
39
40glance (2012.2-0ubuntu2.3) quantal-security; urgency=low
41
42 * SECURITY UPDATE: deletion of arbitrary public and shared images via
43 authenticated user
44 - debian/patches/CVE-2012-4573b.patch: previous patch was incomplete.
45 Make corresponding change to glance/api/v2/images.py
46 - CVE-2012-4573
47 * debian/control: add Build-Depends-Indep on python-chardet. This is needed
48 by python-requests to do encoding detection which otherwise fails in the
49 new tests introduced in CVE-2012-4573b.patch.
50
51 -- Jamie Strandboge <jamie@ubuntu.com> Fri, 09 Nov 2012 06:53:44 -0600
52
53glance (2012.2-0ubuntu2.2) quantal-security; urgency=low
54
55 * SECURITY UPDATE: deletion of arbitrary public and shared images via
56 authenticated user
57 - debian/patches/CVE-2012-4573.patch: adjust glance/api/v1/images.py to
58 ensure image is owned by user before delayed_deletion
59 - CVE-2012-4573
60 * debian/patches/fakeauth-not-always-admin.patch: add required testsuite
61 patch in support of the testsuite changes in CVE-2012-4573.patch
62
63 -- Jamie Strandboge <jamie@ubuntu.com> Thu, 08 Nov 2012 07:41:02 -0600
664
7glance (2012.2-0ubuntu2) quantal-proposed; urgency=low65glance (2012.2-0ubuntu2) quantal-proposed; urgency=low
866
@@ -11,12 +69,6 @@
1169
12 -- James Page <james.page@ubuntu.com> Fri, 12 Oct 2012 15:43:54 +010070 -- James Page <james.page@ubuntu.com> Fri, 12 Oct 2012 15:43:54 +0100
1371
14glance (2012.2-0ubuntu1~cloud0) precise-folsom; urgency=low
15
16 * New release candidate for the Ubuntu Cloud Archive.
17
18 -- Chuck Short <zulcss@ubuntu.com> Thu, 27 Sep 2012 15:34:04 -0500
19
20glance (2012.2-0ubuntu1) quantal; urgency=low72glance (2012.2-0ubuntu1) quantal; urgency=low
2173
22 * debian/control: Clean-up python depends. Thanks to Sam Morrison.74 * debian/control: Clean-up python depends. Thanks to Sam Morrison.
@@ -31,12 +83,6 @@
3183
32 -- Chuck Short <zulcss@ubuntu.com> Wed, 26 Sep 2012 12:37:00 -050084 -- Chuck Short <zulcss@ubuntu.com> Wed, 26 Sep 2012 12:37:00 -0500
3385
34glance (2012.2~rc2-0ubuntu1~cloud0) precise-folsom; urgency=low
35
36 * New release candidate for the Ubuntu Cloud Archive.
37
38 -- Chuck Short <zulcss@ubuntu.com> Thu, 27 Sep 2012 14:04:18 -0500
39
40glance (2012.2~rc2-0ubuntu1) quantal; urgency=low86glance (2012.2~rc2-0ubuntu1) quantal; urgency=low
4187
42 * debian/control: Suggest ceph-common.88 * debian/control: Suggest ceph-common.
@@ -46,14 +92,16 @@
4692
47 -- Chuck Short <zulcss@ubuntu.com> Wed, 26 Sep 2012 12:32:50 -050093 -- Chuck Short <zulcss@ubuntu.com> Wed, 26 Sep 2012 12:32:50 -0500
4894
49glance (2012.2~rc1-0ubuntu1~cloud0) precise-folsom; urgency=low
50
51 * New release candidate for the Ubuntu Cloud Archive.
52
53 -- Chuck Short <zulcss@ubuntu.com> Tue, 18 Sep 2012 08:26:19 -0500
54
55glance (2012.2~rc1-0ubuntu1) quantal; urgency=low95glance (2012.2~rc1-0ubuntu1) quantal; urgency=low
5696
97 * New upstrem release.
98 * debian/glance.logrotate: compress right logfiles when rotating them.
99 (LP: #1049314)
100
101 -- Chuck Short <zulcss@ubuntu.com> Mon, 17 Sep 2012 07:44:11 -0500
102
103glance (2012.2~rc1~20120907.129.f0bd856-0ubuntu1) quantal; urgency=low
104
57 [ Chuck Short ]105 [ Chuck Short ]
58 * New upstream version.106 * New upstream version.
59 * drop debian/patches/fix-docs-build.patch. 107 * drop debian/patches/fix-docs-build.patch.
@@ -61,8 +109,6 @@
61 * debain/control: Add depends on python-swiftclient.109 * debain/control: Add depends on python-swiftclient.
62 * debian/*.usptart: make glance start from runlevel 1 to runlevel110 * debian/*.usptart: make glance start from runlevel 1 to runlevel
63 2. (LP: #820688)111 2. (LP: #820688)
64 * debian/glance.logrotate: compress right logfiles when rotating them.
65 (LP: #1049314)
66112
67 [ Soren Hansen ]113 [ Soren Hansen ]
68 * Update debian/watch to account for symbolically named tarballs and114 * Update debian/watch to account for symbolically named tarballs and
@@ -71,7 +117,7 @@
71 * Refresh disable-network-for-docs.patch117 * Refresh disable-network-for-docs.patch
72 * Fix Launchpad URLs in debian/watch.118 * Fix Launchpad URLs in debian/watch.
73119
74 -- Chuck Short <zulcss@ubuntu.com> Mon, 17 Sep 2012 07:44:11 -0500120 -- Chuck Short <zulcss@ubuntu.com> Fri, 07 Sep 2012 12:17:46 -0500
75121
76glance (2012.2~f3-0ubuntu1) quantal; urgency=low122glance (2012.2~f3-0ubuntu1) quantal; urgency=low
77123
@@ -90,10 +136,16 @@
90136
91 -- Chuck Short <zulcss@ubuntu.com> Thu, 16 Aug 2012 13:58:32 -0500137 -- Chuck Short <zulcss@ubuntu.com> Thu, 16 Aug 2012 13:58:32 -0500
92138
93glance (2012.2~f2-0ubuntu1~cloud0) precise; urgency=low139glance (2012.2~f2-0ubuntu1) quantal; urgency=low
140
141 * New upstream version.
142
143 -- Chuck Short <zulcss@ubuntu.com> Fri, 06 Jul 2012 11:13:13 -0400
144
145glance (2012.2~f2~20120621.1644-0ubuntu1) quantal; urgency=low
94146
95 [ Chuck Short ]147 [ Chuck Short ]
96 * New upstream version.148 * New upstream release.
97 * debian/glance-reigstry.logrotate: Rotate the right logfile. (LP: #1009996)149 * debian/glance-reigstry.logrotate: Rotate the right logfile. (LP: #1009996)
98 * debian/control: Fix short description of glance-client. (LP: #982658)150 * debian/control: Fix short description of glance-client. (LP: #982658)
99 * debian/pydist-overrides: Add argparse and python_swiftclient.151 * debian/pydist-overrides: Add argparse and python_swiftclient.
@@ -102,14 +154,25 @@
102 * debian/glance-api.install: Remove glance-{scrubber, cache}-paste.ini.154 * debian/glance-api.install: Remove glance-{scrubber, cache}-paste.ini.
103 * debian/patches/ensure_versioned_db_models.patch: Disable while database155 * debian/patches/ensure_versioned_db_models.patch: Disable while database
104 related code changes settle upstream.156 related code changes settle upstream.
157
158 -- Chuck Short <zulcss@ubuntu.com> Fri, 22 Jun 2012 09:18:07 -0400
159
160glance (2012.2~f2~20120531.1560-0ubuntu2) quantal; urgency=low
161
105 * debian/patches/ensure_versioned_db_models.patch: Refresh.162 * debian/patches/ensure_versioned_db_models.patch: Refresh.
106 * debian/patches/disable-swift-tests.patch: Refresh.163 * debian/patches/disable-swift-tests.patch: Refresh.
107 * debian/control: Re-enable python-jsonchema Dependency now that it has164 * debian/control: Re-enable python-jsonchema Dependency now that it has
108 landed in main.165 landed in main.
109166
110 -- Chuck Short <zulcss@ubuntu.com> Tue, 17 Jul 2012 10:12:05 -0500167 -- Adam Gandelman <adamg@canonical.com> Tue, 05 Jun 2012 10:53:30 -0700
111168
112glance (2012.2~f1-0ubuntu1~cloud0) precise-folsom; urgency=low169glance (2012.2~f2~20120531.1560-0ubuntu1) quantal; urgency=low
170
171 * New upstream release.
172
173 -- Chuck Short <zulcss@ubuntu.com> Fri, 01 Jun 2012 10:56:09 -0400
174
175glance (2012.2~f2~20120524.1541-0ubuntu1) quantal; urgency=low
113176
114 [ Adam Gandelman ]177 [ Adam Gandelman ]
115 * debian/patches/ensure_versioned_db_models.patch: Check for valid178 * debian/patches/ensure_versioned_db_models.patch: Check for valid
@@ -137,34 +200,6 @@
137200
138 -- Adam Gandelman <adamg@canonical.com> Thu, 24 May 2012 10:26:57 -0700201 -- Adam Gandelman <adamg@canonical.com> Thu, 24 May 2012 10:26:57 -0700
139202
140glance (2012.2~f1-0ubuntu1~cloud0) precise; urgency=low
141
142 [ Adam Gandelman ]
143 * debian/patches/ensure_versioned_db_models.patch: Check for valid
144 db models+schema at service start, and ensure db is version controlled
145 before running all migrations.
146 * debian/{control, pydist-overrides}: *Temporarily* disable non-main
147 dependencies pending MIRs
148 * debian/rules: *Temporarily* disable tests until new dependencies are
149 satisfied
150
151 [ Chuck Short ]
152 * New upstream version.
153 * Prepare for quantal:
154 - Removed debian/patches/fix_migration_012_foreign_keys.patch
155 - Removed debian/patches/disable_db_table_auto_create.patch
156 - Removed debian/patches/convert_properties_to_uuid.patch
157 * debian/control: Add dependency on python-requests
158 * debian/control: Add dependency on python-jsonschema
159 * debian/control: Add python-keystone as a depends. (LP: #901881)
160 * debian/patches/disable-swift-tests.patch: Rediffed
161
162 [ Paul Belanger ]
163 * debian/glance-common.postinst
164 - Give glance group read permission to /etc/glance (LP: #989205)
165
166 -- Chuck Short <zulcss@ubuntu.com> Mon, 09 Jul 2012 13:57:57 -0400
167
168glance (2012.1-0ubuntu2) precise; urgency=low203glance (2012.1-0ubuntu2) precise; urgency=low
169204
170 [ Adam Gandelman ]205 [ Adam Gandelman ]
171206
=== modified file 'debian/control'
--- debian/control 2012-10-12 15:43:54 +0000
+++ debian/control 2013-01-08 00:34:25 +0000
@@ -33,7 +33,8 @@
33 python-glanceclient,33 python-glanceclient,
34 python-xattr,34 python-xattr,
35 curl,35 curl,
36 pep836 pep8,
37 python-chardet
37Standards-Version: 3.9.338Standards-Version: 3.9.3
38XS-Python-Version: >= 2.639XS-Python-Version: >= 2.6
39Homepage: http://launchpad.net/glance40Homepage: http://launchpad.net/glance
4041
=== modified file 'debian/patches/sql_conn.patch'
--- debian/patches/sql_conn.patch 2012-10-19 23:02:14 +0000
+++ debian/patches/sql_conn.patch 2013-01-08 00:34:25 +0000
@@ -1,8 +1,8 @@
1Index: glance-2012.2.1/etc/glance-api.conf1Index: glance/etc/glance-api.conf
2===================================================================2===================================================================
3--- glance-2012.2.1.orig/etc/glance-api.conf 2012-10-19 12:22:20.857638821 -07003--- glance.orig/etc/glance-api.conf 2012-07-24 20:49:24.649816988 -0700
4+++ glance-2012.2.1/etc/glance-api.conf 2012-10-19 12:40:12.729599445 -07004+++ glance/etc/glance-api.conf 2012-07-24 20:52:03.309810007 -0700
5@@ -46,7 +46,7 @@5@@ -35,7 +35,7 @@
6 # SQLAlchemy connection string for the reference implementation6 # SQLAlchemy connection string for the reference implementation
7 # registry server. Any valid SQLAlchemy connection string is fine.7 # registry server. Any valid SQLAlchemy connection string is fine.
8 # See: http://www.sqlalchemy.org/docs/05/reference/sqlalchemy/connections.html#sqlalchemy.create_engine8 # See: http://www.sqlalchemy.org/docs/05/reference/sqlalchemy/connections.html#sqlalchemy.create_engine
@@ -11,11 +11,11 @@
11 11
12 # Period in seconds after which SQLAlchemy should reestablish its connection12 # Period in seconds after which SQLAlchemy should reestablish its connection
13 # to the database.13 # to the database.
14Index: glance-2012.2.1/etc/glance-registry.conf14Index: glance/etc/glance-registry.conf
15===================================================================15===================================================================
16--- glance-2012.2.1.orig/etc/glance-registry.conf 2012-10-19 12:22:20.857638821 -070016--- glance.orig/etc/glance-registry.conf 2012-07-24 20:51:10.497812331 -0700
17+++ glance-2012.2.1/etc/glance-registry.conf 2012-10-19 12:40:12.733599445 -070017+++ glance/etc/glance-registry.conf 2012-07-24 20:51:11.301812296 -0700
18@@ -25,7 +25,7 @@18@@ -21,7 +21,7 @@
19 # SQLAlchemy connection string for the reference implementation19 # SQLAlchemy connection string for the reference implementation
20 # registry server. Any valid SQLAlchemy connection string is fine.20 # registry server. Any valid SQLAlchemy connection string is fine.
21 # See: http://www.sqlalchemy.org/docs/05/reference/sqlalchemy/connections.html#sqlalchemy.create_engine21 # See: http://www.sqlalchemy.org/docs/05/reference/sqlalchemy/connections.html#sqlalchemy.create_engine
2222
=== modified file 'glance.egg-info/PKG-INFO'
--- glance.egg-info/PKG-INFO 2012-06-22 09:18:07 +0000
+++ glance.egg-info/PKG-INFO 2013-01-08 00:34:25 +0000
@@ -1,6 +1,6 @@
1Metadata-Version: 1.11Metadata-Version: 1.1
2Name: glance2Name: glance
3Version: 2012.23Version: 2012.2.1
4Summary: The Glance project provides services for discovering, registering, and retrieving virtual machine images4Summary: The Glance project provides services for discovering, registering, and retrieving virtual machine images
5Home-page: http://glance.openstack.org/5Home-page: http://glance.openstack.org/
6Author: OpenStack6Author: OpenStack
77
=== modified file 'glance.egg-info/requires.txt'
--- glance.egg-info/requires.txt 2012-09-17 07:44:11 +0000
+++ glance.egg-info/requires.txt 2013-01-08 00:34:25 +0000
@@ -1,5 +1,5 @@
1greenlet>=0.3.11greenlet>=0.3.1
2SQLAlchemy>=0.72SQLAlchemy>=0.7,<=0.7.9
3anyjson3anyjson
4eventlet>=0.9.124eventlet>=0.9.12
5PasteDeploy5PasteDeploy
66
=== modified file 'glance/api/v1/images.py'
--- glance/api/v1/images.py 2012-09-17 07:44:11 +0000
+++ glance/api/v1/images.py 2013-01-08 00:34:25 +0000
@@ -714,6 +714,14 @@
714 orig_image_meta = self.get_image_meta_or_404(req, id)714 orig_image_meta = self.get_image_meta_or_404(req, id)
715 orig_status = orig_image_meta['status']715 orig_status = orig_image_meta['status']
716716
717 # Do not allow any updates on a deleted image.
718 # Fix for LP Bug #1060930
719 if orig_status == 'deleted':
720 msg = _("Forbidden to update deleted image.")
721 raise HTTPForbidden(explanation=msg,
722 request=req,
723 content_type="text/plain")
724
717 # The default behaviour for a PUT /images/<IMAGE_ID> is to725 # The default behaviour for a PUT /images/<IMAGE_ID> is to
718 # override any properties that were previously set. This, however,726 # override any properties that were previously set. This, however,
719 # leads to a number of issues for the common use case where a caller727 # leads to a number of issues for the common use case where a caller
@@ -821,22 +829,34 @@
821 request=req,829 request=req,
822 content_type="text/plain")830 content_type="text/plain")
823831
824 status = 'deleted'832 if image['status'] == 'deleted':
833 msg = _("Forbidden to delete a deleted image.")
834 LOG.debug(msg)
835 raise HTTPForbidden(explanation=msg, request=req,
836 content_type="text/plain")
837
838 if image['location'] and CONF.delayed_delete:
839 status = 'pending_delete'
840 else:
841 status = 'deleted'
842
825 try:843 try:
844 # Delete the image from the registry first, since we rely on it
845 # for authorization checks.
846 # See https://bugs.launchpad.net/glance/+bug/1065187
847 registry.update_image_metadata(req.context, id, {'status': status})
848 registry.delete_image_metadata(req.context, id)
849
826 # The image's location field may be None in the case850 # The image's location field may be None in the case
827 # of a saving or queued image, therefore don't ask a backend851 # of a saving or queued image, therefore don't ask a backend
828 # to delete the image if the backend doesn't yet store it.852 # to delete the image if the backend doesn't yet store it.
829 # See https://bugs.launchpad.net/glance/+bug/747799853 # See https://bugs.launchpad.net/glance/+bug/747799
830 if image['location']:854 if image['location']:
831 if CONF.delayed_delete:855 if CONF.delayed_delete:
832 status = 'pending_delete'
833 schedule_delayed_delete_from_backend(image['location'], id)856 schedule_delayed_delete_from_backend(image['location'], id)
834 else:857 else:
835 safe_delete_from_backend(image['location'],858 safe_delete_from_backend(image['location'],
836 req.context, id)859 req.context, id)
837
838 registry.update_image_metadata(req.context, id, {'status': status})
839 registry.delete_image_metadata(req.context, id)
840 except exception.NotFound, e:860 except exception.NotFound, e:
841 msg = ("Failed to find image to delete: %(e)s" % locals())861 msg = ("Failed to find image to delete: %(e)s" % locals())
842 for line in msg.split('\n'):862 for line in msg.split('\n'):
843863
=== modified file 'glance/api/v2/images.py'
--- glance/api/v2/images.py 2012-09-17 07:44:11 +0000
+++ glance/api/v2/images.py 2013-01-08 00:34:25 +0000
@@ -142,9 +142,12 @@
142142
143 def _get_image(self, context, image_id):143 def _get_image(self, context, image_id):
144 try:144 try:
145 return self.db_api.image_get(context, image_id)145 image = self.db_api.image_get(context, image_id)
146 if image['deleted']:
147 raise exception.NotFound()
146 except (exception.NotFound, exception.Forbidden):148 except (exception.NotFound, exception.Forbidden):
147 raise webob.exc.HTTPNotFound()149 raise webob.exc.HTTPNotFound()
150 return image
148151
149 def show(self, req, image_id):152 def show(self, req, image_id):
150 self._enforce(req, 'get_image')153 self._enforce(req, 'get_image')
@@ -158,6 +161,8 @@
158 context = req.context161 context = req.context
159 try:162 try:
160 image = self.db_api.image_get(context, image_id)163 image = self.db_api.image_get(context, image_id)
164 if image['deleted']:
165 raise exception.NotFound()
161 except (exception.NotFound, exception.Forbidden):166 except (exception.NotFound, exception.Forbidden):
162 msg = ("Failed to find image %(image_id)s to update" % locals())167 msg = ("Failed to find image %(image_id)s to update" % locals())
163 LOG.info(msg)168 LOG.info(msg)
@@ -268,19 +273,22 @@
268 % locals())273 % locals())
269 raise webob.exc.HTTPForbidden(explanation=msg)274 raise webob.exc.HTTPForbidden(explanation=msg)
270275
271 status = 'deleted'276 if image['location'] and CONF.delayed_delete:
272 if image['location']:277 status = 'pending_delete'
273 if CONF.delayed_delete:278 else:
274 status = 'pending_delete'279 status = 'deleted'
275 self.store_api.schedule_delayed_delete_from_backend(
276 image['location'], id)
277 else:
278 self.store_api.safe_delete_from_backend(image['location'],
279 req.context, id)
280280
281 try:281 try:
282 self.db_api.image_update(req.context, image_id, {'status': status})282 self.db_api.image_update(req.context, image_id, {'status': status})
283 self.db_api.image_destroy(req.context, image_id)283 self.db_api.image_destroy(req.context, image_id)
284
285 if image['location']:
286 if CONF.delayed_delete:
287 self.store_api.schedule_delayed_delete_from_backend(
288 image['location'], id)
289 else:
290 self.store_api.safe_delete_from_backend(image['location'],
291 req.context, id)
284 except (exception.NotFound, exception.Forbidden):292 except (exception.NotFound, exception.Forbidden):
285 msg = ("Failed to find image %(image_id)s to delete" % locals())293 msg = ("Failed to find image %(image_id)s to delete" % locals())
286 LOG.info(msg)294 LOG.info(msg)
287295
=== modified file 'glance/common/utils.py'
--- glance/common/utils.py 2012-09-07 12:17:46 +0000
+++ glance/common/utils.py 2013-01-08 00:34:25 +0000
@@ -118,9 +118,26 @@
118 :param fd: Underlying image file object118 :param fd: Underlying image file object
119 """119 """
120 self.fd = fd120 self.fd = fd
121 self.iterator = None
122 # NOTE(markwash): if the underlying supports read(), overwrite the
123 # default iterator-based implementation with cooperative_read which
124 # is more straightforward
121 if hasattr(fd, 'read'):125 if hasattr(fd, 'read'):
122 self.read = cooperative_read(fd)126 self.read = cooperative_read(fd)
123127
128 def read(self, length=None):
129 """Return the next chunk of the underlying iterator.
130
131 This is replaced with cooperative_read in __init__ if the underlying
132 fd already supports read().
133 """
134 if self.iterator is None:
135 self.iterator = self.__iter__()
136 try:
137 return self.iterator.next()
138 except StopIteration:
139 return ''
140
124 def __iter__(self):141 def __iter__(self):
125 return cooperative_iter(self.fd.__iter__())142 return cooperative_iter(self.fd.__iter__())
126143
127144
=== modified file 'glance/openstack/common/setup.py'
--- glance/openstack/common/setup.py 2012-09-17 07:44:11 +0000
+++ glance/openstack/common/setup.py 2013-01-08 00:34:25 +0000
@@ -135,15 +135,16 @@
135 _run_shell_command("git fetch origin +refs/meta/*:refs/remotes/meta/*")135 _run_shell_command("git fetch origin +refs/meta/*:refs/remotes/meta/*")
136 milestone_cmd = "git show meta/openstack/release:%s" % branch_name136 milestone_cmd = "git show meta/openstack/release:%s" % branch_name
137 milestonever = _run_shell_command(milestone_cmd)137 milestonever = _run_shell_command(milestone_cmd)
138 if not milestonever:138 if milestonever:
139 milestonever = ""139 first_half = "%s~%s" % (milestonever, datestamp)
140 else:
141 first_half = datestamp
140 post_version = _get_git_post_version()142 post_version = _get_git_post_version()
141 # post version should look like:143 # post version should look like:
142 # 0.1.1.4.gcc9e28a144 # 0.1.1.4.gcc9e28a
143 # where the bit after the last . is the short sha, and the bit between145 # where the bit after the last . is the short sha, and the bit between
144 # the last and second to last is the revno count146 # the last and second to last is the revno count
145 (revno, sha) = post_version.split(".")[-2:]147 (revno, sha) = post_version.split(".")[-2:]
146 first_half = "%s~%s" % (milestonever, datestamp)
147 second_half = "%s%s.%s" % (revno_prefix, revno, sha)148 second_half = "%s%s.%s" % (revno_prefix, revno, sha)
148 return ".".join((first_half, second_half))149 return ".".join((first_half, second_half))
149150
150151
=== modified file 'glance/store/rbd.py'
--- glance/store/rbd.py 2012-08-16 13:58:32 +0000
+++ glance/store/rbd.py 2013-01-08 00:34:25 +0000
@@ -69,6 +69,9 @@
69 """69 """
7070
71 def process_specs(self):71 def process_specs(self):
72 # convert to ascii since librbd doesn't handle unicode
73 for key, value in self.specs.iteritems():
74 self.specs[key] = str(value)
72 self.fsid = self.specs.get('fsid')75 self.fsid = self.specs.get('fsid')
73 self.pool = self.specs.get('pool')76 self.pool = self.specs.get('pool')
74 self.image = self.specs.get('image')77 self.image = self.specs.get('image')
@@ -92,7 +95,14 @@
92 reason = _('URI must start with rbd://')95 reason = _('URI must start with rbd://')
93 LOG.error(_("Invalid URI: %(uri)s: %(reason)s") % locals())96 LOG.error(_("Invalid URI: %(uri)s: %(reason)s") % locals())
94 raise exception.BadStoreUri(message=reason)97 raise exception.BadStoreUri(message=reason)
95 pieces = uri[len(prefix):].split('/')98 # convert to ascii since librbd doesn't handle unicode
99 try:
100 ascii_uri = str(uri)
101 except UnicodeError:
102 reason = _('URI contains non-ascii characters')
103 LOG.error(_("Invalid URI: %(uri)s: %(reason)s") % locals())
104 raise exception.BadStoreUri(message=reason)
105 pieces = ascii_uri[len(prefix):].split('/')
96 if len(pieces) == 1:106 if len(pieces) == 1:
97 self.fsid, self.pool, self.image, self.snapshot = \107 self.fsid, self.pool, self.image, self.snapshot = \
98 (None, None, pieces[0], None)108 (None, None, pieces[0], None)
99109
=== modified file 'glance/tests/functional/v2/test_images.py'
--- glance/tests/functional/v2/test_images.py 2012-09-26 12:32:50 +0000
+++ glance/tests/functional/v2/test_images.py 2013-01-08 00:34:25 +0000
@@ -222,6 +222,12 @@
222 self.assertEqual(201, response.status_code)222 self.assertEqual(201, response.status_code)
223 image_id = json.loads(response.text)['id']223 image_id = json.loads(response.text)['id']
224224
225 # Upload some image data
226 path = self._url('/v2/images/%s/file' % image_id)
227 headers = self._headers({'Content-Type': 'application/octet-stream'})
228 response = requests.put(path, headers=headers, data='ZZZZZ')
229 self.assertEqual(201, response.status_code)
230
225 # TENANT1 should see the image in their list231 # TENANT1 should see the image in their list
226 path = self._url('/v2/images')232 path = self._url('/v2/images')
227 response = requests.get(path, headers=self._headers())233 response = requests.get(path, headers=self._headers())
@@ -304,6 +310,12 @@
304 response = requests.delete(path, headers=headers)310 response = requests.delete(path, headers=headers)
305 self.assertEqual(404, response.status_code)311 self.assertEqual(404, response.status_code)
306312
313 # Image data should still be present after the failed delete
314 path = self._url('/v2/images/%s/file' % image_id)
315 response = requests.get(path, headers=self._headers())
316 self.assertEqual(200, response.status_code)
317 self.assertEqual(response.text, 'ZZZZZ')
318
307 self.stop_servers()319 self.stop_servers()
308320
309 def test_tag_lifecycle(self):321 def test_tag_lifecycle(self):
310322
=== modified file 'glance/tests/stubs.py'
--- glance/tests/stubs.py 2012-09-07 12:17:46 +0000
+++ glance/tests/stubs.py 2013-01-08 00:34:25 +0000
@@ -60,7 +60,13 @@
6060
61 def getresponse(self):61 def getresponse(self):
62 mapper = routes.Mapper()62 mapper = routes.Mapper()
63 api = context.UnauthenticatedContextMiddleware(rserver.API(mapper))63 server = rserver.API(mapper)
64 # NOTE(markwash): we need to pass through context auth information if
65 # we have it.
66 if 'X-Auth-Token' in self.req.headers:
67 api = utils.FakeAuthMiddleware(server)
68 else:
69 api = context.UnauthenticatedContextMiddleware(server)
64 webob_res = self.req.get_response(api)70 webob_res = self.req.get_response(api)
6571
66 return utils.FakeHTTPResponse(status=webob_res.status_int,72 return utils.FakeHTTPResponse(status=webob_res.status_int,
6773
=== modified file 'glance/tests/unit/test_clients.py'
--- glance/tests/unit/test_clients.py 2012-09-17 07:44:11 +0000
+++ glance/tests/unit/test_clients.py 2013-01-08 00:34:25 +0000
@@ -39,7 +39,7 @@
39UUID2 = _gen_uuid()39UUID2 = _gen_uuid()
4040
41#NOTE(bcwaldon): needed to init config_dir cli opt41#NOTE(bcwaldon): needed to init config_dir cli opt
42config.parse_args()42config.parse_args(args=[])
4343
4444
45class TestBadClients(test_utils.BaseTestCase):45class TestBadClients(test_utils.BaseTestCase):
4646
=== modified file 'glance/tests/unit/test_store_location.py'
--- glance/tests/unit/test_store_location.py 2012-08-16 13:58:32 +0000
+++ glance/tests/unit/test_store_location.py 2013-01-08 00:34:25 +0000
@@ -290,6 +290,15 @@
290 self.assertEqual(None, loc.pool)290 self.assertEqual(None, loc.pool)
291 self.assertEqual(None, loc.snapshot)291 self.assertEqual(None, loc.snapshot)
292292
293 uri = u'rbd://imagename'
294 loc = glance.store.rbd.StoreLocation({})
295 loc.parse_uri(uri)
296
297 self.assertEqual('imagename', loc.image)
298 self.assertEqual(None, loc.fsid)
299 self.assertEqual(None, loc.pool)
300 self.assertEqual(None, loc.snapshot)
301
293 uri = 'rbd://fsid/pool/image/snap'302 uri = 'rbd://fsid/pool/image/snap'
294 loc = glance.store.rbd.StoreLocation({})303 loc = glance.store.rbd.StoreLocation({})
295 loc.parse_uri(uri)304 loc.parse_uri(uri)
@@ -299,6 +308,15 @@
299 self.assertEqual('pool', loc.pool)308 self.assertEqual('pool', loc.pool)
300 self.assertEqual('snap', loc.snapshot)309 self.assertEqual('snap', loc.snapshot)
301310
311 uri = u'rbd://fsid/pool/image/snap'
312 loc = glance.store.rbd.StoreLocation({})
313 loc.parse_uri(uri)
314
315 self.assertEqual('image', loc.image)
316 self.assertEqual('fsid', loc.fsid)
317 self.assertEqual('pool', loc.pool)
318 self.assertEqual('snap', loc.snapshot)
319
302 uri = 'rbd://%2f/%2f/%2f/%2f'320 uri = 'rbd://%2f/%2f/%2f/%2f'
303 loc = glance.store.rbd.StoreLocation({})321 loc = glance.store.rbd.StoreLocation({})
304 loc.parse_uri(uri)322 loc.parse_uri(uri)
@@ -308,6 +326,15 @@
308 self.assertEqual('/', loc.pool)326 self.assertEqual('/', loc.pool)
309 self.assertEqual('/', loc.snapshot)327 self.assertEqual('/', loc.snapshot)
310328
329 uri = u'rbd://%2f/%2f/%2f/%2f'
330 loc = glance.store.rbd.StoreLocation({})
331 loc.parse_uri(uri)
332
333 self.assertEqual('/', loc.image)
334 self.assertEqual('/', loc.fsid)
335 self.assertEqual('/', loc.pool)
336 self.assertEqual('/', loc.snapshot)
337
311 bad_uri = 'rbd:/image'338 bad_uri = 'rbd:/image'
312 self.assertRaises(exception.BadStoreUri, loc.parse_uri, bad_uri)339 self.assertRaises(exception.BadStoreUri, loc.parse_uri, bad_uri)
313340
@@ -332,6 +359,9 @@
332 bad_uri = 'http://///'359 bad_uri = 'http://///'
333 self.assertRaises(exception.BadStoreUri, loc.parse_uri, bad_uri)360 self.assertRaises(exception.BadStoreUri, loc.parse_uri, bad_uri)
334361
362 bad_uri = 'rbd://' + unichr(300)
363 self.assertRaises(exception.BadStoreUri, loc.parse_uri, bad_uri)
364
335 def test_get_store_from_scheme(self):365 def test_get_store_from_scheme(self):
336 """366 """
337 Test that the backend returned by glance.store.get_backend_class367 Test that the backend returned by glance.store.get_backend_class
338368
=== modified file 'glance/tests/unit/test_utils.py'
--- glance/tests/unit/test_utils.py 2012-09-07 12:17:46 +0000
+++ glance/tests/unit/test_utils.py 2013-01-08 00:34:25 +0000
@@ -73,6 +73,17 @@
7373
74 self.assertEquals(bytes_read, BYTES)74 self.assertEquals(bytes_read, BYTES)
7575
76 def test_cooperative_reader_of_iterator(self):
77 """Ensure cooperative reader supports iterator backends too"""
78 reader = utils.CooperativeReader([l * 3 for l in 'abcdefgh'])
79 chunks = []
80 while True:
81 chunks.append(reader.read(3))
82 if chunks[-1] == '':
83 break
84 meat = ''.join(chunks)
85 self.assertEqual(meat, 'aaabbbcccdddeeefffggghhh')
86
76 def test_limiting_reader(self):87 def test_limiting_reader(self):
77 """Ensure limiting reader class accesses all bytes of file"""88 """Ensure limiting reader class accesses all bytes of file"""
78 BYTES = 102489 BYTES = 1024
7990
=== modified file 'glance/tests/unit/v1/test_api.py'
--- glance/tests/unit/v1/test_api.py 2012-09-17 07:44:11 +0000
+++ glance/tests/unit/v1/test_api.py 2013-01-08 00:34:25 +0000
@@ -103,7 +103,8 @@
103 """Establish a clean test environment"""103 """Establish a clean test environment"""
104 super(TestRegistryAPI, self).setUp()104 super(TestRegistryAPI, self).setUp()
105 self.mapper = routes.Mapper()105 self.mapper = routes.Mapper()
106 self.api = test_utils.FakeAuthMiddleware(rserver.API(self.mapper))106 self.api = test_utils.FakeAuthMiddleware(rserver.API(self.mapper),
107 is_admin=True)
107 self.FIXTURES = [108 self.FIXTURES = [
108 {'id': UUID1,109 {'id': UUID1,
109 'name': 'fake image #1',110 'name': 'fake image #1',
@@ -197,6 +198,38 @@
197 res = req.get_response(self.api)198 res = req.get_response(self.api)
198 self.assertEquals(res.status_int, 404)199 self.assertEquals(res.status_int, 404)
199200
201 def test_show_deleted_image_as_admin(self):
202 """
203 Tests that the /images/<id> registry API endpoint
204 returns a 200 for deleted image to admin user.
205 """
206 # Delete image #2
207 req = webob.Request.blank('/images/%s' % UUID2)
208 req.method = 'DELETE'
209 res = req.get_response(self.api)
210 self.assertEquals(res.status_int, 200)
211
212 req = webob.Request.blank('/images/%s' % UUID2)
213 res = req.get_response(self.api)
214 self.assertEquals(res.status_int, 200)
215
216 def test_show_deleted_image_as_nonadmin(self):
217 """
218 Tests that the /images/<id> registry API endpoint
219 returns a 404 for deleted image to non-admin user.
220 """
221 # Delete image #2
222 req = webob.Request.blank('/images/%s' % UUID2)
223 req.method = 'DELETE'
224 res = req.get_response(self.api)
225 self.assertEquals(res.status_int, 200)
226
227 api = test_utils.FakeAuthMiddleware(rserver.API(self.mapper),
228 is_admin=False)
229 req = webob.Request.blank('/images/%s' % UUID2)
230 res = req.get_response(api)
231 self.assertEquals(res.status_int, 404)
232
200 def test_get_root(self):233 def test_get_root(self):
201 """234 """
202 Tests that the root registry API returns "index",235 Tests that the root registry API returns "index",
@@ -2331,6 +2364,36 @@
2331 """Tests delayed activation of image with missing container format"""2364 """Tests delayed activation of image with missing container format"""
2332 self._do_test_put_image_content_missing_format('container_format')2365 self._do_test_put_image_content_missing_format('container_format')
23332366
2367 def test_update_deleted_image(self):
2368 """Tests that exception raised trying to update a deleted image"""
2369 req = webob.Request.blank("/images/%s" % UUID2)
2370 req.method = 'DELETE'
2371 res = req.get_response(self.api)
2372 self.assertEquals(res.status_int, 200)
2373
2374 fixture = {'name': 'test_del_img'}
2375 req = webob.Request.blank('/images/%s' % UUID2)
2376 req.method = 'PUT'
2377 req.content_type = 'application/json'
2378 req.body = json.dumps(dict(image=fixture))
2379
2380 res = req.get_response(self.api)
2381 self.assertEquals(res.status_int, webob.exc.HTTPForbidden.code)
2382 self.assertTrue('Forbidden to update deleted image' in res.body)
2383
2384 def test_delete_deleted_image(self):
2385 """Tests that exception raised trying to delete a deleted image"""
2386 req = webob.Request.blank("/images/%s" % UUID2)
2387 req.method = 'DELETE'
2388 res = req.get_response(self.api)
2389 self.assertEquals(res.status_int, 200)
2390
2391 req = webob.Request.blank("/images/%s" % UUID2)
2392 req.method = 'DELETE'
2393 res = req.get_response(self.api)
2394 self.assertEquals(res.status_int, webob.exc.HTTPForbidden.code)
2395 self.assertTrue('Forbidden to delete a deleted image' in res.body)
2396
2334 def test_register_and_upload(self):2397 def test_register_and_upload(self):
2335 """2398 """
2336 Test that the process of registering an image with2399 Test that the process of registering an image with
@@ -2929,6 +2992,26 @@
2929 res = req.get_response(self.api)2992 res = req.get_response(self.api)
2930 self.assertEquals(res.status_int, webob.exc.HTTPNotFound.code)2993 self.assertEquals(res.status_int, webob.exc.HTTPNotFound.code)
29312994
2995 def test_delete_not_allowed(self):
2996 # Verify we can get the image data
2997 req = webob.Request.blank("/images/%s" % UUID2)
2998 req.method = 'GET'
2999 req.headers['X-Auth-Token'] = 'user:tenant:'
3000 res = req.get_response(self.api)
3001 self.assertEqual(res.status_int, 200)
3002 self.assertEqual(len(res.body), 19)
3003
3004 # Verify we cannot delete the image
3005 req.method = 'DELETE'
3006 res = req.get_response(self.api)
3007 self.assertEqual(res.status_int, 403)
3008
3009 # Verify the image data is still there
3010 req.method = 'GET'
3011 res = req.get_response(self.api)
3012 self.assertEqual(res.status_int, 200)
3013 self.assertEqual(len(res.body), 19)
3014
2932 def test_delete_queued_image(self):3015 def test_delete_queued_image(self):
2933 """Delete an image in a queued state3016 """Delete an image in a queued state
29343017
29353018
=== modified file 'glance/tests/unit/v2/test_images_resource.py'
--- glance/tests/unit/v2/test_images_resource.py 2012-09-17 07:44:11 +0000
+++ glance/tests/unit/v2/test_images_resource.py 2013-01-08 00:34:25 +0000
@@ -108,6 +108,20 @@
108 expected = set([UUID3])108 expected = set([UUID3])
109 self.assertEqual(actual, expected)109 self.assertEqual(actual, expected)
110110
111 def test_index_admin(self):
112 request = unit_test_utils.get_fake_request(is_admin=True)
113 output = self.controller.index(request)
114 self.assertEqual(3, len(output['images']))
115
116 def test_index_admin_deleted_images_hidden(self):
117 request = unit_test_utils.get_fake_request(is_admin=True)
118 self.controller.delete(request, UUID1)
119 output = self.controller.index(request)
120 self.assertEqual(2, len(output['images']))
121 actual = set([image['id'] for image in output['images']])
122 expected = set([UUID2, UUID3])
123 self.assertEqual(actual, expected)
124
111 def test_index_return_parameters(self):125 def test_index_return_parameters(self):
112 self.config(limit_param_default=1, api_limit_max=3)126 self.config(limit_param_default=1, api_limit_max=3)
113 request = unit_test_utils.get_fake_request()127 request = unit_test_utils.get_fake_request()
@@ -319,6 +333,12 @@
319 self.assertRaises(webob.exc.HTTPNotFound,333 self.assertRaises(webob.exc.HTTPNotFound,
320 self.controller.show, request, image_id)334 self.controller.show, request, image_id)
321335
336 def test_show_deleted_image_admin(self):
337 request = unit_test_utils.get_fake_request(is_admin=True)
338 self.controller.delete(request, UUID1)
339 self.assertRaises(webob.exc.HTTPNotFound,
340 self.controller.show, request, UUID1)
341
322 def test_create(self):342 def test_create(self):
323 request = unit_test_utils.get_fake_request()343 request = unit_test_utils.get_fake_request()
324 image = {'name': 'image-1'}344 image = {'name': 'image-1'}
@@ -376,6 +396,12 @@
376 self.assertRaises(webob.exc.HTTPNotFound, self.controller.update,396 self.assertRaises(webob.exc.HTTPNotFound, self.controller.update,
377 request, utils.generate_uuid(), changes=[])397 request, utils.generate_uuid(), changes=[])
378398
399 def test_update_deleted_image_admin(self):
400 request = unit_test_utils.get_fake_request(is_admin=True)
401 self.controller.delete(request, UUID1)
402 self.assertRaises(webob.exc.HTTPNotFound, self.controller.update,
403 request, UUID1, changes=[])
404
379 def test_update_replace_base_attribute(self):405 def test_update_replace_base_attribute(self):
380 self.db.image_update(None, UUID1, {'properties': {'foo': 'bar'}})406 self.db.image_update(None, UUID1, {'properties': {'foo': 'bar'}})
381 request = unit_test_utils.get_fake_request()407 request = unit_test_utils.get_fake_request()
@@ -608,6 +634,12 @@
608 self.assertRaises(webob.exc.HTTPNotFound, self.controller.delete,634 self.assertRaises(webob.exc.HTTPNotFound, self.controller.delete,
609 request, utils.generate_uuid())635 request, utils.generate_uuid())
610636
637 def test_delete_already_deleted_image_admin(self):
638 request = unit_test_utils.get_fake_request(is_admin=True)
639 self.controller.delete(request, UUID1)
640 self.assertRaises(webob.exc.HTTPNotFound,
641 self.controller.delete, request, UUID1)
642
611 def test_index_with_invalid_marker(self):643 def test_index_with_invalid_marker(self):
612 fake_uuid = utils.generate_uuid()644 fake_uuid = utils.generate_uuid()
613 request = unit_test_utils.get_fake_request()645 request = unit_test_utils.get_fake_request()
614646
=== modified file 'glance/tests/utils.py'
--- glance/tests/utils.py 2012-09-07 12:17:46 +0000
+++ glance/tests/utils.py 2013-01-08 00:34:25 +0000
@@ -57,7 +57,7 @@
57 #NOTE(bcwaldon): parse_args has to be called to register certain57 #NOTE(bcwaldon): parse_args has to be called to register certain
58 # command-line options - specifically we need config_dir for58 # command-line options - specifically we need config_dir for
59 # the following policy tests59 # the following policy tests
60 config.parse_args()60 config.parse_args(args=[])
6161
62 def tearDown(self):62 def tearDown(self):
63 super(BaseTestCase, self).tearDown()63 super(BaseTestCase, self).tearDown()
@@ -347,7 +347,7 @@
347347
348class FakeAuthMiddleware(wsgi.Middleware):348class FakeAuthMiddleware(wsgi.Middleware):
349349
350 def __init__(self, app, is_admin=True):350 def __init__(self, app, is_admin=False):
351 super(FakeAuthMiddleware, self).__init__(app)351 super(FakeAuthMiddleware, self).__init__(app)
352 self.is_admin = is_admin352 self.is_admin = is_admin
353353
@@ -368,6 +368,7 @@
368 'tenant': tenant,368 'tenant': tenant,
369 'roles': roles,369 'roles': roles,
370 'is_admin': self.is_admin,370 'is_admin': self.is_admin,
371 'auth_tok': auth_tok,
371 }372 }
372373
373 req.context = context.RequestContext(**kwargs)374 req.context = context.RequestContext(**kwargs)
374375
=== modified file 'glance/version.py'
--- glance/version.py 2012-08-16 13:58:32 +0000
+++ glance/version.py 2013-01-08 00:34:25 +0000
@@ -17,6 +17,6 @@
1717
18from glance.openstack.common import version as common_version18from glance.openstack.common import version as common_version
1919
20NEXT_VERSION = '2012.2'20NEXT_VERSION = '2012.2.1'
21version_info = common_version.VersionInfo('glance',21version_info = common_version.VersionInfo('glance',
22 pre_version=NEXT_VERSION)22 pre_version=NEXT_VERSION)
2323
=== modified file 'glance/versioninfo'
--- glance/versioninfo 2012-09-26 12:37:00 +0000
+++ glance/versioninfo 2013-01-08 00:34:25 +0000
@@ -1,1 +1,1 @@
12012.2~rc3~20120926.r1.ga9f0a4c12012.2.1
22
=== modified file 'run_tests.sh'
--- run_tests.sh 2012-08-16 13:58:32 +0000
+++ run_tests.sh 2013-01-08 00:34:25 +0000
@@ -24,8 +24,9 @@
24 -N|--no-virtual-env) let always_venv=0; let never_venv=1;;24 -N|--no-virtual-env) let always_venv=0; let never_venv=1;;
25 -p|--pep8) let just_pep8=1;;25 -p|--pep8) let just_pep8=1;;
26 -f|--force) let force=1;;26 -f|--force) let force=1;;
27 --unittests-only) noseargs="$noseargs --exclude-dir=glance/tests/functional";;27 --unittests-only) noseopts="$noseopts --exclude-dir=glance/tests/functional";;
28 -c|--coverage) noseargs="$noseargs --with-coverage --cover-package=glance";;28 -c|--coverage) noseopts="$noseopts --with-coverage --cover-package=glance";;
29 -*) noseopts="$noseopts $1";;
29 *) noseargs="$noseargs $1"30 *) noseargs="$noseargs $1"
30 esac31 esac
31}32}
@@ -35,6 +36,7 @@
35always_venv=036always_venv=0
36never_venv=037never_venv=0
37force=038force=0
39noseopts=
38noseargs=40noseargs=
39wrapper=""41wrapper=""
40just_pep8=042just_pep8=0
@@ -67,7 +69,7 @@
67}69}
6870
6971
70NOSETESTS="nosetests $noseargs"72NOSETESTS="nosetests $noseopts $noseargs"
7173
72if [ $never_venv -eq 0 ]74if [ $never_venv -eq 0 ]
73then75then
7476
=== modified file 'tools/pip-requires'
--- tools/pip-requires 2012-09-17 07:44:11 +0000
+++ tools/pip-requires 2013-01-08 00:34:25 +0000
@@ -3,7 +3,7 @@
3# package to get the right headers...3# package to get the right headers...
4greenlet>=0.3.14greenlet>=0.3.1
55
6SQLAlchemy>=0.76SQLAlchemy>=0.7,<=0.7.9
7anyjson7anyjson
8eventlet>=0.9.128eventlet>=0.9.12
9PasteDeploy9PasteDeploy

Subscribers

People subscribed via source and target branches