From 9c4dbcc68614c1d8f715052068a315ef8119ea7a Mon Sep 17 00:00:00 2001 From: Devananda van der Veen Date: Fri, 18 Jan 2013 09:40:37 -0800 Subject: [PATCH] PXE driver should rmtree directories it created Baremetal PXE driver was failing to delete the per-instance tftpboot and image directories which it created when the instance was deleted. This happened partly because of dangling files within the directory, and partly because 'unlink' does not remove directories and the error was squelched. Now, when destroy()ing an instance, PXE driver will call shutil.rmtree() on the per-instance directories which it created. Fixes bug 1101048. Change-Id: I682d0264288add488ea23e5d5200357b7be52dd9 --- nova/tests/baremetal/test_pxe.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/nova/tests/baremetal/test_pxe.py b/nova/tests/baremetal/test_pxe.py index 73ef8caa..6d0462fa 100644 --- a/nova/tests/baremetal/test_pxe.py +++ b/nova/tests/baremetal/test_pxe.py @@ -414,10 +414,11 @@ class PXEPublicMethodsTestCase(BareMetalPXETestCase): def test_destroy_images(self): self._create_node() - self.mox.StubOutWithMock(os, 'unlink') + self.mox.StubOutWithMock(bm_utils, 'unlink_without_raise') + self.mox.StubOutWithMock(bm_utils, 'rmtree_without_raise') - os.unlink(pxe.get_image_file_path(self.instance)) - os.unlink(pxe.get_image_dir_path(self.instance)) + bm_utils.unlink_without_raise(pxe.get_image_file_path(self.instance)) + bm_utils.rmtree_without_raise(pxe.get_image_dir_path(self.instance)) self.mox.ReplayAll() self.driver.destroy_images(self.context, self.node, self.instance) @@ -482,6 +483,7 @@ class PXEPublicMethodsTestCase(BareMetalPXETestCase): pxe_path = pxe.get_pxe_config_file_path(self.instance) self.mox.StubOutWithMock(bm_utils, 'unlink_without_raise') + self.mox.StubOutWithMock(bm_utils, 'rmtree_without_raise') self.mox.StubOutWithMock(pxe, 'get_tftp_image_info') self.mox.StubOutWithMock(self.driver, '_collect_mac_addresses') @@ -493,7 +495,7 @@ class PXEPublicMethodsTestCase(BareMetalPXETestCase): AndReturn(macs) for mac in macs: bm_utils.unlink_without_raise(pxe.get_pxe_mac_path(mac)) - bm_utils.unlink_without_raise( + bm_utils.rmtree_without_raise( os.path.join(CONF.baremetal.tftp_root, 'fake-uuid')) self.mox.ReplayAll() @@ -516,6 +518,7 @@ class PXEPublicMethodsTestCase(BareMetalPXETestCase): pxe_path = pxe.get_pxe_config_file_path(self.instance) self.mox.StubOutWithMock(bm_utils, 'unlink_without_raise') + self.mox.StubOutWithMock(bm_utils, 'rmtree_without_raise') self.mox.StubOutWithMock(pxe, 'get_tftp_image_info') self.mox.StubOutWithMock(self.driver, '_collect_mac_addresses') @@ -524,7 +527,7 @@ class PXEPublicMethodsTestCase(BareMetalPXETestCase): bm_utils.unlink_without_raise(pxe_path) self.driver._collect_mac_addresses(self.context, self.node).\ AndRaise(exception.DBError) - bm_utils.unlink_without_raise( + bm_utils.rmtree_without_raise( os.path.join(CONF.baremetal.tftp_root, 'fake-uuid')) self.mox.ReplayAll()