)]}'
{"ironic/common/utils.py":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"082fe987a5987b640310fc6b7c553c4351a63377","unresolved":false,"context_lines":[{"line_number":534,"context_line":"        raise exception.InvalidConductorGroup(group\u003dconductor_group)"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"def set_node_nested_field(node, collection, field, value):"},{"line_number":538,"context_line":"    col \u003d getattr(node, collection)"},{"line_number":539,"context_line":"    col[field] \u003d value"},{"line_number":540,"context_line":"    setattr(node, collection, col)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_ee82dec6","line":537,"range":{"start_line":537,"start_character":32,"end_line":537,"end_character":42},"updated":"2019-11-01 13:37:11.000000000","message":"It can\u0027t be more than one level of nesting, could it? Otherwise may be `collection` should better be a sequence of names?","commit_id":"ea4bcc478120d78680addc291f489726c632d4cc"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"43d37d25831119f312e5be13e01cb2faf9912da8","unresolved":false,"context_lines":[{"line_number":534,"context_line":"        raise exception.InvalidConductorGroup(group\u003dconductor_group)"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"def set_node_nested_field(node, collection, field, value):"},{"line_number":538,"context_line":"    col \u003d getattr(node, collection)"},{"line_number":539,"context_line":"    col[field] \u003d value"},{"line_number":540,"context_line":"    setattr(node, collection, col)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_f2bceab5","line":537,"range":{"start_line":537,"start_character":32,"end_line":537,"end_character":42},"in_reply_to":"3fa7e38b_ee82dec6","updated":"2019-11-04 13:34:50.000000000","message":"In theory - yes. I don\u0027t think we have it anywhere in practice, so I\u0027d keep it simple.","commit_id":"ea4bcc478120d78680addc291f489726c632d4cc"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a41f37fdcbe4a67b0964ac9521890443af5dd22f","unresolved":false,"context_lines":[{"line_number":534,"context_line":"        raise exception.InvalidConductorGroup(group\u003dconductor_group)"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"def set_node_nested_field(node, collection, field, value):"},{"line_number":538,"context_line":"    col \u003d getattr(node, collection)"},{"line_number":539,"context_line":"    col[field] \u003d value"},{"line_number":540,"context_line":"    setattr(node, collection, col)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_ce3f1020","line":537,"updated":"2019-11-20 00:03:02.000000000","message":"nit, doc strings please","commit_id":"7dd3ad1a83131eb782645d9fa0c1adde4a2bec95"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5598a55f49d044d06c78577fe53b6bdbb13cb4ce","unresolved":false,"context_lines":[{"line_number":534,"context_line":"        raise exception.InvalidConductorGroup(group\u003dconductor_group)"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"def set_node_nested_field(node, collection, field, value):"},{"line_number":538,"context_line":"    col \u003d getattr(node, collection)"},{"line_number":539,"context_line":"    col[field] \u003d value"},{"line_number":540,"context_line":"    setattr(node, collection, col)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_765fb80e","line":537,"in_reply_to":"3fa7e38b_ce3f1020","updated":"2019-11-21 12:30:44.000000000","message":"Done","commit_id":"7dd3ad1a83131eb782645d9fa0c1adde4a2bec95"}],"ironic/conf/inspector.py":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"082fe987a5987b640310fc6b7c553c4351a63377","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    cfg.IntOpt(\u0027status_check_period\u0027, default\u003d60,"},{"line_number":23,"context_line":"               help\u003d_(\u0027period (in seconds) to check status of nodes \u0027"},{"line_number":24,"context_line":"                      \u0027on inspection\u0027)),"},{"line_number":25,"context_line":"    cfg.Opt(\u0027extra_kernel_params\u0027,"},{"line_number":26,"context_line":"            # This is required for values that contain commas."},{"line_number":27,"context_line":"            type\u003dcfg_types.Dict(cfg_types.String(quotes\u003dTrue)),"},{"line_number":28,"context_line":"            default\u003d{},"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_2ea556b5","line":25,"updated":"2019-11-01 13:37:11.000000000","message":"We seem to have `ramdisk_kernel_arguments` already, is this different because of commas?","commit_id":"ea4bcc478120d78680addc291f489726c632d4cc"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"43d37d25831119f312e5be13e01cb2faf9912da8","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    cfg.IntOpt(\u0027status_check_period\u0027, default\u003d60,"},{"line_number":23,"context_line":"               help\u003d_(\u0027period (in seconds) to check status of nodes \u0027"},{"line_number":24,"context_line":"                      \u0027on inspection\u0027)),"},{"line_number":25,"context_line":"    cfg.Opt(\u0027extra_kernel_params\u0027,"},{"line_number":26,"context_line":"            # This is required for values that contain commas."},{"line_number":27,"context_line":"            type\u003dcfg_types.Dict(cfg_types.String(quotes\u003dTrue)),"},{"line_number":28,"context_line":"            default\u003d{},"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_b2e0b2cd","line":25,"in_reply_to":"3fa7e38b_2ea556b5","updated":"2019-11-04 13:34:50.000000000","message":"It\u0027s part of instance_info, which is empty during inspection (there is no instance).","commit_id":"ea4bcc478120d78680addc291f489726c632d4cc"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a41f37fdcbe4a67b0964ac9521890443af5dd22f","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                help\u003d_(\u0027require that the in-band inspection boot is fully \u0027"},{"line_number":38,"context_line":"                       \u0027managed by ironic. Set this to True if your \u0027"},{"line_number":39,"context_line":"                       \u0027installation of ironic-inspector does not have a \u0027"},{"line_number":40,"context_line":"                       \u0027separate PXE boot environment.\u0027)),"},{"line_number":41,"context_line":"]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_8e17d8a3","line":40,"updated":"2019-11-20 00:03:02.000000000","message":"We should make this the default since the separately managed environments seem to be a headache and also seem optional with some of the changes that have gone in over the past year or two. At least that is just my passing thought.","commit_id":"7dd3ad1a83131eb782645d9fa0c1adde4a2bec95"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5598a55f49d044d06c78577fe53b6bdbb13cb4ce","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                help\u003d_(\u0027require that the in-band inspection boot is fully \u0027"},{"line_number":38,"context_line":"                       \u0027managed by ironic. Set this to True if your \u0027"},{"line_number":39,"context_line":"                       \u0027installation of ironic-inspector does not have a \u0027"},{"line_number":40,"context_line":"                       \u0027separate PXE boot environment.\u0027)),"},{"line_number":41,"context_line":"]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_f6a088f5","line":40,"in_reply_to":"3fa7e38b_8e17d8a3","updated":"2019-11-21 12:30:44.000000000","message":"Doing it by default will be a breaking change for everyone using inspection since they won\u0027t have inspection_network set on upgrade.","commit_id":"7dd3ad1a83131eb782645d9fa0c1adde4a2bec95"}],"ironic/drivers/base.py":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"082fe987a5987b640310fc6b7c553c4351a63377","unresolved":false,"context_lines":[{"line_number":1535,"context_line":"            is invalid."},{"line_number":1536,"context_line":"        :raises: MissingParameterValue, if some parameters are missing."},{"line_number":1537,"context_line":"        \"\"\""},{"line_number":1538,"context_line":"        pass"},{"line_number":1539,"context_line":""},{"line_number":1540,"context_line":"    def need_power_on(self, task):"},{"line_number":1541,"context_line":"        \"\"\"Check if ironic node must be powered on before applying network changes"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_4e18d21c","line":1538,"updated":"2019-11-01 13:37:11.000000000","message":"nit: pass not needed","commit_id":"ea4bcc478120d78680addc291f489726c632d4cc"}],"ironic/drivers/modules/inspector.py":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e5c054f323047132bea8b2179d17cb1469e8b4e2","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                      \u0027options are not populated: %(exc)s\u0027,"},{"line_number":122,"context_line":"                      {\u0027node\u0027: task.node.uuid, \u0027exc\u0027: e})"},{"line_number":123,"context_line":"        else:"},{"line_number":124,"context_line":"            manage_boot \u003d False"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        d_info \u003d task.node.driver_internal_info"},{"line_number":127,"context_line":"        d_info[\u0027inspector_manage_boot\u0027] \u003d manage_boot"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_146a39ed","line":124,"range":{"start_line":124,"start_character":12,"end_line":124,"end_character":23},"updated":"2019-09-24 11:55:24.000000000","message":"This is confusing: if validation passes, this manage_boot flag turns to False. It reads as if ironic does not manage boot anymore...","commit_id":"f708ab0b796a4c4112504d9abec2f352bf96be38"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"082fe987a5987b640310fc6b7c553c4351a63377","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            task.driver.boot.validate_inspection(task)"},{"line_number":145,"context_line":"            task.driver.network.validate_inspection(task)"},{"line_number":146,"context_line":"        except exception.UnsupportedDriverExtension as e:"},{"line_number":147,"context_line":"            LOG.debug(\u0027The driver of the node %(node)s does not support \u0027"},{"line_number":148,"context_line":"                      \u0027managed boot for in-band inspection or the required \u0027"},{"line_number":149,"context_line":"                      \u0027options are not populated: %(exc)s\u0027,"},{"line_number":150,"context_line":"                      {\u0027node\u0027: task.node.uuid, \u0027exc\u0027: e})"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_2e931651","line":147,"range":{"start_line":147,"start_character":27,"end_line":147,"end_character":33},"updated":"2019-11-01 13:37:11.000000000","message":"nit: may be report which driver this is?","commit_id":"ea4bcc478120d78680addc291f489726c632d4cc"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"43d37d25831119f312e5be13e01cb2faf9912da8","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            task.driver.boot.validate_inspection(task)"},{"line_number":145,"context_line":"            task.driver.network.validate_inspection(task)"},{"line_number":146,"context_line":"        except exception.UnsupportedDriverExtension as e:"},{"line_number":147,"context_line":"            LOG.debug(\u0027The driver of the node %(node)s does not support \u0027"},{"line_number":148,"context_line":"                      \u0027managed boot for in-band inspection or the required \u0027"},{"line_number":149,"context_line":"                      \u0027options are not populated: %(exc)s\u0027,"},{"line_number":150,"context_line":"                      {\u0027node\u0027: task.node.uuid, \u0027exc\u0027: e})"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_d2d68ef2","line":147,"range":{"start_line":147,"start_character":27,"end_line":147,"end_character":33},"in_reply_to":"3fa7e38b_2e931651","updated":"2019-11-04 13:34:50.000000000","message":"Done","commit_id":"ea4bcc478120d78680addc291f489726c632d4cc"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"082fe987a5987b640310fc6b7c553c4351a63377","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                      \u0027options are not populated: %(exc)s\u0027,"},{"line_number":150,"context_line":"                      {\u0027node\u0027: task.node.uuid, \u0027exc\u0027: e})"},{"line_number":151,"context_line":"        else:"},{"line_number":152,"context_line":"            ironic_manages_boot \u003d True"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        utils.set_node_nested_field(task.node, \u0027driver_internal_info\u0027,"},{"line_number":155,"context_line":"                                    _IRONIC_MANAGES_BOOT,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_8e7eca16","line":152,"updated":"2019-11-01 13:37:11.000000000","message":"nit: if this defaults to True and flipped to False on exception, this line\u0027d not be needed","commit_id":"ea4bcc478120d78680addc291f489726c632d4cc"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"43d37d25831119f312e5be13e01cb2faf9912da8","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                      \u0027options are not populated: %(exc)s\u0027,"},{"line_number":150,"context_line":"                      {\u0027node\u0027: task.node.uuid, \u0027exc\u0027: e})"},{"line_number":151,"context_line":"        else:"},{"line_number":152,"context_line":"            ironic_manages_boot \u003d True"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        utils.set_node_nested_field(task.node, \u0027driver_internal_info\u0027,"},{"line_number":155,"context_line":"                                    _IRONIC_MANAGES_BOOT,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_9206d685","line":152,"in_reply_to":"3fa7e38b_8e7eca16","updated":"2019-11-04 13:34:50.000000000","message":"Done","commit_id":"ea4bcc478120d78680addc291f489726c632d4cc"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"082fe987a5987b640310fc6b7c553c4351a63377","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                cond_utils.node_power_action(task, states.REBOOT)"},{"line_number":176,"context_line":"            except Exception as exc:"},{"line_number":177,"context_line":"                error \u003d _(\u0027unable to start inspection: %s\u0027) % exc"},{"line_number":178,"context_line":"                _inspection_error_handler(task, error, raise_exc\u003dTrue)"},{"line_number":179,"context_line":"        else:"},{"line_number":180,"context_line":"            # NOTE(dtantsur): spawning a short-living green thread so that"},{"line_number":181,"context_line":"            # we can release a lock as soon as possible and allow"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_4ec21236","line":178,"updated":"2019-11-01 13:37:11.000000000","message":"here it probably raises, otherwise it reads that we end up in INSPECTWAIT state","commit_id":"ea4bcc478120d78680addc291f489726c632d4cc"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"64ef9497f527259b044e64504c4cd05d5888711f","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        task.process_event(\u0027fail\u0027)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"def _ironic_manages_boot(task, raise_exc\u003dFalse):"},{"line_number":115,"context_line":"    \"\"\"Whether ironic should manage boot for this node.\"\"\""},{"line_number":116,"context_line":"    try:"},{"line_number":117,"context_line":"        task.driver.boot.validate_inspection(task)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_3ebab60a","line":114,"range":{"start_line":114,"start_character":29,"end_line":114,"end_character":46},"updated":"2019-11-16 07:46:08.000000000","message":"could we raise when it\u0027s false in the Inspector.validate? I feel the extra arg complicates code logic.","commit_id":"2508cb827c0e3deccda263276a2fb0daba4da19b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b29175a983481c623839f5789cafd425f939e249","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        task.process_event(\u0027fail\u0027)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"def _ironic_manages_boot(task, raise_exc\u003dFalse):"},{"line_number":115,"context_line":"    \"\"\"Whether ironic should manage boot for this node.\"\"\""},{"line_number":116,"context_line":"    try:"},{"line_number":117,"context_line":"        task.driver.boot.validate_inspection(task)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_e1dd486d","line":114,"range":{"start_line":114,"start_character":29,"end_line":114,"end_character":46},"in_reply_to":"3fa7e38b_3ebab60a","updated":"2019-11-19 12:16:12.000000000","message":"This way we\u0027ll lose the traceback and the exact error message.","commit_id":"2508cb827c0e3deccda263276a2fb0daba4da19b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b29175a983481c623839f5789cafd425f939e249","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        :raises: HardwareInspectionFailure on failure"},{"line_number":206,"context_line":"        \"\"\""},{"line_number":207,"context_line":"        ironic_manages_boot \u003d _ironic_manages_boot("},{"line_number":208,"context_line":"            task, raise_exc\u003dCONF.inspector.require_managed_boot)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        utils.set_node_nested_field(task.node, \u0027driver_internal_info\u0027,"},{"line_number":211,"context_line":"                                    _IRONIC_MANAGES_BOOT,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_81d01455","line":208,"range":{"start_line":208,"start_character":18,"end_line":208,"end_character":28},"updated":"2019-11-19 12:16:12.000000000","message":"... and we use raise_exc here as well.","commit_id":"2508cb827c0e3deccda263276a2fb0daba4da19b"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"64ef9497f527259b044e64504c4cd05d5888711f","unresolved":false,"context_lines":[{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    if errors:"},{"line_number":342,"context_line":"        msg \u003d _(\u0027Inspection clean up failed: %s\u0027) % \u0027; \u0027.join(errors)"},{"line_number":343,"context_line":"        _inspection_error_handler(task, msg, raise_exc\u003dFalse, clean_up\u003dFalse)"},{"line_number":344,"context_line":"    else:"},{"line_number":345,"context_line":"        LOG.info(\u0027Inspection finished successfully for node %s\u0027,"},{"line_number":346,"context_line":"                 task.node.uuid)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_7ec4ae92","line":343,"updated":"2019-11-16 07:46:08.000000000","message":"I\u0027d suggest we move clean_up to a helper to avoid duplicated codes, error message can be handled as return value. This also helps simplifying current code.","commit_id":"2508cb827c0e3deccda263276a2fb0daba4da19b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a41f37fdcbe4a67b0964ac9521890443af5dd22f","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"_INSPECTOR_SESSION \u003d None"},{"line_number":39,"context_line":"# Internal field to mark whether ironic or inspector manages boot for the node"},{"line_number":40,"context_line":"_IRONIC_MANAGES_BOOT \u003d \u0027inspector_manage_boot\u0027"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"def _get_inspector_session(**kwargs):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_6e77fc09","line":40,"updated":"2019-11-20 00:03:02.000000000","message":"couldn\u0027t you just put this on the class? Not saying do so, just seems slightly weird to have a flag to change behavior at the file level and not the class inside the file level.","commit_id":"7dd3ad1a83131eb782645d9fa0c1adde4a2bec95"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"55bf1af22546a6bb33210e4770543f1d3d5c5176","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"_INSPECTOR_SESSION \u003d None"},{"line_number":39,"context_line":"# Internal field to mark whether ironic or inspector manages boot for the node"},{"line_number":40,"context_line":"_IRONIC_MANAGES_BOOT \u003d \u0027inspector_manage_boot\u0027"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"def _get_inspector_session(**kwargs):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_033ab696","line":40,"in_reply_to":"3fa7e38b_5602bc0a","updated":"2019-11-22 06:10:11.000000000","message":"that\u0027s why we need consts :) anything goes into the node fields are not invisible, but anyway, not in this patch, just proposing a plan.","commit_id":"7dd3ad1a83131eb782645d9fa0c1adde4a2bec95"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"c98bb1aa0e3cf8c32cef03e9fcd2f888cbe354a6","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"_INSPECTOR_SESSION \u003d None"},{"line_number":39,"context_line":"# Internal field to mark whether ironic or inspector manages boot for the node"},{"line_number":40,"context_line":"_IRONIC_MANAGES_BOOT \u003d \u0027inspector_manage_boot\u0027"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"def _get_inspector_session(**kwargs):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_fc7cf171","line":40,"in_reply_to":"3fa7e38b_6e77fc09","updated":"2019-11-21 05:53:22.000000000","message":"Again we need a common file to place those constants.. Let\u0027s?","commit_id":"7dd3ad1a83131eb782645d9fa0c1adde4a2bec95"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5598a55f49d044d06c78577fe53b6bdbb13cb4ce","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"_INSPECTOR_SESSION \u003d None"},{"line_number":39,"context_line":"# Internal field to mark whether ironic or inspector manages boot for the node"},{"line_number":40,"context_line":"_IRONIC_MANAGES_BOOT \u003d \u0027inspector_manage_boot\u0027"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"def _get_inspector_session(**kwargs):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_5602bc0a","line":40,"in_reply_to":"3fa7e38b_fc7cf171","updated":"2019-11-21 12:30:44.000000000","message":"That\u0027s not really a meaningful constant, I just put it to the top level to make sure I don\u0027t make a typo in one place..","commit_id":"7dd3ad1a83131eb782645d9fa0c1adde4a2bec95"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"c98bb1aa0e3cf8c32cef03e9fcd2f888cbe354a6","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        client \u003d _get_client(task.context)"},{"line_number":172,"context_line":"        endpoint \u003d _get_callback_endpoint(client)"},{"line_number":173,"context_line":"        params \u003d dict(_parse_kernel_params(),"},{"line_number":174,"context_line":"                      **{\u0027ipa-inspection-callback-url\u0027: endpoint})"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        task.driver.network.add_inspection_network(task)"},{"line_number":177,"context_line":"        task.driver.boot.prepare_ramdisk(task, ramdisk_params\u003dparams)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_3f9efbb7","line":174,"updated":"2019-11-21 05:53:22.000000000","message":"do we want to support mdns here?","commit_id":"7dd3ad1a83131eb782645d9fa0c1adde4a2bec95"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5598a55f49d044d06c78577fe53b6bdbb13cb4ce","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        client \u003d _get_client(task.context)"},{"line_number":172,"context_line":"        endpoint \u003d _get_callback_endpoint(client)"},{"line_number":173,"context_line":"        params \u003d dict(_parse_kernel_params(),"},{"line_number":174,"context_line":"                      **{\u0027ipa-inspection-callback-url\u0027: endpoint})"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        task.driver.network.add_inspection_network(task)"},{"line_number":177,"context_line":"        task.driver.boot.prepare_ramdisk(task, ramdisk_params\u003dparams)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_1608c424","line":174,"in_reply_to":"3fa7e38b_3f9efbb7","updated":"2019-11-21 12:30:44.000000000","message":"Good call","commit_id":"7dd3ad1a83131eb782645d9fa0c1adde4a2bec95"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"c98bb1aa0e3cf8c32cef03e9fcd2f888cbe354a6","unresolved":false,"context_lines":[{"line_number":331,"context_line":"        LOG.error(\u0027Inspection clean up failed for node %(uuid)s: %(err)s\u0027,"},{"line_number":332,"context_line":"                  {\u0027uuid\u0027: task.node.uuid, \u0027err\u0027: errors})"},{"line_number":333,"context_line":"        msg \u003d _(\u0027Inspection clean up failed: %s\u0027) % errors"},{"line_number":334,"context_line":"        _inspection_error_handler(task, msg, raise_exc\u003dFalse, clean_up\u003dFalse)"},{"line_number":335,"context_line":"    else:"},{"line_number":336,"context_line":"        LOG.info(\u0027Inspection finished successfully for node %s\u0027,"},{"line_number":337,"context_line":"                 task.node.uuid)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_5fb41736","line":334,"updated":"2019-11-21 05:53:22.000000000","message":"If we are reaching here, the inspection actually succeed, do we want to make user re-inspect simply because the clean up failure?","commit_id":"7dd3ad1a83131eb782645d9fa0c1adde4a2bec95"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"55bf1af22546a6bb33210e4770543f1d3d5c5176","unresolved":false,"context_lines":[{"line_number":331,"context_line":"        LOG.error(\u0027Inspection clean up failed for node %(uuid)s: %(err)s\u0027,"},{"line_number":332,"context_line":"                  {\u0027uuid\u0027: task.node.uuid, \u0027err\u0027: errors})"},{"line_number":333,"context_line":"        msg \u003d _(\u0027Inspection clean up failed: %s\u0027) % errors"},{"line_number":334,"context_line":"        _inspection_error_handler(task, msg, raise_exc\u003dFalse, clean_up\u003dFalse)"},{"line_number":335,"context_line":"    else:"},{"line_number":336,"context_line":"        LOG.info(\u0027Inspection finished successfully for node %s\u0027,"},{"line_number":337,"context_line":"                 task.node.uuid)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_c3ca5e9e","line":334,"in_reply_to":"3fa7e38b_36286084","updated":"2019-11-22 06:10:11.000000000","message":"I concur, but this doesn\u0027t help user re-triggering the clean up, we just don\u0027t have an \"error\" state like deployment, but same is true for cleaning, so I guess at least this is raising visibility to user that needs further actions.","commit_id":"7dd3ad1a83131eb782645d9fa0c1adde4a2bec95"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5598a55f49d044d06c78577fe53b6bdbb13cb4ce","unresolved":false,"context_lines":[{"line_number":331,"context_line":"        LOG.error(\u0027Inspection clean up failed for node %(uuid)s: %(err)s\u0027,"},{"line_number":332,"context_line":"                  {\u0027uuid\u0027: task.node.uuid, \u0027err\u0027: errors})"},{"line_number":333,"context_line":"        msg \u003d _(\u0027Inspection clean up failed: %s\u0027) % errors"},{"line_number":334,"context_line":"        _inspection_error_handler(task, msg, raise_exc\u003dFalse, clean_up\u003dFalse)"},{"line_number":335,"context_line":"    else:"},{"line_number":336,"context_line":"        LOG.info(\u0027Inspection finished successfully for node %s\u0027,"},{"line_number":337,"context_line":"                 task.node.uuid)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_36286084","line":334,"in_reply_to":"3fa7e38b_5fb41736","updated":"2019-11-21 12:30:44.000000000","message":"It\u0027s not about re-inspection, it\u0027s about the fact that the node ended up in an undefined state (e.g. with neutron ports still present).","commit_id":"7dd3ad1a83131eb782645d9fa0c1adde4a2bec95"}],"releasenotes/notes/inspection-boot-network-59fd23ca62b09e81.yaml":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"082fe987a5987b640310fc6b7c553c4351a63377","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"other:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Boot and network interface implementations can now implement managed boot"},{"line_number":5,"context_line":"    for in-band inspection."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"3fa7e38b_aef5c684","line":4,"range":{"start_line":4,"start_character":31,"end_line":4,"end_character":46},"updated":"2019-11-01 13:37:11.000000000","message":"nit: `implementations` two times. \nMay be we could put it like \u0027abstract hardware type framework has been updated to allow hardware types supporting node boot for in-band inspection purposes\u0027?","commit_id":"ea4bcc478120d78680addc291f489726c632d4cc"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"43d37d25831119f312e5be13e01cb2faf9912da8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"other:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Boot and network interface implementations can now implement managed boot"},{"line_number":5,"context_line":"    for in-band inspection."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"3fa7e38b_d21d2ebe","line":4,"range":{"start_line":4,"start_character":31,"end_line":4,"end_character":46},"in_reply_to":"3fa7e38b_aef5c684","updated":"2019-11-04 13:34:50.000000000","message":"I\u0027d like it to be a bit more specific, esp. since this note targets developers. Will fix \"implementations\".","commit_id":"ea4bcc478120d78680addc291f489726c632d4cc"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a41f37fdcbe4a67b0964ac9521890443af5dd22f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Boot and network interface implementations can now manage boot for in-band"},{"line_number":5,"context_line":"    inspection. Previously only ironic-inspector itself could manage boot for"},{"line_number":6,"context_line":"    it. This change opens a way for non-PXE implementations of in-band"},{"line_number":7,"context_line":"    inspection."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_0e23e806","line":7,"updated":"2019-11-20 00:03:02.000000000","message":"We should also make a note for any out of tree boot interface drivers that a new method exists... Then again it might not matter.","commit_id":"7dd3ad1a83131eb782645d9fa0c1adde4a2bec95"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5598a55f49d044d06c78577fe53b6bdbb13cb4ce","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Boot and network interface implementations can now manage boot for in-band"},{"line_number":5,"context_line":"    inspection. Previously only ironic-inspector itself could manage boot for"},{"line_number":6,"context_line":"    it. This change opens a way for non-PXE implementations of in-band"},{"line_number":7,"context_line":"    inspection."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_b6977090","line":7,"in_reply_to":"3fa7e38b_0e23e806","updated":"2019-11-21 12:30:44.000000000","message":"Done","commit_id":"7dd3ad1a83131eb782645d9fa0c1adde4a2bec95"}]}
