334
335
# create output disk, mount ro
335
336
logger.debug('Creating output disk')
336
self.output_disk = os.path.join(self.boot, "output_disk.img")
337
self.output_disk = os.path.join(self.boot, OUTPUT_DISK_NAME)
337
338
subprocess.check_call(["qemu-img", "create", "-f", TARGET_IMAGE_FORMAT,
338
339
self.output_disk, "10M"],
339
340
stdout=DEVNULL, stderr=subprocess.STDOUT)
446
450
netdevs.extend(["--netdev=" + DEFAULT_BRIDGE])
448
452
# build disk arguments
449
# --disk source:size:driver:block_size
454
sc = util.load_file(cls.conf_file)
455
storage_config = yaml.load(sc).get('storage', {}).get('config', {})
456
cls.disk_wwns = ["wwn=%s" % x.get('wwn') for x in storage_config
458
cls.disk_serials = ["serial=%s" % x.get('serial')
459
for x in storage_config if 'serial' in x]
461
target_disk = "{}:{}:{}:{}:".format(cls.td.target_disk,
465
if len(cls.disk_wwns):
466
target_disk += cls.disk_wwns[0]
468
if len(cls.disk_serials):
469
target_disk += cls.disk_serials[0]
471
disks.extend(['--disk', target_disk])
473
# --disk source:size:driver:block_size:devopts
451
474
for (disk_no, disk_sz) in enumerate(cls.extra_disks):
452
475
dpath = os.path.join(cls.td.disks, 'extra_disk_%d.img' % disk_no)
454
['--disk', '{}:{}:{}:{}'.format(dpath, disk_sz, "",
455
cls.disk_block_size)])
476
extra_disk = '{}:{}:{}:{}:'.format(dpath, disk_sz,
479
if len(cls.disk_wwns):
480
w_index = disk_no + 1
481
if w_index < len(cls.disk_wwns):
482
extra_disk += cls.disk_wwns[w_index]
484
if len(cls.disk_serials):
485
w_index = disk_no + 1
486
if w_index < len(cls.disk_serials):
487
extra_disk += cls.disk_serials[w_index]
489
disks.extend(['--disk', extra_disk])
457
491
# build nvme disk args if needed
459
492
for (disk_no, disk_sz) in enumerate(cls.nvme_disks):
460
493
dpath = os.path.join(cls.td.disks, 'nvme_disk_%d.img' % disk_no)
462
['--disk', '{}:{}:nvme:{}'.format(dpath, disk_sz,
463
cls.disk_block_size)])
494
nvme_disk = '{}:{}:nvme:{}:{}'.format(dpath, disk_sz,
496
"serial=nvme-%d" % disk_no)
497
disks.extend(['--disk', nvme_disk])
466
500
configs = [cls.conf_file]
485
519
shutil.copy(OVMF_VARS, nvram)
486
520
cmd.extend(["--uefi", nvram])
488
# --disk source:size:driver:block_size
489
target_disk = "{}:{}:{}:{}".format(cls.td.target_disk, "", "",
491
cmd.extend(netdevs + ["--disk", target_disk] +
492
extra_disks + nvme_disks +
523
disks = disks * cls.multipath_num_paths
525
cmd.extend(netdevs + disks +
493
526
[boot_img, "--kernel=%s" % boot_kernel, "--initrd=%s" %
494
527
boot_initrd, "--", "curtin", "-vv", "install"] +
495
528
["--config=%s" % f for f in configs] +
535
568
cls.tearDownClass()
538
# drop the size parameter if present in extra_disks
539
extra_disks = [x if ":" not in x else x.split(':')[0]
540
for x in extra_disks]
541
571
# create --disk params for nvme disks
542
572
bsize_args = "logical_block_size={}".format(cls.disk_block_size)
543
573
bsize_args += ",physical_block_size={}".format(cls.disk_block_size)
544
574
bsize_args += ",min_io_size={}".format(cls.disk_block_size)
545
disk_driver = "virtio-blk"
547
576
target_disks = []
548
for (disk_no, disk) in enumerate([cls.td.target_disk,
549
cls.td.output_disk]):
550
d = '--disk={},driver={},format={},{}'.format(disk, disk_driver,
553
target_disks.extend([d])
577
for (disk_no, disk) in enumerate([cls.td.target_disk]):
578
disk = '--disk={},driver={},format={},{}'.format(
579
disk, cls.disk_driver, TARGET_IMAGE_FORMAT, bsize_args)
580
if len(cls.disk_wwns):
581
disk += ",%s" % cls.disk_wwns[0]
582
if len(cls.disk_serials):
583
disk += ",%s" % cls.disk_serials[0]
585
target_disks.extend([disk])
556
588
for (disk_no, disk_sz) in enumerate(cls.extra_disks):
557
589
dpath = os.path.join(cls.td.disks, 'extra_disk_%d.img' % disk_no)
558
d = '--disk={},driver={},format={},{}'.format(dpath, disk_driver,
561
extra_disks.extend([d])
590
disk = '--disk={},driver={},format={},{}'.format(
591
dpath, cls.disk_driver, TARGET_IMAGE_FORMAT, bsize_args)
592
if len(cls.disk_wwns):
593
w_index = disk_no + 1
594
if w_index < len(cls.disk_wwns):
595
disk += ",%s" % cls.disk_wwns[w_index]
597
if len(cls.disk_serials):
598
w_index = disk_no + 1
599
if w_index < len(cls.disk_serials):
600
disk += ",%s" % cls.disk_serials[w_index]
602
extra_disks.extend([disk])
564
605
disk_driver = 'nvme'
565
606
for (disk_no, disk_sz) in enumerate(cls.nvme_disks):
566
607
dpath = os.path.join(cls.td.disks, 'nvme_disk_%d.img' % disk_no)
567
d = '--disk={},driver={},format={},{}'.format(dpath, disk_driver,
570
nvme_disks.extend([d])
608
disk = '--disk={},driver={},format={},{}'.format(
609
dpath, disk_driver, TARGET_IMAGE_FORMAT, bsize_args)
610
nvme_disks.extend([disk])
613
target_disks = target_disks * cls.multipath_num_paths
614
extra_disks = extra_disks * cls.multipath_num_paths
615
nvme_disks = nvme_disks * cls.multipath_num_paths
617
# output disk is always virtio-blk, with serial of output_disk.img
618
output_disk = '--disk={},driver={},format={},{},{}'.format(
619
cls.td.output_disk, 'virtio-blk',
620
TARGET_IMAGE_FORMAT, bsize_args,
621
'serial=%s' % os.path.basename(cls.td.output_disk))
622
target_disks.extend([output_disk])
572
624
# create xkvm cmd
573
625
cmd = (["tools/xkvm", "-v", dowait] + netdevs +
951
1003
'content': yaml.dump(base_cloudconfig, indent=1)},
952
1004
{'type': 'text/cloud-config', 'content': ssh_keys}]
1006
output_dir = '/mnt/output'
954
1007
output_dir_macro = 'OUTPUT_COLLECT_D'
955
output_dir = '/mnt/output'
956
output_device = '/dev/vdb'
1008
output_device = '/dev/disk/by-id/virtio-%s' % OUTPUT_DISK_NAME
958
1010
collect_prep = textwrap.dedent("mkdir -p " + output_dir)
959
1011
collect_post = textwrap.dedent(