summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuiko Takada <takada-yuiko@mxn.nes.nec.co.jp>2015-08-25 10:28:53 +0900
committerJim Rollenhagen <jim@jimrollenhagen.com>2015-09-30 17:46:09 -0700
commit141c4819bd3059747ddb95166b990eb5ba576d52 (patch)
treea9e74b6ee3c16521cf44f5e5382aced1517e9dac
parent2114f2d5ba57160e345d65c2fa8ce5f2a0f91608 (diff)
downloadironic-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.py2
-rw-r--r--ironic/drivers/modules/deploy_utils.py9
-rw-r--r--ironic/tests/drivers/test_deploy_utils.py12
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,