Include wipefs --force option
Wipefs sometimes failed with errors like 'Device or resource busy', include --force option to fix the problems. Change-Id: Iad864d7ae9ab67286853f3c533a9c385ffe2cb05 Closes-Bug: #1590304 Closes-Bug: #1580169
This commit is contained in:
parent
c693f1e9bb
commit
9b5cb2062d
|
@ -316,10 +316,19 @@ def destroy_disk_metadata(dev, node_uuid):
|
||||||
# https://bugs.launchpad.net/ironic/+bug/1317647
|
# https://bugs.launchpad.net/ironic/+bug/1317647
|
||||||
LOG.debug("Start destroy disk metadata for node %(node)s.",
|
LOG.debug("Start destroy disk metadata for node %(node)s.",
|
||||||
{'node': node_uuid})
|
{'node': node_uuid})
|
||||||
utils.execute('wipefs', '--all', dev,
|
try:
|
||||||
run_as_root=True,
|
utils.execute('wipefs', '--force', '--all', dev,
|
||||||
check_exit_code=[0],
|
run_as_root=True,
|
||||||
use_standard_locale=True)
|
use_standard_locale=True)
|
||||||
|
except processutils.ProcessExecutionError as e:
|
||||||
|
# NOTE(zhenguo): Check if --force option is supported for wipefs,
|
||||||
|
# if not, we should try without it.
|
||||||
|
if '--force' in str(e):
|
||||||
|
utils.execute('wipefs', '--all', dev,
|
||||||
|
run_as_root=True,
|
||||||
|
use_standard_locale=True)
|
||||||
|
else:
|
||||||
|
raise e
|
||||||
LOG.info(_LI("Disk metadata on %(dev)s successfully destroyed for node "
|
LOG.info(_LI("Disk metadata on %(dev)s successfully destroyed for node "
|
||||||
"%(node)s"), {'dev': dev, 'node': node_uuid})
|
"%(node)s"), {'dev': dev, 'node': node_uuid})
|
||||||
|
|
||||||
|
|
|
@ -350,9 +350,8 @@ class DestroyMetaDataTestCase(test_base.BaseTestCase):
|
||||||
self.node_uuid = "12345678-1234-1234-1234-1234567890abcxyz"
|
self.node_uuid = "12345678-1234-1234-1234-1234567890abcxyz"
|
||||||
|
|
||||||
def test_destroy_disk_metadata(self, mock_exec):
|
def test_destroy_disk_metadata(self, mock_exec):
|
||||||
expected_calls = [mock.call('wipefs', '--all', 'fake-dev',
|
expected_calls = [mock.call('wipefs', '--force', '--all', 'fake-dev',
|
||||||
run_as_root=True,
|
run_as_root=True,
|
||||||
check_exit_code=[0],
|
|
||||||
use_standard_locale=True)]
|
use_standard_locale=True)]
|
||||||
disk_utils.destroy_disk_metadata(self.dev, self.node_uuid)
|
disk_utils.destroy_disk_metadata(self.dev, self.node_uuid)
|
||||||
mock_exec.assert_has_calls(expected_calls)
|
mock_exec.assert_has_calls(expected_calls)
|
||||||
|
@ -360,9 +359,8 @@ class DestroyMetaDataTestCase(test_base.BaseTestCase):
|
||||||
def test_destroy_disk_metadata_wipefs_fail(self, mock_exec):
|
def test_destroy_disk_metadata_wipefs_fail(self, mock_exec):
|
||||||
mock_exec.side_effect = processutils.ProcessExecutionError
|
mock_exec.side_effect = processutils.ProcessExecutionError
|
||||||
|
|
||||||
expected_call = [mock.call('wipefs', '--all', 'fake-dev',
|
expected_call = [mock.call('wipefs', '--force', '--all', 'fake-dev',
|
||||||
run_as_root=True,
|
run_as_root=True,
|
||||||
check_exit_code=[0],
|
|
||||||
use_standard_locale=True)]
|
use_standard_locale=True)]
|
||||||
self.assertRaises(processutils.ProcessExecutionError,
|
self.assertRaises(processutils.ProcessExecutionError,
|
||||||
disk_utils.destroy_disk_metadata,
|
disk_utils.destroy_disk_metadata,
|
||||||
|
@ -370,6 +368,20 @@ class DestroyMetaDataTestCase(test_base.BaseTestCase):
|
||||||
self.node_uuid)
|
self.node_uuid)
|
||||||
mock_exec.assert_has_calls(expected_call)
|
mock_exec.assert_has_calls(expected_call)
|
||||||
|
|
||||||
|
def test_destroy_disk_metadata_wipefs_not_support_force(self, mock_exec):
|
||||||
|
mock_exec.side_effect = iter(
|
||||||
|
[processutils.ProcessExecutionError(description='--force'),
|
||||||
|
(None, None)])
|
||||||
|
|
||||||
|
expected_call = [mock.call('wipefs', '--force', '--all', 'fake-dev',
|
||||||
|
run_as_root=True,
|
||||||
|
use_standard_locale=True),
|
||||||
|
mock.call('wipefs', '--all', 'fake-dev',
|
||||||
|
run_as_root=True,
|
||||||
|
use_standard_locale=True)]
|
||||||
|
disk_utils.destroy_disk_metadata(self.dev, self.node_uuid)
|
||||||
|
mock_exec.assert_has_calls(expected_call)
|
||||||
|
|
||||||
|
|
||||||
@mock.patch.object(utils, 'execute')
|
@mock.patch.object(utils, 'execute')
|
||||||
class GetDeviceBlockSizeTestCase(test_base.BaseTestCase):
|
class GetDeviceBlockSizeTestCase(test_base.BaseTestCase):
|
||||||
|
|
Loading…
Reference in New Issue