Fix vfd mount for capitalized device name
This patch enables virtual media deploy even if the expected virtual floppy device name "/dev/disk/by-label/ir-vfd-dev" is capitalized to "/dev/disk/by-label/IR-VFD-DEV". This change is necessary because some bare metal hardware such as FUJITSU RX1330 series create the capitalized virtual floppy device name. Change-Id: I436b3f9524a83814e082f8dd421df3e53b33f792 Closes-Bug: #1541167
This commit is contained in:
parent
33b482aa4d
commit
73f81f2982
@ -223,15 +223,15 @@ class GetAgentParamsTestCase(test_base.BaseTestCase):
|
|||||||
@mock.patch.object(os.path, 'exists')
|
@mock.patch.object(os.path, 'exists')
|
||||||
@mock.patch.object(os, 'mkdir')
|
@mock.patch.object(os, 'mkdir')
|
||||||
@mock.patch.object(utils, 'execute')
|
@mock.patch.object(utils, 'execute')
|
||||||
def test__get_vmedia_params_by_label(self, execute_mock, mkdir_mock,
|
def test__get_vmedia_params_by_label_lower_case(
|
||||||
exists_mock, read_params_mock,
|
self, execute_mock, mkdir_mock, exists_mock, read_params_mock,
|
||||||
mkdtemp_mock, rmtree_mock):
|
mkdtemp_mock, rmtree_mock):
|
||||||
mkdtemp_mock.return_value = "/tempdir"
|
mkdtemp_mock.return_value = "/tempdir"
|
||||||
|
|
||||||
null_output = ["", ""]
|
null_output = ["", ""]
|
||||||
expected_params = {'a': 'b'}
|
expected_params = {'a': 'b'}
|
||||||
read_params_mock.return_value = expected_params
|
read_params_mock.return_value = expected_params
|
||||||
exists_mock.return_value = True
|
exists_mock.side_effect = [True, False]
|
||||||
execute_mock.side_effect = [null_output, null_output]
|
execute_mock.side_effect = [null_output, null_output]
|
||||||
|
|
||||||
returned_params = utils._get_vmedia_params()
|
returned_params = utils._get_vmedia_params()
|
||||||
@ -245,6 +245,36 @@ class GetAgentParamsTestCase(test_base.BaseTestCase):
|
|||||||
mkdtemp_mock.assert_called_once_with()
|
mkdtemp_mock.assert_called_once_with()
|
||||||
rmtree_mock.assert_called_once_with("/tempdir")
|
rmtree_mock.assert_called_once_with("/tempdir")
|
||||||
|
|
||||||
|
@mock.patch.object(shutil, 'rmtree', autospec=True)
|
||||||
|
@mock.patch.object(tempfile, 'mkdtemp', autospec=True)
|
||||||
|
@mock.patch.object(utils, '_read_params_from_file')
|
||||||
|
@mock.patch.object(os.path, 'exists')
|
||||||
|
@mock.patch.object(os, 'mkdir')
|
||||||
|
@mock.patch.object(utils, 'execute')
|
||||||
|
def test__get_vmedia_params_by_label_upper_case(
|
||||||
|
self, execute_mock, mkdir_mock, exists_mock, read_params_mock,
|
||||||
|
mkdtemp_mock, rmtree_mock):
|
||||||
|
mkdtemp_mock.return_value = "/tempdir"
|
||||||
|
|
||||||
|
null_output = ["", ""]
|
||||||
|
expected_params = {'a': 'b'}
|
||||||
|
read_params_mock.return_value = expected_params
|
||||||
|
exists_mock.side_effect = [False, True]
|
||||||
|
execute_mock.side_effect = [null_output, null_output]
|
||||||
|
|
||||||
|
returned_params = utils._get_vmedia_params()
|
||||||
|
|
||||||
|
execute_mock.assert_any_call('mount', "/dev/disk/by-label/IR-VFD-DEV",
|
||||||
|
"/tempdir")
|
||||||
|
read_params_mock.assert_called_once_with("/tempdir/parameters.txt")
|
||||||
|
exists_mock.assert_has_calls(
|
||||||
|
[mock.call("/dev/disk/by-label/ir-vfd-dev"),
|
||||||
|
mock.call("/dev/disk/by-label/IR-VFD-DEV")])
|
||||||
|
execute_mock.assert_any_call('umount', "/tempdir")
|
||||||
|
self.assertEqual(expected_params, returned_params)
|
||||||
|
mkdtemp_mock.assert_called_once_with()
|
||||||
|
rmtree_mock.assert_called_once_with("/tempdir")
|
||||||
|
|
||||||
@mock.patch.object(shutil, 'rmtree', autospec=True)
|
@mock.patch.object(shutil, 'rmtree', autospec=True)
|
||||||
@mock.patch.object(tempfile, 'mkdtemp', autospec=True)
|
@mock.patch.object(tempfile, 'mkdtemp', autospec=True)
|
||||||
@mock.patch.object(utils, '_get_vmedia_device')
|
@mock.patch.object(utils, '_get_vmedia_device')
|
||||||
@ -261,12 +291,15 @@ class GetAgentParamsTestCase(test_base.BaseTestCase):
|
|||||||
null_output = ["", ""]
|
null_output = ["", ""]
|
||||||
expected_params = {'a': 'b'}
|
expected_params = {'a': 'b'}
|
||||||
read_params_mock.return_value = expected_params
|
read_params_mock.return_value = expected_params
|
||||||
exists_mock.return_value = False
|
exists_mock.side_effect = [False, False]
|
||||||
execute_mock.side_effect = [null_output, null_output]
|
execute_mock.side_effect = [null_output, null_output]
|
||||||
get_device_mock.return_value = "sda"
|
get_device_mock.return_value = "sda"
|
||||||
|
|
||||||
returned_params = utils._get_vmedia_params()
|
returned_params = utils._get_vmedia_params()
|
||||||
|
|
||||||
|
exists_mock.assert_has_calls(
|
||||||
|
[mock.call("/dev/disk/by-label/ir-vfd-dev"),
|
||||||
|
mock.call("/dev/disk/by-label/IR-VFD-DEV")])
|
||||||
execute_mock.assert_any_call('mount', "/dev/sda",
|
execute_mock.assert_any_call('mount', "/dev/sda",
|
||||||
"/tempdir")
|
"/tempdir")
|
||||||
read_params_mock.assert_called_once_with("/tempdir/parameters.txt")
|
read_params_mock.assert_called_once_with("/tempdir/parameters.txt")
|
||||||
|
@ -132,8 +132,13 @@ def _get_vmedia_params():
|
|||||||
"""
|
"""
|
||||||
parameters_file = "parameters.txt"
|
parameters_file = "parameters.txt"
|
||||||
|
|
||||||
vmedia_device_file = "/dev/disk/by-label/ir-vfd-dev"
|
vmedia_device_file_lower_case = "/dev/disk/by-label/ir-vfd-dev"
|
||||||
if not os.path.exists(vmedia_device_file):
|
vmedia_device_file_upper_case = "/dev/disk/by-label/IR-VFD-DEV"
|
||||||
|
if os.path.exists(vmedia_device_file_lower_case):
|
||||||
|
vmedia_device_file = vmedia_device_file_lower_case
|
||||||
|
elif os.path.exists(vmedia_device_file_upper_case):
|
||||||
|
vmedia_device_file = vmedia_device_file_upper_case
|
||||||
|
else:
|
||||||
|
|
||||||
# TODO(rameshg87): This block of code is there only for compatibility
|
# TODO(rameshg87): This block of code is there only for compatibility
|
||||||
# reasons (so that newer agent can work with older Ironic). Remove
|
# reasons (so that newer agent can work with older Ironic). Remove
|
||||||
|
@ -0,0 +1,4 @@
|
|||||||
|
fixes:
|
||||||
|
- This enables virtual media deploy even if virtual floppy device
|
||||||
|
name is capitalized to "/dev/disk/by-label/IR-VFD-DEV". see
|
||||||
|
https://bugs.launchpad.net/ironic/+bug/1541167 for details.
|
Loading…
Reference in New Issue
Block a user