)]}'
{"ironic_inspector/introspect.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"7cd6da8e3b6426e3ffc195c0db0f1843ea3d3978","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    node_info \u003d node_cache.start_introspection(node.id,"},{"line_number":63,"context_line":"                                               bmc_address\u003dlookup_attrs,"},{"line_number":64,"context_line":"                                               manage_boot\u003dmanage_boot,"},{"line_number":65,"context_line":"                                               lookup\u003dlookup,"},{"line_number":66,"context_line":"                                               ironic\u003dironic)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    if manage_boot:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_052edef9","line":65,"updated":"2020-11-12 15:53:44.000000000","message":"Not needed, see below","commit_id":"5062099fe390b3b63e7e97f305525d13f003ed14"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"4e88df321c7ebf66a8e1eb61fab6a4010c09cd3e","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    node_info \u003d node_cache.start_introspection(node.id,"},{"line_number":63,"context_line":"                                               bmc_address\u003dlookup_attrs,"},{"line_number":64,"context_line":"                                               manage_boot\u003dmanage_boot,"},{"line_number":65,"context_line":"                                               lookup\u003dlookup,"},{"line_number":66,"context_line":"                                               ironic\u003dironic)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    if manage_boot:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_c2f65cd9","line":65,"in_reply_to":"1f621f24_052edef9","updated":"2020-11-20 00:51:52.000000000","message":"Done","commit_id":"5062099fe390b3b63e7e97f305525d13f003ed14"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4b68bdf69c25a1b4715962da9c78fe6ad9fc22aa","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"@node_cache.release_lock"},{"line_number":104,"context_line":"@node_cache.fsm_transition(istate.Events.wait)"},{"line_number":105,"context_line":"def _do_introspect(node_info, ironic, lookup\u003dNone):"},{"line_number":106,"context_line":"    node_info.acquire_lock()"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    if lookup:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fffc6b78_f82d09a9","line":105,"updated":"2020-11-18 22:49:14.000000000","message":"fwiw, it would be good to add a docstring also covering the format of the lookup payload.","commit_id":"5062099fe390b3b63e7e97f305525d13f003ed14"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b2e7b4bd73a425f05c607a885b24fb7c05f62931","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"@node_cache.release_lock"},{"line_number":104,"context_line":"@node_cache.fsm_transition(istate.Events.wait)"},{"line_number":105,"context_line":"def _do_introspect(node_info, ironic, lookup\u003dNone):"},{"line_number":106,"context_line":"    node_info.acquire_lock()"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    if lookup:"}],"source_content_type":"text/x-python","patch_set":3,"id":"dd1784d7_6fa2e8ed","line":105,"in_reply_to":"fffc6b78_f82d09a9","updated":"2020-11-24 12:01:55.000000000","message":"Thank you for your feedback Julia. Done.","commit_id":"5062099fe390b3b63e7e97f305525d13f003ed14"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"7cd6da8e3b6426e3ffc195c0db0f1843ea3d3978","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        # TODO(dtantsur): pagination"},{"line_number":128,"context_line":"        macs \u003d list(node_info.ports())"},{"line_number":129,"context_line":"    if macs:"},{"line_number":130,"context_line":"        node_info.add_attribute(node_cache.MACS_ATTRIBUTE, macs)"},{"line_number":131,"context_line":"        LOG.info(\u0027Whitelisting MAC\\\u0027s %s for a PXE boot\u0027, macs,"},{"line_number":132,"context_line":"                 node_info\u003dnode_info)"},{"line_number":133,"context_line":"        pxe_filter.driver().sync(ironic)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_a5ed6ab8","line":130,"updated":"2020-11-12 15:53:44.000000000","message":"This is where node_info is updated, you don\u0027t need to modify start_introspection.","commit_id":"5062099fe390b3b63e7e97f305525d13f003ed14"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"4e88df321c7ebf66a8e1eb61fab6a4010c09cd3e","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        # TODO(dtantsur): pagination"},{"line_number":128,"context_line":"        macs \u003d list(node_info.ports())"},{"line_number":129,"context_line":"    if macs:"},{"line_number":130,"context_line":"        node_info.add_attribute(node_cache.MACS_ATTRIBUTE, macs)"},{"line_number":131,"context_line":"        LOG.info(\u0027Whitelisting MAC\\\u0027s %s for a PXE boot\u0027, macs,"},{"line_number":132,"context_line":"                 node_info\u003dnode_info)"},{"line_number":133,"context_line":"        pxe_filter.driver().sync(ironic)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_a2f360e7","line":130,"in_reply_to":"1f621f24_a5ed6ab8","updated":"2020-11-20 00:51:52.000000000","message":"Done","commit_id":"5062099fe390b3b63e7e97f305525d13f003ed14"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"c57797ef1c6806e71dcac8b037ba8bb307e26115","unresolved":true,"context_lines":[{"line_number":113,"context_line":"    node_info.acquire_lock()"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    if lookup:"},{"line_number":116,"context_line":"        macs \u003d lookup[\"mac\"]"},{"line_number":117,"context_line":"    else:"},{"line_number":118,"context_line":"        # TODO(dtantsur): pagination"},{"line_number":119,"context_line":"        macs \u003d list(node_info.ports())"}],"source_content_type":"text/x-python","patch_set":9,"id":"3460fdfa_6e921966","line":116,"updated":"2020-11-30 22:52:42.000000000","message":"If we\u0027re future-proofing this to allow other kinds of non-mac lookup, this shouldn\u0027t assume that the \u0027mac\u0027 key exists, or that the value contains a list of macs","commit_id":"d9a79c663a1e8ad98f3ac8ba59ca4dfd7ee496ea"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"09ab309be0450f46e881e070a747a0df5e07550f","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    node_info.acquire_lock()"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    if lookup:"},{"line_number":116,"context_line":"        macs \u003d lookup[\"mac\"]"},{"line_number":117,"context_line":"    else:"},{"line_number":118,"context_line":"        # TODO(dtantsur): pagination"},{"line_number":119,"context_line":"        macs \u003d list(node_info.ports())"}],"source_content_type":"text/x-python","patch_set":9,"id":"efefd0f2_61256ecb","line":116,"in_reply_to":"3460fdfa_6e921966","updated":"2021-01-07 07:52:04.000000000","message":"Done","commit_id":"d9a79c663a1e8ad98f3ac8ba59ca4dfd7ee496ea"}],"ironic_inspector/main.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"af96d04d5af0fd586d02169f26988d92673dc4c0","unresolved":false,"context_lines":[{"line_number":43,"context_line":"LOG \u003d utils.getProcessingLogger(__name__)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"MINIMUM_API_VERSION \u003d (1, 0)"},{"line_number":46,"context_line":"CURRENT_API_VERSION \u003d (1, 17)"},{"line_number":47,"context_line":"DEFAULT_API_VERSION \u003d CURRENT_API_VERSION"},{"line_number":48,"context_line":"_LOGGING_EXCLUDED_KEYS \u003d (\u0027logs\u0027,)"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_25adda9a","line":46,"updated":"2020-11-12 15:48:43.000000000","message":"Needs bumping and documenting in the history docs.","commit_id":"5062099fe390b3b63e7e97f305525d13f003ed14"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"4e88df321c7ebf66a8e1eb61fab6a4010c09cd3e","unresolved":false,"context_lines":[{"line_number":43,"context_line":"LOG \u003d utils.getProcessingLogger(__name__)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"MINIMUM_API_VERSION \u003d (1, 0)"},{"line_number":46,"context_line":"CURRENT_API_VERSION \u003d (1, 17)"},{"line_number":47,"context_line":"DEFAULT_API_VERSION \u003d CURRENT_API_VERSION"},{"line_number":48,"context_line":"_LOGGING_EXCLUDED_KEYS \u003d (\u0027logs\u0027,)"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_6212e80b","line":46,"in_reply_to":"1f621f24_25adda9a","updated":"2020-11-20 00:51:52.000000000","message":"Done","commit_id":"5062099fe390b3b63e7e97f305525d13f003ed14"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"af96d04d5af0fd586d02169f26988d92673dc4c0","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        args \u003d flask.request.args"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        manage_boot \u003d args.get(\u0027manage_boot\u0027, \u0027True\u0027)"},{"line_number":346,"context_line":"        lookup \u003d args.get(\u0027lookup\u0027, None)"},{"line_number":347,"context_line":"        try:"},{"line_number":348,"context_line":"            manage_boot \u003d strutils.bool_from_string(manage_boot, strict\u003dTrue)"},{"line_number":349,"context_line":"        except ValueError:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_45aa9684","line":346,"updated":"2020-11-12 15:48:43.000000000","message":"Let\u0027s do some validations here. Actually, let\u0027s parse the whole value here and pass it on as {\u0027mac\u0027: [\u0027..\u0027, ..]}. Let\u0027s also validate that each MAC is actually a MAC.","commit_id":"5062099fe390b3b63e7e97f305525d13f003ed14"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4b68bdf69c25a1b4715962da9c78fe6ad9fc22aa","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        args \u003d flask.request.args"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        manage_boot \u003d args.get(\u0027manage_boot\u0027, \u0027True\u0027)"},{"line_number":346,"context_line":"        lookup \u003d args.get(\u0027lookup\u0027, None)"},{"line_number":347,"context_line":"        try:"},{"line_number":348,"context_line":"            manage_boot \u003d strutils.bool_from_string(manage_boot, strict\u003dTrue)"},{"line_number":349,"context_line":"        except ValueError:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fffc6b78_d82ac58e","line":346,"in_reply_to":"1f621f24_45aa9684","updated":"2020-11-18 22:49:14.000000000","message":"++","commit_id":"5062099fe390b3b63e7e97f305525d13f003ed14"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"4e88df321c7ebf66a8e1eb61fab6a4010c09cd3e","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        args \u003d flask.request.args"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        manage_boot \u003d args.get(\u0027manage_boot\u0027, \u0027True\u0027)"},{"line_number":346,"context_line":"        lookup \u003d args.get(\u0027lookup\u0027, None)"},{"line_number":347,"context_line":"        try:"},{"line_number":348,"context_line":"            manage_boot \u003d strutils.bool_from_string(manage_boot, strict\u003dTrue)"},{"line_number":349,"context_line":"        except ValueError:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_e2fd58b2","line":346,"in_reply_to":"1f621f24_45aa9684","updated":"2020-11-20 00:51:52.000000000","message":"Thank you Dmitry, will work on this next.","commit_id":"5062099fe390b3b63e7e97f305525d13f003ed14"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b2e7b4bd73a425f05c607a885b24fb7c05f62931","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        args \u003d flask.request.args"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        manage_boot \u003d args.get(\u0027manage_boot\u0027, \u0027True\u0027)"},{"line_number":346,"context_line":"        lookup \u003d args.get(\u0027lookup\u0027, None)"},{"line_number":347,"context_line":"        try:"},{"line_number":348,"context_line":"            manage_boot \u003d strutils.bool_from_string(manage_boot, strict\u003dTrue)"},{"line_number":349,"context_line":"        except ValueError:"}],"source_content_type":"text/x-python","patch_set":3,"id":"f51842a0_1d543a52","line":346,"in_reply_to":"1f621f24_e2fd58b2","updated":"2020-11-24 12:01:55.000000000","message":"Done.","commit_id":"5062099fe390b3b63e7e97f305525d13f003ed14"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"c57797ef1c6806e71dcac8b037ba8bb307e26115","unresolved":true,"context_lines":[{"line_number":356,"context_line":"        lookup \u003d None"},{"line_number":357,"context_line":"        lookup_args \u003d args.get(\u0027lookup\u0027, None)"},{"line_number":358,"context_line":"        if lookup_args:"},{"line_number":359,"context_line":"            lookup_args_list \u003d lookup_args.split(\",\")"},{"line_number":360,"context_line":"            lookup \u003d {}"},{"line_number":361,"context_line":"            macs \u003d []"},{"line_number":362,"context_line":"            for lookup_item in lookup_args_list:"}],"source_content_type":"text/x-python","patch_set":9,"id":"a6de90a2_391723fe","line":359,"updated":"2020-11-30 22:52:42.000000000","message":"If we\u0027re relying on HTTP list params instead of a comma joined string then we\u0027ll just need to check if lookup is a string or a list, if its a string then make it a list with one item.","commit_id":"d9a79c663a1e8ad98f3ac8ba59ca4dfd7ee496ea"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"09ab309be0450f46e881e070a747a0df5e07550f","unresolved":false,"context_lines":[{"line_number":356,"context_line":"        lookup \u003d None"},{"line_number":357,"context_line":"        lookup_args \u003d args.get(\u0027lookup\u0027, None)"},{"line_number":358,"context_line":"        if lookup_args:"},{"line_number":359,"context_line":"            lookup_args_list \u003d lookup_args.split(\",\")"},{"line_number":360,"context_line":"            lookup \u003d {}"},{"line_number":361,"context_line":"            macs \u003d []"},{"line_number":362,"context_line":"            for lookup_item in lookup_args_list:"}],"source_content_type":"text/x-python","patch_set":9,"id":"a0b50f25_a5a0a3a6","line":359,"in_reply_to":"a6de90a2_391723fe","updated":"2021-01-07 07:52:04.000000000","message":"Done","commit_id":"d9a79c663a1e8ad98f3ac8ba59ca4dfd7ee496ea"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"be3c0482692ab4003ed332e52efe010448758234","unresolved":true,"context_lines":[{"line_number":354,"context_line":"        args \u003d flask.request.args"},{"line_number":355,"context_line":"        manage_boot \u003d args.get(\u0027manage_boot\u0027, \u0027True\u0027)"},{"line_number":356,"context_line":"        lookup \u003d None"},{"line_number":357,"context_line":"        lookup_args \u003d args.get(\u0027lookup\u0027, None)"},{"line_number":358,"context_line":"        # janders - checking if inspector got the parameter in list format"},{"line_number":359,"context_line":"        LOG.debug(\u0027janders-oob-mac-list-version MAC lookup parameter\u0027"},{"line_number":360,"context_line":"                  \u0027 of type %s and value %s will be used\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"e54a65e3_7ff67bb0","line":357,"updated":"2021-01-06 13:39:35.000000000","message":"It seems that you need to use getlist, not get: https://werkzeug.palletsprojects.com/en/1.0.x/datastructures/#werkzeug.datastructures.MultiDict.getlist","commit_id":"92396dc74ba17742c22458ffa5c4632ab7c7feef"}],"ironic_inspector/node_cache.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"c57797ef1c6806e71dcac8b037ba8bb307e26115","unresolved":true,"context_lines":[{"line_number":677,"context_line":"        try:"},{"line_number":678,"context_line":"            node_info.fsm_event(istate.Events.start)"},{"line_number":679,"context_line":"            LOG.debug(\u0027lookup passed to start_introspection in\u0027"},{"line_number":680,"context_line":"                      \u0027ironic_inspector and value\u003d\u0027, lookup)"},{"line_number":681,"context_line":"        except utils.NotFoundInCacheError:"},{"line_number":682,"context_line":"            # node not found while in the fsm_event handler"},{"line_number":683,"context_line":"            LOG.debug(\u0027Node missing in the cache; adding it now\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"0d99d7b9_c9cf7130","line":680,"updated":"2020-11-30 22:52:42.000000000","message":"I\u0027m guessing lookup will actually be used in this function later?","commit_id":"d9a79c663a1e8ad98f3ac8ba59ca4dfd7ee496ea"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"09ab309be0450f46e881e070a747a0df5e07550f","unresolved":false,"context_lines":[{"line_number":677,"context_line":"        try:"},{"line_number":678,"context_line":"            node_info.fsm_event(istate.Events.start)"},{"line_number":679,"context_line":"            LOG.debug(\u0027lookup passed to start_introspection in\u0027"},{"line_number":680,"context_line":"                      \u0027ironic_inspector and value\u003d\u0027, lookup)"},{"line_number":681,"context_line":"        except utils.NotFoundInCacheError:"},{"line_number":682,"context_line":"            # node not found while in the fsm_event handler"},{"line_number":683,"context_line":"            LOG.debug(\u0027Node missing in the cache; adding it now\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"c768317e_b8e080d9","line":680,"in_reply_to":"0d99d7b9_c9cf7130","updated":"2021-01-07 07:52:04.000000000","message":"Done","commit_id":"d9a79c663a1e8ad98f3ac8ba59ca4dfd7ee496ea"}]}
