diff options
author | Yuiko Takada <takada-yuiko@mxn.nes.nec.co.jp> | 2015-08-25 10:28:53 +0900 |
---|---|---|
committer | Jim Rollenhagen <jim@jimrollenhagen.com> | 2015-09-30 17:46:09 -0700 |
commit | 141c4819bd3059747ddb95166b990eb5ba576d52 (patch) | |
tree | a9e74b6ee3c16521cf44f5e5382aced1517e9dac | |
parent | 2114f2d5ba57160e345d65c2fa8ce5f2a0f91608 (diff) | |
download | ironic-141c4819bd3059747ddb95166b990eb5ba576d52.tar.gz |
Use standard locale when executing 'dd' command
When executing 'dd' command, baremetal provisioning fails on OS with
Japanese because of ascii codec error:
InstanceDeployFailure: Deploy failed for instance <uuid>.
Error: 'ascii' codec can't decode byte 0xc2 in position 24:
ordinal not in range(128)
This patch set fixes this bug by using standard locale when
executing 'dd'.
Change-Id: I8107975044cc9dec85e0d7571f99eaf5ea869891
Closes-Bug:#1488289
Co-Authored-By: Ruby Loo <rloo@yahoo-inc.com>
(cherry picked from commit 8166c6e8ddd333ee9930d0d7d1afb7c2ee47fc4a)
-rw-r--r-- | ironic/common/utils.py | 2 | ||||
-rw-r--r-- | ironic/drivers/modules/deploy_utils.py | 9 | ||||
-rw-r--r-- | ironic/tests/drivers/test_deploy_utils.py | 12 |
3 files changed, 12 insertions, 11 deletions
diff --git a/ironic/common/utils.py b/ironic/common/utils.py index 2bc340cdf..f86308722 100644 --- a/ironic/common/utils.py +++ b/ironic/common/utils.py @@ -552,7 +552,7 @@ def dd(src, dst, *args): """ LOG.debug("Starting dd process.") execute('dd', 'if=%s' % src, 'of=%s' % dst, *args, - run_as_root=True, check_exit_code=[0]) + use_standard_locale=True, run_as_root=True, check_exit_code=[0]) def is_http_url(url): diff --git a/ironic/drivers/modules/deploy_utils.py b/ironic/drivers/modules/deploy_utils.py index 788e0b59c..93c79a037 100644 --- a/ironic/drivers/modules/deploy_utils.py +++ b/ironic/drivers/modules/deploy_utils.py @@ -481,9 +481,7 @@ def destroy_disk_metadata(dev, node_uuid): LOG.debug("Start destroy disk metadata for node %(node)s.", {'node': node_uuid}) try: - utils.execute('dd', 'if=/dev/zero', 'of=%s' % dev, - 'bs=512', 'count=36', run_as_root=True, - check_exit_code=[0]) + utils.dd('/dev/zero', dev, 'bs=512', 'count=36') except processutils.ProcessExecutionError as err: with excutils.save_and_reraise_exception(): LOG.error(_LE("Failed to erase beginning of disk for node " @@ -506,9 +504,8 @@ def destroy_disk_metadata(dev, node_uuid): else: seek_value = block_sz - 36 try: - utils.execute('dd', 'if=/dev/zero', 'of=%s' % dev, - 'bs=512', 'count=36', 'seek=%d' % seek_value, - run_as_root=True, check_exit_code=[0]) + utils.dd('/dev/zero', dev, 'bs=512', 'count=36', + 'seek=%d' % seek_value) except processutils.ProcessExecutionError as err: with excutils.save_and_reraise_exception(): LOG.error(_LE("Failed to erase the end of the disk on node " diff --git a/ironic/tests/drivers/test_deploy_utils.py b/ironic/tests/drivers/test_deploy_utils.py index bbb163f16..49668bbf0 100644 --- a/ironic/tests/drivers/test_deploy_utils.py +++ b/ironic/tests/drivers/test_deploy_utils.py @@ -1416,11 +1416,13 @@ class DestroyMetaDataTestCase(tests_base.TestCase): mock_gz.return_value = 64 expected_calls = [mock.call('dd', 'if=/dev/zero', 'of=fake-dev', 'bs=512', 'count=36', run_as_root=True, - check_exit_code=[0]), + check_exit_code=[0], + use_standard_locale=True), mock.call('dd', 'if=/dev/zero', 'of=fake-dev', 'bs=512', 'count=36', 'seek=28', run_as_root=True, - check_exit_code=[0])] + check_exit_code=[0], + use_standard_locale=True)] utils.destroy_disk_metadata(self.dev, self.node_uuid) mock_exec.assert_has_calls(expected_calls) self.assertTrue(mock_gz.called) @@ -1430,7 +1432,8 @@ class DestroyMetaDataTestCase(tests_base.TestCase): expected_call = [mock.call('dd', 'if=/dev/zero', 'of=fake-dev', 'bs=512', 'count=36', run_as_root=True, - check_exit_code=[0])] + check_exit_code=[0], + use_standard_locale=True)] self.assertRaises(processutils.ProcessExecutionError, utils.destroy_disk_metadata, self.dev, @@ -1442,7 +1445,8 @@ class DestroyMetaDataTestCase(tests_base.TestCase): expected_call = [mock.call('dd', 'if=/dev/zero', 'of=fake-dev', 'bs=512', 'count=36', run_as_root=True, - check_exit_code=[0])] + check_exit_code=[0], + use_standard_locale=True)] self.assertRaises(processutils.ProcessExecutionError, utils.destroy_disk_metadata, self.dev, |