Skip to content

Commit ccda38a

Browse files
committed
Do udevadm settle after running partx in image extn
This commit adds running 'udevadm settle' after running partx so that the partition table is re-read properly by lsblk which follows it. Closes-bug: 1432918 Change-Id: I1c7dddd3ed8cab175e608e09ecc4ae7f289cfc31
1 parent 173f869 commit ccda38a

2 files changed

Lines changed: 7 additions & 3 deletions

File tree

ironic_python_agent/extensions/image.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ def _get_partition(device, uuid):
4444
try:
4545
utils.execute('partx', '-u', device, attempts=3,
4646
delay_on_retry=True)
47+
utils.execute('udevadm', 'settle')
4748
except processutils.ProcessExecutionError:
4849
LOG.warning("Couldn't re-read the partition table "
4950
"on device %s" % device)

ironic_python_agent/tests/extensions/image.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -215,13 +215,14 @@ def test__get_partition(self, mock_execute, mock_dispatch):
215215
lsblk_output = ('''KNAME="test" UUID="" TYPE="disk"
216216
KNAME="test1" UUID="256a39e3-ca3c-4fb8-9cc2-b32eec441f47" TYPE="part"
217217
KNAME="test2" UUID="%s" TYPE="part"''' % self.fake_root_uuid)
218-
mock_execute.side_effect = (None, [lsblk_output])
218+
mock_execute.side_effect = (None, None, [lsblk_output])
219219

220220
root_part = image._get_partition(self.fake_dev,
221221
self.fake_root_uuid)
222222
self.assertEqual('/dev/test2', root_part)
223223
expected = [mock.call('partx', '-u', self.fake_dev, attempts=3,
224224
delay_on_retry=True),
225+
mock.call('udevadm', 'settle'),
225226
mock.call('lsblk', '-PbioKNAME,UUID,TYPE', self.fake_dev)]
226227
mock_execute.assert_has_calls(expected)
227228
self.assertFalse(mock_dispatch.called)
@@ -231,27 +232,29 @@ def test__get_partition_no_device_found(self, mock_execute,
231232
lsblk_output = ('''KNAME="test" UUID="" TYPE="disk"
232233
KNAME="test1" UUID="256a39e3-ca3c-4fb8-9cc2-b32eec441f47" TYPE="part"
233234
KNAME="test2" UUID="" TYPE="part"''')
234-
mock_execute.side_effect = (None, [lsblk_output])
235+
mock_execute.side_effect = (None, None, [lsblk_output])
235236

236237
self.assertRaises(errors.DeviceNotFound,
237238
image._get_partition, self.fake_dev,
238239
self.fake_root_uuid)
239240
expected = [mock.call('partx', '-u', self.fake_dev, attempts=3,
240241
delay_on_retry=True),
242+
mock.call('udevadm', 'settle'),
241243
mock.call('lsblk', '-PbioKNAME,UUID,TYPE', self.fake_dev)]
242244
mock_execute.assert_has_calls(expected)
243245
self.assertFalse(mock_dispatch.called)
244246

245247
def test__get_partition_command_fail(self, mock_execute,
246248
mock_dispatch):
247-
mock_execute.side_effect = (None,
249+
mock_execute.side_effect = (None, None,
248250
processutils.ProcessExecutionError('boom'))
249251
self.assertRaises(errors.CommandExecutionError,
250252
image._get_partition, self.fake_dev,
251253
self.fake_root_uuid)
252254

253255
expected = [mock.call('partx', '-u', self.fake_dev, attempts=3,
254256
delay_on_retry=True),
257+
mock.call('udevadm', 'settle'),
255258
mock.call('lsblk', '-PbioKNAME,UUID,TYPE', self.fake_dev)]
256259
mock_execute.assert_has_calls(expected)
257260
self.assertFalse(mock_dispatch.called)

0 commit comments

Comments
 (0)