diff options
author | Dmitry Tantsur <dtantsur@protonmail.com> | 2021-01-22 15:56:13 +0100 |
---|---|---|
committer | Dmitry Tantsur <dtantsur@protonmail.com> | 2021-01-22 16:26:44 +0100 |
commit | bb318008b91da907658678ee93d4ab7ae7576c00 (patch) | |
tree | 081bec4529ddf41c095b539b2fd3d1c0ab23668b /ironic/drivers/modules/image_utils.py | |
parent | 5640860c81f2c172d8ad1e3756546f64825c7ed4 (diff) | |
download | ironic-bb318008b91da907658678ee93d4ab7ae7576c00.tar.gz |
redfish-virtual-media: allow a link to raw configdrive image
For historical reasons we always base64+gzip configdrives, even
when accessing them via a URL. This change allows binary images
to work for the redfish-virtual-media case.
Change-Id: If19144de800b67275e3f8fb297f0a5c4a54b2981
Diffstat (limited to 'ironic/drivers/modules/image_utils.py')
-rw-r--r-- | ironic/drivers/modules/image_utils.py | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/ironic/drivers/modules/image_utils.py b/ironic/drivers/modules/image_utils.py index d12d23b0a..fb61a8d1d 100644 --- a/ironic/drivers/modules/image_utils.py +++ b/ironic/drivers/modules/image_utils.py @@ -29,6 +29,7 @@ from ironic.common import exception from ironic.common.i18n import _ from ironic.common import images from ironic.common import swift +from ironic.common import utils from ironic.conf import CONF from ironic.drivers.modules import boot_mode_utils from ironic.drivers.modules import deploy_utils @@ -311,10 +312,17 @@ def prepare_configdrive_image(task, content): """ with tempfile.TemporaryFile(dir=CONF.tempdir) as comp_tmpfile_obj: if '://' in content: - with tempfile.TemporaryFile(dir=CONF.tempdir) as tmpfile2: + with tempfile.NamedTemporaryFile(dir=CONF.tempdir) as tmpfile2: images.fetch_into(task.context, content, tmpfile2) - tmpfile2.seek(0) - base64.decode(tmpfile2, comp_tmpfile_obj) + tmpfile2.flush() + + if utils.file_mime_type(tmpfile2.name) == "text/plain": + tmpfile2.seek(0) + base64.decode(tmpfile2, comp_tmpfile_obj) + else: + # A binary image, use it as it is. + return prepare_disk_image(task, tmpfile2.name, + prefix='configdrive') else: comp_tmpfile_obj.write(base64.b64decode(content)) comp_tmpfile_obj.seek(0) |