)]}'
{"ironic/drivers/modules/ipmitool.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"3e9fae075874e01bf5c73a1d63d8415aa8eef23b","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        LOG.warning(_LW(\u0027ipmi_username not specified. Using NULL user\u0027))"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    if not driver_info[\u0027password\u0027]:"},{"line_number":383,"context_line":"        LOG.warning(_LW(\u0027ipmi_password not specified. Using NULL password\u0027))"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    for name, option in BRIDGING_OPTIONS:"},{"line_number":386,"context_line":"        if driver_info[name] is not None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_394b252c","line":383,"updated":"2016-01-29 18:36:45.000000000","message":"Actually,","commit_id":"88cdf5aa83674dc12f1e7a93bff32c0073995f36"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"944ace560fece9d7df4f2ca092f7231af9723cb9","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        LOG.warning(_LW(\u0027ipmi_username not specified. Using NULL user\u0027))"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    if not driver_info[\u0027password\u0027]:"},{"line_number":383,"context_line":"        LOG.warning(_LW(\u0027ipmi_password not specified. Using NULL password\u0027))"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    for name, option in BRIDGING_OPTIONS:"},{"line_number":386,"context_line":"        if driver_info[name] is not None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_964f9fbc","line":383,"updated":"2016-01-29 10:03:38.000000000","message":"Empty string is also valid here, so maybe s/not specified/is empty? Also this is going to be output every time ipmitool is used, e.g. during sync_power_state (every 60 seconds by default). Maybe debug is more suitable here?","commit_id":"88cdf5aa83674dc12f1e7a93bff32c0073995f36"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"40e8fab34217add026029e7737cfe94c6a939dcf","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        LOG.warning(_LW(\u0027ipmi_username not specified. Using NULL user\u0027))"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    if not driver_info[\u0027password\u0027]:"},{"line_number":383,"context_line":"        LOG.warning(_LW(\u0027ipmi_password not specified. Using NULL password\u0027))"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    for name, option in BRIDGING_OPTIONS:"},{"line_number":386,"context_line":"        if driver_info[name] is not None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_f397f745","line":383,"updated":"2016-01-29 14:26:32.000000000","message":"If we\u0027re going to do this, I\u0027d prefer to do it in _parse_driver_info(); then it will warn at validate time as well as runtime. I don\u0027t love the amount of spam this will generate, but I do think warning is the right level here. +1 for Julia\u0027s suggested message.","commit_id":"88cdf5aa83674dc12f1e7a93bff32c0073995f36"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"0c0304ef9e6af02c8b2cb864cd99332bad856ae3","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        LOG.warning(_LW(\u0027ipmi_username not specified. Using NULL user\u0027))"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    if not driver_info[\u0027password\u0027]:"},{"line_number":383,"context_line":"        LOG.warning(_LW(\u0027ipmi_password not specified. Using NULL password\u0027))"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    for name, option in BRIDGING_OPTIONS:"},{"line_number":386,"context_line":"        if driver_info[name] is not None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_556c3636","line":383,"in_reply_to":"7a5de9d1_1734a247","updated":"2016-02-02 10:37:42.000000000","message":"++\n\nI agree about warning as part of the parsing instead of every time ipmitool is executed.","commit_id":"88cdf5aa83674dc12f1e7a93bff32c0073995f36"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"77c7a059b6e68a41ae231331e972ac1c33f21133","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        LOG.warning(_LW(\u0027ipmi_username not specified. Using NULL user\u0027))"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    if not driver_info[\u0027password\u0027]:"},{"line_number":383,"context_line":"        LOG.warning(_LW(\u0027ipmi_password not specified. Using NULL password\u0027))"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    for name, option in BRIDGING_OPTIONS:"},{"line_number":386,"context_line":"        if driver_info[name] is not None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_1734a247","line":383,"in_reply_to":"7a5de9d1_1a06511d","updated":"2016-02-01 20:32:23.000000000","message":"I like Michael\u0027s suggestion.","commit_id":"88cdf5aa83674dc12f1e7a93bff32c0073995f36"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"a934618b7bd980e5981c1c32f8e01089848c43cc","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        LOG.warning(_LW(\u0027ipmi_username not specified. Using NULL user\u0027))"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    if not driver_info[\u0027password\u0027]:"},{"line_number":383,"context_line":"        LOG.warning(_LW(\u0027ipmi_password not specified. Using NULL password\u0027))"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    for name, option in BRIDGING_OPTIONS:"},{"line_number":386,"context_line":"        if driver_info[name] is not None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_bfa372b1","line":383,"in_reply_to":"7a5de9d1_505b64f6","updated":"2016-01-29 20:56:02.000000000","message":"Good suggestion","commit_id":"88cdf5aa83674dc12f1e7a93bff32c0073995f36"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"a934618b7bd980e5981c1c32f8e01089848c43cc","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        LOG.warning(_LW(\u0027ipmi_username not specified. Using NULL user\u0027))"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    if not driver_info[\u0027password\u0027]:"},{"line_number":383,"context_line":"        LOG.warning(_LW(\u0027ipmi_password not specified. Using NULL password\u0027))"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    for name, option in BRIDGING_OPTIONS:"},{"line_number":386,"context_line":"        if driver_info[name] is not None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_ffc6ca66","line":383,"in_reply_to":"7a5de9d1_964f9fbc","updated":"2016-01-29 20:56:02.000000000","message":"Actually down on L417 an empty string would get converted to NULL (\\0)","commit_id":"88cdf5aa83674dc12f1e7a93bff32c0073995f36"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"44e90e61292c117215980a29b2070f10c1ea0e3c","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        LOG.warning(_LW(\u0027ipmi_username not specified. Using NULL user\u0027))"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    if not driver_info[\u0027password\u0027]:"},{"line_number":383,"context_line":"        LOG.warning(_LW(\u0027ipmi_password not specified. Using NULL password\u0027))"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    for name, option in BRIDGING_OPTIONS:"},{"line_number":386,"context_line":"        if driver_info[name] is not None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_505b64f6","line":383,"in_reply_to":"7a5de9d1_964f9fbc","updated":"2016-01-29 13:15:43.000000000","message":"I\u0027m not sure this is the right place to put data validation warnings since this will be called repeatedly, but perhaps that is exactly what is needed to raise awareness that something is very wrong.   If we want to keep this here,  I think the messages should be more along the lines of \u0027ipmi_password is not defined for node %s: No password will be utilized.\u0027 %  driver_info(\u0027uuid\u0027)\u0027","commit_id":"88cdf5aa83674dc12f1e7a93bff32c0073995f36"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"919f5c0280c8b95440be4a1477998c411f91cae7","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        LOG.warning(_LW(\u0027ipmi_username not specified. Using NULL user\u0027))"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    if not driver_info[\u0027password\u0027]:"},{"line_number":383,"context_line":"        LOG.warning(_LW(\u0027ipmi_password not specified. Using NULL password\u0027))"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    for name, option in BRIDGING_OPTIONS:"},{"line_number":386,"context_line":"        if driver_info[name] is not None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_0016f74b","line":383,"in_reply_to":"7a5de9d1_964f9fbc","updated":"2016-01-29 13:58:38.000000000","message":"Warning level is ok by standard https://wiki.openstack.org/wiki/LoggingStandards#Log_level_definitions .","commit_id":"88cdf5aa83674dc12f1e7a93bff32c0073995f36"},{"author":{"_account_id":8125,"name":"Michael Davies","email":"michael@the-davies.net","username":"mrda"},"change_message_id":"69673da2519241811371986d26f811d8e5dcadf4","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        LOG.warning(_LW(\u0027ipmi_username not specified. Using NULL user\u0027))"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    if not driver_info[\u0027password\u0027]:"},{"line_number":383,"context_line":"        LOG.warning(_LW(\u0027ipmi_password not specified. Using NULL password\u0027))"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    for name, option in BRIDGING_OPTIONS:"},{"line_number":386,"context_line":"        if driver_info[name] is not None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_1a06511d","line":383,"in_reply_to":"7a5de9d1_f397f745","updated":"2016-01-29 22:36:00.000000000","message":"I like it in _parse_driver_info(), fwiw.  I think linking it to validate is useful.","commit_id":"88cdf5aa83674dc12f1e7a93bff32c0073995f36"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"a934618b7bd980e5981c1c32f8e01089848c43cc","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        LOG.warning(_LW(\u0027ipmi_username not specified. Using NULL user\u0027))"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    if not driver_info[\u0027password\u0027]:"},{"line_number":383,"context_line":"        LOG.warning(_LW(\u0027ipmi_password not specified. Using NULL password\u0027))"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    for name, option in BRIDGING_OPTIONS:"},{"line_number":386,"context_line":"        if driver_info[name] is not None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_9f9c765e","line":383,"in_reply_to":"7a5de9d1_f397f745","updated":"2016-01-29 20:56:02.000000000","message":"One reason I had put it here was so that it would be seen at the same spot as impitool exec command.\n\nBut I can move it.","commit_id":"88cdf5aa83674dc12f1e7a93bff32c0073995f36"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"8d85509caf89a896e3f13ea94daf49e9cb2db2d1","unresolved":false,"context_lines":[{"line_number":269,"context_line":"    protocol_version \u003d str(info.get(\u0027ipmi_protocol_version\u0027, \u00272.0\u0027))"},{"line_number":270,"context_line":"    force_boot_device \u003d info.get(\u0027ipmi_force_boot_device\u0027, False)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    if not username:"},{"line_number":273,"context_line":"        LOG.warning(_LW(\u0027ipmi_username is not defined or empty for node %s: \u0027"},{"line_number":274,"context_line":"                        \u0027NULL user will be utilized.\u0027) % node.uuid)"},{"line_number":275,"context_line":"    if not password:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_3ed05dc9","line":272,"updated":"2016-02-02 19:33:48.000000000","message":"this will pass when username (or password) is an empty string. Even if I set the ipmi_username\u003d\u0027\u0027, it will still log a warning.\n\nPlease use \"if xx is None\" instead of \"if not xx\"","commit_id":"88164797dd372b20ba3d91f4a3d5e30ca09e4009"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"e13dd7f91fbc9c245aada26f8275a0c70298e628","unresolved":false,"context_lines":[{"line_number":269,"context_line":"    protocol_version \u003d str(info.get(\u0027ipmi_protocol_version\u0027, \u00272.0\u0027))"},{"line_number":270,"context_line":"    force_boot_device \u003d info.get(\u0027ipmi_force_boot_device\u0027, False)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    if not username:"},{"line_number":273,"context_line":"        LOG.warning(_LW(\u0027ipmi_username is not defined or empty for node %s: \u0027"},{"line_number":274,"context_line":"                        \u0027NULL user will be utilized.\u0027) % node.uuid)"},{"line_number":275,"context_line":"    if not password:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_792b4f34","line":272,"in_reply_to":"7a5de9d1_3ed05dc9","updated":"2016-02-02 19:48:00.000000000","message":"That is how the code works:\n\nhttps://github.com/openstack/ironic/blob/master/ironic/drivers/modules/ipmitool.py#L376\n\nI am logging how the code works.","commit_id":"88164797dd372b20ba3d91f4a3d5e30ca09e4009"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"141bf041dad36e59187ed264df4701b096fc3278","unresolved":false,"context_lines":[{"line_number":269,"context_line":"    protocol_version \u003d str(info.get(\u0027ipmi_protocol_version\u0027, \u00272.0\u0027))"},{"line_number":270,"context_line":"    force_boot_device \u003d info.get(\u0027ipmi_force_boot_device\u0027, False)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    if not username:"},{"line_number":273,"context_line":"        LOG.warning(_LW(\u0027ipmi_username is not defined or empty for node %s: \u0027"},{"line_number":274,"context_line":"                        \u0027NULL user will be utilized.\u0027) % node.uuid)"},{"line_number":275,"context_line":"    if not password:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_518d277a","line":272,"in_reply_to":"7a5de9d1_792b4f34","updated":"2016-02-03 04:20:57.000000000","message":"What I\u0027m trying to say is that None or empty string is treated the same and will cause the \u0027-U \u003cusername\u003e\u0027 argument to not be used. Thus an empty string becomes the NULL user.","commit_id":"88164797dd372b20ba3d91f4a3d5e30ca09e4009"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"72c8ac50d9c22dbee06115582e9290ca35c59067","unresolved":false,"context_lines":[{"line_number":274,"context_line":"                        \u0027NULL user will be utilized.\u0027) % node.uuid)"},{"line_number":275,"context_line":"    if not password:"},{"line_number":276,"context_line":"        LOG.warning(_LW(\u0027ipmi_password is not defined or empty for node %s: \u0027"},{"line_number":277,"context_line":"                        \u0027NULL password will be utilized.\u0027) % node.uuid)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    if protocol_version not in VALID_PROTO_VERSIONS:"},{"line_number":280,"context_line":"        valid_versions \u003d \u0027, \u0027.join(VALID_PROTO_VERSIONS)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_9e995122","line":277,"range":{"start_line":277,"start_character":25,"end_line":277,"end_character":29},"updated":"2016-02-02 19:34:33.000000000","message":"If I\u0027m remembering correctly, it just doesn\u0027t pass the password flag and file to ipmitool when no password is used, so NULL just doesn\u0027t feel like the right word.  Regardless, I think it is a positive change.","commit_id":"88164797dd372b20ba3d91f4a3d5e30ca09e4009"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"8e10f5ab101f2e76a51080e7ef3434acea823b23","unresolved":false,"context_lines":[{"line_number":274,"context_line":"                        \u0027NULL user will be utilized.\u0027) % node.uuid)"},{"line_number":275,"context_line":"    if not password:"},{"line_number":276,"context_line":"        LOG.warning(_LW(\u0027ipmi_password is not defined or empty for node %s: \u0027"},{"line_number":277,"context_line":"                        \u0027NULL password will be utilized.\u0027) % node.uuid)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    if protocol_version not in VALID_PROTO_VERSIONS:"},{"line_number":280,"context_line":"        valid_versions \u003d \u0027, \u0027.join(VALID_PROTO_VERSIONS)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_07c9d6ab","line":277,"range":{"start_line":277,"start_character":25,"end_line":277,"end_character":29},"in_reply_to":"5a5ae5dd_71ddc36f","updated":"2016-02-08 13:26:29.000000000","message":"Ahh, I forgot that it always made the password file. :\\  WFM","commit_id":"88164797dd372b20ba3d91f4a3d5e30ca09e4009"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"141bf041dad36e59187ed264df4701b096fc3278","unresolved":false,"context_lines":[{"line_number":274,"context_line":"                        \u0027NULL user will be utilized.\u0027) % node.uuid)"},{"line_number":275,"context_line":"    if not password:"},{"line_number":276,"context_line":"        LOG.warning(_LW(\u0027ipmi_password is not defined or empty for node %s: \u0027"},{"line_number":277,"context_line":"                        \u0027NULL password will be utilized.\u0027) % node.uuid)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    if protocol_version not in VALID_PROTO_VERSIONS:"},{"line_number":280,"context_line":"        valid_versions \u003d \u0027, \u0027.join(VALID_PROTO_VERSIONS)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_71ddc36f","line":277,"range":{"start_line":277,"start_character":25,"end_line":277,"end_character":29},"in_reply_to":"7a5de9d1_398157fc","updated":"2016-02-03 04:20:57.000000000","message":"When an empty string or None value for the password is set then a password file is generated that only contains a NULL character (\\0)","commit_id":"88164797dd372b20ba3d91f4a3d5e30ca09e4009"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"e13dd7f91fbc9c245aada26f8275a0c70298e628","unresolved":false,"context_lines":[{"line_number":274,"context_line":"                        \u0027NULL user will be utilized.\u0027) % node.uuid)"},{"line_number":275,"context_line":"    if not password:"},{"line_number":276,"context_line":"        LOG.warning(_LW(\u0027ipmi_password is not defined or empty for node %s: \u0027"},{"line_number":277,"context_line":"                        \u0027NULL password will be utilized.\u0027) % node.uuid)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    if protocol_version not in VALID_PROTO_VERSIONS:"},{"line_number":280,"context_line":"        valid_versions \u003d \u0027, \u0027.join(VALID_PROTO_VERSIONS)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_398157fc","line":277,"range":{"start_line":277,"start_character":25,"end_line":277,"end_character":29},"in_reply_to":"7a5de9d1_9e995122","updated":"2016-02-02 19:48:00.000000000","message":"I think it is NULL from:\n\nhttps://github.com/openstack/ironic/blob/master/ironic/drivers/modules/ipmitool.py#L412","commit_id":"88164797dd372b20ba3d91f4a3d5e30ca09e4009"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"fa5a2dc8a18f2e92c46c5e83f8887c432071603c","unresolved":false,"context_lines":[{"line_number":274,"context_line":"                        \u0027NULL user will be utilized.\u0027) % node.uuid)"},{"line_number":275,"context_line":"    if not password:"},{"line_number":276,"context_line":"        LOG.warning(_LW(\u0027ipmi_password is not defined or empty for node %s: \u0027"},{"line_number":277,"context_line":"                        \u0027NULL password will be utilized.\u0027) % node.uuid)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    if protocol_version not in VALID_PROTO_VERSIONS:"},{"line_number":280,"context_line":"        valid_versions \u003d \u0027, \u0027.join(VALID_PROTO_VERSIONS)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a5ae5dd_46e72211","line":277,"updated":"2016-02-05 10:13:39.000000000","message":"Nit:\n\nInterpolation. We should use \",\" instead of \"%\" so that the string gets interpolated only if the log level is enabled. e.g\n\n LOG.warning(_LW(\u0027blah blah %s\u0027), node.uuid)","commit_id":"025d1941bcdd3da211e05b073c0e8d2a5a8f280b"}]}
