summaryrefslogtreecommitdiff
path: root/ironic/drivers/modules/image_utils.py
diff options
context:
space:
mode:
authorDmitry Tantsur <dtantsur@protonmail.com>2021-01-22 15:56:13 +0100
committerDmitry Tantsur <dtantsur@protonmail.com>2021-01-22 16:26:44 +0100
commitbb318008b91da907658678ee93d4ab7ae7576c00 (patch)
tree081bec4529ddf41c095b539b2fd3d1c0ab23668b /ironic/drivers/modules/image_utils.py
parent5640860c81f2c172d8ad1e3756546f64825c7ed4 (diff)
downloadironic-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.py14
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)