diff options
-rw-r--r-- | ironic/drivers/modules/ipmitool.py | 2 | ||||
-rw-r--r-- | ironic/tests/drivers/test_ipmitool.py | 11 |
2 files changed, 12 insertions, 1 deletions
diff --git a/ironic/drivers/modules/ipmitool.py b/ironic/drivers/modules/ipmitool.py index 2bf7f844e..0ad34fa89 100644 --- a/ironic/drivers/modules/ipmitool.py +++ b/ironic/drivers/modules/ipmitool.py @@ -254,7 +254,7 @@ def _parse_driver_info(node): address = info.get('ipmi_address') username = info.get('ipmi_username') - password = info.get('ipmi_password') + password = six.text_type(info.get('ipmi_password', '')) port = info.get('ipmi_terminal_port') priv_level = info.get('ipmi_priv_level', 'ADMINISTRATOR') bridging_type = info.get('ipmi_bridging', 'no') diff --git a/ironic/tests/drivers/test_ipmitool.py b/ironic/tests/drivers/test_ipmitool.py index 284ceb958..21e478a7c 100644 --- a/ironic/tests/drivers/test_ipmitool.py +++ b/ironic/tests/drivers/test_ipmitool.py @@ -578,6 +578,17 @@ class IPMIToolPrivateMethodTestCase(db_base.DbTestCase): self.assertEqual(mock.call('single_bridge'), mock_support.call_args) + def test__parse_driver_info_numeric_password( + self, mock_sleep): + # ipmi_password must not be converted to int / float + # even if it includes just numbers. + info = dict(INFO_DICT) + info['ipmi_password'] = 12345678 + node = obj_utils.get_test_node(self.context, driver_info=info) + ret = ipmi._parse_driver_info(node) + self.assertEqual(six.u('12345678'), ret['password']) + self.assertIsInstance(ret['password'], six.text_type) + def test__parse_driver_info_ipmi_prot_version_1_5(self, mock_sleep): info = dict(INFO_DICT) info['ipmi_protocol_version'] = '1.5' |