Testing server boot from iso image
Testing server to boot from iso image and perform some basic operation on server. It further check if server is booted via cdrom not block device. Related-Bug: #2054446 Depends-On: https://review.opendev.org/c/openstack/devstack/+/955970 Change-Id: I8500e7a586476419850ffd24d9ee512392bf2fb7 Signed-off-by: Ghanshyam Maan <gmaan@ghanshyammann.com>
This commit is contained in:
committed by
Ghanshyam Maan
parent
e056798f09
commit
19f39aba51
@@ -69,6 +69,7 @@
|
||||
WHITEBOX_CPU_TOPOLOGY: "0: [0,1,2,3,4,5,6,7]"
|
||||
WHITEBOX_DEDICATED_CPUS_PER_NUMA: 3
|
||||
NOVA_CONSOLE_PROXY_COMPUTE_TLS: True
|
||||
IMAGE_URLS: http://download.cirros-cloud.net/0.6.2/cirros-0.6.2-x86_64-disk.img, http://download.cirros-cloud.net/0.6.1/cirros-0.6.1-x86_64-disk.img, http://tinycorelinux.net/14.x/x86/archive/14.0/Core-14.0.iso
|
||||
devstack_local_conf:
|
||||
test-config:
|
||||
$TEMPEST_CONFIG:
|
||||
|
||||
@@ -75,6 +75,16 @@ class BaseWhiteboxComputeTest(base.BaseV2ComputeAdminTest):
|
||||
**extra_specs)
|
||||
return flavor
|
||||
|
||||
def create_keypair(self, **kwargs):
|
||||
"""Creates keypair"""
|
||||
if not kwargs.get('name'):
|
||||
kwargs['name'] = data_utils.rand_name(
|
||||
prefix=CONF.resource_name_prefix,
|
||||
name=self.__class__.__name__)
|
||||
body = self.keypairs_client.create_keypair(**kwargs)
|
||||
self.addCleanup(self.keypairs_client.delete_keypair, kwargs['name'])
|
||||
return body['keypair']
|
||||
|
||||
def reboot_server(self, server_id, type):
|
||||
"""Reboot a server and wait for it to be ACTIVE."""
|
||||
self.servers_client.reboot_server(server_id, type=type)
|
||||
|
||||
82
whitebox_tempest_plugin/api/compute/test_iso_image.py
Normal file
82
whitebox_tempest_plugin/api/compute/test_iso_image.py
Normal file
@@ -0,0 +1,82 @@
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, 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.
|
||||
|
||||
import os
|
||||
|
||||
from oslo_log import log as logging
|
||||
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
|
||||
from whitebox_tempest_plugin.api.compute import base
|
||||
|
||||
CONF = config.CONF
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class TestIsoImage(base.BaseWhiteboxComputeTest):
|
||||
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
super(TestIsoImage, cls).skip_checks()
|
||||
if 'iso' not in CONF.image.disk_formats:
|
||||
raise cls.skipException('iso disk format is not configured.')
|
||||
cls.img_file = CONF.whitebox.http_iso_image
|
||||
if not os.path.exists(cls.img_file):
|
||||
raise cls.skipException('iso image is not configured.')
|
||||
|
||||
def store_iso_image_in_glance(self):
|
||||
name = data_utils.rand_name(
|
||||
prefix=CONF.resource_name_prefix,
|
||||
name="-iso-image")
|
||||
params = {
|
||||
'name': name,
|
||||
'container_format': CONF.image.container_formats[0],
|
||||
'disk_format': 'iso',
|
||||
}
|
||||
image = self.images_client.create_image(**params)
|
||||
self.addCleanup(self.images_client.delete_image, image['id'])
|
||||
with open(self.img_file, 'rb') as image_file:
|
||||
self.images_client.store_image_file(image['id'], image_file)
|
||||
return image['id']
|
||||
|
||||
@utils.services('compute', 'image', 'network')
|
||||
def test_boot_server_from_iso_image(self):
|
||||
"""Test booting server from iso image and perform basic operations.
|
||||
|
||||
Steps:
|
||||
1. Create and store iso image in glance
|
||||
2. Create keypair
|
||||
3. Boot instance from iso image and with keypair
|
||||
4. Check if server booted from iso image is via cdrom
|
||||
5. Reboot instance
|
||||
6. Check if server booted from iso image is via cdrom
|
||||
"""
|
||||
image_id = self.store_iso_image_in_glance()
|
||||
keypair = self.create_keypair()
|
||||
server = self.create_test_server(
|
||||
image_id=image_id,
|
||||
key_name=keypair['name'],
|
||||
wait_until="ACTIVE")
|
||||
domain_xml = self.get_server_xml(server['id'])
|
||||
boot_from_cdrom = domain_xml.find("./devices/disk[@device='cdrom']")
|
||||
msg = ("Server %s booted from iso image is not via cdrom: %s",
|
||||
server['id'], domain_xml)
|
||||
self.assertIsNotNone(boot_from_cdrom, msg)
|
||||
|
||||
self.reboot_server(server['id'], type='HARD')
|
||||
domain_xml = self.get_server_xml(server['id'])
|
||||
boot_from_cdrom = domain_xml.find("./devices/disk[@device='cdrom']")
|
||||
msg = ("Server %s rebooted from iso image is not via cdrom: %s",
|
||||
server['id'], domain_xml)
|
||||
self.assertIsNotNone(boot_from_cdrom, msg)
|
||||
@@ -139,6 +139,11 @@ general_opts = [
|
||||
default=64,
|
||||
help="RAM size in MB to use when launching the guests backed "
|
||||
"by hugepages."),
|
||||
cfg.StrOpt(
|
||||
'http_iso_image',
|
||||
default='/opt/stack/devstack/files/Core-14.0.iso',
|
||||
help='http iso image which will be used to create image in '
|
||||
'glance and boot server from iso format image.'),
|
||||
]
|
||||
|
||||
nova_compute_group = cfg.OptGroup(
|
||||
|
||||
Reference in New Issue
Block a user