diff --git a/ironic/drivers/modules/image_utils.py b/ironic/drivers/modules/image_utils.py index 2d1512c850..56ccb7de69 100644 --- a/ironic/drivers/modules/image_utils.py +++ b/ironic/drivers/modules/image_utils.py @@ -210,7 +210,7 @@ def prepare_floppy_image(task, params=None): :raises: SwiftOperationError, if any operation with Swift fails. :returns: image URL for the floppy image. """ - object_name = _get_name(task.node, prefix='image') + object_name = _get_name(task.node, prefix='image', suffix='.img') params = override_api_url(params) LOG.debug("Trying to create floppy image for node " @@ -220,7 +220,8 @@ def prepare_floppy_image(task, params=None): dir=CONF.tempdir, suffix='.img') as vfat_image_tmpfile_obj: vfat_image_tmpfile = vfat_image_tmpfile_obj.name - images.create_vfat_image(vfat_image_tmpfile, parameters=params) + images.create_vfat_image(vfat_image_tmpfile, fs_size_kib=1440, + parameters=params) img_handler = ImageHandler(task.node.driver) node_http_url = task.node.driver_info.get("external_http_url") @@ -241,7 +242,8 @@ def cleanup_floppy_image(task): :param task: an ironic node object. """ - ImageHandler.unpublish_image_for_node(task.node, prefix='image') + ImageHandler.unpublish_image_for_node(task.node, prefix='image', + suffix='.img') def prepare_configdrive_image(task, content): diff --git a/ironic/tests/unit/drivers/modules/test_image_utils.py b/ironic/tests/unit/drivers/modules/test_image_utils.py index cbc6969c11..bd197fc3d8 100644 --- a/ironic/tests/unit/drivers/modules/test_image_utils.py +++ b/ironic/tests/unit/drivers/modules/test_image_utils.py @@ -165,7 +165,7 @@ class RedfishImageUtilsTestCase(db_base.DbTestCase): shared=True) as task: image_utils.cleanup_floppy_image(task) - object_name = 'image-%s' % task.node.uuid + object_name = 'image-%s.img' % task.node.uuid mock_unpublish.assert_called_once_with(mock.ANY, object_name) @@ -182,13 +182,13 @@ class RedfishImageUtilsTestCase(db_base.DbTestCase): url = image_utils.prepare_floppy_image(task) - object_name = 'image-%s' % task.node.uuid + object_name = 'image-%s.img' % task.node.uuid mock_publish_image.assert_called_once_with(mock.ANY, mock.ANY, object_name, None) mock_create_vfat_image.assert_called_once_with( - mock.ANY, parameters=None) + mock.ANY, fs_size_kib=1440, parameters=None) self.assertEqual(expected_url, url) @@ -206,13 +206,14 @@ class RedfishImageUtilsTestCase(db_base.DbTestCase): url = image_utils.prepare_floppy_image(task) - object_name = 'image-%s' % task.node.uuid + object_name = 'image-%s.img' % task.node.uuid mock_publish_image.assert_called_once_with(mock.ANY, mock.ANY, object_name, None) mock_create_vfat_image.assert_called_once_with( - mock.ANY, parameters={"ipa-api-url": "http://callback"}) + mock.ANY, fs_size_kib=1440, + parameters={"ipa-api-url": "http://callback"}) self.assertEqual(expected_url, url) @@ -232,13 +233,14 @@ class RedfishImageUtilsTestCase(db_base.DbTestCase): url = image_utils.prepare_floppy_image(task) - object_name = 'image-%s' % task.node.uuid + object_name = 'image-%s.img' % task.node.uuid mock_publish_image.assert_called_once_with(mock.ANY, mock.ANY, object_name, None) mock_create_vfat_image.assert_called_once_with( - mock.ANY, parameters={"ipa-api-url": "http://callback"}) + mock.ANY, fs_size_kib=1440, + parameters={"ipa-api-url": "http://callback"}) self.assertEqual(expected_url, url) @@ -261,13 +263,14 @@ class RedfishImageUtilsTestCase(db_base.DbTestCase): url = image_utils.prepare_floppy_image(task) - object_name = 'image-%s' % task.node.uuid + object_name = 'image-%s.img' % task.node.uuid mock_publish_image.assert_called_once_with( mock.ANY, mock.ANY, object_name, override_url) mock_create_vfat_image.assert_called_once_with( - mock.ANY, parameters={"ipa-api-url": "http://callback"}) + mock.ANY, fs_size_kib=1440, + parameters={"ipa-api-url": "http://callback"}) self.assertEqual(expected_url, url) diff --git a/releasenotes/notes/floppy-image-quirks-32e14d32a37b0742.yaml b/releasenotes/notes/floppy-image-quirks-32e14d32a37b0742.yaml new file mode 100644 index 0000000000..f49fd25cdf --- /dev/null +++ b/releasenotes/notes/floppy-image-quirks-32e14d32a37b0742.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Some vendors insist that floppy images must be 1440 KiB in size and + that the file name ends with ``.img``. Make it so.