summaryrefslogtreecommitdiffstats
path: root/snaps/openstack/tests
diff options
context:
space:
mode:
authorspisarski <s.pisarski@cablelabs.com>2017-05-12 13:59:04 -0600
committerspisarski <s.pisarski@cablelabs.com>2017-05-16 14:21:56 -0600
commit10c665d7c831cf198ac9e675654693860e602bf9 (patch)
treeb30f75115e80ddc983b9e3555b165992cef234c1 /snaps/openstack/tests
parent6fd1af82cd7bf41274c4e1620006004b79628759 (diff)
Added support for offline testing
Expanded the image_metadata used by the tests for overriding default images for not only supporting 3part images but also to support offline testing as required by Functest. JIRA: SNAPS-67 Change-Id: I6975e7b51fa879fe984af64402939c465df95184 Signed-off-by: spisarski <s.pisarski@cablelabs.com>
Diffstat (limited to 'snaps/openstack/tests')
-rw-r--r--snaps/openstack/tests/create_image_tests.py431
-rw-r--r--snaps/openstack/tests/create_instance_tests.py462
-rw-r--r--snaps/openstack/tests/openstack_tests.py164
-rw-r--r--snaps/openstack/tests/os_source_file_test.py14
4 files changed, 761 insertions, 310 deletions
diff --git a/snaps/openstack/tests/create_image_tests.py b/snaps/openstack/tests/create_image_tests.py
index 36e4271..7cb46e4 100644
--- a/snaps/openstack/tests/create_image_tests.py
+++ b/snaps/openstack/tests/create_image_tests.py
@@ -12,67 +12,74 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+
+try:
+ from urllib.request import URLError
+except ImportError:
+ from urllib2 import URLError
+
+import logging
import os
import shutil
import uuid
import unittest
from snaps import file_utils
-from snaps.openstack.create_image import ImageSettings
+from snaps.openstack.create_image import ImageSettings, ImageCreationError, ImageSettingsError
from snaps.openstack.tests import openstack_tests
from snaps.openstack.utils import glance_utils
from snaps.openstack import create_image
-from snaps.openstack import os_credentials
from snaps.openstack.tests.os_source_file_test import OSIntegrationTestCase
__author__ = 'spisarski'
+logger = logging.getLogger('create_image_tests')
+
class ImageSettingsUnitTests(unittest.TestCase):
"""
Tests the construction of the ImageSettings class
"""
-
def test_no_params(self):
- with self.assertRaises(Exception):
+ with self.assertRaises(ImageSettingsError):
ImageSettings()
def test_empty_config(self):
- with self.assertRaises(Exception):
+ with self.assertRaises(ImageSettingsError):
ImageSettings(config=dict())
def test_name_only(self):
- with self.assertRaises(Exception):
+ with self.assertRaises(ImageSettingsError):
ImageSettings(name='foo')
def test_config_with_name_only(self):
- with self.assertRaises(Exception):
+ with self.assertRaises(ImageSettingsError):
ImageSettings(config={'name': 'foo'})
def test_name_user_only(self):
- with self.assertRaises(Exception):
+ with self.assertRaises(ImageSettingsError):
ImageSettings(name='foo', image_user='bar')
def test_config_with_name_user_only(self):
- with self.assertRaises(Exception):
+ with self.assertRaises(ImageSettingsError):
ImageSettings(config={'name': 'foo', 'image_user': 'bar'})
def test_name_user_format_only(self):
- with self.assertRaises(Exception):
+ with self.assertRaises(ImageSettingsError):
ImageSettings(name='foo', image_user='bar', img_format='qcow2')
def test_config_with_name_user_format_only(self):
- with self.assertRaises(Exception):
+ with self.assertRaises(ImageSettingsError):
ImageSettings(config={'name': 'foo', 'image_user': 'bar', 'format': 'qcow2'})
def test_name_user_format_url_file_only(self):
- with self.assertRaises(Exception):
+ with self.assertRaises(ImageSettingsError):
ImageSettings(name='foo', image_user='bar', img_format='qcow2', url='http://foo.com',
image_file='/foo/bar.qcow')
def test_config_with_name_user_format_url_file_only(self):
- with self.assertRaises(Exception):
+ with self.assertRaises(ImageSettingsError):
ImageSettings(config={'name': 'foo', 'image_user': 'bar', 'format': 'qcow2',
'download_url': 'http://foo.com', 'image_file': '/foo/bar.qcow'})
@@ -83,6 +90,8 @@ class ImageSettingsUnitTests(unittest.TestCase):
self.assertEqual('qcow2', settings.format)
self.assertEqual('http://foo.com', settings.url)
self.assertIsNone(settings.image_file)
+ self.assertFalse(settings.exists)
+ self.assertFalse(settings.public)
self.assertIsNone(settings.nic_config_pb_loc)
def test_name_user_format_url_only_properties(self):
@@ -95,6 +104,8 @@ class ImageSettingsUnitTests(unittest.TestCase):
self.assertEqual('http://foo.com', settings.url)
self.assertEqual(properties, settings.extra_properties)
self.assertIsNone(settings.image_file)
+ self.assertFalse(settings.exists)
+ self.assertFalse(settings.public)
self.assertIsNone(settings.nic_config_pb_loc)
def test_config_with_name_user_format_url_only(self):
@@ -105,6 +116,8 @@ class ImageSettingsUnitTests(unittest.TestCase):
self.assertEqual('qcow2', settings.format)
self.assertEqual('http://foo.com', settings.url)
self.assertIsNone(settings.image_file)
+ self.assertFalse(settings.exists)
+ self.assertFalse(settings.public)
self.assertIsNone(settings.nic_config_pb_loc)
def test_name_user_format_file_only(self):
@@ -114,6 +127,8 @@ class ImageSettingsUnitTests(unittest.TestCase):
self.assertEqual('qcow2', settings.format)
self.assertIsNone(settings.url)
self.assertEqual('/foo/bar.qcow', settings.image_file)
+ self.assertFalse(settings.exists)
+ self.assertFalse(settings.public)
self.assertIsNone(settings.nic_config_pb_loc)
def test_config_with_name_user_format_file_only(self):
@@ -124,6 +139,8 @@ class ImageSettingsUnitTests(unittest.TestCase):
self.assertEqual('qcow2', settings.format)
self.assertIsNone(settings.url)
self.assertEqual('/foo/bar.qcow', settings.image_file)
+ self.assertFalse(settings.exists)
+ self.assertFalse(settings.public)
self.assertIsNone(settings.nic_config_pb_loc)
def test_all_url(self):
@@ -132,7 +149,8 @@ class ImageSettingsUnitTests(unittest.TestCase):
ramdisk_settings = ImageSettings(name='ramdisk', url='http://ramdisk.com', image_user='bar', img_format='qcow2')
settings = ImageSettings(name='foo', image_user='bar', img_format='qcow2', url='http://foo.com',
extra_properties=properties, nic_config_pb_loc='/foo/bar',
- kernel_image_settings=kernel_settings, ramdisk_image_settings=ramdisk_settings)
+ kernel_image_settings=kernel_settings, ramdisk_image_settings=ramdisk_settings,
+ exists=True, public=True)
self.assertEqual('foo', settings.name)
self.assertEqual('bar', settings.image_user)
self.assertEqual('qcow2', settings.format)
@@ -148,6 +166,8 @@ class ImageSettingsUnitTests(unittest.TestCase):
self.assertEqual('http://ramdisk.com', settings.ramdisk_image_settings.url)
self.assertEqual('bar', settings.ramdisk_image_settings.image_user)
self.assertEqual('qcow2', settings.ramdisk_image_settings.format)
+ self.assertTrue(settings.exists)
+ self.assertTrue(settings.public)
def test_config_all_url(self):
settings = ImageSettings(
@@ -158,7 +178,8 @@ class ImageSettingsUnitTests(unittest.TestCase):
'kernel_image_settings': {'name': 'kernel', 'download_url': 'http://kernel.com',
'image_user': 'bar', 'format': 'qcow2'},
'ramdisk_image_settings': {'name': 'ramdisk', 'download_url': 'http://ramdisk.com',
- 'image_user': 'bar', 'format': 'qcow2'}})
+ 'image_user': 'bar', 'format': 'qcow2'},
+ 'exists': True, 'public': True})
self.assertEqual('foo', settings.name)
self.assertEqual('bar', settings.image_user)
self.assertEqual('qcow2', settings.format)
@@ -170,11 +191,13 @@ class ImageSettingsUnitTests(unittest.TestCase):
self.assertEqual('http://kernel.com', settings.kernel_image_settings.url)
self.assertEqual('ramdisk', settings.ramdisk_image_settings.name)
self.assertEqual('http://ramdisk.com', settings.ramdisk_image_settings.url)
+ self.assertTrue(settings.exists)
+ self.assertTrue(settings.public)
def test_all_file(self):
properties = {'hw_video_model': 'vga'}
settings = ImageSettings(name='foo', image_user='bar', img_format='qcow2', image_file='/foo/bar.qcow',
- extra_properties=properties, nic_config_pb_loc='/foo/bar')
+ extra_properties=properties, nic_config_pb_loc='/foo/bar', exists=True, public=True)
self.assertEqual('foo', settings.name)
self.assertEqual('bar', settings.image_user)
self.assertEqual('qcow2', settings.format)
@@ -182,12 +205,14 @@ class ImageSettingsUnitTests(unittest.TestCase):
self.assertEqual('/foo/bar.qcow', settings.image_file)
self.assertEqual(properties, settings.extra_properties)
self.assertEqual('/foo/bar', settings.nic_config_pb_loc)
+ self.assertTrue(settings.exists)
+ self.assertTrue(settings.public)
def test_config_all_file(self):
settings = ImageSettings(config={'name': 'foo', 'image_user': 'bar', 'format': 'qcow2',
'image_file': '/foo/bar.qcow',
'extra_properties': '{\'hw_video_model\' : \'vga\'}',
- 'nic_config_pb_loc': '/foo/bar'})
+ 'nic_config_pb_loc': '/foo/bar', 'exists': True, 'public': True})
self.assertEqual('foo', settings.name)
self.assertEqual('bar', settings.image_user)
self.assertEqual('qcow2', settings.format)
@@ -195,6 +220,8 @@ class ImageSettingsUnitTests(unittest.TestCase):
self.assertEqual('/foo/bar.qcow', settings.image_file)
self.assertEqual('{\'hw_video_model\' : \'vga\'}', settings.extra_properties)
self.assertEqual('/foo/bar', settings.nic_config_pb_loc)
+ self.assertTrue(settings.exists)
+ self.assertTrue(settings.public)
class CreateImageSuccessTests(OSIntegrationTestCase):
@@ -214,12 +241,17 @@ class CreateImageSuccessTests(OSIntegrationTestCase):
self.glance = glance_utils.glance_client(self.os_creds)
self.image_creator = None
+ if self.image_metadata and 'glance_tests' in self.image_metadata:
+ glance_test_meta = self.image_metadata['glance_tests']
+ else:
+ glance_test_meta = None
+
self.tmp_dir = 'tmp/' + str(guid)
if not os.path.exists(self.tmp_dir):
os.makedirs(self.tmp_dir)
self.image_settings = openstack_tests.cirros_image_settings(name=self.image_name,
- image_metadata=self.image_metadata)
+ image_metadata=glance_test_meta)
def tearDown(self):
"""
@@ -273,26 +305,30 @@ class CreateImageSuccessTests(OSIntegrationTestCase):
"""
Tests the creation of an OpenStack image from a file.
"""
+ if not self.image_settings.image_file and self.image_settings.url:
+ # Download the file of the image
+ image_file_name = file_utils.download(self.image_settings.url, self.tmp_dir).name
+ else:
+ image_file_name = self.image_settings.image_file
- # Create Image
-
- # Download the file of the image
- image_file = file_utils.download(self.image_settings.url, self.tmp_dir)
- file_image_settings = openstack_tests.file_image_test_settings(
- name=self.image_name, file_path=image_file.name)
+ if image_file_name:
+ file_image_settings = openstack_tests.file_image_test_settings(
+ name=self.image_name, file_path=image_file_name)
- self.image_creator = create_image.OpenStackImage(self.os_creds, file_image_settings)
- created_image = self.image_creator.create()
- self.assertIsNotNone(created_image)
- self.assertEqual(self.image_name, created_image.name)
+ self.image_creator = create_image.OpenStackImage(self.os_creds, file_image_settings)
+ created_image = self.image_creator.create()
+ self.assertIsNotNone(created_image)
+ self.assertEqual(self.image_name, created_image.name)
- retrieved_image = glance_utils.get_image(self.glance, file_image_settings.name)
- self.assertIsNotNone(retrieved_image)
- self.assertEqual(self.image_creator.get_image().size, retrieved_image.size)
- self.assertEqual(get_image_size(file_image_settings), retrieved_image.size)
+ retrieved_image = glance_utils.get_image(self.glance, file_image_settings.name)
+ self.assertIsNotNone(retrieved_image)
+ self.assertEqual(self.image_creator.get_image().size, retrieved_image.size)
+ self.assertEqual(get_image_size(file_image_settings), retrieved_image.size)
- self.assertEqual(created_image.name, retrieved_image.name)
- self.assertEqual(created_image.id, retrieved_image.id)
+ self.assertEqual(created_image.name, retrieved_image.name)
+ self.assertEqual(created_image.id, retrieved_image.id)
+ else:
+ logger.warn('Test not executed as the image metadata requires image files')
def test_create_delete_image(self):
"""
@@ -338,6 +374,29 @@ class CreateImageSuccessTests(OSIntegrationTestCase):
image2 = os_image_2.create()
self.assertEqual(image1.id, image2.id)
+ def test_create_same_image_new_settings(self):
+ """
+ Tests the creation of an OpenStack image when the image already exists and the configuration only contains
+ the name.
+ """
+ # Create Image
+ self.image_creator = create_image.OpenStackImage(self.os_creds, self.image_settings)
+ image1 = self.image_creator.create()
+
+ retrieved_image = glance_utils.get_image(self.glance, self.image_settings.name)
+ self.assertIsNotNone(retrieved_image)
+ self.assertEqual(self.image_creator.get_image().size, retrieved_image.size)
+ self.assertEqual(get_image_size(self.image_settings), retrieved_image.size)
+ self.assertEqual(image1.name, retrieved_image.name)
+ self.assertEqual(image1.id, retrieved_image.id)
+ self.assertEqual(image1.properties, retrieved_image.properties)
+
+ # Should be retrieving the instance data
+ image_2_settings = ImageSettings(name=self.image_settings.name, image_user='foo', exists=True)
+ os_image_2 = create_image.OpenStackImage(self.os_creds, image_2_settings)
+ image2 = os_image_2.create()
+ self.assertEqual(image1.id, image2.id)
+
class CreateImageNegativeTests(OSIntegrationTestCase):
"""
@@ -356,89 +415,42 @@ class CreateImageNegativeTests(OSIntegrationTestCase):
super(self.__class__, self).__clean__()
- def test_none_image_name(self):
+ def test_bad_image_name(self):
"""
- Expect an exception when the image name is None
+ Expect an ImageCreationError when the image name does not exist when a file or URL has not been configured
"""
- os_image_settings = openstack_tests.cirros_image_settings(name=self.image_name)
- with self.assertRaises(Exception):
- self.image_creator = create_image.OpenStackImage(
- self.os_creds, create_image.ImageSettings(
- name=None, image_user=os_image_settings.image_user, img_format=os_image_settings.format,
- url=os_image_settings.url))
+ os_image_settings = ImageSettings(name='foo', image_user='bar', exists=True)
+ self.image_creator = create_image.OpenStackImage(self.os_creds, os_image_settings)
- self.fail('Exception should have been thrown prior to this line')
+ with self.assertRaises(ImageCreationError):
+ self.image_creator.create()
+
+ self.fail('ImageCreationError should have been raised prior to this line')
def test_bad_image_url(self):
"""
- Expect an exception when the image download url is bad
+ Expect an ImageCreationError when the image download url is bad
"""
os_image_settings = openstack_tests.cirros_image_settings(name=self.image_name)
self.image_creator = create_image.OpenStackImage(self.os_creds, create_image.ImageSettings(
name=os_image_settings.name, image_user=os_image_settings.image_user,
img_format=os_image_settings.format, url="http://foo.bar"))
- with self.assertRaises(Exception):
+
+ with self.assertRaises(URLError):
self.image_creator.create()
def test_bad_image_file(self):
"""
- Expect an exception when the image file does not exist
+ Expect an ImageCreationError when the image file does not exist
"""
os_image_settings = openstack_tests.cirros_image_settings(name=self.image_name)
self.image_creator = create_image.OpenStackImage(
self.os_creds,
create_image.ImageSettings(name=os_image_settings.name, image_user=os_image_settings.image_user,
img_format=os_image_settings.format, image_file="/foo/bar.qcow"))
- with self.assertRaises(Exception):
+ with self.assertRaises(IOError):
self.image_creator.create()
- def test_none_proj_name(self):
- """
- Expect an exception when the project name is None
- """
- os_image_settings = openstack_tests.cirros_image_settings(name=self.image_name)
- with self.assertRaises(Exception):
- self.image_creator = create_image.OpenStackImage(
- os_credentials.OSCreds(self.os_creds.username, self.os_creds.password, self.os_creds.auth_url, None,
- proxy_settings=self.os_creds.proxy_settings),
- os_image_settings)
- self.image_creator.create()
-
- def test_none_auth_url(self):
- """
- Expect an exception when the project name is None
- """
- os_image_settings = openstack_tests.cirros_image_settings(name=self.image_name)
- with self.assertRaises(Exception):
- self.image_creator = create_image.OpenStackImage(
- os_credentials.OSCreds(self.os_creds.username, self.os_creds.password, None,
- self.os_creds.project_name, proxy_settings=self.os_creds.proxy_settings),
- os_image_settings)
- self.image_creator.create()
-
- def test_none_password(self):
- """
- Expect an exception when the project name is None
- """
- os_image_settings = openstack_tests.cirros_image_settings(name=self.image_name)
- with self.assertRaises(Exception):
- self.image_creator = create_image.OpenStackImage(
- os_credentials.OSCreds(self.os_creds.username, None, self.os_creds.os_auth_url,
- self.os_creds.project_name, proxy_settings=self.os_creds.proxy_settings),
- os_image_settings)
-
- def test_none_user(self):
- """
- Expect an exception when the project name is None
- """
- os_image_settings = openstack_tests.cirros_image_settings(name=self.image_name)
- with self.assertRaises(Exception):
- self.image_creator = create_image.OpenStackImage(
- os_credentials.OSCreds(None, self.os_creds.password, self.os_creds.os_auth_url,
- self.os_creds.project_name,
- proxy_settings=self.os_creds.proxy_settings),
- os_image_settings)
-
class CreateMultiPartImageTests(OSIntegrationTestCase):
"""
@@ -460,6 +472,11 @@ class CreateMultiPartImageTests(OSIntegrationTestCase):
if not os.path.exists(self.tmp_dir):
os.makedirs(self.tmp_dir)
+ if self.image_metadata and 'glance_tests' in self.image_metadata:
+ self.glance_test_meta = self.image_metadata['glance_tests']
+ else:
+ self.glance_test_meta = dict()
+
def tearDown(self):
"""
Cleans the images and downloaded image file
@@ -477,30 +494,33 @@ class CreateMultiPartImageTests(OSIntegrationTestCase):
Tests the creation of a 3-part OpenStack image from a URL.
"""
# Create the kernel image
- image_settings = openstack_tests.cirros_image_settings(
- name=self.image_name,
- image_metadata={'disk_url': 'http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img',
- 'kernel_url': 'http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-kernel',
- 'ramdisk_url': 'http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-initramfs'})
-
- image_creator = create_image.OpenStackImage(self.os_creds, image_settings)
- self.image_creators.append(image_creator)
- image_creator.create()
-
- main_image = glance_utils.get_image(self.glance, image_settings.name)
- self.assertIsNotNone(main_image)
- self.assertIsNotNone(image_creator.get_image())
- self.assertEqual(image_creator.get_image().id, main_image.id)
-
- kernel_image = glance_utils.get_image(self.glance, image_settings.kernel_image_settings.name)
- self.assertIsNotNone(kernel_image)
- self.assertIsNotNone(image_creator.get_kernel_image())
- self.assertEqual(kernel_image.id, image_creator.get_kernel_image().id)
-
- ramdisk_image = glance_utils.get_image(self.glance, image_settings.ramdisk_image_settings.name)
- self.assertIsNotNone(ramdisk_image)
- self.assertIsNotNone(image_creator.get_ramdisk_image())
- self.assertEqual(ramdisk_image.id, image_creator.get_ramdisk_image().id)
+ if 'disk_file' not in self.glance_test_meta:
+ image_settings = openstack_tests.cirros_image_settings(
+ name=self.image_name,
+ image_metadata={'disk_url': 'http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img',
+ 'kernel_url': 'http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-kernel',
+ 'ramdisk_url': 'http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-initramfs'})
+
+ image_creator = create_image.OpenStackImage(self.os_creds, image_settings)
+ self.image_creators.append(image_creator)
+ image_creator.create()
+
+ main_image = glance_utils.get_image(self.glance, image_settings.name)
+ self.assertIsNotNone(main_image)
+ self.assertIsNotNone(image_creator.get_image())
+ self.assertEqual(image_creator.get_image().id, main_image.id)
+
+ kernel_image = glance_utils.get_image(self.glance, image_settings.kernel_image_settings.name)
+ self.assertIsNotNone(kernel_image)
+ self.assertIsNotNone(image_creator.get_kernel_image())
+ self.assertEqual(kernel_image.id, image_creator.get_kernel_image().id)
+
+ ramdisk_image = glance_utils.get_image(self.glance, image_settings.ramdisk_image_settings.name)
+ self.assertIsNotNone(ramdisk_image)
+ self.assertIsNotNone(image_creator.get_ramdisk_image())
+ self.assertEqual(ramdisk_image.id, image_creator.get_ramdisk_image().id)
+ else:
+ logger.warn('Test not executed as the image metadata requires image files')
def test_create_three_part_image_from_file_3_creators(self):
"""
@@ -508,39 +528,61 @@ class CreateMultiPartImageTests(OSIntegrationTestCase):
"""
# Set properties
properties = {}
- if self.image_metadata:
- if 'extra_properties' in self.image_metadata:
- properties = self.image_metadata['extra_properties']
+ if self.glance_test_meta:
+ if 'extra_properties' in self.glance_test_meta:
+ properties = self.glance_test_meta['extra_properties']
+
# Create the kernel image
- kernel_url = 'http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-kernel'
- if self.image_metadata:
- if 'kernel_url' in self.image_metadata:
- kernel_url = self.image_metadata['kernel_url']
- kernel_image_file = file_utils.download(kernel_url, self.tmp_dir)
+ kernel_file_name = None
+ kernel_url = openstack_tests.CIRROS_DEFAULT_KERNEL_IMAGE_URL
+ if 'kernel_file' in self.glance_test_meta:
+ kernel_file_name = self.glance_test_meta['kernel_file']
+ elif 'kernel_url' in self.glance_test_meta:
+ kernel_url = self.glance_test_meta['kernel_url']
+ else:
+ kernel_url = 'http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-kernel'
+
+ if not kernel_file_name:
+ kernel_file_name = file_utils.download(kernel_url, self.tmp_dir).name
+
kernel_file_image_settings = openstack_tests.file_image_test_settings(
- name=self.image_name+'_kernel', file_path=kernel_image_file.name)
+ name=self.image_name+'_kernel', file_path=kernel_file_name)
+
self.image_creators.append(create_image.OpenStackImage(self.os_creds, kernel_file_image_settings))
kernel_image = self.image_creators[-1].create()
self.assertIsNotNone(kernel_image)
self.assertEqual(get_image_size(kernel_file_image_settings), kernel_image.size)
# Create the ramdisk image
- ramdisk_url = 'http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-initramfs'
- if self.image_metadata:
- if 'ramdisk_url' in self.image_metadata:
- ramdisk_url = self.image_metadata['ramdisk_url']
- ramdisk_image_file = file_utils.download(ramdisk_url, self.tmp_dir)
+ ramdisk_file_name = None
+ ramdisk_url = openstack_tests.CIRROS_DEFAULT_RAMDISK_IMAGE_URL
+ if 'ramdisk_file' in self.glance_test_meta:
+ ramdisk_file_name = self.glance_test_meta['ramdisk_file']
+ elif 'ramdisk_url' in self.glance_test_meta:
+ ramdisk_url = self.glance_test_meta['ramdisk_url']
+
+ if not ramdisk_file_name:
+ ramdisk_file_name = file_utils.download(ramdisk_url, self.tmp_dir).name
+
ramdisk_file_image_settings = openstack_tests.file_image_test_settings(
- name=self.image_name+'_ramdisk', file_path=ramdisk_image_file.name)
+ name=self.image_name+'_ramdisk', file_path=ramdisk_file_name)
self.image_creators.append(create_image.OpenStackImage(self.os_creds, ramdisk_file_image_settings))
ramdisk_image = self.image_creators[-1].create()
self.assertIsNotNone(ramdisk_image)
self.assertEqual(get_image_size(ramdisk_file_image_settings), ramdisk_image.size)
- # Create the main image
- image_url = 'http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img'
- image_file = file_utils.download(image_url, self.tmp_dir)
- file_image_settings = openstack_tests.file_image_test_settings(name=self.image_name, file_path=image_file.name)
+ # Create the main disk image
+ disk_file_name = None
+ disk_url = openstack_tests.CIRROS_DEFAULT_IMAGE_URL
+ if 'disk_file' in self.glance_test_meta:
+ disk_file_name = self.glance_test_meta['disk_file']
+ elif 'disk_url' in self.glance_test_meta:
+ disk_url = self.glance_test_meta['disk_url']
+
+ if not disk_file_name:
+ disk_file_name = file_utils.download(disk_url, self.tmp_dir).name
+
+ file_image_settings = openstack_tests.file_image_test_settings(name=self.image_name, file_path=disk_file_name)
properties['kernel_id'] = kernel_image.id
properties['ramdisk_id'] = ramdisk_image.id
file_image_settings.extra_properties = properties
@@ -562,62 +604,65 @@ class CreateMultiPartImageTests(OSIntegrationTestCase):
"""
Tests the creation of a 3-part OpenStack image from a URL.
"""
- # Set properties
- properties = {}
- if self.image_metadata and 'extra_properties' in self.image_metadata:
- properties = self.image_metadata['extra_properties']
-
- # Create the kernel image
- kernel_image_settings = openstack_tests.cirros_image_settings(
- name=self.image_name+'_kernel',
- url='http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-kernel')
-
- if self.image_metadata:
- if 'kernel_url' in self.image_metadata:
- kernel_image_settings.url = self.image_metadata['kernel_url']
- self.image_creators.append(create_image.OpenStackImage(self.os_creds, kernel_image_settings))
- kernel_image = self.image_creators[-1].create()
- self.assertIsNotNone(kernel_image)
- self.assertEqual(get_image_size(kernel_image_settings), kernel_image.size)
-
- # Create the ramdisk image
- ramdisk_image_settings = openstack_tests.cirros_image_settings(
- name=self.image_name+'_ramdisk',
- url='http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-initramfs')
- if self.image_metadata:
- if 'ramdisk_url' in self.image_metadata:
- ramdisk_image_settings.url = self.image_metadata['ramdisk_url']
- self.image_creators.append(create_image.OpenStackImage(self.os_creds, ramdisk_image_settings))
- ramdisk_image = self.image_creators[-1].create()
- self.assertIsNotNone(ramdisk_image)
- self.assertEqual(get_image_size(ramdisk_image_settings), ramdisk_image.size)
-
- # Create the main image
- os_image_settings = openstack_tests.cirros_image_settings(
- name=self.image_name,
- url='http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img')
- if self.image_metadata:
- if 'disk_url' in self.image_metadata:
- os_image_settings.url = self.image_metadata['disk_url']
-
- properties['kernel_id'] = kernel_image.id
- properties['ramdisk_id'] = ramdisk_image.id
- os_image_settings.extra_properties = properties
-
- self.image_creators.append(create_image.OpenStackImage(self.os_creds, os_image_settings))
- created_image = self.image_creators[-1].create()
- self.assertIsNotNone(created_image)
- self.assertEqual(self.image_name, created_image.name)
-
- retrieved_image = glance_utils.get_image(self.glance, os_image_settings.name)
- self.assertIsNotNone(retrieved_image)
-
- self.assertEqual(self.image_creators[-1].get_image().size, retrieved_image.size)
- self.assertEqual(get_image_size(os_image_settings), retrieved_image.size)
-
- self.assertEqual(created_image.name, retrieved_image.name)
- self.assertEqual(created_image.id, retrieved_image.id)
- self.assertEqual(created_image.properties, retrieved_image.properties)
+ if 'disk_file' not in self.glance_test_meta:
+ # Set properties
+ properties = {}
+ if self.glance_test_meta and 'extra_properties' in self.glance_test_meta:
+ properties = self.glance_test_meta['extra_properties']
+
+ # Create the kernel image
+ kernel_image_settings = openstack_tests.cirros_image_settings(
+ name=self.image_name+'_kernel',
+ url='http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-kernel')
+
+ if self.glance_test_meta:
+ if 'kernel_url' in self.glance_test_meta:
+ kernel_image_settings.url = self.glance_test_meta['kernel_url']
+ self.image_creators.append(create_image.OpenStackImage(self.os_creds, kernel_image_settings))
+ kernel_image = self.image_creators[-1].create()
+ self.assertIsNotNone(kernel_image)
+ self.assertEqual(get_image_size(kernel_image_settings), kernel_image.size)
+
+ # Create the ramdisk image
+ ramdisk_image_settings = openstack_tests.cirros_image_settings(
+ name=self.image_name+'_ramdisk',
+ url='http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-initramfs')
+ if self.glance_test_meta:
+ if 'ramdisk_url' in self.glance_test_meta:
+ ramdisk_image_settings.url = self.glance_test_meta['ramdisk_url']
+ self.image_creators.append(create_image.OpenStackImage(self.os_creds, ramdisk_image_settings))
+ ramdisk_image = self.image_creators[-1].create()
+ self.assertIsNotNone(ramdisk_image)
+ self.assertEqual(get_image_size(ramdisk_image_settings), ramdisk_image.size)
+
+ # Create the main image
+ os_image_settings = openstack_tests.cirros_image_settings(
+ name=self.image_name,
+ url='http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img')
+ if self.glance_test_meta:
+ if 'disk_url' in self.glance_test_meta:
+ os_image_settings.url = self.glance_test_meta['disk_url']
+
+ properties['kernel_id'] = kernel_image.id
+ properties['ramdisk_id'] = ramdisk_image.id
+ os_image_settings.extra_properties = properties
+
+ self.image_creators.append(create_image.OpenStackImage(self.os_creds, os_image_settings))
+ created_image = self.image_creators[-1].create()
+ self.assertIsNotNone(created_image)
+ self.assertEqual(self.image_name, created_image.name)
+
+ retrieved_image = glance_utils.get_image(self.glance, os_image_settings.name)
+ self.assertIsNotNone(retrieved_image)
+
+ self.assertEqual(self.image_creators[-1].get_image().size, retrieved_image.size)
+ self.assertEqual(get_image_size(os_image_settings), retrieved_image.size)
+
+ self.assertEqual(created_image.name, retrieved_image.name)
+ self.assertEqual(created_image.id, retrieved_image.id)
+ self.assertEqual(created_image.properties, retrieved_image.properties)
+ else:
+ logger.warn('Test not executed as the image metadata requires image files')
def get_image_size(image_settings):
diff --git a/snaps/openstack/tests/create_instance_tests.py b/snaps/openstack/tests/create_instance_tests.py
index e0dca17..950e987 100644
--- a/snaps/openstack/tests/create_instance_tests.py
+++ b/snaps/openstack/tests/create_instance_tests.py
@@ -19,16 +19,18 @@ import time
import unittest
import uuid
+import shutil
+from snaps import file_utils
from snaps.openstack.create_instance import VmInstanceSettings, OpenStackVmInstance, FloatingIpSettings
from snaps.openstack.create_flavor import OpenStackFlavor, FlavorSettings
from snaps.openstack.create_keypairs import OpenStackKeypair, KeypairSettings
from snaps.openstack.create_network import OpenStackNetwork, PortSettings
from snaps.openstack.create_router import OpenStackRouter
-from snaps.openstack.create_image import OpenStackImage
+from snaps.openstack.create_image import OpenStackImage, ImageSettings
from snaps.openstack.create_security_group import SecurityGroupSettings, OpenStackSecurityGroup
from snaps.openstack.tests import openstack_tests, validation_utils
from snaps.openstack.utils import nova_utils
-from snaps.openstack.tests.os_source_file_test import OSIntegrationTestCase
+from snaps.openstack.tests.os_source_file_test import OSIntegrationTestCase, OSComponentTestCase
__author__ = 'spisarski'
@@ -234,13 +236,8 @@ class SimpleHealthCheck(OSIntegrationTestCase):
super(self.__class__, self).__start__()
guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
- self.keypair_priv_filepath = 'tmp/' + guid
- self.keypair_pub_filepath = self.keypair_priv_filepath + '.pub'
- self.keypair_name = guid + '-kp'
self.vm_inst_name = guid + '-inst'
self.port_1_name = guid + 'port-1'
- self.port_2_name = guid + 'port-2'
- self.floating_ip_name = guid + 'fip1'
# Initialize for tearDown()
self.image_creator = None
@@ -255,11 +252,11 @@ class SimpleHealthCheck(OSIntegrationTestCase):
# Create Image
# Set the default image settings, then set any custom parameters sent from the app
- self.os_image_settings = openstack_tests.cirros_image_settings(
+ os_image_settings = openstack_tests.cirros_image_settings(
name=guid + '-image', image_metadata=self.image_metadata)
try:
- self.image_creator = OpenStackImage(self.os_creds, self.os_image_settings)
+ self.image_creator = OpenStackImage(self.os_creds, os_image_settings)
self.image_creator.create()
# Create Network
@@ -285,12 +282,6 @@ class SimpleHealthCheck(OSIntegrationTestCase):
except Exception as e:
logger.error('Unexpected exception cleaning VM instance with message - ' + str(e))
- if os.path.isfile(self.keypair_pub_filepath):
- os.remove(self.keypair_pub_filepath)
-
- if os.path.isfile(self.keypair_priv_filepath):
- os.remove(self.keypair_priv_filepath)
-
if self.network_creator:
try:
self.network_creator.clean()
@@ -303,7 +294,7 @@ class SimpleHealthCheck(OSIntegrationTestCase):
except Exception as e:
logger.error('Unexpected exception cleaning flavor with message - ' + str(e))
- if self.image_creator:
+ if self.image_creator and not self.image_creator.image_settings.exists:
try:
self.image_creator.clean()
except Exception as e:
@@ -364,7 +355,7 @@ class CreateInstanceSimpleTests(OSIntegrationTestCase):
guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
self.vm_inst_name = guid + '-inst'
self.nova = nova_utils.nova_client(self.os_creds)
- self.os_image_settings = openstack_tests.cirros_image_settings(
+ os_image_settings = openstack_tests.cirros_image_settings(
name=guid + '-image', image_metadata=self.image_metadata)
net_config = openstack_tests.get_priv_net_config(
@@ -380,7 +371,7 @@ class CreateInstanceSimpleTests(OSIntegrationTestCase):
try:
# Create Image
- self.image_creator = OpenStackImage(self.os_creds, self.os_image_settings)
+ self.image_creator = OpenStackImage(self.os_creds, os_image_settings)
self.image_creator.create()
# Create Flavor
@@ -422,7 +413,7 @@ class CreateInstanceSimpleTests(OSIntegrationTestCase):
except Exception as e:
logger.error('Unexpected exception cleaning network with message - ' + str(e))
- if self.image_creator:
+ if self.image_creator and not self.image_creator.image_settings.exists:
try:
self.image_creator.clean()
except Exception as e:
@@ -485,11 +476,11 @@ class CreateInstanceSingleNetworkTests(OSIntegrationTestCase):
self.pub_net_config = openstack_tests.get_pub_net_config(
net_name=guid + '-pub-net', subnet_name=guid + '-pub-subnet',
router_name=guid + '-pub-router', external_net=self.ext_net_name)
- self.os_image_settings = openstack_tests.cirros_image_settings(
+ os_image_settings = openstack_tests.cirros_image_settings(
name=guid + '-image', image_metadata=self.image_metadata)
try:
# Create Image
- self.image_creator = OpenStackImage(self.os_creds, self.os_image_settings)
+ self.image_creator = OpenStackImage(self.os_creds, os_image_settings)
self.image_creator.create()
# Create Network
@@ -555,7 +546,7 @@ class CreateInstanceSingleNetworkTests(OSIntegrationTestCase):
except Exception as e:
logger.error('Unexpected exception cleaning network with message - ' + str(e))
- if self.image_creator:
+ if self.image_creator and not self.image_creator.image_settings.exists:
try:
self.image_creator.clean()
except Exception as e:
@@ -669,12 +660,12 @@ class CreateInstancePortManipulationTests(OSIntegrationTestCase):
self.net_config = openstack_tests.get_priv_net_config(
net_name=guid + '-pub-net', subnet_name=guid + '-pub-subnet',
router_name=guid + '-pub-router', external_net=self.ext_net_name)
- self.os_image_settings = openstack_tests.cirros_image_settings(
+ os_image_settings = openstack_tests.cirros_image_settings(
name=guid + '-image', image_metadata=self.image_metadata)
try:
# Create Image
- self.image_creator = OpenStackImage(self.os_creds, self.os_image_settings)
+ self.image_creator = OpenStackImage(self.os_creds, os_image_settings)
self.image_creator.create()
# Create Network
@@ -712,7 +703,7 @@ class CreateInstancePortManipulationTests(OSIntegrationTestCase):
except Exception as e:
logger.error('Unexpected exception cleaning network with message - ' + str(e))
- if self.image_creator:
+ if self.image_creator and not self.image_creator.image_settings.exists:
try:
self.image_creator.clean()
except Exception as e:
@@ -903,7 +894,7 @@ class CreateInstanceOnComputeHost(OSIntegrationTestCase):
self.priv_net_config = openstack_tests.get_priv_net_config(
net_name=guid + '-priv-net', subnet_name=guid + '-priv-subnet')
- self.os_image_settings = openstack_tests.cirros_image_settings(
+ os_image_settings = openstack_tests.cirros_image_settings(
name=guid + '-image', image_metadata=self.image_metadata)
try:
@@ -918,7 +909,7 @@ class CreateInstanceOnComputeHost(OSIntegrationTestCase):
self.flavor_creator.create()
# Create Image
- self.image_creator = OpenStackImage(self.os_creds, self.os_image_settings)
+ self.image_creator = OpenStackImage(self.os_creds, os_image_settings)
self.image_creator.create()
except Exception as e:
@@ -947,7 +938,7 @@ class CreateInstanceOnComputeHost(OSIntegrationTestCase):
except Exception as e:
logger.error('Unexpected exception cleaning network with message - ' + str(e))
- if self.image_creator:
+ if self.image_creator and not self.image_creator.image_settings.exists:
try:
self.image_creator.clean()
except Exception as e:
@@ -1028,12 +1019,11 @@ class CreateInstancePubPrivNetTests(OSIntegrationTestCase):
router_name=self.guid + '-pub-router', external_net=self.ext_net_name)
image_name = self.__class__.__name__ + '-' + str(uuid.uuid4())
- self.os_image_settings = openstack_tests.centos_image_settings(name=image_name,
- image_metadata=self.image_metadata)
+ os_image_settings = openstack_tests.centos_image_settings(name=image_name, image_metadata=self.image_metadata)
try:
# Create Image
- self.image_creator = OpenStackImage(self.os_creds, self.os_image_settings)
+ self.image_creator = OpenStackImage(self.os_creds, os_image_settings)
self.image_creator.create()
# First network is public
@@ -1107,7 +1097,7 @@ class CreateInstancePubPrivNetTests(OSIntegrationTestCase):
except Exception as e:
logger.error('Unexpected exception cleaning network with message - ' + str(e))
- if self.image_creator:
+ if self.image_creator and not self.image_creator.image_settings.exists:
try:
self.image_creator.clean()
except Exception as e:
@@ -1177,7 +1167,7 @@ class InstanceSecurityGroupTests(OSIntegrationTestCase):
self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
self.vm_inst_name = self.guid + '-inst'
self.nova = nova_utils.nova_client(self.os_creds)
- self.os_image_settings = openstack_tests.cirros_image_settings(
+ os_image_settings = openstack_tests.cirros_image_settings(
name=self.guid + '-image', image_metadata=self.image_metadata)
self.vm_inst_name = self.guid + '-inst'
@@ -1199,7 +1189,7 @@ class InstanceSecurityGroupTests(OSIntegrationTestCase):
try:
# Create Image
- self.image_creator = OpenStackImage(self.os_creds, self.os_image_settings)
+ self.image_creator = OpenStackImage(self.os_creds, os_image_settings)
self.image_creator.create()
# Create Network
@@ -1247,7 +1237,7 @@ class InstanceSecurityGroupTests(OSIntegrationTestCase):
except Exception as e:
logger.error('Unexpected exception cleaning network with message - ' + str(e))
- if self.image_creator:
+ if self.image_creator and not self.image_creator.image_settings.exists:
try:
self.image_creator.clean()
except Exception as e:
@@ -1463,11 +1453,22 @@ class CreateInstanceFromThreePartImage(OSIntegrationTestCase):
self.inst_creator = None
try:
+ if self.image_metadata and 'disk_file' in self.image_metadata:
+ metadata = self.image_metadata
+ elif self.image_metadata and 'cirros' in self.image_metadata \
+ and 'disk_file' in self.image_metadata['cirros']:
+ metadata = self.image_metadata['cirros']
+ else:
+ metadata = {'disk_url': openstack_tests.CIRROS_DEFAULT_IMAGE_URL,
+ 'kernel_url': openstack_tests.CIRROS_DEFAULT_KERNEL_IMAGE_URL,
+ 'ramdisk_url': openstack_tests.CIRROS_DEFAULT_RAMDISK_IMAGE_URL}
+
image_settings = openstack_tests.cirros_image_settings(
name=self.image_name,
- image_metadata={'disk_url': 'http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img',
- 'kernel_url': 'http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-kernel',
- 'ramdisk_url': 'http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-initramfs'})
+ image_metadata=metadata)
+
+ if not image_settings.ramdisk_image_settings or not image_settings.kernel_image_settings:
+ logger.warn('3 Part image will not be tested. Image metadata has overridden this functionality')
self.image_creator = OpenStackImage(self.os_creds, image_settings)
self.image_creator.create()
@@ -1510,7 +1511,7 @@ class CreateInstanceFromThreePartImage(OSIntegrationTestCase):
except Exception as e:
logger.error('Unexpected exception cleaning network with message - ' + str(e))
- if self.image_creator:
+ if self.image_creator and not self.image_creator.image_settings.exists:
try:
self.image_creator.clean()
except Exception as e:
@@ -1532,3 +1533,386 @@ class CreateInstanceFromThreePartImage(OSIntegrationTestCase):
vm_inst = self.inst_creator.create()
self.assertIsNotNone(vm_inst)
self.assertTrue(self.inst_creator.vm_active(block=True))
+
+
+class CreateInstanceMockOfflineTests(OSComponentTestCase):
+ """
+ Tests the custom image_metadata that can be set by clients for handling images differently than the
+ default behavior of the existing tests primarily for offline testing
+ """
+
+ def setUp(self):
+ """
+ Instantiates the CreateImage object that is responsible for downloading and creating an OS image file
+ within OpenStack
+ """
+ self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
+
+ self.tmpDir = 'tmp/' + str(self.guid)
+ if not os.path.exists(self.tmpDir):
+ os.makedirs(self.tmpDir)
+
+ self.image_name = self.guid + '-image'
+ self.vm_inst_name = self.guid + '-inst'
+ self.port_1_name = self.guid + 'port-1'
+
+ # Initialize for tearDown()
+ self.image_creator = None
+ self.network_creator = None
+ self.flavor_creator = None
+ self.inst_creator = None
+
+ self.priv_net_config = openstack_tests.get_priv_net_config(
+ net_name=self.guid + '-priv-net', subnet_name=self.guid + '-priv-subnet')
+ self.port_settings = PortSettings(
+ name=self.port_1_name, network_name=self.priv_net_config.network_settings.name)
+
+ try:
+ # Download image file
+ self.image_file = file_utils.download(openstack_tests.CIRROS_DEFAULT_IMAGE_URL, self.tmpDir)
+
+ # Create Network
+ self.network_creator = OpenStackNetwork(self.os_creds, self.priv_net_config.network_settings)
+ self.network_creator.create()
+
+ # Create Flavor
+ self.flavor_creator = OpenStackFlavor(
+ self.os_creds,
+ FlavorSettings(
+ name=self.guid + '-flavor-name', ram=128, disk=10, vcpus=1))
+ self.flavor_creator.create()
+ except Exception as e:
+ self.tearDown()
+ raise e
+
+ def tearDown(self):
+ """
+ Cleans the created object
+ """
+ if self.inst_creator:
+ try:
+ self.inst_creator.clean()
+ except Exception as e:
+ logger.error('Unexpected exception cleaning VM instance with message - ' + str(e))
+
+ if self.network_creator:
+ try:
+ self.network_creator.clean()
+ except Exception as e:
+ logger.error('Unexpected exception cleaning network with message - ' + str(e))
+
+ if self.flavor_creator:
+ try:
+ self.flavor_creator.clean()
+ except Exception as e:
+ logger.error('Unexpected exception cleaning flavor with message - ' + str(e))
+
+ if self.image_creator:
+ try:
+ self.image_creator.clean()
+ except Exception as e:
+ logger.error('Unexpected exception cleaning image with message - ' + str(e))
+
+ if os.path.exists(self.tmpDir) and os.path.isdir(self.tmpDir):
+ shutil.rmtree(self.tmpDir)
+
+ def test_inst_from_file_image_simple_flat(self):
+ """
+ Creates a VM instance from a locally sourced file image using simply the 'disk_file' attribute vs.
+ using the 'config' option which completely overrides all image settings
+ :return:
+ """
+ metadata = {'disk_file': self.image_file.name}
+
+ os_image_settings = openstack_tests.cirros_image_settings(name=self.image_name, image_metadata=metadata)
+ self.assertEqual(self.image_file.name, os_image_settings.image_file)
+ self.assertEqual(openstack_tests.CIRROS_USER, os_image_settings.image_user)
+ self.assertIsNone(os_image_settings.url)
+ self.assertFalse(os_image_settings.exists)
+ self.assertEqual(openstack_tests.DEFAULT_IMAGE_FORMAT, os_image_settings.format)
+
+ self.assertIsNone(os_image_settings.kernel_image_settings)
+ self.assertIsNone(os_image_settings.ramdisk_image_settings)
+
+ self.image_creator = OpenStackImage(self.os_creds, os_image_settings)
+ self.image_creator.create()
+
+ instance_settings = VmInstanceSettings(
+ name=self.vm_inst_name, flavor=self.flavor_creator.flavor_settings.name, port_settings=[self.port_settings])
+ self.inst_creator = OpenStackVmInstance(self.os_creds, instance_settings,
+ self.image_creator.image_settings)
+ self.inst_creator.create()
+
+ self.assertTrue(self.inst_creator.vm_active(block=True))
+
+ def test_inst_from_file_image_simple_nested(self):
+ """
+ Creates a VM instance from a locally sourced file image using simply the 'disk_file' attribute under 'cirros'
+ vs. using the 'config' option which completely overrides all image settings
+ :return:
+ """
+ metadata = {'cirros': {'disk_file': self.image_file.name}}
+
+ os_image_settings = openstack_tests.cirros_image_settings(name=self.image_name, image_metadata=metadata)
+ self.assertEqual(self.image_file.name, os_image_settings.image_file)
+ self.assertEqual(openstack_tests.CIRROS_USER, os_image_settings.image_user)
+ self.assertIsNone(os_image_settings.url)
+ self.assertFalse(os_image_settings.exists)
+ self.assertEqual(openstack_tests.DEFAULT_IMAGE_FORMAT, os_image_settings.format)
+
+ self.assertIsNone(os_image_settings.kernel_image_settings)
+ self.assertIsNone(os_image_settings.ramdisk_image_settings)
+
+ self.image_creator = OpenStackImage(self.os_creds, os_image_settings)
+ self.image_creator.create()
+
+ instance_settings = VmInstanceSettings(
+ name=self.vm_inst_name, flavor=self.flavor_creator.flavor_settings.name, port_settings=[self.port_settings])
+ self.inst_creator = OpenStackVmInstance(self.os_creds, instance_settings,
+ self.image_creator.image_settings)
+ self.inst_creator.create()
+
+ self.assertTrue(self.inst_creator.vm_active(block=True))
+
+ def test_inst_from_existing(self):
+ """
+ Creates a VM instance from a image creator that has been configured to use an existing image
+ :return:
+ """
+ os_image_settings = openstack_tests.cirros_image_settings(name=self.image_name)
+ self.image_creator = OpenStackImage(self.os_creds, os_image_settings)
+ self.image_creator.create()
+
+ test_image_creator = OpenStackImage(
+ self.os_creds, ImageSettings(name=self.image_creator.image_settings.name,
+ image_user=self.image_creator.image_settings.image_user, exists=True))
+ test_image_creator.create()
+ self.assertEqual(self.image_creator.get_image().id, test_image_creator.get_image().id)
+
+ instance_settings = VmInstanceSettings(
+ name=self.vm_inst_name, flavor=self.flavor_creator.flavor_settings.name, port_settings=[self.port_settings])
+ self.inst_creator = OpenStackVmInstance(self.os_creds, instance_settings,
+ test_image_creator.image_settings)
+ self.inst_creator.create()
+
+ self.assertTrue(self.inst_creator.vm_active(block=True))
+
+ def test_inst_from_file_image_complex(self):
+ """
+ Creates a VM instance from a locally sourced file image by overriding the default settings by using a dict()
+ that can be read in by ImageSettings
+ :return:
+ """
+
+ os_image_settings = openstack_tests.cirros_image_settings(name=self.image_name)
+ self.image_creator = OpenStackImage(self.os_creds, os_image_settings)
+ self.image_creator.create()
+
+ metadata = {'cirros': {'config':
+ {'name': os_image_settings.name, 'image_user': os_image_settings.image_user,
+ 'exists': True}}}
+ test_image_settings = openstack_tests.cirros_image_settings(image_metadata=metadata)
+ test_image = OpenStackImage(self.os_creds, test_image_settings)
+ test_image.create()
+
+ instance_settings = VmInstanceSettings(
+ name=self.vm_inst_name, flavor=self.flavor_creator.flavor_settings.name, port_settings=[self.port_settings])
+ self.inst_creator = OpenStackVmInstance(self.os_creds, instance_settings,
+ test_image_settings)
+ self.inst_creator.create()
+
+ self.assertTrue(self.inst_creator.vm_active(block=True))
+
+ def test_inst_from_file_3part_image_complex(self):
+ """
+ Creates a VM instance from a locally sourced file image by overriding the default settings by using a dict()
+ that can be read in by ImageSettings
+ :return:
+ """
+
+ kernel_file = file_utils.download(openstack_tests.CIRROS_DEFAULT_KERNEL_IMAGE_URL, self.tmpDir)
+ ramdisk_file = file_utils.download(openstack_tests.CIRROS_DEFAULT_RAMDISK_IMAGE_URL, self.tmpDir)
+
+ metadata = {'cirros':
+ {'config':
+ {'name': self.image_name,
+ 'image_user': openstack_tests.CIRROS_USER,
+ 'image_file': self.image_file.name,
+ 'format': openstack_tests.DEFAULT_IMAGE_FORMAT,
+ 'kernel_image_settings':
+ {'name': self.image_name + '-kernel',
+ 'image_user': openstack_tests.CIRROS_USER,
+ 'image_file': kernel_file.name,
+ 'format': openstack_tests.DEFAULT_IMAGE_FORMAT},
+ 'ramdisk_image_settings':
+ {'name': self.image_name + '-ramdisk',
+ 'image_user': openstack_tests.CIRROS_USER,
+ 'image_file': ramdisk_file.name,
+ 'format': openstack_tests.DEFAULT_IMAGE_FORMAT}}}}
+
+ os_image_settings = openstack_tests.cirros_image_settings(name=self.image_name, image_metadata=metadata)
+ self.assertEqual(self.image_name, os_image_settings.name)
+ self.assertEqual(self.image_file.name, os_image_settings.image_file)
+ self.assertEqual(openstack_tests.CIRROS_USER, os_image_settings.image_user)
+ self.assertIsNone(os_image_settings.url)
+ self.assertFalse(os_image_settings.exists)
+ self.assertEqual(openstack_tests.DEFAULT_IMAGE_FORMAT, os_image_settings.format)
+
+ self.assertIsNotNone(os_image_settings.kernel_image_settings)
+ self.assertEqual(self.image_name + '-kernel', os_image_settings.kernel_image_settings.name)
+ self.assertEqual(kernel_file.name, os_image_settings.kernel_image_settings.image_file)
+ self.assertEqual(openstack_tests.CIRROS_USER, os_image_settings.kernel_image_settings.image_user)
+ self.assertIsNone(os_image_settings.kernel_image_settings.url)
+ self.assertFalse(os_image_settings.kernel_image_settings.exists)
+ self.assertEqual(openstack_tests.DEFAULT_IMAGE_FORMAT, os_image_settings.kernel_image_settings.format)
+
+ self.assertIsNotNone(os_image_settings.ramdisk_image_settings)
+ self.assertEqual(self.image_name + '-ramdisk', os_image_settings.ramdisk_image_settings.name)
+ self.assertEqual(ramdisk_file.name, os_image_settings.ramdisk_image_settings.image_file)
+ self.assertEqual(openstack_tests.CIRROS_USER, os_image_settings.ramdisk_image_settings.image_user)
+ self.assertIsNone(os_image_settings.ramdisk_image_settings.url)
+ self.assertFalse(os_image_settings.ramdisk_image_settings.exists)
+ self.assertEqual(openstack_tests.DEFAULT_IMAGE_FORMAT, os_image_settings.ramdisk_image_settings.format)
+
+ self.image_creator = OpenStackImage(self.os_creds, os_image_settings)
+ self.image_creator.create()
+
+ instance_settings = VmInstanceSettings(
+ name=self.vm_inst_name, flavor=self.flavor_creator.flavor_settings.name, port_settings=[self.port_settings])
+ self.inst_creator = OpenStackVmInstance(self.os_creds, instance_settings, self.image_creator.image_settings)
+ self.inst_creator.create()
+
+ self.assertTrue(self.inst_creator.vm_active(block=True))
+
+ def test_inst_from_file_3part_image_simple_flat(self):
+ """
+ Creates a VM instance from a 3-part image locally sourced from file images using simply the 'disk_file',
+ 'kernel_file', and 'ramdisk_file' attributes vs. using the 'config' option which completely overrides all
+ image settings
+ :return:
+ """
+ kernel_file = file_utils.download(openstack_tests.CIRROS_DEFAULT_KERNEL_IMAGE_URL, self.tmpDir)
+ ramdisk_file = file_utils.download(openstack_tests.CIRROS_DEFAULT_RAMDISK_IMAGE_URL, self.tmpDir)
+
+ metadata = {'disk_file': self.image_file.name, 'kernel_file': kernel_file.name,
+ 'ramdisk_file': ramdisk_file.name}
+
+ os_image_settings = openstack_tests.cirros_image_settings(name=self.image_name, image_metadata=metadata)
+
+ self.assertEqual(self.image_name, os_image_settings.name)
+ self.assertEqual(self.image_file.name, os_image_settings.image_file)
+ self.assertEqual(openstack_tests.CIRROS_USER, os_image_settings.image_user)
+ self.assertIsNone(os_image_settings.url)
+ self.assertFalse(os_image_settings.exists)
+ self.assertEqual(openstack_tests.DEFAULT_IMAGE_FORMAT, os_image_settings.format)
+
+ self.assertIsNotNone(os_image_settings.kernel_image_settings)
+ self.assertEqual(self.image_name + '-kernel', os_image_settings.kernel_image_settings.name)
+ self.assertEqual(kernel_file.name, os_image_settings.kernel_image_settings.image_file)
+ self.assertEqual(openstack_tests.CIRROS_USER, os_image_settings.kernel_image_settings.image_user)
+ self.assertIsNone(os_image_settings.kernel_image_settings.url)
+ self.assertFalse(os_image_settings.kernel_image_settings.exists)
+ self.assertEqual(openstack_tests.DEFAULT_IMAGE_FORMAT, os_image_settings.kernel_image_settings.format)
+
+ self.assertIsNotNone(os_image_settings.ramdisk_image_settings)
+ self.assertEqual(self.image_name + '-ramdisk', os_image_settings.ramdisk_image_settings.name)
+ self.assertEqual(ramdisk_file.name, os_image_settings.ramdisk_image_settings.image_file)
+ self.assertEqual(openstack_tests.CIRROS_USER, os_image_settings.ramdisk_image_settings.image_user)
+ self.assertIsNone(os_image_settings.ramdisk_image_settings.url)
+ self.assertFalse(os_image_settings.ramdisk_image_settings.exists)
+ self.assertEqual(openstack_tests.DEFAULT_IMAGE_FORMAT, os_image_settings.ramdisk_image_settings.format)
+
+ self.image_creator = OpenStackImage(self.os_creds, os_image_settings)
+ self.image_creator.create()
+
+ self.assertIsNotNone(self.image_creator.get_kernel_image())
+ self.assertIsNotNone(self.image_creator.get_ramdisk_image())
+
+ instance_settings = VmInstanceSettings(
+ name=self.vm_inst_name, flavor=self.flavor_creator.flavor_settings.name, port_settings=[self.port_settings])
+ self.inst_creator = OpenStackVmInstance(self.os_creds, instance_settings,
+ self.image_creator.image_settings)
+ self.inst_creator.create()
+
+ self.assertTrue(self.inst_creator.vm_active(block=True))
+
+ def test_inst_from_file_3part_image_simple_nested(self):
+ """
+ Creates a VM instance from a 3-part image locally sourced from file images using simply the 'disk_file',
+ 'kernel_file', and 'ramdisk_file' attributes under 'cirros' vs. using the 'config' option which completely
+ overrides all image settings
+ :return:
+ """
+ kernel_file = file_utils.download(openstack_tests.CIRROS_DEFAULT_KERNEL_IMAGE_URL, self.tmpDir)
+ ramdisk_file = file_utils.download(openstack_tests.CIRROS_DEFAULT_RAMDISK_IMAGE_URL, self.tmpDir)
+
+ metadata = {'cirros': {'disk_file': self.image_file.name, 'kernel_file': kernel_file.name,
+ 'ramdisk_file': ramdisk_file.name}}
+
+ os_image_settings = openstack_tests.cirros_image_settings(name=self.image_name, image_metadata=metadata)
+
+ self.assertEqual(self.image_name, os_image_settings.name)
+ self.assertEqual(self.image_file.name, os_image_settings.image_file)
+ self.assertEqual(openstack_tests.CIRROS_USER, os_image_settings.image_user)
+ self.assertIsNone(os_image_settings.url)
+ self.assertFalse(os_image_settings.exists)
+ self.assertEqual(openstack_tests.DEFAULT_IMAGE_FORMAT, os_image_settings.format)
+
+ self.assertIsNotNone(os_image_settings.kernel_image_settings)
+ self.assertEqual(self.image_name + '-kernel', os_image_settings.kernel_image_settings.name)
+ self.assertEqual(kernel_file.name, os_image_settings.kernel_image_settings.image_file)
+ self.assertEqual(openstack_tests.CIRROS_USER, os_image_settings.kernel_image_settings.image_user)
+ self.assertIsNone(os_image_settings.kernel_image_settings.url)
+ self.assertFalse(os_image_settings.kernel_image_settings.exists)
+ self.assertEqual(openstack_tests.DEFAULT_IMAGE_FORMAT, os_image_settings.kernel_image_settings.format)
+
+ self.assertIsNotNone(os_image_settings.ramdisk_image_settings)
+ self.assertEqual(self.image_name + '-ramdisk', os_image_settings.ramdisk_image_settings.name)
+ self.assertEqual(ramdisk_file.name, os_image_settings.ramdisk_image_settings.image_file)
+ self.assertEqual(openstack_tests.CIRROS_USER, os_image_settings.ramdisk_image_settings.image_user)
+ self.assertIsNone(os_image_settings.ramdisk_image_settings.url)
+ self.assertFalse(os_image_settings.ramdisk_image_settings.exists)
+ self.assertEqual(openstack_tests.DEFAULT_IMAGE_FORMAT, os_image_settings.ramdisk_image_settings.format)
+
+ self.image_creator = OpenStackImage(self.os_creds, os_image_settings)
+ self.image_creator.create()
+
+ self.assertIsNotNone(self.image_creator.get_kernel_image())
+ self.assertIsNotNone(self.image_creator.get_ramdisk_image())
+
+ instance_settings = VmInstanceSettings(
+ name=self.vm_inst_name, flavor=self.flavor_creator.flavor_settings.name, port_settings=[self.port_settings])
+ self.inst_creator = OpenStackVmInstance(self.os_creds, instance_settings,
+ self.image_creator.image_settings)
+ self.inst_creator.create()
+
+ self.assertTrue(self.inst_creator.vm_active(block=True))
+
+ def test_inst_from_file_3part_image_existing(self):
+ """
+ Creates a VM instance from a 3-part image that is existing
+ :return:
+ """
+ kernel_file = file_utils.download(openstack_tests.CIRROS_DEFAULT_KERNEL_IMAGE_URL, self.tmpDir)
+ ramdisk_file = file_utils.download(openstack_tests.CIRROS_DEFAULT_RAMDISK_IMAGE_URL, self.tmpDir)
+
+ metadata = {'cirros': {'disk_file': self.image_file.name, 'kernel_file': kernel_file.name,
+ 'ramdisk_file': ramdisk_file.name}}
+
+ os_image_settings = openstack_tests.cirros_image_settings(name=self.image_name, image_metadata=metadata)
+ self.image_creator = OpenStackImage(self.os_creds, os_image_settings)
+ self.image_creator.create()
+
+ test_image_creator = OpenStackImage(
+ self.os_creds, ImageSettings(name=self.image_creator.image_settings.name,
+ image_user=self.image_creator.image_settings.image_user, exists=True))
+ test_image_creator.create()
+ self.assertEqual(self.image_creator.get_image().id, test_image_creator.get_image().id)
+
+ instance_settings = VmInstanceSettings(
+ name=self.vm_inst_name, flavor=self.flavor_creator.flavor_settings.name, port_settings=[self.port_settings])
+ self.inst_creator = OpenStackVmInstance(self.os_creds, instance_settings,
+ test_image_creator.image_settings)
+ self.inst_creator.create()
+
+ self.assertTrue(self.inst_creator.vm_active(block=True))
diff --git a/snaps/openstack/tests/openstack_tests.py b/snaps/openstack/tests/openstack_tests.py
index c11d1aa..836c293 100644
--- a/snaps/openstack/tests/openstack_tests.py
+++ b/snaps/openstack/tests/openstack_tests.py
@@ -27,6 +27,20 @@ __author__ = 'spisarski'
logger = logging.getLogger('openstack_tests')
+CIRROS_DEFAULT_IMAGE_URL = 'http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img'
+CIRROS_DEFAULT_KERNEL_IMAGE_URL = 'http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-kernel'
+CIRROS_DEFAULT_RAMDISK_IMAGE_URL = 'http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-initramfs'
+CIRROS_USER = 'cirros'
+
+CENTOS_DEFAULT_IMAGE_URL = 'http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2'
+CENTOS_USER = 'centos'
+
+UBUNTU_DEFAULT_IMAGE_URL =\
+ 'http://uec-images.ubuntu.com/releases/trusty/14.04/ubuntu-14.04-server-cloudimg-amd64-disk1.img'
+UBUNTU_USER = 'ubuntu'
+
+DEFAULT_IMAGE_FORMAT = 'qcow2'
+
def get_credentials(os_env_file=None, proxy_settings_str=None, ssh_proxy_cmd=None, dev_os_env_file=None):
"""
@@ -97,35 +111,47 @@ def get_credentials(os_env_file=None, proxy_settings_str=None, ssh_proxy_cmd=Non
return os_creds
-def cirros_image_settings(name, url=None, image_metadata=None, kernel_settings=None, ramdisk_settings=None):
+def create_image_settings(image_name, image_user, image_format, metadata, disk_url=None, default_url=None,
+ kernel_settings=None, ramdisk_settings=None, public=False):
"""
- Returns the image settings for a Cirros QCOW2 image
- :param name: the name of the image
- :param url: the image's URL
- :param image_metadata: dict() values to override URLs for disk, kernel, and ramdisk
+ Returns the image settings object
+ :param image_name: the name of the image
+ :param image_user: the image's sudo user
+ :param image_format: the image's format string
+ :param metadata: custom metadata for overriding default behavior for test image settings
+ :param disk_url: the disk image's URL
+ :param default_url: the default URL for the disk image
:param kernel_settings: override to the kernel settings from the image_metadata
:param ramdisk_settings: override to the ramdisk settings from the image_metadata
+ :param public: True denotes image can be used by other projects where False indicates the converse (default: False)
:return:
"""
- if image_metadata and 'cirros' in image_metadata:
- metadata = image_metadata['cirros']
- else:
- metadata = image_metadata
- if metadata and 'disk_url' in metadata:
- url = metadata['disk_url']
- if not url:
- url = 'http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img'
+ logger.debug('Image metadata - ' + str(metadata))
- if metadata and 'kernel_url' in metadata and kernel_settings is None:
- kernel_image_settings = ImageSettings(name=name + '-kernel', image_user='cirros', img_format='qcow2',
- url=metadata['kernel_url'])
+ if metadata and 'config' in metadata:
+ return ImageSettings(config=metadata['config'])
+
+ disk_file = None
+ if metadata:
+ disk_url = metadata.get('disk_url')
+ disk_file = metadata.get('disk_file')
+ elif not disk_url:
+ disk_url = default_url
+ else:
+ disk_url = disk_url
+
+ if metadata and ('kernel_file' in metadata or 'kernel_url' in metadata) and kernel_settings is None:
+ kernel_image_settings = ImageSettings(
+ name=image_name + '-kernel', image_user=image_user, img_format=image_format,
+ image_file=metadata.get('kernel_file'), url=metadata.get('kernel_url'), public=public)
else:
kernel_image_settings = kernel_settings
- if metadata and 'ramdisk_url' in metadata and ramdisk_settings is None:
- ramdisk_image_settings = ImageSettings(name=name + '-ramdisk', image_user='cirros', img_format='qcow2',
- url=metadata['ramdisk_url'])
+ if metadata and ('ramdisk_file' in metadata or 'ramdisk_url' in metadata) and ramdisk_settings is None:
+ ramdisk_image_settings = ImageSettings(
+ name=image_name + '-ramdisk', image_user=image_user, img_format=image_format,
+ image_file=metadata.get('ramdisk_file'), url=metadata.get('ramdisk_url'), public=public)
else:
ramdisk_image_settings = ramdisk_settings
@@ -133,22 +159,48 @@ def cirros_image_settings(name, url=None, image_metadata=None, kernel_settings=N
if metadata and 'extra_properties' in metadata:
extra_properties = metadata['extra_properties']
- return ImageSettings(name=name, image_user='cirros', img_format='qcow2', url=url,
- extra_properties=extra_properties,
- kernel_image_settings=kernel_image_settings,
- ramdisk_image_settings=ramdisk_image_settings)
+ return ImageSettings(name=image_name, image_user=image_user, img_format=image_format, image_file=disk_file,
+ url=disk_url, extra_properties=extra_properties, kernel_image_settings=kernel_image_settings,
+ ramdisk_image_settings=ramdisk_image_settings, public=public)
-def file_image_test_settings(name, file_path, image_user='cirros'):
- return ImageSettings(name=name, image_user=image_user, img_format='qcow2', image_file=file_path)
+def cirros_image_settings(name=None, url=None, image_metadata=None, kernel_settings=None, ramdisk_settings=None,
+ public=False):
+ """
+ Returns the image settings for a Cirros QCOW2 image
+ :param name: the name of the image
+ :param url: the image's URL
+ :param image_metadata: dict() values to override URLs for disk, kernel, and ramdisk
+ :param kernel_settings: override to the kernel settings from the image_metadata
+ :param ramdisk_settings: override to the ramdisk settings from the image_metadata
+ :param public: True denotes image can be used by other projects where False indicates the converse
+ :return:
+ """
+ if image_metadata and 'cirros' in image_metadata:
+ metadata = image_metadata['cirros']
+ else:
+ metadata = image_metadata
+
+ return create_image_settings(
+ image_name=name, image_user=CIRROS_USER, image_format=DEFAULT_IMAGE_FORMAT, metadata=metadata, disk_url=url,
+ default_url=CIRROS_DEFAULT_IMAGE_URL,
+ kernel_settings=kernel_settings, ramdisk_settings=ramdisk_settings, public=public)
+
+def file_image_test_settings(name, file_path, image_user=CIRROS_USER):
+ return ImageSettings(name=name, image_user=image_user, img_format=DEFAULT_IMAGE_FORMAT, image_file=file_path)
-def centos_image_settings(name, url=None, image_metadata=None):
+
+def centos_image_settings(name, url=None, image_metadata=None, kernel_settings=None, ramdisk_settings=None,
+ public=False):
"""
Returns the image settings for a Centos QCOW2 image
:param name: the name of the image
:param url: the image's URL
:param image_metadata: dict() values to override URLs for disk, kernel, and ramdisk
+ :param kernel_settings: override to the kernel settings from the image_metadata
+ :param ramdisk_settings: override to the ramdisk settings from the image_metadata
+ :param public: True denotes image can be used by other projects where False indicates the converse
:return:
"""
if image_metadata and 'centos' in image_metadata:
@@ -156,38 +208,22 @@ def centos_image_settings(name, url=None, image_metadata=None):
else:
metadata = image_metadata
- if metadata and 'disk_url' in metadata:
- url = metadata['disk_url']
- if not url:
- url = 'http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2'
+ return create_image_settings(
+ image_name=name, image_user=CENTOS_USER, image_format=DEFAULT_IMAGE_FORMAT, metadata=metadata, disk_url=url,
+ default_url=CENTOS_DEFAULT_IMAGE_URL,
+ kernel_settings=kernel_settings, ramdisk_settings=ramdisk_settings, public=public)
- kernel_image_settings = None
- if metadata and 'kernel_url' in metadata:
- kernel_image_settings = ImageSettings(name=name + '-kernel', image_user='centos', img_format='qcow2',
- url=metadata['kernel_url'])
- ramdisk_image_settings = None
- if metadata and 'ramdisk_url' in metadata:
- ramdisk_image_settings = ImageSettings(name=name + '-ramdisk', image_user='centos', img_format='qcow2',
- url=metadata['ramdisk_url'])
- extra_properties = None
- if metadata and 'extra_properties' in metadata:
- extra_properties = metadata['extra_properties']
-
- return ImageSettings(
- name=name, image_user='centos', img_format='qcow2',
- extra_properties=extra_properties, url=url,
- nic_config_pb_loc='./provisioning/ansible/centos-network-setup/playbooks/configure_host.yml',
- kernel_image_settings=kernel_image_settings,
- ramdisk_image_settings=ramdisk_image_settings)
-
-
-def ubuntu_image_settings(name, url=None, image_metadata=None):
+def ubuntu_image_settings(name, url=None, image_metadata=None, kernel_settings=None, ramdisk_settings=None,
+ public=False):
"""
Returns the image settings for a Ubuntu QCOW2 image
:param name: the name of the image
:param url: the image's URL
:param image_metadata: dict() values to override URLs for disk, kernel, and ramdisk
+ :param kernel_settings: override to the kernel settings from the image_metadata
+ :param ramdisk_settings: override to the ramdisk settings from the image_metadata
+ :param public: True denotes image can be used by other projects where False indicates the converse
:return:
"""
if image_metadata and 'ubuntu' in image_metadata:
@@ -195,28 +231,10 @@ def ubuntu_image_settings(name, url=None, image_metadata=None):
else:
metadata = image_metadata
- if metadata and 'disk_url' in metadata:
- url = metadata['disk_url']
- if not url:
- url = 'http://uec-images.ubuntu.com/releases/trusty/14.04/ubuntu-14.04-server-cloudimg-amd64-disk1.img'
-
- kernel_image_settings = None
- if metadata and 'kernel_url' in metadata:
- kernel_image_settings = ImageSettings(name=name + '-kernel', url=metadata['kernel_url'])
- ramdisk_image_settings = None
- if metadata and 'ramdisk_url' in metadata:
- ramdisk_image_settings = ImageSettings(name=name + '-ramdisk', url=metadata['ramdisk_url'])
-
- extra_properties = None
- if metadata and 'extra_properties' in metadata:
- extra_properties = metadata['extra_properties']
-
- return ImageSettings(
- name=name, image_user='ubuntu', img_format='qcow2',
- extra_properties=extra_properties, url=url,
- nic_config_pb_loc='./provisioning/ansible/ubuntu-network-setup/playbooks/configure_host.yml',
- kernel_image_settings=kernel_image_settings,
- ramdisk_image_settings=ramdisk_image_settings)
+ return create_image_settings(
+ image_name=name, image_user=CENTOS_USER, image_format=DEFAULT_IMAGE_FORMAT, metadata=metadata, disk_url=url,
+ default_url=UBUNTU_DEFAULT_IMAGE_URL,
+ kernel_settings=kernel_settings, ramdisk_settings=ramdisk_settings, public=public)
def get_priv_net_config(net_name, subnet_name, router_name=None, cidr='10.55.0.0/24', external_net=None):
diff --git a/snaps/openstack/tests/os_source_file_test.py b/snaps/openstack/tests/os_source_file_test.py
index af75381..3a632e5 100644
--- a/snaps/openstack/tests/os_source_file_test.py
+++ b/snaps/openstack/tests/os_source_file_test.py
@@ -31,12 +31,14 @@ dev_os_env_file = 'openstack/tests/conf/os_env.yaml'
class OSComponentTestCase(unittest.TestCase):
- def __init__(self, method_name='runTest', os_creds=None, ext_net_name=None, log_level=logging.DEBUG):
+ def __init__(self, method_name='runTest', os_creds=None, ext_net_name=None, image_metadata=None,
+ log_level=logging.DEBUG):
"""
Super for test classes requiring a connection to OpenStack
:param method_name: default 'runTest'
:param os_creds: the OSCreds object, when null it searches for the file {cwd}/openstack/tests/conf/os_env.yaml
:param ext_net_name: the name of the external network that is used for creating routers for floating IPs
+ :param image_metadata: ability to override images being used in the tests (see examples/image-metadata)
:param log_level: the logging level of your test run (default DEBUG)
"""
super(OSComponentTestCase, self).__init__(method_name)
@@ -54,8 +56,10 @@ class OSComponentTestCase(unittest.TestCase):
test_conf = file_utils.read_yaml(dev_os_env_file)
self.ext_net_name = test_conf.get('ext_net')
+ self.image_metadata = image_metadata
+
@staticmethod
- def parameterize(testcase_klass, os_creds, ext_net_name, log_level=logging.DEBUG):
+ def parameterize(testcase_klass, os_creds, ext_net_name, image_metadata=None, log_level=logging.DEBUG):
""" Create a suite containing all tests taken from the given
subclass, passing them the parameter 'param'.
"""
@@ -63,7 +67,7 @@ class OSComponentTestCase(unittest.TestCase):
test_names = test_loader.getTestCaseNames(testcase_klass)
suite = unittest.TestSuite()
for name in test_names:
- suite.addTest(testcase_klass(name, os_creds, ext_net_name, log_level))
+ suite.addTest(testcase_klass(name, os_creds, ext_net_name, image_metadata, log_level))
return suite
@@ -86,11 +90,11 @@ class OSIntegrationTestCase(OSComponentTestCase):
:param log_level: the logging level of your test run (default DEBUG)
"""
super(OSIntegrationTestCase, self).__init__(method_name=method_name, os_creds=os_creds,
- ext_net_name=ext_net_name, log_level=log_level)
+ ext_net_name=ext_net_name, image_metadata=image_metadata,
+ log_level=log_level)
self.use_keystone = use_keystone
self.keystone = None
self.flavor_metadata = flavor_metadata
- self.image_metadata = image_metadata
@staticmethod
def parameterize(testcase_klass, os_creds, ext_net_name, use_keystone=False, flavor_metadata=None,