diff --git a/ironic/conf/pxe.py b/ironic/conf/pxe.py index 042046001d..f16aa94e04 100644 --- a/ironic/conf/pxe.py +++ b/ironic/conf/pxe.py @@ -36,7 +36,7 @@ opts = [ default='/var/lib/ironic/master_images', help=_('On the ironic-conductor node, directory where master ' 'instance images are stored on disk. ' - 'Setting to disables image caching.')), + 'Setting to the empty string disables image caching.')), cfg.IntOpt('image_cache_size', default=20480, help=_('Maximum size (in MiB) of cache for master images, ' diff --git a/ironic/drivers/modules/deploy_utils.py b/ironic/drivers/modules/deploy_utils.py index 25c4d381d9..c2d47edd9c 100644 --- a/ironic/drivers/modules/deploy_utils.py +++ b/ironic/drivers/modules/deploy_utils.py @@ -1113,8 +1113,9 @@ def direct_deploy_should_convert_raw_image(node): class InstanceImageCache(image_cache.ImageCache): def __init__(self): + master_path = CONF.pxe.instance_master_path or None super(self.__class__, self).__init__( - CONF.pxe.instance_master_path, + master_path, # MiB -> B cache_size=CONF.pxe.image_cache_size * 1024 * 1024, # min -> sec diff --git a/ironic/tests/unit/drivers/modules/test_deploy_utils.py b/ironic/tests/unit/drivers/modules/test_deploy_utils.py index a4086ee4fa..4a16a5d9d6 100644 --- a/ironic/tests/unit/drivers/modules/test_deploy_utils.py +++ b/ironic/tests/unit/drivers/modules/test_deploy_utils.py @@ -2761,3 +2761,29 @@ class TestStorageInterfaceUtils(db_base.DbTestCase): with task_manager.acquire( self.context, self.node.uuid, shared=False) as task: self.assertFalse(utils.is_iscsi_boot(task)) + + +class InstanceImageCacheTestCase(db_base.DbTestCase): + @mock.patch.object(fileutils, 'ensure_tree') + def test_with_master_path(self, mock_ensure_tree): + self.config(instance_master_path='/fake/path', group='pxe') + self.config(image_cache_size=500, group='pxe') + self.config(image_cache_ttl=30, group='pxe') + + cache = utils.InstanceImageCache() + + mock_ensure_tree.assert_called_once_with('/fake/path') + self.assertEqual(500 * 1024 * 1024, cache._cache_size) + self.assertEqual(30 * 60, cache._cache_ttl) + + @mock.patch.object(fileutils, 'ensure_tree') + def test_without_master_path(self, mock_ensure_tree): + self.config(instance_master_path='', group='pxe') + self.config(image_cache_size=500, group='pxe') + self.config(image_cache_ttl=30, group='pxe') + + cache = utils.InstanceImageCache() + + mock_ensure_tree.assert_not_called() + self.assertEqual(500 * 1024 * 1024, cache._cache_size) + self.assertEqual(30 * 60, cache._cache_ttl) diff --git a/releasenotes/notes/fix-instance-master-path-config-fa524c907a7888e5.yaml b/releasenotes/notes/fix-instance-master-path-config-fa524c907a7888e5.yaml new file mode 100644 index 0000000000..4184a4cd76 --- /dev/null +++ b/releasenotes/notes/fix-instance-master-path-config-fa524c907a7888e5.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Fixes an issue where the master instance image cache could not be disabled. + The configuration option ``[pxe]/instance_master_path`` may now be set to + the empty string to disable the cache.