livemedia-creator: Add support for reqpart kickstart command
reqpart can be used to make kickstarts more platform agnostic, creating
needed partitions without lmc having to keep track of the arch-specific
needs. eg. ppc64 needs prepboot and /boot
This increases the size of the disk based on whether reqpart or
reqpart --add-boot is in the kickstart.
Note that this is only valid for partitioned disk output types, not
for filesystem images or live iso output.
(cherry picked from commit b47554d716
)
This commit is contained in:
parent
ab74164d83
commit
19375b9d4e
@ -445,6 +445,8 @@ def calculate_disk_size(opts, ks):
|
|||||||
:param str ks: Path to the kickstart to use for the installation
|
:param str ks: Path to the kickstart to use for the installation
|
||||||
:returns: Disk size in MiB
|
:returns: Disk size in MiB
|
||||||
:rtype: int
|
:rtype: int
|
||||||
|
|
||||||
|
Also takes into account the use of reqpart or reqpart --add-boot
|
||||||
"""
|
"""
|
||||||
# Disk size for a filesystem image should only be the size of /
|
# Disk size for a filesystem image should only be the size of /
|
||||||
# to prevent surprises when using the same kickstart for different installations.
|
# to prevent surprises when using the same kickstart for different installations.
|
||||||
@ -453,6 +455,17 @@ def calculate_disk_size(opts, ks):
|
|||||||
disk_size = 2 + sum(p.size for p in unique_partitions.values() if p.mountpoint == "/")
|
disk_size = 2 + sum(p.size for p in unique_partitions.values() if p.mountpoint == "/")
|
||||||
else:
|
else:
|
||||||
disk_size = 2 + sum(p.size for p in unique_partitions.values())
|
disk_size = 2 + sum(p.size for p in unique_partitions.values())
|
||||||
|
|
||||||
|
# reqpart can add 1M, 2M, 200M based on platform. Add 500M to be sure
|
||||||
|
if ks.handler.reqpart.seen:
|
||||||
|
log.info("Adding 500M for reqpart")
|
||||||
|
disk_size += 500
|
||||||
|
|
||||||
|
# It can also request adding /boot which is 1G
|
||||||
|
if ks.handler.reqpart.addBoot:
|
||||||
|
log.info("Adding 1024M for reqpart --addboot")
|
||||||
|
disk_size += 1024
|
||||||
|
|
||||||
log.info("Using disk size of %sMiB", disk_size)
|
log.info("Using disk size of %sMiB", disk_size)
|
||||||
return disk_size
|
return disk_size
|
||||||
|
|
||||||
|
@ -27,6 +27,7 @@ from ..lib import get_file_magic
|
|||||||
from pylorax import find_templates
|
from pylorax import find_templates
|
||||||
from pylorax.base import DataHolder
|
from pylorax.base import DataHolder
|
||||||
from pylorax.creator import FakeDNF, create_pxe_config, make_appliance, make_squashfs, squashfs_args
|
from pylorax.creator import FakeDNF, create_pxe_config, make_appliance, make_squashfs, squashfs_args
|
||||||
|
from pylorax.creator import calculate_disk_size
|
||||||
from pylorax.creator import get_arch, find_ostree_root, check_kickstart
|
from pylorax.creator import get_arch, find_ostree_root, check_kickstart
|
||||||
from pylorax.executils import runcmd
|
from pylorax.executils import runcmd
|
||||||
from pylorax.imgutils import mksparse
|
from pylorax.imgutils import mksparse
|
||||||
@ -244,6 +245,71 @@ class CreatorTest(unittest.TestCase):
|
|||||||
errors = check_kickstart(ks, opts)
|
errors = check_kickstart(ks, opts)
|
||||||
self.assertTrue("must include shutdown when using virt" in errors[0])
|
self.assertTrue("must include shutdown when using virt" in errors[0])
|
||||||
|
|
||||||
|
def disk_size_simple_test(self):
|
||||||
|
"""Test calculating the disk size with a simple / partition"""
|
||||||
|
opts = DataHolder(no_virt=True, make_fsimage=False, make_iso=False, make_pxe_live=False)
|
||||||
|
ks_version = makeVersion()
|
||||||
|
ks = KickstartParser(ks_version, errorsAreFatal=False, missingIncludeIsFatal=False)
|
||||||
|
ks.readKickstartFromString("url --url=http://dl.fedoraproject.com\n"
|
||||||
|
"network --bootproto=dhcp --activate\n"
|
||||||
|
"repo --name=other --baseurl=http://dl.fedoraproject.com\n"
|
||||||
|
"part / --size=4096\n"
|
||||||
|
"shutdown\n")
|
||||||
|
self.assertEqual(calculate_disk_size(opts, ks), 4098)
|
||||||
|
|
||||||
|
def disk_size_boot_test(self):
|
||||||
|
"""Test calculating the disk size with / and /boot partitions"""
|
||||||
|
opts = DataHolder(no_virt=True, make_fsimage=False, make_iso=False, make_pxe_live=False)
|
||||||
|
ks_version = makeVersion()
|
||||||
|
ks = KickstartParser(ks_version, errorsAreFatal=False, missingIncludeIsFatal=False)
|
||||||
|
ks.readKickstartFromString("url --url=http://dl.fedoraproject.com\n"
|
||||||
|
"network --bootproto=dhcp --activate\n"
|
||||||
|
"repo --name=other --baseurl=http://dl.fedoraproject.com\n"
|
||||||
|
"part / --size=4096\n"
|
||||||
|
"part /boot --size=512\n"
|
||||||
|
"shutdown\n")
|
||||||
|
self.assertEqual(calculate_disk_size(opts, ks), 4610)
|
||||||
|
|
||||||
|
def disk_size_boot_fsimage_test(self):
|
||||||
|
"""Test calculating the disk size with / and /boot partitions on a fsimage"""
|
||||||
|
opts = DataHolder(no_virt=True, make_fsimage=True, make_iso=False, make_pxe_live=False)
|
||||||
|
ks_version = makeVersion()
|
||||||
|
ks = KickstartParser(ks_version, errorsAreFatal=False, missingIncludeIsFatal=False)
|
||||||
|
ks.readKickstartFromString("url --url=http://dl.fedoraproject.com\n"
|
||||||
|
"network --bootproto=dhcp --activate\n"
|
||||||
|
"repo --name=other --baseurl=http://dl.fedoraproject.com\n"
|
||||||
|
"part / --size=4096\n"
|
||||||
|
"part /boot --size=512\n"
|
||||||
|
"shutdown\n")
|
||||||
|
self.assertEqual(calculate_disk_size(opts, ks), 4098)
|
||||||
|
|
||||||
|
def disk_size_reqpart_test(self):
|
||||||
|
"""Test calculating the disk size with reqpart and a / partition"""
|
||||||
|
opts = DataHolder(no_virt=True, make_fsimage=False, make_iso=False, make_pxe_live=False)
|
||||||
|
ks_version = makeVersion()
|
||||||
|
ks = KickstartParser(ks_version, errorsAreFatal=False, missingIncludeIsFatal=False)
|
||||||
|
ks.readKickstartFromString("url --url=http://dl.fedoraproject.com\n"
|
||||||
|
"network --bootproto=dhcp --activate\n"
|
||||||
|
"repo --name=other --baseurl=http://dl.fedoraproject.com\n"
|
||||||
|
"part / --size=4096\n"
|
||||||
|
"reqpart\n"
|
||||||
|
"shutdown\n")
|
||||||
|
self.assertEqual(calculate_disk_size(opts, ks), 4598)
|
||||||
|
|
||||||
|
def disk_size_reqpart_boot_test(self):
|
||||||
|
"""Test calculating the disk size with reqpart --add-boot and a / partition"""
|
||||||
|
opts = DataHolder(no_virt=True, make_fsimage=False, make_iso=False, make_pxe_live=False)
|
||||||
|
ks_version = makeVersion()
|
||||||
|
ks = KickstartParser(ks_version, errorsAreFatal=False, missingIncludeIsFatal=False)
|
||||||
|
ks.readKickstartFromString("url --url=http://dl.fedoraproject.com\n"
|
||||||
|
"network --bootproto=dhcp --activate\n"
|
||||||
|
"repo --name=other --baseurl=http://dl.fedoraproject.com\n"
|
||||||
|
"part / --size=4096\n"
|
||||||
|
"reqpart --add-boot\n"
|
||||||
|
"shutdown\n")
|
||||||
|
self.assertEqual(calculate_disk_size(opts, ks), 5622)
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipUnless(os.geteuid() == 0 and not os.path.exists("/.in-container"), "requires root privileges, and no containers")
|
@unittest.skipUnless(os.geteuid() == 0 and not os.path.exists("/.in-container"), "requires root privileges, and no containers")
|
||||||
def boot_over_root_test(self):
|
def boot_over_root_test(self):
|
||||||
"""Test the mount_boot_part_over_root ostree function"""
|
"""Test the mount_boot_part_over_root ostree function"""
|
||||||
|
Loading…
Reference in New Issue
Block a user