)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"bb5030bf004c93f6fd4c5f5e2f18a4edbb81f8e3","unresolved":false,"context_lines":[{"line_number":12,"context_line":"converted to an int type, cause errors in the subsequent processing to"},{"line_number":13,"context_line":"expect that it is a string type."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Also, if it begins with \u00270\u0027, it is interpreted as an octal number,"},{"line_number":16,"context_line":"totally become a different value. In addition, an error occurs if it"},{"line_number":17,"context_line":"contains a number of \u00278\u0027 or more. Therefore, when storing a password"},{"line_number":18,"context_line":"from the DB variable, and by storing in a variable by explicitly"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9a1a9d01_73b79786","line":15,"updated":"2015-09-28 14:23:14.000000000","message":"I was not able to reproduce it, if a number starts with 0, like 01234 it is interpreted as string by api:\n\n ironic node-update node-0 add driver_info/pass\u003d01234\n\n | driver_info            | {u\u0027ssh_port\u0027: 22, u\u0027ssh_username\u0027: u\u0027user\u0027, u\u0027deploy_kernel\u0027: u        |\n |                        | \u00273e7739ae-dafe-4af6-9126-968ca9fd3078\u0027, u\u0027deploy_ramdisk\u0027: u\u00277776fb3e- |\n |                        | b7d6-420c-b4eb-0a71f8023f81\u0027, u\u0027pass\u0027: u\u002701234\u0027, u\u0027ssh_virt_type\u0027:     |\n |                        | u\u0027virsh\u0027, u\u0027ssh_address\u0027: u\u0027192.168.122.222\u0027, u\u0027ssh_key_filename\u0027:     |\n |                        | u\u0027/opt/stack/data/ironic/ssh_keys/ironic_key\u0027}                         |","commit_id":"58d3b1af369169f297d069e38f5a4b98db500e0f"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"56978ba8c69f316e9bd69c1773a8fededeb8d754","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Shinn\u0027ya Hoshino \u003cshi-hoshino@yk.jp.nec.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-09-30 11:25:48 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix a bug error by passwords includes just numbers"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When IPMI passwords includes just numbers is used, it failed to create a"},{"line_number":10,"context_line":"password file. From the format point of view, these passwords are"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9a1a9d01_0f801df4","line":7,"updated":"2015-09-30 05:43:50.000000000","message":"How about modifying commit message to\n\n  Fix bug when ipmi username/password are numbers\n\n  When IPMI username/password are numbers, ipmitool driver failed to\n  create a password file........","commit_id":"cb0464e629c23cf4ddc109d4c9f8942848a86d1c"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"48d433847b7ec58fa4d65786b198883ffb8ac01c","unresolved":false,"context_lines":[{"line_number":13,"context_line":"expect that it is a string type."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Also, includes a plurality of numbers and one of the period, username"},{"line_number":16,"context_line":"and password at the end is 0 (e.g. 65432.10), not handled correctly."},{"line_number":17,"context_line":"Therefore, when storing a password from the DB variable, and by storing"},{"line_number":18,"context_line":"in a variable by explicitly indicating the string type, to avoid"},{"line_number":19,"context_line":"problems."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9a1a9d01_03bebb64","line":16,"updated":"2015-09-30 05:14:11.000000000","message":"Seems like we should have test cases showing this is working","commit_id":"cb0464e629c23cf4ddc109d4c9f8942848a86d1c"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"56978ba8c69f316e9bd69c1773a8fededeb8d754","unresolved":false,"context_lines":[{"line_number":13,"context_line":"expect that it is a string type."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Also, includes a plurality of numbers and one of the period, username"},{"line_number":16,"context_line":"and password at the end is 0 (e.g. 65432.10), not handled correctly."},{"line_number":17,"context_line":"Therefore, when storing a password from the DB variable, and by storing"},{"line_number":18,"context_line":"in a variable by explicitly indicating the string type, to avoid"},{"line_number":19,"context_line":"problems."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9a1a9d01_efeb69da","line":16,"in_reply_to":"9a1a9d01_03bebb64","updated":"2015-09-30 05:43:50.000000000","message":"Hmm, yeah, may be put username or password in this format.","commit_id":"cb0464e629c23cf4ddc109d4c9f8942848a86d1c"},{"author":{"_account_id":16754,"name":"Shinn\u0027ya Hoshino","email":"shinn-hosyno@nec.com","username":"shinn-hoshino"},"change_message_id":"76bfcf167dcbd20af771813b2247d4695a0140d0","unresolved":false,"context_lines":[{"line_number":13,"context_line":"expect that it is a string type."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Also, includes a plurality of numbers and one of the period, username"},{"line_number":16,"context_line":"and password at the end is 0 (e.g. 65432.10), not handled correctly."},{"line_number":17,"context_line":"Therefore, when storing a password from the DB variable, and by storing"},{"line_number":18,"context_line":"in a variable by explicitly indicating the string type, to avoid"},{"line_number":19,"context_line":"problems."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9a1a9d01_8211575f","line":16,"in_reply_to":"9a1a9d01_03bebb64","updated":"2015-09-30 12:54:41.000000000","message":"This seems to be the problem of python-ironicclient. I would like to remove from this commit message.","commit_id":"cb0464e629c23cf4ddc109d4c9f8942848a86d1c"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"56978ba8c69f316e9bd69c1773a8fededeb8d754","unresolved":false,"context_lines":[{"line_number":18,"context_line":"in a variable by explicitly indicating the string type, to avoid"},{"line_number":19,"context_line":"problems."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Also for the user name, exactly the same cause, exactly in the same"},{"line_number":22,"context_line":"place, in order to suffer exactly the same problem, to fix at the same"},{"line_number":23,"context_line":"time."},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9a1a9d01_efc28952","line":21,"updated":"2015-09-30 05:43:50.000000000","message":"This can be simplified.  Can we just include in the above text that it is applicable for both username and password ?","commit_id":"cb0464e629c23cf4ddc109d4c9f8942848a86d1c"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"56978ba8c69f316e9bd69c1773a8fededeb8d754","unresolved":false,"context_lines":[{"line_number":21,"context_line":"Also for the user name, exactly the same cause, exactly in the same"},{"line_number":22,"context_line":"place, in order to suffer exactly the same problem, to fix at the same"},{"line_number":23,"context_line":"time."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: I85ee2e904fdb0d538f69c7dbfab4c81bb080b8cf"},{"line_number":26,"context_line":"Closes-Bug: #1489234"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9a1a9d01_0f99fd7b","line":24,"updated":"2015-09-30 05:43:50.000000000","message":"Might be also worth mentioning about non-ascii characters","commit_id":"cb0464e629c23cf4ddc109d4c9f8942848a86d1c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b476f02daa63aa50b076e5d04f753f346f71122d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Shinn\u0027ya Hoshino \u003cshi-hoshino@yk.jp.nec.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-10-05 18:55:26 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix a bug error by passwords includes just numbers"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When IPMI passwords includes just numbers is used, it failed to create a"},{"line_number":10,"context_line":"password file. From the format point of view, these passwords are"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"9a1a9d01_50128463","line":7,"updated":"2015-10-05 13:36:11.000000000","message":"Fix using numbers as IPMI password","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"},{"author":{"_account_id":16754,"name":"Shinn\u0027ya Hoshino","email":"shinn-hosyno@nec.com","username":"shinn-hoshino"},"change_message_id":"5e3e622506273417038ca0a8776c7a4e03aecd8b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Shinn\u0027ya Hoshino \u003cshi-hoshino@yk.jp.nec.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-10-05 18:55:26 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix a bug error by passwords includes just numbers"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When IPMI passwords includes just numbers is used, it failed to create a"},{"line_number":10,"context_line":"password file. From the format point of view, these passwords are"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"7a2fa921_898fe922","line":7,"in_reply_to":"9a1a9d01_50128463","updated":"2015-10-06 12:09:51.000000000","message":"When it is this sentence, it would be applicable in the case of using\nthe number it is mixed with the alphabet.\nI\u0027d like to write clearly the following 2 points:\n* It is a case of using *only* the numbers when it happens.\n* Error occurs actually. It is a conditions that should not occur.","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b476f02daa63aa50b076e5d04f753f346f71122d","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix a bug error by passwords includes just numbers"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When IPMI passwords includes just numbers is used, it failed to create a"},{"line_number":10,"context_line":"password file. From the format point of view, these passwords are"},{"line_number":11,"context_line":"correct. These are that it is stored to the variable after being"},{"line_number":12,"context_line":"converted to an int type, cause errors in the subsequent processing to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"9a1a9d01_70154847","line":9,"updated":"2015-10-05 13:36:11.000000000","message":"When an IPMI password consists only of numbers, Ironic fails to create a password file.","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"},{"author":{"_account_id":16754,"name":"Shinn\u0027ya Hoshino","email":"shinn-hosyno@nec.com","username":"shinn-hoshino"},"change_message_id":"5e3e622506273417038ca0a8776c7a4e03aecd8b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix a bug error by passwords includes just numbers"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When IPMI passwords includes just numbers is used, it failed to create a"},{"line_number":10,"context_line":"password file. From the format point of view, these passwords are"},{"line_number":11,"context_line":"correct. These are that it is stored to the variable after being"},{"line_number":12,"context_line":"converted to an int type, cause errors in the subsequent processing to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"7a2fa921_971a9f16","line":9,"in_reply_to":"9a1a9d01_70154847","updated":"2015-10-06 12:09:51.000000000","message":"I replace it.","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b476f02daa63aa50b076e5d04f753f346f71122d","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"At the same time, according to the specifications of IPMI, modified to"},{"line_number":20,"context_line":"throw an exception of InvalidParameterValue when the non-ASCII chars are"},{"line_number":21,"context_line":"used in the username."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: I85ee2e904fdb0d538f69c7dbfab4c81bb080b8cf"},{"line_number":24,"context_line":"Closes-Bug: #1489234"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"9a1a9d01_100dec3d","line":21,"updated":"2015-10-05 13:36:11.000000000","message":"This change deserves a separate patchset. I don\u0027t think it\u0027s useful, as users won\u0027t be able to create such a password in the first place.","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"},{"author":{"_account_id":16754,"name":"Shinn\u0027ya Hoshino","email":"shinn-hosyno@nec.com","username":"shinn-hoshino"},"change_message_id":"5e3e622506273417038ca0a8776c7a4e03aecd8b","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"At the same time, according to the specifications of IPMI, modified to"},{"line_number":20,"context_line":"throw an exception of InvalidParameterValue when the non-ASCII chars are"},{"line_number":21,"context_line":"used in the username."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: I85ee2e904fdb0d538f69c7dbfab4c81bb080b8cf"},{"line_number":24,"context_line":"Closes-Bug: #1489234"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"7a2fa921_9755bfc7","line":21,"in_reply_to":"9a1a9d01_100dec3d","updated":"2015-10-06 12:09:51.000000000","message":"It is a small patch to as it is not suitable to split. Therefore, it has\nbeen pointed out to merge the independent test methods by Patch Set 7-8\nof test_ipmitool.py.\n\nBy the way, it is about the password to be able to use in this patch.\nCertainly, this isn\u0027t strange to be taken up as one of the examples of\nbad passwords. However, this patch has been assumed that it is desired\nto use without changing such a password. For example, if it has borrowed\na server machine which has been set such a password as the default.\n(There is also a server such default password is set of leading world\nmanufacturers are delivered.)","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"}],"ironic/drivers/modules/ipmitool.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"e0dd1849130e2a232b08722833bdb8b97b6894b0","unresolved":false,"context_lines":[{"line_number":245,"context_line":"            \" driver_info: %s.\") % missing_info)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    address \u003d info.get(\u0027ipmi_address\u0027)"},{"line_number":248,"context_line":"    username \u003d str(info.get(\u0027ipmi_username\u0027))"},{"line_number":249,"context_line":"    password \u003d str(info.get(\u0027ipmi_password\u0027))"},{"line_number":250,"context_line":"    port \u003d info.get(\u0027ipmi_terminal_port\u0027)"},{"line_number":251,"context_line":"    priv_level \u003d info.get(\u0027ipmi_priv_level\u0027, \u0027ADMINISTRATOR\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_cd49d732","line":248,"updated":"2015-09-04 21:20:25.000000000","message":"Please use six.text_type for conversion (or six.binary_type if it cannot contain unicode)","commit_id":"19b251c0d1282be516414e10a25be0a67b1b870c"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"d5533e4e30cbb416ebc99ce43f64fb56908ab8c8","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            \" driver_info: %s.\") % missing_info)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    address \u003d info.get(\u0027ipmi_address\u0027)"},{"line_number":256,"context_line":"    username \u003d six.text_type(info.get(\u0027ipmi_username\u0027))"},{"line_number":257,"context_line":"    password \u003d six.text_type(info.get(\u0027ipmi_password\u0027))"},{"line_number":258,"context_line":"    port \u003d info.get(\u0027ipmi_terminal_port\u0027)"},{"line_number":259,"context_line":"    priv_level \u003d info.get(\u0027ipmi_priv_level\u0027, \u0027ADMINISTRATOR\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_db762ea3","line":256,"updated":"2015-09-18 17:30:59.000000000","message":"In accordance with IPMI specification user name must contain only \u0027ascii\u0027 symbols, so InvalidParameterValue should be raised in case UnicodeDecodeError from here.","commit_id":"c46f387a70157e45b6ca3b35c5d059ac20bd308b"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"12699ede528fb2b25e95e73b951791f3d4818d5b","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            \" driver_info: %s.\") % missing_info)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    address \u003d info.get(\u0027ipmi_address\u0027)"},{"line_number":256,"context_line":"    username \u003d six.text_type(info.get(\u0027ipmi_username\u0027))"},{"line_number":257,"context_line":"    password \u003d six.text_type(info.get(\u0027ipmi_password\u0027))"},{"line_number":258,"context_line":"    port \u003d info.get(\u0027ipmi_terminal_port\u0027)"},{"line_number":259,"context_line":"    priv_level \u003d info.get(\u0027ipmi_priv_level\u0027, \u0027ADMINISTRATOR\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_f479bf93","line":256,"in_reply_to":"ba15a1d1_db762ea3","updated":"2015-09-18 18:22:33.000000000","message":"Sorry because DB returned these strings as unicode type no UnicodeDecodeError will be raised from this code, but Ironic fails later (on password.encode() in console utils for password). Therefore makes sense to check non-ascii symbols here.","commit_id":"c46f387a70157e45b6ca3b35c5d059ac20bd308b"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"d5533e4e30cbb416ebc99ce43f64fb56908ab8c8","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    address \u003d info.get(\u0027ipmi_address\u0027)"},{"line_number":256,"context_line":"    username \u003d six.text_type(info.get(\u0027ipmi_username\u0027))"},{"line_number":257,"context_line":"    password \u003d six.text_type(info.get(\u0027ipmi_password\u0027))"},{"line_number":258,"context_line":"    port \u003d info.get(\u0027ipmi_terminal_port\u0027)"},{"line_number":259,"context_line":"    priv_level \u003d info.get(\u0027ipmi_priv_level\u0027, \u0027ADMINISTRATOR\u0027)"},{"line_number":260,"context_line":"    bridging_type \u003d info.get(\u0027ipmi_bridging\u0027, \u0027no\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_fe2be07f","line":257,"updated":"2015-09-18 17:30:59.000000000","message":"IPMI password is 16 or 20 bytes string, with all of possible values for a byte (0-255). But JSON does not have native support of binary data. IMO we should catch UnicodeDecodeError for this line too.","commit_id":"c46f387a70157e45b6ca3b35c5d059ac20bd308b"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"bb5030bf004c93f6fd4c5f5e2f18a4edbb81f8e3","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            \" driver_info: %s.\") % missing_info)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    address \u003d info.get(\u0027ipmi_address\u0027)"},{"line_number":256,"context_line":"    username \u003d six.binary_type(info.get(\u0027ipmi_username\u0027))"},{"line_number":257,"context_line":"    password \u003d six.binary_type(info.get(\u0027ipmi_password\u0027))"},{"line_number":258,"context_line":"    port \u003d info.get(\u0027ipmi_terminal_port\u0027)"},{"line_number":259,"context_line":"    priv_level \u003d info.get(\u0027ipmi_priv_level\u0027, \u0027ADMINISTRATOR\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_f31ba719","line":256,"updated":"2015-09-28 14:23:14.000000000","message":"binary_type is bytes in python3 that has a very different behaviour:\n\n bytes(iterable_of_ints) -\u003e bytes\n bytes(string, encoding[, errors]) -\u003e bytes\n bytes(bytes_or_buffer) -\u003e immutable copy of bytes_or_buffer\n bytes(int) -\u003e bytes object of size given by the parameter initialized with null bytes\n bytes() -\u003e empty bytes object\n\nSo if you want to proceed like this, seems to be better to do\n\n username \u003d six.text_type(info.get(\u0027ipmi_username\u0027))\n try:\n     username.encode(\u0027ascii\u0027)\n except UnicodeEncodeError:\n     raise ...","commit_id":"58d3b1af369169f297d069e38f5a4b98db500e0f"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"3b5797df42be182519bb0e94376325e507173aeb","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            \" driver_info: %s.\") % missing_info)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    address \u003d info.get(\u0027ipmi_address\u0027)"},{"line_number":256,"context_line":"    username \u003d six.text_type(info.get(\u0027ipmi_username\u0027))"},{"line_number":257,"context_line":"    password \u003d six.text_type(info.get(\u0027ipmi_password\u0027))"},{"line_number":258,"context_line":"    port \u003d info.get(\u0027ipmi_terminal_port\u0027)"},{"line_number":259,"context_line":"    priv_level \u003d info.get(\u0027ipmi_priv_level\u0027, \u0027ADMINISTRATOR\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_fd19fb88","line":256,"updated":"2015-09-29 15:54:37.000000000","message":"One more thing (sorry for not spotting it earlier) - when None is passed to six.text_type, \u0027None\u0027 string is returned, which changes the current behaviour (see L376-378, L412), the values \u0027None\u0027 are now passed to ipmitool, although they are skipped if they are None. Seems that you could use info.get(\u0027ipmi_username\u0027, \u0027\u0027) instead (but please check all places where it is used).","commit_id":"baa61beee466689650ba8f794dfc2b37a1871de9"},{"author":{"_account_id":16754,"name":"Shinn\u0027ya Hoshino","email":"shinn-hosyno@nec.com","username":"shinn-hoshino"},"change_message_id":"85511e87bf98b1322218f92d4e0c4729f7f1e854","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            \" driver_info: %s.\") % missing_info)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    address \u003d info.get(\u0027ipmi_address\u0027)"},{"line_number":256,"context_line":"    username \u003d six.text_type(info.get(\u0027ipmi_username\u0027))"},{"line_number":257,"context_line":"    password \u003d six.text_type(info.get(\u0027ipmi_password\u0027))"},{"line_number":258,"context_line":"    port \u003d info.get(\u0027ipmi_terminal_port\u0027)"},{"line_number":259,"context_line":"    priv_level \u003d info.get(\u0027ipmi_priv_level\u0027, \u0027ADMINISTRATOR\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_836f2b2a","line":256,"in_reply_to":"9a1a9d01_fd19fb88","updated":"2015-10-02 00:29:39.000000000","message":"I see, I modified to so.\nAnd, I had been looking at the location it is used, I think there are\nnot where problems occurs probably.\nAnd, run the tox, also activates the venv and baremetal without\nspecifying a user name and password on test, it was confirmed that there\nis no change in behavior before and after modification.\nAlthough, it was confirmed in the actual baremetal is the occurrence of\nsimilar error as if difference of the password, because it is actually\ndefined user name and password.","commit_id":"baa61beee466689650ba8f794dfc2b37a1871de9"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"56978ba8c69f316e9bd69c1773a8fededeb8d754","unresolved":false,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    # check if ipmi_username has proper value"},{"line_number":277,"context_line":"    try:"},{"line_number":278,"context_line":"        username.encode(\u0027ascii\u0027)"},{"line_number":279,"context_line":"    except UnicodeEncodeError:"},{"line_number":280,"context_line":"        raise exception.InvalidParameterValue(_("},{"line_number":281,"context_line":"            \"Invalid IPMI username value, Username can include just ASCII \""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_cf9ea562","line":278,"updated":"2015-09-30 05:43:50.000000000","message":"is there a chance that someone will have password as non-ascii ? May be just put it here as well.","commit_id":"cb0464e629c23cf4ddc109d4c9f8942848a86d1c"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"0a0c0ca790738eb5968a42067226a1a5270fc9a6","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    address \u003d info.get(\u0027ipmi_address\u0027)"},{"line_number":256,"context_line":"    username \u003d six.text_type(info.get(\u0027ipmi_username\u0027, \u0027\u0027))"},{"line_number":257,"context_line":"    password \u003d six.text_type(info.get(\u0027ipmi_password\u0027, \u0027\u0027))"},{"line_number":258,"context_line":"    port \u003d info.get(\u0027ipmi_terminal_port\u0027)"},{"line_number":259,"context_line":"    priv_level \u003d info.get(\u0027ipmi_priv_level\u0027, \u0027ADMINISTRATOR\u0027)"},{"line_number":260,"context_line":"    bridging_type \u003d info.get(\u0027ipmi_bridging\u0027, \u0027no\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a1a9d01_f7a460ba","line":257,"updated":"2015-10-01 12:06:40.000000000","message":"Looks like default \u0027\u0027 is not needed for password.","commit_id":"256715448e50eeb71b3bbcddd76b88ae8295f96c"},{"author":{"_account_id":16754,"name":"Shinn\u0027ya Hoshino","email":"shinn-hosyno@nec.com","username":"shinn-hoshino"},"change_message_id":"34a2dd280ba6a04ed2c8869d1c409530ef515cb2","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    address \u003d info.get(\u0027ipmi_address\u0027)"},{"line_number":256,"context_line":"    username \u003d six.text_type(info.get(\u0027ipmi_username\u0027, \u0027\u0027))"},{"line_number":257,"context_line":"    password \u003d six.text_type(info.get(\u0027ipmi_password\u0027, \u0027\u0027))"},{"line_number":258,"context_line":"    port \u003d info.get(\u0027ipmi_terminal_port\u0027)"},{"line_number":259,"context_line":"    priv_level \u003d info.get(\u0027ipmi_priv_level\u0027, \u0027ADMINISTRATOR\u0027)"},{"line_number":260,"context_line":"    bridging_type \u003d info.get(\u0027ipmi_bridging\u0027, \u0027no\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a1a9d01_377879f8","line":257,"in_reply_to":"9a1a9d01_f7a460ba","updated":"2015-10-01 23:53:45.000000000","message":"Done","commit_id":"256715448e50eeb71b3bbcddd76b88ae8295f96c"},{"author":{"_account_id":14886,"name":"Alberto Fagner","email":"albertoffb@lsd.ufcg.edu.br","username":"albertofagner"},"change_message_id":"624f672a431c9f13a02b5ff031fc7869b09711e3","unresolved":false,"context_lines":[{"line_number":274,"context_line":"            {\u0027version\u0027: protocol_version, \u0027valid_versions\u0027: valid_versions})"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    # check if ipmi_username has proper value"},{"line_number":277,"context_line":"    try:"},{"line_number":278,"context_line":"        username.encode(\u0027ascii\u0027)"},{"line_number":279,"context_line":"    except UnicodeEncodeError:"},{"line_number":280,"context_line":"        raise exception.InvalidParameterValue(_("}],"source_content_type":"text/x-python","patch_set":8,"id":"9a1a9d01_c78d1cd4","line":277,"updated":"2015-09-30 14:01:01.000000000","message":"Isn\u0027t there a way to do this like in line 269? If it\u0027s possible to do like that I think it would be better using an \"if\" then using a \"try/except\".","commit_id":"256715448e50eeb71b3bbcddd76b88ae8295f96c"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"0a0c0ca790738eb5968a42067226a1a5270fc9a6","unresolved":false,"context_lines":[{"line_number":274,"context_line":"            {\u0027version\u0027: protocol_version, \u0027valid_versions\u0027: valid_versions})"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    # check if ipmi_username has proper value"},{"line_number":277,"context_line":"    try:"},{"line_number":278,"context_line":"        username.encode(\u0027ascii\u0027)"},{"line_number":279,"context_line":"    except UnicodeEncodeError:"},{"line_number":280,"context_line":"        raise exception.InvalidParameterValue(_("}],"source_content_type":"text/x-python","patch_set":8,"id":"9a1a9d01_17f0f4c8","line":277,"in_reply_to":"9a1a9d01_4a56ec06","updated":"2015-10-01 12:06:40.000000000","message":"It\u0027s ok IMO.","commit_id":"256715448e50eeb71b3bbcddd76b88ae8295f96c"},{"author":{"_account_id":16754,"name":"Shinn\u0027ya Hoshino","email":"shinn-hosyno@nec.com","username":"shinn-hoshino"},"change_message_id":"50bf809db4f3a65aed0c61640a088bd4cf21c974","unresolved":false,"context_lines":[{"line_number":274,"context_line":"            {\u0027version\u0027: protocol_version, \u0027valid_versions\u0027: valid_versions})"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    # check if ipmi_username has proper value"},{"line_number":277,"context_line":"    try:"},{"line_number":278,"context_line":"        username.encode(\u0027ascii\u0027)"},{"line_number":279,"context_line":"    except UnicodeEncodeError:"},{"line_number":280,"context_line":"        raise exception.InvalidParameterValue(_("}],"source_content_type":"text/x-python","patch_set":8,"id":"9a1a9d01_4a56ec06","line":277,"in_reply_to":"9a1a9d01_c78d1cd4","updated":"2015-09-30 15:15:38.000000000","message":"I thought so too, therefore I tried it at Patch Set 5.\nHowever, it wasn\u0027t works well because of restriction of type of the variable of username.\nI couldn\u0027t find another way...","commit_id":"256715448e50eeb71b3bbcddd76b88ae8295f96c"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"843839e239292ece60ec6727741130456f8a81e7","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    address \u003d info.get(\u0027ipmi_address\u0027)"},{"line_number":256,"context_line":"    username \u003d six.text_type(info.get(\u0027ipmi_username\u0027, \u0027\u0027))"},{"line_number":257,"context_line":"    password \u003d six.text_type(info.get(\u0027ipmi_password\u0027))"},{"line_number":258,"context_line":"    port \u003d info.get(\u0027ipmi_terminal_port\u0027)"},{"line_number":259,"context_line":"    priv_level \u003d info.get(\u0027ipmi_priv_level\u0027, \u0027ADMINISTRATOR\u0027)"},{"line_number":260,"context_line":"    bridging_type \u003d info.get(\u0027ipmi_bridging\u0027, \u0027no\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a2fa921_7c5b5155","line":257,"updated":"2015-10-05 14:54:04.000000000","message":"Also, there was a default of \u0027\u0027 here, the reason for that is that six.text_type(None) returns \u0027None\u0027, so I think it is needed and should be added back, if the patch is going to proceed by fixing the problem this way.","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b476f02daa63aa50b076e5d04f753f346f71122d","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    address \u003d info.get(\u0027ipmi_address\u0027)"},{"line_number":256,"context_line":"    username \u003d six.text_type(info.get(\u0027ipmi_username\u0027, \u0027\u0027))"},{"line_number":257,"context_line":"    password \u003d six.text_type(info.get(\u0027ipmi_password\u0027))"},{"line_number":258,"context_line":"    port \u003d info.get(\u0027ipmi_terminal_port\u0027)"},{"line_number":259,"context_line":"    priv_level \u003d info.get(\u0027ipmi_priv_level\u0027, \u0027ADMINISTRATOR\u0027)"},{"line_number":260,"context_line":"    bridging_type \u003d info.get(\u0027ipmi_bridging\u0027, \u0027no\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a1a9d01_3008302d","line":257,"updated":"2015-10-05 13:36:11.000000000","message":"why is this change needed? using str type should be enough on both pythons","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"},{"author":{"_account_id":16754,"name":"Shinn\u0027ya Hoshino","email":"shinn-hosyno@nec.com","username":"shinn-hoshino"},"change_message_id":"5e3e622506273417038ca0a8776c7a4e03aecd8b","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    address \u003d info.get(\u0027ipmi_address\u0027)"},{"line_number":256,"context_line":"    username \u003d six.text_type(info.get(\u0027ipmi_username\u0027, \u0027\u0027))"},{"line_number":257,"context_line":"    password \u003d six.text_type(info.get(\u0027ipmi_password\u0027))"},{"line_number":258,"context_line":"    port \u003d info.get(\u0027ipmi_terminal_port\u0027)"},{"line_number":259,"context_line":"    priv_level \u003d info.get(\u0027ipmi_priv_level\u0027, \u0027ADMINISTRATOR\u0027)"},{"line_number":260,"context_line":"    bridging_type \u003d info.get(\u0027ipmi_bridging\u0027, \u0027no\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a2fa921_ba8d427d","line":257,"in_reply_to":"7a2fa921_0a044b13","updated":"2015-10-06 12:09:51.000000000","message":"In brief, I should not have to replace six.text_type(), but I will have to change to the default \u0027\u0027. Isn\u0027t it?","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ee8bb12663d7ec95c25081b1087bfdacafafcde8","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    address \u003d info.get(\u0027ipmi_address\u0027)"},{"line_number":256,"context_line":"    username \u003d six.text_type(info.get(\u0027ipmi_username\u0027, \u0027\u0027))"},{"line_number":257,"context_line":"    password \u003d six.text_type(info.get(\u0027ipmi_password\u0027))"},{"line_number":258,"context_line":"    port \u003d info.get(\u0027ipmi_terminal_port\u0027)"},{"line_number":259,"context_line":"    priv_level \u003d info.get(\u0027ipmi_priv_level\u0027, \u0027ADMINISTRATOR\u0027)"},{"line_number":260,"context_line":"    bridging_type \u003d info.get(\u0027ipmi_bridging\u0027, \u0027no\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a2fa921_0a044b13","line":257,"in_reply_to":"7a2fa921_1f1a4f18","updated":"2015-10-05 15:13:51.000000000","message":"++ indeed","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"f964a54bbea4599370f219945072da0d0408d2a6","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    address \u003d info.get(\u0027ipmi_address\u0027)"},{"line_number":256,"context_line":"    username \u003d six.text_type(info.get(\u0027ipmi_username\u0027, \u0027\u0027))"},{"line_number":257,"context_line":"    password \u003d six.text_type(info.get(\u0027ipmi_password\u0027))"},{"line_number":258,"context_line":"    port \u003d info.get(\u0027ipmi_terminal_port\u0027)"},{"line_number":259,"context_line":"    priv_level \u003d info.get(\u0027ipmi_priv_level\u0027, \u0027ADMINISTRATOR\u0027)"},{"line_number":260,"context_line":"    bridging_type \u003d info.get(\u0027ipmi_bridging\u0027, \u0027no\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a2fa921_9cf2ed05","line":257,"in_reply_to":"7a2fa921_79ada330","updated":"2015-10-05 14:38:55.000000000","message":"I still don\u0027t get why use six.text_type here, str would work just as well.","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"21a8a3000c21a528ca06c4ec2f8ba9fe6b5920e9","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    address \u003d info.get(\u0027ipmi_address\u0027)"},{"line_number":256,"context_line":"    username \u003d six.text_type(info.get(\u0027ipmi_username\u0027, \u0027\u0027))"},{"line_number":257,"context_line":"    password \u003d six.text_type(info.get(\u0027ipmi_password\u0027))"},{"line_number":258,"context_line":"    port \u003d info.get(\u0027ipmi_terminal_port\u0027)"},{"line_number":259,"context_line":"    priv_level \u003d info.get(\u0027ipmi_priv_level\u0027, \u0027ADMINISTRATOR\u0027)"},{"line_number":260,"context_line":"    bridging_type \u003d info.get(\u0027ipmi_bridging\u0027, \u0027no\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a2fa921_1f1a4f18","line":257,"in_reply_to":"7a2fa921_7c5b5155","updated":"2015-10-05 15:00:00.000000000","message":"Vladyslav, good catch, you are right.","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"4fbccbc65e9653e8906e5be6d334ab66aaa3bab2","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    address \u003d info.get(\u0027ipmi_address\u0027)"},{"line_number":256,"context_line":"    username \u003d six.text_type(info.get(\u0027ipmi_username\u0027, \u0027\u0027))"},{"line_number":257,"context_line":"    password \u003d six.text_type(info.get(\u0027ipmi_password\u0027))"},{"line_number":258,"context_line":"    port \u003d info.get(\u0027ipmi_terminal_port\u0027)"},{"line_number":259,"context_line":"    priv_level \u003d info.get(\u0027ipmi_priv_level\u0027, \u0027ADMINISTRATOR\u0027)"},{"line_number":260,"context_line":"    bridging_type \u003d info.get(\u0027ipmi_bridging\u0027, \u0027no\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a2fa921_7ccb5173","line":257,"in_reply_to":"7a2fa921_9cf2ed05","updated":"2015-10-05 14:43:57.000000000","message":"It is stored as unicode in db, and on python2 doing str of some unicode text will give UnicodeEncodeError here, so I thought it would be better to use six.text_type and after that give some more meaningful exception.","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"286d44912b58d5c3d7597e3197288b1b26650eea","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    address \u003d info.get(\u0027ipmi_address\u0027)"},{"line_number":256,"context_line":"    username \u003d six.text_type(info.get(\u0027ipmi_username\u0027, \u0027\u0027))"},{"line_number":257,"context_line":"    password \u003d six.text_type(info.get(\u0027ipmi_password\u0027))"},{"line_number":258,"context_line":"    port \u003d info.get(\u0027ipmi_terminal_port\u0027)"},{"line_number":259,"context_line":"    priv_level \u003d info.get(\u0027ipmi_priv_level\u0027, \u0027ADMINISTRATOR\u0027)"},{"line_number":260,"context_line":"    bridging_type \u003d info.get(\u0027ipmi_bridging\u0027, \u0027no\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a2fa921_79ada330","line":257,"in_reply_to":"9a1a9d01_3008302d","updated":"2015-10-05 14:36:20.000000000","message":"This is how it was proposed in the first place, but it was suggested to the author to use six.text_type instead (see patch-set #1 and forward)","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b476f02daa63aa50b076e5d04f753f346f71122d","unresolved":false,"context_lines":[{"line_number":273,"context_line":"            \"value can be one of %(valid_versions)s\") %"},{"line_number":274,"context_line":"            {\u0027version\u0027: protocol_version, \u0027valid_versions\u0027: valid_versions})"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    # check if ipmi_username has proper value"},{"line_number":277,"context_line":"    try:"},{"line_number":278,"context_line":"        username.encode(\u0027ascii\u0027)"},{"line_number":279,"context_line":"    except UnicodeEncodeError:"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a1a9d01_d006941f","line":276,"updated":"2015-10-05 13:36:11.000000000","message":"see above about this check","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"f964a54bbea4599370f219945072da0d0408d2a6","unresolved":false,"context_lines":[{"line_number":273,"context_line":"            \"value can be one of %(valid_versions)s\") %"},{"line_number":274,"context_line":"            {\u0027version\u0027: protocol_version, \u0027valid_versions\u0027: valid_versions})"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    # check if ipmi_username has proper value"},{"line_number":277,"context_line":"    try:"},{"line_number":278,"context_line":"        username.encode(\u0027ascii\u0027)"},{"line_number":279,"context_line":"    except UnicodeEncodeError:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a2fa921_3ce4f939","line":276,"in_reply_to":"7a2fa921_19fcaf3d","updated":"2015-10-05 14:38:55.000000000","message":"we don\u0027t need to check it anyway, IMO. a password either contains only valid chars, or is incorrect anyway. why should we do the check ourselves?","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"},{"author":{"_account_id":16754,"name":"Shinn\u0027ya Hoshino","email":"shinn-hosyno@nec.com","username":"shinn-hoshino"},"change_message_id":"5dd57bd921f8f53e7b334687fc35dfb9c514638b","unresolved":false,"context_lines":[{"line_number":273,"context_line":"            \"value can be one of %(valid_versions)s\") %"},{"line_number":274,"context_line":"            {\u0027version\u0027: protocol_version, \u0027valid_versions\u0027: valid_versions})"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    # check if ipmi_username has proper value"},{"line_number":277,"context_line":"    try:"},{"line_number":278,"context_line":"        username.encode(\u0027ascii\u0027)"},{"line_number":279,"context_line":"    except UnicodeEncodeError:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a2fa921_ee922e57","line":276,"in_reply_to":"7a2fa921_3ce4f939","updated":"2015-10-06 01:09:56.000000000","message":"It is the implementation that I have added is pointed out from Yuriy\nZveryanskyy at Patch Set 4.\nThen, in the definition of the current username, without having to apply\nthis patch, it will throw an exception before running until ipmitools.\nWhen it does not check, I think it will have to fix as running with\nnon-ASCII username until ipmitools without throw an exception.\nHowever, more than to do so, I think better idea that checking in here.\nWhat do you think?","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"843839e239292ece60ec6727741130456f8a81e7","unresolved":false,"context_lines":[{"line_number":273,"context_line":"            \"value can be one of %(valid_versions)s\") %"},{"line_number":274,"context_line":"            {\u0027version\u0027: protocol_version, \u0027valid_versions\u0027: valid_versions})"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    # check if ipmi_username has proper value"},{"line_number":277,"context_line":"    try:"},{"line_number":278,"context_line":"        username.encode(\u0027ascii\u0027)"},{"line_number":279,"context_line":"    except UnicodeEncodeError:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a2fa921_1c06dd20","line":276,"in_reply_to":"7a2fa921_3ce4f939","updated":"2015-10-05 14:54:04.000000000","message":"Yes, another way could be just document what the correct values are, but the patch author thinks that it\u0027s better to handle it.","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"286d44912b58d5c3d7597e3197288b1b26650eea","unresolved":false,"context_lines":[{"line_number":273,"context_line":"            \"value can be one of %(valid_versions)s\") %"},{"line_number":274,"context_line":"            {\u0027version\u0027: protocol_version, \u0027valid_versions\u0027: valid_versions})"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    # check if ipmi_username has proper value"},{"line_number":277,"context_line":"    try:"},{"line_number":278,"context_line":"        username.encode(\u0027ascii\u0027)"},{"line_number":279,"context_line":"    except UnicodeEncodeError:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a2fa921_19fcaf3d","line":276,"in_reply_to":"9a1a9d01_d006941f","updated":"2015-10-05 14:36:20.000000000","message":"Perhaps this comment should mention that in the IPMI specification the username name can only include ASCII characters","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"286d44912b58d5c3d7597e3197288b1b26650eea","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        username.encode(\u0027ascii\u0027)"},{"line_number":279,"context_line":"    except UnicodeEncodeError:"},{"line_number":280,"context_line":"        raise exception.InvalidParameterValue(_("},{"line_number":281,"context_line":"            \"Invalid IPMI username value, Username can include just ASCII \""},{"line_number":282,"context_line":"            \"characters.\"))"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    if port is not None:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a2fa921_f9cbf31c","line":281,"updated":"2015-10-05 14:36:20.000000000","message":"s/, Username can include just ASCII/. Username can only include ASCII\n\nAlso perhaps including the current value would be good for debugging. Perhaps, something like:\n\nraise exception.InvalidParameterValue(_(\u0027Invalid IPMI user name \"%s\". User names can only include ASCII characters\u0027) % username)","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"},{"author":{"_account_id":16754,"name":"Shinn\u0027ya Hoshino","email":"shinn-hosyno@nec.com","username":"shinn-hoshino"},"change_message_id":"5e3e622506273417038ca0a8776c7a4e03aecd8b","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        username.encode(\u0027ascii\u0027)"},{"line_number":279,"context_line":"    except UnicodeEncodeError:"},{"line_number":280,"context_line":"        raise exception.InvalidParameterValue(_("},{"line_number":281,"context_line":"            \"Invalid IPMI username value, Username can include just ASCII \""},{"line_number":282,"context_line":"            \"characters.\"))"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    if port is not None:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a2fa921_f5950b40","line":281,"in_reply_to":"7a2fa921_f9cbf31c","updated":"2015-10-06 12:09:51.000000000","message":"I changed from \"just\" to \"only\".\n\nHowever, I gave up to be used the current value into the output message.\nActually, I tried it while writing the Patch Set 5. But, the type of\nvalue does not match between the format specification and variables by\nsome cases.","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"}],"ironic/tests/drivers/test_ipmitool.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"d5533e4e30cbb416ebc99ce43f64fb56908ab8c8","unresolved":false,"context_lines":[{"line_number":404,"context_line":"        ipmi._parse_driver_info(node)"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"        # ipmi_username / ipmi_password must not be converted to int / float"},{"line_number":407,"context_line":"        # even if it includes just numbers."},{"line_number":408,"context_line":"        info \u003d dict(INFO_DICT)"},{"line_number":409,"context_line":"        info[\u0027ipmi_username\u0027] \u003d \u002701234567\u0027"},{"line_number":410,"context_line":"        node \u003d obj_utils.get_test_node(self.context, driver_info\u003dinfo)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_a8e532dc","line":407,"updated":"2015-09-18 17:30:59.000000000","message":"This test passes even w/o your changes. You should put integers values into a node, then run _parse_driver_info() and check that values are converted.","commit_id":"c46f387a70157e45b6ca3b35c5d059ac20bd308b"},{"author":{"_account_id":12385,"name":"Motohiro/Yuanying Otsuka","email":"yuanying@fraction.jp","username":"yuanying"},"change_message_id":"7131feb0b46aad707b90986cdbdb70b0229a4108","unresolved":false,"context_lines":[{"line_number":404,"context_line":"        ipmi._parse_driver_info(node)"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"        # ipmi_username / ipmi_password must not be converted to int / float"},{"line_number":407,"context_line":"        # even if it includes just numbers."},{"line_number":408,"context_line":"        info \u003d dict(INFO_DICT)"},{"line_number":409,"context_line":"        info[\u0027ipmi_username\u0027] \u003d \u002701234567\u0027"},{"line_number":410,"context_line":"        node \u003d obj_utils.get_test_node(self.context, driver_info\u003dinfo)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_e5a716ba","line":407,"in_reply_to":"ba15a1d1_95cdd35f","updated":"2015-09-24 02:17:39.000000000","message":"I think you should add separate test method for testing integer value. because this only test for integer password not text.","commit_id":"c46f387a70157e45b6ca3b35c5d059ac20bd308b"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"4fdd428f237786501b8103c9a768adf273086268","unresolved":false,"context_lines":[{"line_number":404,"context_line":"        ipmi._parse_driver_info(node)"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"        # ipmi_username / ipmi_password must not be converted to int / float"},{"line_number":407,"context_line":"        # even if it includes just numbers."},{"line_number":408,"context_line":"        info \u003d dict(INFO_DICT)"},{"line_number":409,"context_line":"        info[\u0027ipmi_username\u0027] \u003d \u002701234567\u0027"},{"line_number":410,"context_line":"        node \u003d obj_utils.get_test_node(self.context, driver_info\u003dinfo)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_95cdd35f","line":407,"in_reply_to":"ba15a1d1_a8e532dc","updated":"2015-09-19 08:49:43.000000000","message":"+1.","commit_id":"c46f387a70157e45b6ca3b35c5d059ac20bd308b"}],"ironic/tests/unit/drivers/modules/test_ipmitool.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b476f02daa63aa50b076e5d04f753f346f71122d","unresolved":false,"context_lines":[{"line_number":581,"context_line":"    def test__parse_driver_info_nonascii_username(self, mock_sleep):"},{"line_number":582,"context_line":"        # ipmi_username String in ASCII."},{"line_number":583,"context_line":"        info \u003d dict(INFO_DICT)"},{"line_number":584,"context_line":"        info[\u0027ipmi_username\u0027] \u003d six.u(\u0027\\xC2\\xB0\\xC2\\xB0\\xC2\\xB0\\xC2\\xB0\u0027)"},{"line_number":585,"context_line":"        # DEGREE SIGN * 4 at UTF-8"},{"line_number":586,"context_line":"        node \u003d obj_utils.get_test_node(self.context, driver_info\u003dinfo)"},{"line_number":587,"context_line":"        self.assertRaises(exception.InvalidParameterValue,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a1a9d01_f0015807","line":584,"updated":"2015-10-05 13:36:11.000000000","message":"we use Python 3.4, which also supports u\"..\" literals","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"},{"author":{"_account_id":16754,"name":"Shinn\u0027ya Hoshino","email":"shinn-hosyno@nec.com","username":"shinn-hoshino"},"change_message_id":"5e3e622506273417038ca0a8776c7a4e03aecd8b","unresolved":false,"context_lines":[{"line_number":581,"context_line":"    def test__parse_driver_info_nonascii_username(self, mock_sleep):"},{"line_number":582,"context_line":"        # ipmi_username String in ASCII."},{"line_number":583,"context_line":"        info \u003d dict(INFO_DICT)"},{"line_number":584,"context_line":"        info[\u0027ipmi_username\u0027] \u003d six.u(\u0027\\xC2\\xB0\\xC2\\xB0\\xC2\\xB0\\xC2\\xB0\u0027)"},{"line_number":585,"context_line":"        # DEGREE SIGN * 4 at UTF-8"},{"line_number":586,"context_line":"        node \u003d obj_utils.get_test_node(self.context, driver_info\u003dinfo)"},{"line_number":587,"context_line":"        self.assertRaises(exception.InvalidParameterValue,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a2fa921_355aa384","line":584,"in_reply_to":"9a1a9d01_f0015807","updated":"2015-10-06 12:09:51.000000000","message":"For the same reason as the l.256-257 of ipmitool.py, it will remain six.u().\nSimilarly below.","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b476f02daa63aa50b076e5d04f753f346f71122d","unresolved":false,"context_lines":[{"line_number":596,"context_line":"        info[\u0027ipmi_password\u0027] \u003d 12345678"},{"line_number":597,"context_line":"        node \u003d obj_utils.get_test_node(self.context, driver_info\u003dinfo)"},{"line_number":598,"context_line":"        ret \u003d ipmi._parse_driver_info(node)"},{"line_number":599,"context_line":"        self.assertEqual(six.u(\u002712345678\u0027), ret[\u0027username\u0027])"},{"line_number":600,"context_line":"        self.assertIsInstance(ret[\u0027username\u0027], six.text_type)"},{"line_number":601,"context_line":"        self.assertEqual(six.u(\u002712345678\u0027), ret[\u0027password\u0027])"},{"line_number":602,"context_line":"        self.assertIsInstance(ret[\u0027password\u0027], six.text_type)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a1a9d01_93ffc600","line":599,"updated":"2015-10-05 13:36:11.000000000","message":"ditto about u\"..\" literals","commit_id":"6c2ed9edb0477004ae4b5f79cfdca17b59281ad2"}],"ironic/tests/unit/drivers/test_ipmitool.py":[{"author":{"_account_id":10765,"name":"Andre Aranha","email":"afaranha@lsd.ufcg.edu.br","username":"afaranha"},"change_message_id":"d00450b3debae2e7faabae085d5dd7fa7601579e","unresolved":false,"context_lines":[{"line_number":408,"context_line":"        info \u003d dict(INFO_DICT)"},{"line_number":409,"context_line":"        info[\u0027ipmi_username\u0027] \u003d \u002701234567\u0027"},{"line_number":410,"context_line":"        node \u003d obj_utils.get_test_node(self.context, driver_info\u003dinfo)"},{"line_number":411,"context_line":"        self.assertEqual(\u002701234567\u0027, info[\u0027ipmi_username\u0027])"},{"line_number":412,"context_line":"        info \u003d dict(INFO_DICT)"},{"line_number":413,"context_line":"        info[\u0027ipmi_password\u0027] \u003d \u002701234567\u0027"},{"line_number":414,"context_line":"        node \u003d obj_utils.get_test_node(self.context, driver_info\u003dinfo)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_5141fd36","line":411,"updated":"2015-09-29 12:58:53.000000000","message":"You assigned the info[\u0027ipmi_username\u0027] to \u002701234567\u0027 than you check if the variable that you just assigned has the same value. Shouldn\u0027t you check using the node variable instead of the info?","commit_id":"baa61beee466689650ba8f794dfc2b37a1871de9"},{"author":{"_account_id":16754,"name":"Shinn\u0027ya Hoshino","email":"shinn-hosyno@nec.com","username":"shinn-hoshino"},"change_message_id":"85511e87bf98b1322218f92d4e0c4729f7f1e854","unresolved":false,"context_lines":[{"line_number":408,"context_line":"        info \u003d dict(INFO_DICT)"},{"line_number":409,"context_line":"        info[\u0027ipmi_username\u0027] \u003d \u002701234567\u0027"},{"line_number":410,"context_line":"        node \u003d obj_utils.get_test_node(self.context, driver_info\u003dinfo)"},{"line_number":411,"context_line":"        self.assertEqual(\u002701234567\u0027, info[\u0027ipmi_username\u0027])"},{"line_number":412,"context_line":"        info \u003d dict(INFO_DICT)"},{"line_number":413,"context_line":"        info[\u0027ipmi_password\u0027] \u003d \u002701234567\u0027"},{"line_number":414,"context_line":"        node \u003d obj_utils.get_test_node(self.context, driver_info\u003dinfo)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_b44aab24","line":411,"in_reply_to":"9a1a9d01_5141fd36","updated":"2015-10-02 00:29:39.000000000","message":"I\u0027m sorry, just a careless mistake, I forgot to delete this test.\nInstead of it is located in the l.601-620.","commit_id":"baa61beee466689650ba8f794dfc2b37a1871de9"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"56978ba8c69f316e9bd69c1773a8fededeb8d754","unresolved":false,"context_lines":[{"line_number":587,"context_line":"        self.assertRaises(exception.InvalidParameterValue,"},{"line_number":588,"context_line":"                          ipmi._parse_driver_info, node)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    def test__parse_driver_info_numeric_username(self, mock_sleep):"},{"line_number":591,"context_line":"        # ipmi_username must not be converted to int / float"},{"line_number":592,"context_line":"        # even if it includes just numbers."},{"line_number":593,"context_line":"        info \u003d dict(INFO_DICT)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_afd9f158","line":590,"updated":"2015-09-30 05:43:50.000000000","message":"I don\u0027t see a reason why we need two test cases. Can\u0027t they be combined to one.  I mean use numeric username/password in the same unit test.","commit_id":"cb0464e629c23cf4ddc109d4c9f8942848a86d1c"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"0a0c0ca790738eb5968a42067226a1a5270fc9a6","unresolved":false,"context_lines":[{"line_number":587,"context_line":"        self.assertRaises(exception.InvalidParameterValue,"},{"line_number":588,"context_line":"                          ipmi._parse_driver_info, node)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    def test__parse_driver_info_numeric_username_and_password("},{"line_number":591,"context_line":"            self, mock_sleep):"},{"line_number":592,"context_line":"        # ipmi_username must not be converted to int / float"},{"line_number":593,"context_line":"        # even if it includes just numbers."}],"source_content_type":"text/x-python","patch_set":8,"id":"9a1a9d01_97b40483","line":590,"updated":"2015-10-01 12:06:40.000000000","message":"I think code here can be simpler by merging two blocks for username and password and use only one call _parse_driver_info().","commit_id":"256715448e50eeb71b3bbcddd76b88ae8295f96c"},{"author":{"_account_id":16754,"name":"Shinn\u0027ya Hoshino","email":"shinn-hosyno@nec.com","username":"shinn-hoshino"},"change_message_id":"34a2dd280ba6a04ed2c8869d1c409530ef515cb2","unresolved":false,"context_lines":[{"line_number":587,"context_line":"        self.assertRaises(exception.InvalidParameterValue,"},{"line_number":588,"context_line":"                          ipmi._parse_driver_info, node)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    def test__parse_driver_info_numeric_username_and_password("},{"line_number":591,"context_line":"            self, mock_sleep):"},{"line_number":592,"context_line":"        # ipmi_username must not be converted to int / float"},{"line_number":593,"context_line":"        # even if it includes just numbers."}],"source_content_type":"text/x-python","patch_set":8,"id":"9a1a9d01_577dede5","line":590,"in_reply_to":"9a1a9d01_97b40483","updated":"2015-10-01 23:53:45.000000000","message":"Done","commit_id":"256715448e50eeb71b3bbcddd76b88ae8295f96c"}]}
