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:
Ghanshyam Mann
2025-07-25 18:44:41 +00:00
committed by Ghanshyam Maan
parent e056798f09
commit 19f39aba51
4 changed files with 98 additions and 0 deletions

View File

@@ -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:

View File

@@ -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)

View 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)

View File

@@ -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(