When performing boot from Volume on none FS based devices or devices
that aren't also acting as Glance Image stores, the current process goes
like this:
1. Fetch the image from Glance Store to a temp file on the Cinder Node
2. Perform a qemu-img convert on that file (convert to raw)
3. Transfer the contents of that file to the newly created Volume using dd
This process can take a while and is pretty inefficient. This BP introduces
the option for Operators to enable image-caching on the SolidFire backend device.
When enabled this option will use the existing Cinder clone_image method,
and will create a "Template Volume" of minimum required size on the SolidFire
backend. This Volume will be created with a backend SolidFire account that can
be shared among OpenStack Tenants.
When a request is received we first do a number of checks before proceeding:
1. Is Image/Template caching enabled
2. Inspect the image-metadata and verify that the image is public,
or that the tenant making the request is the owner
3. Verify that the image-metadata includes the properties['virtual_size']
parameter
If the preconditions are met, create a minimal sized Volume with the requested
image; then use SolidFires clone operation to create the requested bootable
Volume. During the process we also check and make sure that the image hasn't
been updated since we created our cached copy, if it has we then delete the
copy we have on the system and create a new one.
Also updated those drivers with docstrings duplicating the params info. I did
not rewrite or modify those that didn't include changed info. I'm not sure we
should duplicate docstring info for base methods like this anyway, but that's
irrelevant for this work.