Generalize logic for skipping final image generation

Since the ironic-agent element builds the ramdisk and extracts the
kernel itself, there's no need to actually generate an image at the
end of the process.  Previously the unnecessary image was being
deleted, but this wastes a bunch of time compressing and converting
the image.  It's better to just not create the image at all.

This change adds a noop element called no-final-image that
disk-image-create looks for in the element list and, if found, will
cause it to skip the final image generation.  This is more flexible
than the previous ironic-agent-specific method that would have
required changes to disk-image-create for every element that wanted
to behave similarly.

Note that this cannot be done using an environment variable, because
element environments.d entries do not propagate out to
disk-image-create.  It also doesn't make sense as a user option
because it should be set by the element author, not the user.

Change-Id: I168feb18f0d578b3babbe4784d3ef75e755e1ebd
This commit is contained in:
Ben Nemec 2016-06-24 13:29:19 -05:00
parent ed116d60a9
commit e49d347ba9
3 changed files with 23 additions and 9 deletions

View File

@ -450,9 +450,9 @@ for X in ${!IMAGE_TYPES[@]} ; do
fi
done
if [[ ! $IMAGE_ELEMENT =~ ironic-agent ]]; then
# Prep filesystem by discarding all unused space
fstrim_image
if [[ ! $IMAGE_ELEMENT =~ no-final-image ]]; then
# Prep filesystem by discarding all unused space
fstrim_image
fi
# Unmount and cleanup the /mnt and /build subdirectories, to save
@ -460,8 +460,8 @@ fi
unmount_image
cleanup_build_dir
has_raw_type=
if [[ ! $IMAGE_ELEMENT =~ ironic-agent && "$IS_RAMDISK" == "0" ]]; then
if [[ (! $IMAGE_ELEMENT =~ no-final-image) && "$IS_RAMDISK" == "0" ]]; then
has_raw_type=
for IMAGE_TYPE in ${IMAGE_TYPES[@]} ; do
# We have to do raw last because it is destructive
if [ "$IMAGE_TYPE" = "raw" ]; then
@ -470,10 +470,10 @@ if [[ ! $IMAGE_ELEMENT =~ ironic-agent && "$IS_RAMDISK" == "0" ]]; then
compress_and_save_image $IMAGE_NAME.$IMAGE_TYPE
fi
done
fi
if [ -n "$has_raw_type" ]; then
IMAGE_TYPE="raw"
compress_and_save_image $IMAGE_NAME.$IMAGE_TYPE
if [ -n "$has_raw_type" ]; then
IMAGE_TYPE="raw"
compress_and_save_image $IMAGE_NAME.$IMAGE_TYPE
fi
fi
# Remove the leftovers, i.e. the temporary image directory.

View File

@ -1,4 +1,5 @@
dhcp-all-interfaces
no-final-image
package-installs
pip-and-virtualenv
pkg-map

View File

@ -0,0 +1,13 @@
==============
no-final-image
==============
This is a noop element which can be used to indicate to diskimage-builder that
it should not bother creating a final image out of the generated filesystem.
It is useful in cases where an element handles all of the image building
itself, such as ironic-agent or Docker images. In those cases the final image
normally generated by diskimage-builder is not the desired output, so there's
no reason to spend time creating it.
Elements that wish to behave this way should include this element in their
element-deps file.