)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"7ecbcebd1521ddf25577392fd19766b26528d3d1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"c1dc23cf_f9a3e2ec","updated":"2021-11-17 09:44:30.000000000","message":"LGTM, thanks Riccardo!","commit_id":"30ecb87dabd88bf2ca5f99487f8bbd8e2868c0e3"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"dd7e1f9a8c6f058ca71e29a5e82934ba071ff291","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"e7f71360_53000088","updated":"2021-11-17 11:28:38.000000000","message":"just realized we\u0027re in the same situation as with blkid in https://review.opendev.org/c/openstack/ironic-lib/+/817922, only way to make this and that work would be installing util-linux from virt7 repo https://cbs.centos.org/koji/buildinfo?buildID\u003d15169","commit_id":"30ecb87dabd88bf2ca5f99487f8bbd8e2868c0e3"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"525bf8eb3b583d7b4600f05c53b9231813bbc35d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"3b6f19bc_b777ef41","updated":"2022-05-13 13:15:50.000000000","message":"recheck","commit_id":"7cd82431188507d0b3b85aa971c2c47a8fb1575e"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"3d62a1ed970b956cedc3349e9da160c3d373ab11","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"4a0b275e_e79a0730","updated":"2022-05-23 08:40:52.000000000","message":"recheck","commit_id":"7cd82431188507d0b3b85aa971c2c47a8fb1575e"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"602b744a8a2e3b52daff6a251586fab645a7c7b5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"c4873694_aa40097c","updated":"2022-05-13 18:35:32.000000000","message":"recheck","commit_id":"7cd82431188507d0b3b85aa971c2c47a8fb1575e"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"4897d58751b955934d31e1c00eb90930a9bfe894","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"21ca98a5_174751d4","updated":"2022-05-30 08:51:57.000000000","message":"recheck","commit_id":"6511b05b3d187864cc60ec160d591be84783015f"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"6a34dc6065c927735c392ff54c1383fc8192453b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"7aaae319_dd0c60b1","updated":"2022-06-27 19:02:16.000000000","message":"recheck","commit_id":"09ea41c83dda9b46739c1d9d0498476db855d952"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"012f99babe706061be8928b4d1017ce9df0e3c97","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"82b71087_88e444ec","updated":"2022-06-28 08:20:26.000000000","message":"recheck","commit_id":"09ea41c83dda9b46739c1d9d0498476db855d952"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"e36d624f173cf60656775d2b8939bf2973ca9793","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"f2a5f977_2afad0c7","updated":"2022-06-30 18:34:21.000000000","message":"recheck","commit_id":"09ea41c83dda9b46739c1d9d0498476db855d952"}],"ironic_python_agent/hardware.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"f382a41e60ca063427db122d96625dda053aae6b","unresolved":false,"context_lines":[{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    columns \u003d utils.LSBLK_COLUMNS"},{"line_number":543,"context_line":"    report \u003d il_utils.execute(\u0027lsblk\u0027, \u0027-bia\u0027, \u0027--json\u0027,"},{"line_number":544,"context_line":"                              \u0027-o{}\u0027.format(\u0027,\u0027.join(columns)),"},{"line_number":545,"context_line":"                              check_exit_code\u003d[0])[0]"},{"line_number":546,"context_line":"    report_json \u003d json.loads(report)"},{"line_number":547,"context_line":"    context \u003d pyudev.Context()"}],"source_content_type":"text/x-python","patch_set":11,"id":"0fb31093_c35a04b1","line":544,"updated":"2022-06-10 09:39:26.000000000","message":"nit: I wonder if we even need columns or just ask it to return everything for simplicity..","commit_id":"6511b05b3d187864cc60ec160d591be84783015f"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"33ef2ea97ee3fd4d4449f82c065bda3f8b26511d","unresolved":true,"context_lines":[{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    columns \u003d utils.LSBLK_COLUMNS"},{"line_number":543,"context_line":"    report \u003d il_utils.execute(\u0027lsblk\u0027, \u0027-bia\u0027, \u0027--json\u0027,"},{"line_number":544,"context_line":"                              \u0027-o{}\u0027.format(\u0027,\u0027.join(columns)),"},{"line_number":545,"context_line":"                              check_exit_code\u003d[0])[0]"},{"line_number":546,"context_line":"    report_json \u003d json.loads(report)"},{"line_number":547,"context_line":"    context \u003d pyudev.Context()"}],"source_content_type":"text/x-python","patch_set":11,"id":"a903007c_e14ea052","line":544,"in_reply_to":"0fb31093_c35a04b1","updated":"2022-06-11 09:28:35.000000000","message":"I was wondering the same, also probably better for debug purpose","commit_id":"6511b05b3d187864cc60ec160d591be84783015f"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"0bcfcebc8c7bfc4889dbe90e39ab51661d54bd95","unresolved":false,"context_lines":[{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    columns \u003d utils.LSBLK_COLUMNS"},{"line_number":543,"context_line":"    report \u003d il_utils.execute(\u0027lsblk\u0027, \u0027-bia\u0027, \u0027--json\u0027,"},{"line_number":544,"context_line":"                              \u0027-o{}\u0027.format(\u0027,\u0027.join(columns)),"},{"line_number":545,"context_line":"                              check_exit_code\u003d[0])[0]"},{"line_number":546,"context_line":"    report_json \u003d json.loads(report)"},{"line_number":547,"context_line":"    context \u003d pyudev.Context()"}],"source_content_type":"text/x-python","patch_set":11,"id":"8aa12292_d074b448","line":544,"in_reply_to":"a903007c_e14ea052","updated":"2022-06-14 15:51:00.000000000","message":"I will change this in a follow up","commit_id":"6511b05b3d187864cc60ec160d591be84783015f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"f382a41e60ca063427db122d96625dda053aae6b","unresolved":false,"context_lines":[{"line_number":543,"context_line":"    report \u003d il_utils.execute(\u0027lsblk\u0027, \u0027-bia\u0027, \u0027--json\u0027,"},{"line_number":544,"context_line":"                              \u0027-o{}\u0027.format(\u0027,\u0027.join(columns)),"},{"line_number":545,"context_line":"                              check_exit_code\u003d[0])[0]"},{"line_number":546,"context_line":"    report_json \u003d json.loads(report)"},{"line_number":547,"context_line":"    context \u003d pyudev.Context()"},{"line_number":548,"context_line":"    devices_raw \u003d report_json[\u0027blockdevices\u0027]"},{"line_number":549,"context_line":"    # Convert raw json output to something useful for us"}],"source_content_type":"text/x-python","patch_set":11,"id":"42b7b901_c2f8afd2","line":546,"updated":"2022-06-10 09:39:26.000000000","message":"Maybe handle errors here? just in case","commit_id":"6511b05b3d187864cc60ec160d591be84783015f"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"0bcfcebc8c7bfc4889dbe90e39ab51661d54bd95","unresolved":false,"context_lines":[{"line_number":543,"context_line":"    report \u003d il_utils.execute(\u0027lsblk\u0027, \u0027-bia\u0027, \u0027--json\u0027,"},{"line_number":544,"context_line":"                              \u0027-o{}\u0027.format(\u0027,\u0027.join(columns)),"},{"line_number":545,"context_line":"                              check_exit_code\u003d[0])[0]"},{"line_number":546,"context_line":"    report_json \u003d json.loads(report)"},{"line_number":547,"context_line":"    context \u003d pyudev.Context()"},{"line_number":548,"context_line":"    devices_raw \u003d report_json[\u0027blockdevices\u0027]"},{"line_number":549,"context_line":"    # Convert raw json output to something useful for us"}],"source_content_type":"text/x-python","patch_set":11,"id":"72a4a270_07f8b106","line":546,"in_reply_to":"0f73309d_fcce85f2","updated":"2022-06-14 15:51:00.000000000","message":"I\u0027ll see if we can get rid of it in other places too","commit_id":"6511b05b3d187864cc60ec160d591be84783015f"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"33ef2ea97ee3fd4d4449f82c065bda3f8b26511d","unresolved":true,"context_lines":[{"line_number":543,"context_line":"    report \u003d il_utils.execute(\u0027lsblk\u0027, \u0027-bia\u0027, \u0027--json\u0027,"},{"line_number":544,"context_line":"                              \u0027-o{}\u0027.format(\u0027,\u0027.join(columns)),"},{"line_number":545,"context_line":"                              check_exit_code\u003d[0])[0]"},{"line_number":546,"context_line":"    report_json \u003d json.loads(report)"},{"line_number":547,"context_line":"    context \u003d pyudev.Context()"},{"line_number":548,"context_line":"    devices_raw \u003d report_json[\u0027blockdevices\u0027]"},{"line_number":549,"context_line":"    # Convert raw json output to something useful for us"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ceb70ba_5ec57f7c","line":546,"in_reply_to":"42b7b901_c2f8afd2","updated":"2022-06-11 09:28:35.000000000","message":"should we just use jsonutils from oslo_serialization here?","commit_id":"6511b05b3d187864cc60ec160d591be84783015f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3a04807d48fd8c4522c708a6897fa6528083a476","unresolved":true,"context_lines":[{"line_number":543,"context_line":"    report \u003d il_utils.execute(\u0027lsblk\u0027, \u0027-bia\u0027, \u0027--json\u0027,"},{"line_number":544,"context_line":"                              \u0027-o{}\u0027.format(\u0027,\u0027.join(columns)),"},{"line_number":545,"context_line":"                              check_exit_code\u003d[0])[0]"},{"line_number":546,"context_line":"    report_json \u003d json.loads(report)"},{"line_number":547,"context_line":"    context \u003d pyudev.Context()"},{"line_number":548,"context_line":"    devices_raw \u003d report_json[\u0027blockdevices\u0027]"},{"line_number":549,"context_line":"    # Convert raw json output to something useful for us"}],"source_content_type":"text/x-python","patch_set":11,"id":"bbeb060c_be2a80ee","line":546,"in_reply_to":"7ceb70ba_5ec57f7c","updated":"2022-06-14 08:43:09.000000000","message":"I don\u0027t think we should ever used that, it was for py2-py3 difficulties. I rather mean providing a better error message.","commit_id":"6511b05b3d187864cc60ec160d591be84783015f"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"031f1606c7e85f514ac70f8a33fd2ee19258dae7","unresolved":false,"context_lines":[{"line_number":543,"context_line":"    report \u003d il_utils.execute(\u0027lsblk\u0027, \u0027-bia\u0027, \u0027--json\u0027,"},{"line_number":544,"context_line":"                              \u0027-o{}\u0027.format(\u0027,\u0027.join(columns)),"},{"line_number":545,"context_line":"                              check_exit_code\u003d[0])[0]"},{"line_number":546,"context_line":"    report_json \u003d json.loads(report)"},{"line_number":547,"context_line":"    context \u003d pyudev.Context()"},{"line_number":548,"context_line":"    devices_raw \u003d report_json[\u0027blockdevices\u0027]"},{"line_number":549,"context_line":"    # Convert raw json output to something useful for us"}],"source_content_type":"text/x-python","patch_set":11,"id":"0f73309d_fcce85f2","line":546,"in_reply_to":"bbeb060c_be2a80ee","updated":"2022-06-14 15:09:24.000000000","message":"Ack","commit_id":"6511b05b3d187864cc60ec160d591be84783015f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"f382a41e60ca063427db122d96625dda053aae6b","unresolved":false,"context_lines":[{"line_number":621,"context_line":"                continue"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"        # Ensure all required columns are at least present, even if blank"},{"line_number":624,"context_line":"        missing \u003d set(map(str.lower, columns)) - set(device_raw.keys())"},{"line_number":625,"context_line":"        if missing:"},{"line_number":626,"context_line":"            raise errors.BlockDeviceError("},{"line_number":627,"context_line":"                \u0027%s must be returned by lsblk.\u0027 % \u0027, \u0027.join(sorted(missing)))"}],"source_content_type":"text/x-python","patch_set":11,"id":"ad697614_a21b70de","line":624,"updated":"2022-06-10 09:39:26.000000000","message":"nit: keys() redundant","commit_id":"6511b05b3d187864cc60ec160d591be84783015f"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"250154d2dc87dd413a6e6f840fb19ecb311da114","unresolved":true,"context_lines":[{"line_number":553,"context_line":"    devices_raw \u003d report_json[\u0027blockdevices\u0027]"},{"line_number":554,"context_line":"    # Convert raw json output to something useful for us"},{"line_number":555,"context_line":"    devices \u003d []"},{"line_number":556,"context_line":"    for device_raw in devices_raw:"},{"line_number":557,"context_line":"        # Ignore block types not specified"},{"line_number":558,"context_line":"        devtype \u003d device_raw.get(\u0027type\u0027)"},{"line_number":559,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"0274b18c_63e03995","line":556,"updated":"2022-06-14 16:29:07.000000000","message":"Maybe this is better for some other PR, but I feel like this is getting to be a huge, difficult to understand method. I wonder if it\u0027s possible to factor something out (maybe the inner portion of this loop?) to make this less complex.\n\nNot going to block this change on ... years of built up technical debt that might need to be shaved down :) -- but if you wanted to make it better, this is a good chance.","commit_id":"09ea41c83dda9b46739c1d9d0498476db855d952"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"b1140033ad2b5b788e84358602e8b6e1a3e06c7c","unresolved":false,"context_lines":[{"line_number":553,"context_line":"    devices_raw \u003d report_json[\u0027blockdevices\u0027]"},{"line_number":554,"context_line":"    # Convert raw json output to something useful for us"},{"line_number":555,"context_line":"    devices \u003d []"},{"line_number":556,"context_line":"    for device_raw in devices_raw:"},{"line_number":557,"context_line":"        # Ignore block types not specified"},{"line_number":558,"context_line":"        devtype \u003d device_raw.get(\u0027type\u0027)"},{"line_number":559,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5210bfe4_cc2b1d33","line":556,"in_reply_to":"0274b18c_63e03995","updated":"2022-06-14 16:39:15.000000000","message":"hehhh you\u0027re right and I agree, let me do this in yet another follow up so we don\u0027t mix too many things together","commit_id":"09ea41c83dda9b46739c1d9d0498476db855d952"}]}
