1 # Copyright (c) 2016 Cable Television Laboratories, Inc. ("CableLabs")
2 # and others. All rights reserved.
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at:
8 # http://www.apache.org/licenses/LICENSE-2.0
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
20 from snaps import file_utils
21 from snaps.openstack.create_image import ImageSettings
23 import openstack_tests
24 from snaps.openstack.utils import glance_utils, nova_utils
25 from snaps.openstack import create_image
26 from snaps.openstack import os_credentials
27 from snaps.openstack.tests.os_source_file_test import OSIntegrationTestCase
29 __author__ = 'spisarski'
32 class ImageSettingsUnitTests(unittest.TestCase):
34 Tests the construction of the ImageSettings class
37 def test_no_params(self):
38 with self.assertRaises(Exception):
41 def test_empty_config(self):
42 with self.assertRaises(Exception):
43 ImageSettings(config=dict())
45 def test_name_only(self):
46 with self.assertRaises(Exception):
47 ImageSettings(name='foo')
49 def test_config_with_name_only(self):
50 with self.assertRaises(Exception):
51 ImageSettings(config={'name': 'foo'})
53 def test_name_user_only(self):
54 with self.assertRaises(Exception):
55 ImageSettings(name='foo', image_user='bar')
57 def test_config_with_name_user_only(self):
58 with self.assertRaises(Exception):
59 ImageSettings(config={'name': 'foo', 'image_user': 'bar'})
61 def test_name_user_format_only(self):
62 with self.assertRaises(Exception):
63 ImageSettings(name='foo', image_user='bar', img_format='qcow2')
65 def test_config_with_name_user_format_only(self):
66 with self.assertRaises(Exception):
67 ImageSettings(config={'name': 'foo', 'image_user': 'bar', 'format': 'qcow2'})
69 def test_name_user_format_url_file_only(self):
70 with self.assertRaises(Exception):
71 ImageSettings(name='foo', image_user='bar', img_format='qcow2', url='http://foo.com',
72 image_file='/foo/bar.qcow')
74 def test_config_with_name_user_format_url_file_only(self):
75 with self.assertRaises(Exception):
76 ImageSettings(config={'name': 'foo', 'image_user': 'bar', 'format': 'qcow2',
77 'download_url': 'http://foo.com', 'image_file': '/foo/bar.qcow'})
79 def test_name_user_format_url_only(self):
80 settings = ImageSettings(name='foo', image_user='bar', img_format='qcow2', url='http://foo.com')
81 self.assertEquals('foo', settings.name)
82 self.assertEquals('bar', settings.image_user)
83 self.assertEquals('qcow2', settings.format)
84 self.assertEquals('http://foo.com', settings.url)
85 self.assertIsNone(settings.image_file)
86 self.assertIsNone(settings.nic_config_pb_loc)
88 def test_name_user_format_url_only_properties(self):
90 properties['hw_video_model'] = 'vga'
91 settings = ImageSettings(name='foo', image_user='bar', img_format='qcow2', url='http://foo.com', extra_properties=properties)
92 self.assertEquals('foo', settings.name)
93 self.assertEquals('bar', settings.image_user)
94 self.assertEquals('qcow2', settings.format)
95 self.assertEquals('http://foo.com', settings.url)
96 self.assertEquals(properties, settings.extra_properties)
97 self.assertIsNone(settings.image_file)
98 self.assertIsNone(settings.nic_config_pb_loc)
101 def test_config_with_name_user_format_url_only(self):
102 settings = ImageSettings(config={'name': 'foo', 'image_user': 'bar', 'format': 'qcow2',
103 'download_url': 'http://foo.com'})
104 self.assertEquals('foo', settings.name)
105 self.assertEquals('bar', settings.image_user)
106 self.assertEquals('qcow2', settings.format)
107 self.assertEquals('http://foo.com', settings.url)
108 self.assertIsNone(settings.image_file)
109 self.assertIsNone(settings.nic_config_pb_loc)
111 def test_name_user_format_file_only(self):
112 settings = ImageSettings(name='foo', image_user='bar', img_format='qcow2', image_file='/foo/bar.qcow')
113 self.assertEquals('foo', settings.name)
114 self.assertEquals('bar', settings.image_user)
115 self.assertEquals('qcow2', settings.format)
116 self.assertIsNone(settings.url)
117 self.assertEquals('/foo/bar.qcow', settings.image_file)
118 self.assertIsNone(settings.nic_config_pb_loc)
120 def test_config_with_name_user_format_file_only(self):
121 settings = ImageSettings(config={'name': 'foo', 'image_user': 'bar', 'format': 'qcow2',
122 'image_file': '/foo/bar.qcow'})
123 self.assertEquals('foo', settings.name)
124 self.assertEquals('bar', settings.image_user)
125 self.assertEquals('qcow2', settings.format)
126 self.assertIsNone(settings.url)
127 self.assertEquals('/foo/bar.qcow', settings.image_file)
128 self.assertIsNone(settings.nic_config_pb_loc)
130 def test_all_url(self):
132 properties['hw_video_model'] = 'vga'
133 settings = ImageSettings(name='foo', image_user='bar', img_format='qcow2', url='http://foo.com',
134 extra_properties=properties, nic_config_pb_loc='/foo/bar')
135 self.assertEquals('foo', settings.name)
136 self.assertEquals('bar', settings.image_user)
137 self.assertEquals('qcow2', settings.format)
138 self.assertEquals('http://foo.com', settings.url)
139 self.assertEquals(properties, settings.extra_properties)
140 self.assertIsNone(settings.image_file)
141 self.assertEquals('/foo/bar', settings.nic_config_pb_loc)
143 def test_config_all_url(self):
144 settings = ImageSettings(config={'name': 'foo', 'image_user': 'bar', 'format': 'qcow2',
145 'download_url': 'http://foo.com',
146 'extra_properties' : '{\'hw_video_model\': \'vga\'}',
147 'nic_config_pb_loc': '/foo/bar'})
148 self.assertEquals('foo', settings.name)
149 self.assertEquals('bar', settings.image_user)
150 self.assertEquals('qcow2', settings.format)
151 self.assertEquals('http://foo.com', settings.url)
152 self.assertEquals('{\'hw_video_model\': \'vga\'}', settings.extra_properties)
153 self.assertIsNone(settings.image_file)
154 self.assertEquals('/foo/bar', settings.nic_config_pb_loc)
156 def test_all_file(self):
158 properties['hw_video_model'] = 'vga'
159 settings = ImageSettings(name='foo', image_user='bar', img_format='qcow2', image_file='/foo/bar.qcow',
160 extra_properties=properties, nic_config_pb_loc='/foo/bar')
161 self.assertEquals('foo', settings.name)
162 self.assertEquals('bar', settings.image_user)
163 self.assertEquals('qcow2', settings.format)
164 self.assertIsNone(settings.url)
165 self.assertEquals('/foo/bar.qcow', settings.image_file)
166 self.assertEquals(properties, settings.extra_properties)
167 self.assertEquals('/foo/bar', settings.nic_config_pb_loc)
169 def test_config_all_file(self):
170 settings = ImageSettings(config={'name': 'foo', 'image_user': 'bar', 'format': 'qcow2',
171 'image_file': '/foo/bar.qcow',
172 'extra_properties' : '{\'hw_video_model\' : \'vga\'}',
173 'nic_config_pb_loc': '/foo/bar'})
174 self.assertEquals('foo', settings.name)
175 self.assertEquals('bar', settings.image_user)
176 self.assertEquals('qcow2', settings.format)
177 self.assertIsNone(settings.url)
178 self.assertEquals('/foo/bar.qcow', settings.image_file)
179 self.assertEquals('{\'hw_video_model\' : \'vga\'}', settings.extra_properties)
180 self.assertEquals('/foo/bar', settings.nic_config_pb_loc)
183 class CreateImageSuccessTests(OSIntegrationTestCase):
185 Test for the CreateImage class defined in create_image.py
190 Instantiates the CreateImage object that is responsible for downloading and creating an OS image file
193 super(self.__class__, self).__start__()
196 self.image_name = self.__class__.__name__ + '-' + str(guid)
198 self.nova = nova_utils.nova_client(self.os_creds)
199 self.glance = glance_utils.glance_client(self.os_creds)
200 self.image_creators = list()
202 self.tmp_dir = 'tmp/' + str(guid)
203 if not os.path.exists(self.tmp_dir):
204 os.makedirs(self.tmp_dir)
208 Cleans the image and downloaded image file
210 if self.image_creators:
211 while self.image_creators:
212 self.image_creators[-1].clean()
213 self.image_creators.pop()
215 if os.path.exists(self.tmp_dir) and os.path.isdir(self.tmp_dir):
216 shutil.rmtree(self.tmp_dir)
218 super(self.__class__, self).__clean__()
220 def test_create_image_clean_url(self):
222 Tests the creation of an OpenStack image from a URL.
225 # Set the default image settings, then set any custom parameters sent from the app
226 os_image_settings = openstack_tests.cirros_url_image(name=self.image_name)
227 if self.image_metadata:
228 if 'disk_url' in self.image_metadata and self.image_metadata['disk_url']:
229 os_image_settings.url = self.image_metadata['disk_url']
230 if 'extra_properties' in self.image_metadata and self.image_metadata['extra_properties']:
231 os_image_settings.extra_properties = self.image_metadata['extra_properties']
233 # If this is a 3-part image create the kernel and ramdisk images first
234 if self.image_metadata:
235 if 'kernel_url' in self.image_metadata and self.image_metadata['kernel_url']:
236 kernel_image_settings = openstack_tests.cirros_url_image(
237 name=self.image_name+'_kernel', url=self.image_metadata['kernel_url'])
238 self.image_creators.append(create_image.OpenStackImage(self.os_creds, kernel_image_settings))
239 kernel_image = self.image_creators[-1].create()
240 os_image_settings.extra_properties['kernel_id'] = kernel_image.id
242 if 'ramdisk_url' in self.image_metadata and self.image_metadata['ramdisk_url']:
243 ramdisk_image_settings = openstack_tests.cirros_url_image(
244 name=self.image_name+'_ramdisk', url=self.image_metadata['ramdisk_url'])
245 self.image_creators.append(create_image.OpenStackImage(self.os_creds, ramdisk_image_settings))
246 ramdisk_image = self.image_creators[-1].create()
247 os_image_settings.extra_properties['ramdisk_id'] = ramdisk_image.id
249 self.image_creators.append(create_image.OpenStackImage(self.os_creds, os_image_settings))
250 created_image = self.image_creators[-1].create()
251 self.assertIsNotNone(created_image)
253 retrieved_image = glance_utils.get_image(self.nova, self.glance, os_image_settings.name)
254 self.assertIsNotNone(retrieved_image)
256 self.assertEquals(created_image.name, retrieved_image.name)
257 self.assertEquals(created_image.id, retrieved_image.id)
259 def test_create_image_clean_url_properties(self):
261 Tests the creation of an OpenStack image from a URL and set properties.
264 # Set the default image settings, then set any custom parameters sent from the app
265 os_image_settings = openstack_tests.cirros_url_image(name=self.image_name)
267 os_image_settings.extra_properties = {'hw_video_model' : 'vga'}
269 if self.image_metadata:
270 if 'disk_url' in self.image_metadata and self.image_metadata['disk_url']:
271 os_image_settings.url = self.image_metadata['disk_url']
272 if 'extra_properties' in self.image_metadata and self.image_metadata['extra_properties']:
273 os_image_settings.extra_properties = dict(os_image_settings.extra_properties.items()
274 + self.image_metadata['extra_properties'].items())
276 # If this is a 3-part image create the kernel and ramdisk images first
277 if self.image_metadata:
278 if 'kernel_url' in self.image_metadata and self.image_metadata['kernel_url']:
279 kernel_image_settings = openstack_tests.cirros_url_image(
280 name=self.image_name+'_kernel', url=self.image_metadata['kernel_url'])
281 self.image_creators.append(create_image.OpenStackImage(self.os_creds, kernel_image_settings))
282 kernel_image = self.image_creators[-1].create()
283 os_image_settings.extra_properties['kernel_id'] = kernel_image.id
285 if 'ramdisk_url' in self.image_metadata and self.image_metadata['ramdisk_url']:
286 ramdisk_image_settings = openstack_tests.cirros_url_image(
287 name=self.image_name+'_ramdisk', url=self.image_metadata['ramdisk_url'])
288 self.image_creators.append(create_image.OpenStackImage(self.os_creds, ramdisk_image_settings))
289 ramdisk_image = self.image_creators[-1].create()
290 os_image_settings.extra_properties['ramdisk_id'] = ramdisk_image.id
292 self.image_creators.append(create_image.OpenStackImage(self.os_creds, os_image_settings))
293 created_image = self.image_creators[-1].create()
294 self.assertIsNotNone(created_image)
296 retrieved_image = glance_utils.get_image(self.nova, self.glance, os_image_settings.name)
297 self.assertIsNotNone(retrieved_image)
299 self.assertEquals(created_image.name, retrieved_image.name)
300 self.assertEquals(created_image.id, retrieved_image.id)
301 self.assertEquals(created_image.properties, retrieved_image.properties)
303 def test_create_image_clean_file(self):
305 Tests the creation of an OpenStack image from a file.
309 # Set the default image settings, then set any custom parameters sent from the app
310 url_image_settings = openstack_tests.cirros_url_image('foo')
311 if self.image_metadata:
312 if 'disk_url' in self.image_metadata and self.image_metadata['disk_url']:
313 url_image_settings.url = self.image_metadata['disk_url']
315 # Download the file of the image
316 image_file = file_utils.download(url_image_settings.url, self.tmp_dir)
317 file_image_settings = openstack_tests.file_image_test_settings(name=self.image_name, file_path=image_file.name)
319 # Set extra properties sent from the app (if any)
320 if self.image_metadata:
321 if 'extra_properties' in self.image_metadata and self.image_metadata['extra_properties']:
322 file_image_settings.extra_properties = self.image_metadata['extra_properties']
324 # If this is a 3-part image create the kernel and ramdisk images first
325 if self.image_metadata:
326 if 'kernel_url' in self.image_metadata and self.image_metadata['kernel_url']:
327 kernel_image_file = file_utils.download(self.image_metadata['kernel_url'], self.tmp_dir)
328 kernel_image_settings = openstack_tests.file_image_test_settings(
329 name=self.image_name+'_kernel', file_path=kernel_image_file.name)
330 self.image_creators.append(create_image.OpenStackImage(self.os_creds, kernel_image_settings))
331 kernel_image = self.image_creators[-1].create()
332 file_image_settings.extra_properties['kernel_id'] = kernel_image.id
334 if 'ramdisk_url' in self.image_metadata and self.image_metadata['ramdisk_url']:
335 ramdisk_image_file = file_utils.download(self.image_metadata['ramdisk_url'], self.tmp_dir)
336 ramdisk_image_settings = openstack_tests.file_image_test_settings(
337 name=self.image_name+'_ramdisk', file_path=ramdisk_image_file.name)
338 self.image_creators.append(create_image.OpenStackImage(self.os_creds, ramdisk_image_settings))
339 ramdisk_image = self.image_creators[-1].create()
340 file_image_settings.extra_properties['ramdisk_id'] = ramdisk_image.id
342 self.image_creators.append(create_image.OpenStackImage(self.os_creds, file_image_settings))
343 created_image = self.image_creators[-1].create()
344 self.assertIsNotNone(created_image)
345 self.assertEqual(self.image_name, created_image.name)
347 retrieved_image = glance_utils.get_image(self.nova, self.glance, file_image_settings.name)
348 self.assertIsNotNone(retrieved_image)
350 self.assertEquals(created_image.name, retrieved_image.name)
351 self.assertEquals(created_image.id, retrieved_image.id)
353 def test_create_delete_image(self):
355 Tests the creation then deletion of an OpenStack image to ensure clean() does not raise an Exception.
358 # Set the default image settings, then set any custom parameters sent from the app
359 os_image_settings = openstack_tests.cirros_url_image(name=self.image_name)
360 if self.image_metadata:
361 if 'disk_url' in self.image_metadata and self.image_metadata['disk_url']:
362 os_image_settings.url = self.image_metadata['disk_url']
363 if 'extra_properties' in self.image_metadata and self.image_metadata['extra_properties']:
364 os_image_settings.extra_properties = self.image_metadata['extra_properties']
366 # If this is a 3-part image create the kernel and ramdisk images first
367 if self.image_metadata:
368 if 'kernel_url' in self.image_metadata and self.image_metadata['kernel_url']:
369 kernel_image_settings = openstack_tests.cirros_url_image(
370 name=self.image_name+'_kernel', url=self.image_metadata['kernel_url'])
371 self.image_creators.append(create_image.OpenStackImage(self.os_creds, kernel_image_settings))
372 kernel_image = self.image_creators[-1].create()
373 os_image_settings.extra_properties['kernel_id'] = kernel_image.id
375 if 'ramdisk_url' in self.image_metadata and self.image_metadata['ramdisk_url']:
376 ramdisk_image_settings = openstack_tests.cirros_url_image(
377 name=self.image_name+'_ramdisk', url=self.image_metadata['ramdisk_url'])
378 self.image_creators.append(create_image.OpenStackImage(self.os_creds, ramdisk_image_settings))
379 ramdisk_image = self.image_creators[-1].create()
380 os_image_settings.extra_properties['ramdisk_id'] = ramdisk_image.id
382 self.image_creators.append(create_image.OpenStackImage(self.os_creds, os_image_settings))
383 created_image = self.image_creators[-1].create()
384 self.assertIsNotNone(created_image)
386 # Delete Image manually
387 glance_utils.delete_image(self.glance, created_image)
389 self.assertIsNone(glance_utils.get_image(self.nova, self.glance, self.image_creators[-1].image_settings.name))
391 # Must not throw an exception when attempting to cleanup non-existent image
392 self.image_creators[-1].clean()
393 self.assertIsNone(self.image_creators[-1].get_image())
394 self.image_creators.pop()
396 def test_create_same_image(self):
398 Tests the creation of an OpenStack image when the image already exists.
401 # Set the default image settings, then set any custom parameters sent from the app
402 os_image_settings = openstack_tests.cirros_url_image(name=self.image_name)
403 if self.image_metadata:
404 if 'disk_url' in self.image_metadata and self.image_metadata['disk_url']:
405 os_image_settings.url = self.image_metadata['disk_url']
406 if 'extra_properties' in self.image_metadata and self.image_metadata['extra_properties']:
407 os_image_settings.extra_properties = self.image_metadata['extra_properties']
409 # If this is a 3-part image create the kernel and ramdisk images first
410 if self.image_metadata:
411 if 'kernel_url' in self.image_metadata and self.image_metadata['kernel_url']:
412 kernel_image_settings = openstack_tests.cirros_url_image(
413 name=self.image_name+'_kernel', url=self.image_metadata['kernel_url'])
414 self.image_creators.append(create_image.OpenStackImage(self.os_creds, kernel_image_settings))
415 kernel_image = self.image_creators[-1].create()
416 os_image_settings.extra_properties['kernel_id'] = kernel_image.id
418 if 'ramdisk_url' in self.image_metadata and self.image_metadata['ramdisk_url']:
419 ramdisk_image_settings = openstack_tests.cirros_url_image(
420 name=self.image_name+'_ramdisk', url=self.image_metadata['ramdisk_url'])
421 self.image_creators.append(create_image.OpenStackImage(self.os_creds, ramdisk_image_settings))
422 ramdisk_image = self.image_creators[-1].create()
423 os_image_settings.extra_properties['ramdisk_id'] = ramdisk_image.id
425 self.image_creators.append(create_image.OpenStackImage(self.os_creds, os_image_settings))
426 image1 = self.image_creators[-1].create()
428 # Should be retrieving the instance data
429 os_image_2 = create_image.OpenStackImage(self.os_creds, os_image_settings)
430 image2 = os_image_2.create()
431 self.assertEquals(image1.id, image2.id)
434 class CreateImageNegativeTests(OSIntegrationTestCase):
436 Negative test cases for the CreateImage class
440 super(self.__class__, self).__start__()
442 self.image_name = self.__class__.__name__ + '-' + str(uuid.uuid4())
443 self.image_creator = None
446 if self.image_creator:
447 self.image_creator.clean()
449 super(self.__class__, self).__clean__()
451 def test_none_image_name(self):
453 Expect an exception when the image name is None
455 os_image_settings = openstack_tests.cirros_url_image(name=self.image_name)
456 with self.assertRaises(Exception):
457 self.image_creator = create_image.OpenStackImage(
458 self.os_creds, create_image.ImageSettings(
459 name=None, image_user=os_image_settings.image_user, img_format=os_image_settings.format,
460 url=os_image_settings.url))
462 self.fail('Exception should have been thrown prior to this line')
464 def test_bad_image_url(self):
466 Expect an exception when the image download url is bad
468 os_image_settings = openstack_tests.cirros_url_image(name=self.image_name)
469 self.image_creator = create_image.OpenStackImage(self.os_creds, create_image.ImageSettings(
470 name=os_image_settings.name, image_user=os_image_settings.image_user,
471 img_format=os_image_settings.format, url="http://foo.bar"))
472 with self.assertRaises(Exception):
473 self.image_creator.create()
475 def test_bad_image_file(self):
477 Expect an exception when the image file does not exist
479 os_image_settings = openstack_tests.cirros_url_image(name=self.image_name)
480 self.image_creator = create_image.OpenStackImage(
482 create_image.ImageSettings(name=os_image_settings.name, image_user=os_image_settings.image_user,
483 img_format=os_image_settings.format, image_file="/foo/bar.qcow"))
484 with self.assertRaises(Exception):
485 self.image_creator.create()
487 def test_none_proj_name(self):
489 Expect an exception when the project name is None
491 os_image_settings = openstack_tests.cirros_url_image(name=self.image_name)
492 with self.assertRaises(Exception):
493 self.image_creator = create_image.OpenStackImage(
494 os_credentials.OSCreds(self.os_creds.username, self.os_creds.password, self.os_creds.auth_url, None,
495 proxy_settings=self.os_creds.proxy_settings),
497 self.image_creator.create()
499 def test_none_auth_url(self):
501 Expect an exception when the project name is None
503 os_image_settings = openstack_tests.cirros_url_image(name=self.image_name)
504 with self.assertRaises(Exception):
505 self.image_creator = create_image.OpenStackImage(
506 os_credentials.OSCreds(self.os_creds.username, self.os_creds.password, None,
507 self.os_creds.project_name, proxy_settings=self.os_creds.proxy_settings),
509 self.image_creator.create()
511 def test_none_password(self):
513 Expect an exception when the project name is None
515 os_image_settings = openstack_tests.cirros_url_image(name=self.image_name)
516 with self.assertRaises(Exception):
517 self.image_creator = create_image.OpenStackImage(
518 os_credentials.OSCreds(self.os_creds.username, None, self.os_creds.os_auth_url,
519 self.os_creds.project_name, proxy_settings=self.os_creds.proxy_settings),
522 def test_none_user(self):
524 Expect an exception when the project name is None
526 os_image_settings = openstack_tests.cirros_url_image(name=self.image_name)
527 with self.assertRaises(Exception):
528 self.image_creator = create_image.OpenStackImage(
529 os_credentials.OSCreds(None, self.os_creds.password, self.os_creds.os_auth_url,
530 self.os_creds.project_name,
531 proxy_settings=self.os_creds.proxy_settings),
535 class CreateMultiPartImageTests(OSIntegrationTestCase):
537 Test for creating a 3-part image
541 Instantiates the CreateImage object that is responsible for
542 downloading and creating an OS image file within OpenStack
544 super(self.__class__, self).__start__()
547 self.image_creators = list()
548 self.image_name = self.__class__.__name__ + '-' + str(guid)
550 self.nova = nova_utils.nova_client(self.os_creds)
551 self.glance = glance_utils.glance_client(self.os_creds)
553 self.tmp_dir = 'tmp/' + str(guid)
554 if not os.path.exists(self.tmp_dir):
555 os.makedirs(self.tmp_dir)
559 Cleans the images and downloaded image file
561 while self.image_creators:
562 self.image_creators[-1].clean()
563 self.image_creators.pop()
565 if os.path.exists(self.tmp_dir) and os.path.isdir(self.tmp_dir):
566 shutil.rmtree(self.tmp_dir)
568 super(self.__class__, self).__clean__()
570 def test_create_three_part_image_from_url(self):
572 Tests the creation of a 3-part OpenStack image from a URL.
576 if self.image_metadata:
577 if 'extra_properties' in self.image_metadata and self.image_metadata['extra_properties']:
578 properties = self.image_metadata['extra_properties']
580 # Create the kernel image
581 kernel_image_settings = openstack_tests.cirros_url_image(name=self.image_name+'_kernel',
582 url='http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-kernel')
584 if self.image_metadata:
585 if 'kernel_url' in self.image_metadata and self.image_metadata['kernel_url']:
586 kernel_image_settings.url = self.image_metadata['kernel_url']
587 self.image_creators.append(create_image.OpenStackImage(self.os_creds, kernel_image_settings))
588 kernel_image = self.image_creators[-1].create()
589 self.assertIsNotNone(kernel_image)
591 # Create the ramdisk image
592 ramdisk_image_settings = openstack_tests.cirros_url_image(name=self.image_name+'_ramdisk',
593 url='http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-initramfs')
594 if self.image_metadata:
595 if 'ramdisk_url' in self.image_metadata and self.image_metadata['ramdisk_url']:
596 ramdisk_image_settings.url = self.image_metadata['ramdisk_url']
597 self.image_creators.append(create_image.OpenStackImage(self.os_creds, ramdisk_image_settings))
598 ramdisk_image = self.image_creators[-1].create()
599 self.assertIsNotNone(ramdisk_image)
601 # Create the main image
602 os_image_settings = openstack_tests.cirros_url_image(name=self.image_name,
603 url='http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img')
604 if self.image_metadata:
605 if 'disk_url' in self.image_metadata and self.image_metadata['disk_url']:
606 os_image_settings.url = self.image_metadata['disk_url']
608 properties['kernel_id'] = kernel_image.id
609 properties['ramdisk_id'] = ramdisk_image.id
610 os_image_settings.extra_properties = properties
612 self.image_creators.append(create_image.OpenStackImage(self.os_creds, os_image_settings))
613 created_image = self.image_creators[-1].create()
614 self.assertIsNotNone(created_image)
615 self.assertEqual(self.image_name, created_image.name)
617 retrieved_image = glance_utils.get_image(self.nova, self.glance, os_image_settings.name)
618 self.assertIsNotNone(retrieved_image)
620 self.assertEquals(created_image.name, retrieved_image.name)
621 self.assertEquals(created_image.id, retrieved_image.id)
622 self.assertEquals(created_image.properties, retrieved_image.properties)
624 def test_create_three_part_image_from_file(self):
626 Tests the creation of a 3-part OpenStack image from files.
630 if self.image_metadata:
631 if 'extra_properties' in self.image_metadata and self.image_metadata['extra_properties']:
632 properties = self.image_metadata['extra_properties']
633 # Create the kernel image
634 kernel_url = 'http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-kernel'
635 if self.image_metadata:
636 if 'kernel_url' in self.image_metadata and self.image_metadata['kernel_url']:
637 kernel_url = self.image_metadata['kernel_url']
638 kernel_image_file = file_utils.download(kernel_url, self.tmp_dir)
639 kernel_file_image_settings = openstack_tests.file_image_test_settings(
640 name=self.image_name+'_kernel', file_path=kernel_image_file.name)
641 self.image_creators.append(create_image.OpenStackImage(self.os_creds, kernel_file_image_settings))
642 kernel_image = self.image_creators[-1].create()
643 self.assertIsNotNone(kernel_image)
645 # Create the ramdisk image
646 ramdisk_url = 'http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-initramfs'
647 if self.image_metadata:
648 if 'ramdisk_url' in self.image_metadata and self.image_metadata['ramdisk_url']:
649 ramdisk_url = self.image_metadata['ramdisk_url']
650 ramdisk_image_file = file_utils.download(ramdisk_url, self.tmp_dir)
651 ramdisk_file_image_settings = openstack_tests.file_image_test_settings(
652 name=self.image_name+'_ramdisk', file_path=ramdisk_image_file.name)
653 self.image_creators.append(create_image.OpenStackImage(self.os_creds, ramdisk_file_image_settings))
654 ramdisk_image = self.image_creators[-1].create()
655 self.assertIsNotNone(ramdisk_image)
657 # Create the main image
658 image_url='http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img'
659 if self.image_metadata:
660 if 'disk_url' in self.image_metadata and self.image_metadata['disk_url']:
661 umage_url = self.image_metadata['disk_url']
662 image_file = file_utils.download(image_url, self.tmp_dir)
663 file_image_settings = openstack_tests.file_image_test_settings(name=self.image_name, file_path=image_file.name)
664 properties['kernel_id'] = kernel_image.id
665 properties['ramdisk_id'] = ramdisk_image.id
666 file_image_settings.extra_properties = properties
667 self.image_creators.append(create_image.OpenStackImage(self.os_creds, file_image_settings))
668 created_image = self.image_creators[-1].create()
670 self.assertIsNotNone(created_image)
671 self.assertEqual(self.image_name, created_image.name)
673 retrieved_image = glance_utils.get_image(self.nova, self.glance, file_image_settings.name)
674 self.assertIsNotNone(retrieved_image)
676 self.assertEquals(created_image.name, retrieved_image.name)
677 self.assertEquals(created_image.id, retrieved_image.id)
678 self.assertEquals(created_image.properties, retrieved_image.properties)