livemedia-creator: Add support for making ami images
AMI images are un-partitioned filesystem images with a grub.conf that is read by the pv-grub bootloader used by EC2. Most of the actual work making the AMI is done in the kickstart. This just creates the image file.
This commit is contained in:
parent
c2c4762df2
commit
54dd513ed8
@ -46,7 +46,7 @@ from pykickstart.version import makeVersion
|
||||
from pylorax.base import DataHolder
|
||||
from pylorax.treebuilder import TreeBuilder, RuntimeBuilder, udev_escape
|
||||
from pylorax.sysutils import joinpaths, remove, linktree
|
||||
from pylorax.imgutils import PartitionMount, mksparse
|
||||
from pylorax.imgutils import PartitionMount, mksparse, mkext4img
|
||||
from pylorax.executils import execWithRedirect, execWithCapture
|
||||
|
||||
|
||||
@ -406,6 +406,23 @@ def get_kernels( boot_dir ):
|
||||
return [f[8:] for f in files if f.startswith("vmlinuz-")]
|
||||
|
||||
|
||||
def make_ami( disk_img, ami_img="ami-root.img", ami_label="AMI" ):
|
||||
"""
|
||||
Copy the / partition to an un-partitioned disk image
|
||||
|
||||
ami_img is the filename to write, defaults to ami-root.img
|
||||
ami_label is the FS label to apply to the image
|
||||
|
||||
All other AMI setup is handled by the kickstart's %post
|
||||
"""
|
||||
with PartitionMount( disk_img ) as img_mount:
|
||||
work_dir = tempfile.mkdtemp()
|
||||
log.info("working dir is {0}".format(work_dir))
|
||||
log.info("creating {0}".format(ami_img))
|
||||
mkext4img(img_mount.mount_dir, joinpaths(work_dir, ami_img), label=ami_label)
|
||||
return work_dir
|
||||
|
||||
|
||||
def make_livecd( disk_img, squashfs_args="", templatedir=None,
|
||||
title="Linux", project="Linux", releasever=16 ):
|
||||
"""
|
||||
@ -423,6 +440,9 @@ def make_livecd( disk_img, squashfs_args="", templatedir=None,
|
||||
|
||||
"""
|
||||
with PartitionMount( disk_img ) as img_mount:
|
||||
if not img_mount or not img_mount.mount_dir:
|
||||
return None
|
||||
|
||||
kernel_list = get_kernels( joinpaths( img_mount.mount_dir, "boot" ) )
|
||||
log.debug( "kernel_list = {0}".format(kernel_list) )
|
||||
if kernel_list:
|
||||
@ -592,7 +612,7 @@ if __name__ == '__main__':
|
||||
log.error("You need to run this as root")
|
||||
sys.exit( 1 )
|
||||
|
||||
if not os.path.exists( opts.lorax_templates ):
|
||||
if opts.make_iso and not os.path.exists( opts.lorax_templates ):
|
||||
log.error( "The lorax templates directory ({0}) doesn't"
|
||||
" exist.".format( opts.lorax_templates ) )
|
||||
sys.exit( 1 )
|
||||
@ -614,10 +634,6 @@ if __name__ == '__main__':
|
||||
log.error( "--make-appliance is not yet implemented." )
|
||||
sys.exit( 1 )
|
||||
|
||||
if opts.make_ami:
|
||||
log.error( "--make-ami is not yet implemented." )
|
||||
sys.exit( 1 )
|
||||
|
||||
if not opts.no_virt and not opts.iso and not opts.disk_image:
|
||||
log.error( "virt-install needs an install iso." )
|
||||
sys.exit( 1 )
|
||||
@ -701,13 +717,16 @@ if __name__ == '__main__':
|
||||
result_dir = make_livecd( opts.disk_image or disk_img, opts.squashfs_args,
|
||||
opts.lorax_templates,
|
||||
opts.title, opts.project, opts.releasever )
|
||||
elif opts.make_ami and not opts.image_only:
|
||||
result_dir = make_ami(opts.disk_image or disk_img)
|
||||
|
||||
if not opts.keep_image and not opts.disk_image:
|
||||
os.unlink( disk_img )
|
||||
# cleanup the mess
|
||||
if disk_img and not opts.keep_image and not opts.disk_image:
|
||||
os.unlink( disk_img )
|
||||
|
||||
if opts.result_dir:
|
||||
shutil.copytree( result_dir, opts.result_dir )
|
||||
shutil.rmtree( result_dir )
|
||||
if opts.result_dir and result_dir:
|
||||
shutil.copytree( result_dir, opts.result_dir )
|
||||
shutil.rmtree( result_dir )
|
||||
|
||||
log.info("SUMMARY")
|
||||
log.info("-------")
|
||||
|
Loading…
Reference in New Issue
Block a user