Merge lp:~soren/nova/lp658237 into lp:~hudson-openstack/nova/trunk

Proposed by Soren Hansen
Status: Merged
Approved by: Jay Pipes
Approved revision: 335
Merged at revision: 337
Proposed branch: lp:~soren/nova/lp658237
Merge into: lp:~hudson-openstack/nova/trunk
Diff against target: 108 lines (+34/-8)
4 files modified
nova/objectstore/image.py (+8/-2)
nova/tests/bundle/1mb.manifest.xml (+1/-1)
nova/tests/bundle/1mb.no_kernel_or_ramdisk.manifest.xml (+1/-0)
nova/tests/objectstore_unittest.py (+24/-5)
To merge this branch: bzr merge lp:~soren/nova/lp658237
Reviewer Review Type Date Requested Status
Jay Pipes (community) Approve
Rick Clark (community) Approve
Review via email: mp+38109@code.launchpad.net

Description of the change

Extracts the kernel and ramdisk id from manifests and puts in into images' metadata.

To post a comment you must log in.
Revision history for this message
Rick Clark (dendrobates) wrote :

this is simple pretty isolated and looks harmless to me.

review: Approve
Revision history for this message
Jay Pipes (jaypipes) wrote :

Agreed, lgtm. Total XML diff fail, though :)

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'nova/objectstore/image.py'
2--- nova/objectstore/image.py 2010-09-28 18:09:53 +0000
3+++ nova/objectstore/image.py 2010-10-11 12:20:55 +0000
4@@ -191,14 +191,14 @@
5 if kernel_id == 'true':
6 image_type = 'kernel'
7 except:
8- pass
9+ kernel_id = None
10
11 try:
12 ramdisk_id = manifest.find("machine_configuration/ramdisk_id").text
13 if ramdisk_id == 'true':
14 image_type = 'ramdisk'
15 except:
16- pass
17+ ramdisk_id = None
18
19 info = {
20 'imageId': image_id,
21@@ -209,6 +209,12 @@
22 'imageType' : image_type
23 }
24
25+ if kernel_id:
26+ info['kernelId'] = kernel_id
27+
28+ if ramdisk_id:
29+ info['ramdiskId'] = ramdisk_id
30+
31 def write_state(state):
32 info['imageState'] = state
33 with open(os.path.join(image_path, 'info.json'), "w") as f:
34
35=== modified file 'nova/tests/bundle/1mb.manifest.xml'
36--- nova/tests/bundle/1mb.manifest.xml 2010-05-28 06:05:26 +0000
37+++ nova/tests/bundle/1mb.manifest.xml 2010-10-11 12:20:55 +0000
38@@ -1,1 +1,1 @@
39-<?xml version="1.0" ?><manifest><version>2007-10-10</version><bundler><name>euca-tools</name><version>1.2</version><release>31337</release></bundler><machine_configuration><architecture>x86_64</architecture></machine_configuration><image><name>1mb</name><user>42</user><type>machine</type><digest algorithm="SHA1">da39a3ee5e6b4b0d3255bfef95601890afd80709</digest><size>1048576</size><bundled_size>1136</bundled_size><ec2_encrypted_key algorithm="AES-128-CBC">33a2ea00dc64083dd9a10eb5e233635b42a7beb1670ab75452087d9de74c60aba1cd27c136fda56f62beb581de128fb1f10d072b9e556fd25e903107a57827c21f6ee8a93a4ff55b11311fcef217e3eefb07e81f71e88216f43b4b54029c1f2549f2925a839a73947d2d5aeecec4a62ece4af9156d557ae907978298296d9915</ec2_encrypted_key><user_encrypted_key algorithm="AES-128-CBC">4c11147fd8caf92447e90ce339928933d7579244c2f8ffb07cc0ea35f8738da8b90eff6c7a49671a84500e993e9462e4c36d5c19c0b3a2b397d035b4c0cce742b58e12552175d81d129b0425e9f71ebacb9aeb539fa9dd2ac36749fb82876f6902e5fb24b6ec19f35ec4c20acd50437fd30966e99c4d9a0647577970a8fa3023</user_encrypted_key><ec2_encrypted_iv>14bd082c9715f071160c69bbfb070f51d2ba1076775f1d988ccde150e515088156b248e4b5a64e46c4fe064feeeedfe14511f7fde478a51acb89f9b2f6c84b60593e5c3f792ba6b01fed9bf2158fdac03086374883b39d13a3ca74497eeaaf579fc3f26effc73bfd9446a2a8c4061f0874bfaca058905180e22d3d8881551cb3</ec2_encrypted_iv><user_encrypted_iv>8f7606f19f00e4e19535dd234b66b31b77e9c7bad3885d9c9efa75c863631fd4f82a009e17d789066d9cc6032a436f05384832f6d9a3283d3e63eab04fa0da5c8c87db9b17e854e842c3fb416507d067a266b44538125ce732e486098e8ebd1ca91fa3079f007fce7d14957a9b7e57282407ead3c6eb68fe975df3d83190021b</user_encrypted_iv><parts count="2"><part index="0"><filename>1mb.part.0</filename><digest algorithm="SHA1">c4413423cf7a57e71187e19bfd5cd4b514a64283</digest></part><part index="1"><filename>1mb.part.1</filename><digest algorithm="SHA1">9d4262e6589393d09a11a0332af169887bc2e57d</digest></part></parts></image><signature>4e00b5ba28114dda4a9df7eeae94be847ec46117a09a1cbe41e578660642f0660dda1776b39fb3bf826b6cfec019e2a5e9c566728d186b7400ebc989a30670eb1db26ce01e68bd9d3f31290370077a85b81c66b63c1e0d5499bac115c06c17a21a81b6d3a67ebbce6c17019095af7ab07f3796c708cc843e58efc12ddc788c5e</signature></manifest>
40\ No newline at end of file
41+<?xml version="1.0" ?><manifest><version>2007-10-10</version><bundler><name>euca-tools</name><version>1.2</version><release>31337</release></bundler><machine_configuration><architecture>x86_64</architecture><kernel_id>aki-test</kernel_id><ramdisk_id>ari-test</ramdisk_id></machine_configuration><image><name>1mb</name><user>42</user><type>machine</type><digest algorithm="SHA1">da39a3ee5e6b4b0d3255bfef95601890afd80709</digest><size>1048576</size><bundled_size>1136</bundled_size><ec2_encrypted_key algorithm="AES-128-CBC">33a2ea00dc64083dd9a10eb5e233635b42a7beb1670ab75452087d9de74c60aba1cd27c136fda56f62beb581de128fb1f10d072b9e556fd25e903107a57827c21f6ee8a93a4ff55b11311fcef217e3eefb07e81f71e88216f43b4b54029c1f2549f2925a839a73947d2d5aeecec4a62ece4af9156d557ae907978298296d9915</ec2_encrypted_key><user_encrypted_key algorithm="AES-128-CBC">4c11147fd8caf92447e90ce339928933d7579244c2f8ffb07cc0ea35f8738da8b90eff6c7a49671a84500e993e9462e4c36d5c19c0b3a2b397d035b4c0cce742b58e12552175d81d129b0425e9f71ebacb9aeb539fa9dd2ac36749fb82876f6902e5fb24b6ec19f35ec4c20acd50437fd30966e99c4d9a0647577970a8fa3023</user_encrypted_key><ec2_encrypted_iv>14bd082c9715f071160c69bbfb070f51d2ba1076775f1d988ccde150e515088156b248e4b5a64e46c4fe064feeeedfe14511f7fde478a51acb89f9b2f6c84b60593e5c3f792ba6b01fed9bf2158fdac03086374883b39d13a3ca74497eeaaf579fc3f26effc73bfd9446a2a8c4061f0874bfaca058905180e22d3d8881551cb3</ec2_encrypted_iv><user_encrypted_iv>8f7606f19f00e4e19535dd234b66b31b77e9c7bad3885d9c9efa75c863631fd4f82a009e17d789066d9cc6032a436f05384832f6d9a3283d3e63eab04fa0da5c8c87db9b17e854e842c3fb416507d067a266b44538125ce732e486098e8ebd1ca91fa3079f007fce7d14957a9b7e57282407ead3c6eb68fe975df3d83190021b</user_encrypted_iv><parts count="2"><part index="0"><filename>1mb.part.0</filename><digest algorithm="SHA1">c4413423cf7a57e71187e19bfd5cd4b514a64283</digest></part><part index="1"><filename>1mb.part.1</filename><digest algorithm="SHA1">9d4262e6589393d09a11a0332af169887bc2e57d</digest></part></parts></image><signature>4e00b5ba28114dda4a9df7eeae94be847ec46117a09a1cbe41e578660642f0660dda1776b39fb3bf826b6cfec019e2a5e9c566728d186b7400ebc989a30670eb1db26ce01e68bd9d3f31290370077a85b81c66b63c1e0d5499bac115c06c17a21a81b6d3a67ebbce6c17019095af7ab07f3796c708cc843e58efc12ddc788c5e</signature></manifest>
42
43=== added file 'nova/tests/bundle/1mb.no_kernel_or_ramdisk.manifest.xml'
44--- nova/tests/bundle/1mb.no_kernel_or_ramdisk.manifest.xml 1970-01-01 00:00:00 +0000
45+++ nova/tests/bundle/1mb.no_kernel_or_ramdisk.manifest.xml 2010-10-11 12:20:55 +0000
46@@ -0,0 +1,1 @@
47+<?xml version="1.0" ?><manifest><version>2007-10-10</version><bundler><name>euca-tools</name><version>1.2</version><release>31337</release></bundler><machine_configuration><architecture>x86_64</architecture></machine_configuration><image><name>1mb</name><user>42</user><type>machine</type><digest algorithm="SHA1">da39a3ee5e6b4b0d3255bfef95601890afd80709</digest><size>1048576</size><bundled_size>1136</bundled_size><ec2_encrypted_key algorithm="AES-128-CBC">33a2ea00dc64083dd9a10eb5e233635b42a7beb1670ab75452087d9de74c60aba1cd27c136fda56f62beb581de128fb1f10d072b9e556fd25e903107a57827c21f6ee8a93a4ff55b11311fcef217e3eefb07e81f71e88216f43b4b54029c1f2549f2925a839a73947d2d5aeecec4a62ece4af9156d557ae907978298296d9915</ec2_encrypted_key><user_encrypted_key algorithm="AES-128-CBC">4c11147fd8caf92447e90ce339928933d7579244c2f8ffb07cc0ea35f8738da8b90eff6c7a49671a84500e993e9462e4c36d5c19c0b3a2b397d035b4c0cce742b58e12552175d81d129b0425e9f71ebacb9aeb539fa9dd2ac36749fb82876f6902e5fb24b6ec19f35ec4c20acd50437fd30966e99c4d9a0647577970a8fa3023</user_encrypted_key><ec2_encrypted_iv>14bd082c9715f071160c69bbfb070f51d2ba1076775f1d988ccde150e515088156b248e4b5a64e46c4fe064feeeedfe14511f7fde478a51acb89f9b2f6c84b60593e5c3f792ba6b01fed9bf2158fdac03086374883b39d13a3ca74497eeaaf579fc3f26effc73bfd9446a2a8c4061f0874bfaca058905180e22d3d8881551cb3</ec2_encrypted_iv><user_encrypted_iv>8f7606f19f00e4e19535dd234b66b31b77e9c7bad3885d9c9efa75c863631fd4f82a009e17d789066d9cc6032a436f05384832f6d9a3283d3e63eab04fa0da5c8c87db9b17e854e842c3fb416507d067a266b44538125ce732e486098e8ebd1ca91fa3079f007fce7d14957a9b7e57282407ead3c6eb68fe975df3d83190021b</user_encrypted_iv><parts count="2"><part index="0"><filename>1mb.part.0</filename><digest algorithm="SHA1">c4413423cf7a57e71187e19bfd5cd4b514a64283</digest></part><part index="1"><filename>1mb.part.1</filename><digest algorithm="SHA1">9d4262e6589393d09a11a0332af169887bc2e57d</digest></part></parts></image><signature>4e00b5ba28114dda4a9df7eeae94be847ec46117a09a1cbe41e578660642f0660dda1776b39fb3bf826b6cfec019e2a5e9c566728d186b7400ebc989a30670eb1db26ce01e68bd9d3f31290370077a85b81c66b63c1e0d5499bac115c06c17a21a81b6d3a67ebbce6c17019095af7ab07f3796c708cc843e58efc12ddc788c5e</signature></manifest>
48
49=== modified file 'nova/tests/objectstore_unittest.py'
50--- nova/tests/objectstore_unittest.py 2010-09-29 03:38:32 +0000
51+++ nova/tests/objectstore_unittest.py 2010-10-11 12:20:55 +0000
52@@ -133,13 +133,22 @@
53 self.assertRaises(NotFound, objectstore.bucket.Bucket, 'new_bucket')
54
55 def test_images(self):
56+ self.do_test_images('1mb.manifest.xml', True,
57+ 'image_bucket1', 'i-testing1')
58+
59+ def test_images_no_kernel_or_ramdisk(self):
60+ self.do_test_images('1mb.no_kernel_or_ramdisk.manifest.xml',
61+ False, 'image_bucket2', 'i-testing2')
62+
63+ def do_test_images(self, manifest_file, expect_kernel_and_ramdisk,
64+ image_bucket, image_name):
65 "Test the image API."
66 self.context.user = self.auth_manager.get_user('user1')
67 self.context.project = self.auth_manager.get_project('proj1')
68
69 # create a bucket for our bundle
70- objectstore.bucket.Bucket.create('image_bucket', self.context)
71- bucket = objectstore.bucket.Bucket('image_bucket')
72+ objectstore.bucket.Bucket.create(image_bucket, self.context)
73+ bucket = objectstore.bucket.Bucket(image_bucket)
74
75 # upload an image manifest/parts
76 bundle_path = os.path.join(os.path.dirname(__file__), 'bundle')
77@@ -147,18 +156,28 @@
78 bucket[os.path.basename(path)] = open(path, 'rb').read()
79
80 # register an image
81- image.Image.register_aws_image('i-testing',
82- 'image_bucket/1mb.manifest.xml',
83+ image.Image.register_aws_image(image_name,
84+ '%s/%s' % (image_bucket, manifest_file),
85 self.context)
86
87 # verify image
88- my_img = image.Image('i-testing')
89+ my_img = image.Image(image_name)
90 result_image_file = os.path.join(my_img.path, 'image')
91 self.assertEqual(os.stat(result_image_file).st_size, 1048576)
92
93 sha = hashlib.sha1(open(result_image_file).read()).hexdigest()
94 self.assertEqual(sha, '3b71f43ff30f4b15b5cd85dd9e95ebc7e84eb5a3')
95
96+ if expect_kernel_and_ramdisk:
97+ # Verify the default kernel and ramdisk are set
98+ self.assertEqual(my_img.metadata['kernelId'], 'aki-test')
99+ self.assertEqual(my_img.metadata['ramdiskId'], 'ari-test')
100+ else:
101+ # Verify that the default kernel and ramdisk (the one from FLAGS)
102+ # doesn't get embedded in the metadata
103+ self.assertFalse('kernelId' in my_img.metadata)
104+ self.assertFalse('ramdiskId' in my_img.metadata)
105+
106 # verify image permissions
107 self.context.user = self.auth_manager.get_user('user2')
108 self.context.project = self.auth_manager.get_project('proj2')