)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"78a250a6fe81e445fabf5b8e34f3e5eea19054a1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"b43f2c96_e9053335","updated":"2025-01-28 19:44:21.000000000","message":"This is now functionally complete (syntax correctness to be determined by reviewers).\n\n* The rules application for existing plugins appears to work based on tests conducted on devstack\n* Condition matching functionality works as expected (pending thorough testing)\n\nA few observations:\n1. We might need to implement a `retry` logic similar to the original Inspector since conditions occasionally return false negatives\n2. The conductor requires a restart between inspections to avoid bizarre errors (possibly devstack-specific)\n3. There seems to be a potential race condition with plugin_data updates by multiple rules (though this shouldn\u0027t happen) - needs investigation to confirm if this is a misunderstanding\n\nP.S. Additional testing will be required","commit_id":"17112ad90f579d9414571eb6dc9caf1a0a2384da"},{"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":"0a96e7b28d209ce51d3c63e6721286f277ac2c2a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"49a7d18e_2acd1c54","updated":"2025-02-21 01:53:06.000000000","message":"I will try to make time to test this some independently in devstack","commit_id":"7c6e40e73f05a7d8c04fbd930752cf9c250b20fa"},{"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":"484d2673c6c6c123c71cf0b481573747f43f6b56","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"8e2dc349_a44ccc24","updated":"2025-02-26 19:35:40.000000000","message":"It\u0027d be ideal if we added some API tests in ironic-tempest-plugin which enforced that we treat sensitive.","commit_id":"f47ad61447b33d4f4bdf227940a03016b99c9ffc"},{"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":"2d7627690e641ca9fe9d0f5b1a9bfd31a76dbaac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"bafdb8ea_566d8e0d","in_reply_to":"8e2dc349_a44ccc24","updated":"2025-02-26 19:37:32.000000000","message":"We also talked about double-checking the smaller modified files; e.g. notification_utils, to ensure there are no fixtures/tests in there which need to be updated along with the constant.","commit_id":"f47ad61447b33d4f4bdf227940a03016b99c9ffc"},{"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":"d89f26f9335e66e1e42310850d5b5ae2fa529b71","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"9e0b457c_a912f9c9","updated":"2025-03-11 19:29:30.000000000","message":"recheck devstack error while restarting apache","commit_id":"4d2f277e496d8373450d2bf5fda644ab5f137342"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e13d1c8ce54eed0a20eca521f396aa7c8eb3e4c5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":34,"id":"637495cf_0e29120b","updated":"2025-03-18 12:58:52.000000000","message":"Thank you for your hard work!","commit_id":"f23930bc94f68b94766c4085e43ab5514867f398"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"56345d0eb4911d3dc4e39040aa94c2149dc9069e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":34,"id":"375dfcad_bb913e24","updated":"2025-06-17 14:41:59.000000000","message":"This change deferred the addition of the configuration options;\n``supported_interfaces``, ``[auto_discovery]`` ``inspection_scope`` and\nthe ``default_scope`` as otherwise specified.\n\nAnd, while the ``scope`` field may remain in the database for easier\nmigration, it was also outside of the \u0027scope\u0027 of this change as well,\nand discussions hinted at the possibility of using the existing `traits` field in nodes as an alternative for node-to-rule association instead of the new \u0027scope\u0027 field.\n\nAdditionally, only support for the \u0027main\u0027 phase out of the 3 mentioned in the spec (main, early and preprocess phases) was implemented.\n\nA future follow-up(s) would likely need to address these and any more excluded implementations.","commit_id":"f23930bc94f68b94766c4085e43ab5514867f398"}],"ironic/api/controllers/v1/inspection_rule.py":[{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"015a5499baaea907e491f47dc6e76ec077dcd1df","unresolved":true,"context_lines":[{"line_number":81,"context_line":"        link_resource\u003d\u0027inspection\u0027,"},{"line_number":82,"context_line":"    )"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    inspection_rule[\u0027actions\u0027] \u003d list("},{"line_number":85,"context_line":"        convert_actions(rpc_rule.actions))"},{"line_number":86,"context_line":"    inspection_rule[\u0027conditions\u0027] \u003d list("},{"line_number":87,"context_line":"        convert_conditions(rpc_rule.conditions))"}],"source_content_type":"text/x-python","patch_set":27,"id":"00d35b89_44174b0e","line":84,"updated":"2025-02-28 11:39:34.000000000","message":"I don\u0027t think you need the list() function here, as convert_actions returns a list","commit_id":"f47ad61447b33d4f4bdf227940a03016b99c9ffc"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"a28322c7aed9bdc4d208a2a17f6ab1b27a7bd41d","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        link_resource\u003d\u0027inspection\u0027,"},{"line_number":82,"context_line":"    )"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    inspection_rule[\u0027actions\u0027] \u003d list("},{"line_number":85,"context_line":"        convert_actions(rpc_rule.actions))"},{"line_number":86,"context_line":"    inspection_rule[\u0027conditions\u0027] \u003d list("},{"line_number":87,"context_line":"        convert_conditions(rpc_rule.conditions))"}],"source_content_type":"text/x-python","patch_set":27,"id":"05e89c38_663bc0d0","line":84,"in_reply_to":"00d35b89_44174b0e","updated":"2025-03-03 13:50:54.000000000","message":"Acknowledged","commit_id":"f47ad61447b33d4f4bdf227940a03016b99c9ffc"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"015a5499baaea907e491f47dc6e76ec077dcd1df","unresolved":true,"context_lines":[{"line_number":175,"context_line":"            parameters[\u0027detail\u0027] \u003d detail"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        filters \u003d {}"},{"line_number":178,"context_line":"        if phase:"},{"line_number":179,"context_line":"            filters[\u0027phase\u0027] \u003d phase"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        return list_convert_with_links("}],"source_content_type":"text/x-python","patch_set":27,"id":"82750f6b_748d9238","line":178,"updated":"2025-02-28 11:39:34.000000000","message":"Filtering by scope is also possible, as per the spec","commit_id":"f47ad61447b33d4f4bdf227940a03016b99c9ffc"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"b173987e30cf27bbf4d27caada8b271dff124ca1","unresolved":true,"context_lines":[{"line_number":175,"context_line":"            parameters[\u0027detail\u0027] \u003d detail"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        filters \u003d {}"},{"line_number":178,"context_line":"        if phase:"},{"line_number":179,"context_line":"            filters[\u0027phase\u0027] \u003d phase"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        return list_convert_with_links("}],"source_content_type":"text/x-python","patch_set":27,"id":"eca437f4_934cac98","line":178,"in_reply_to":"646b362b_743520db","updated":"2025-03-07 11:53:08.000000000","message":"Acknowledged","commit_id":"f47ad61447b33d4f4bdf227940a03016b99c9ffc"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"a28322c7aed9bdc4d208a2a17f6ab1b27a7bd41d","unresolved":true,"context_lines":[{"line_number":175,"context_line":"            parameters[\u0027detail\u0027] \u003d detail"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        filters \u003d {}"},{"line_number":178,"context_line":"        if phase:"},{"line_number":179,"context_line":"            filters[\u0027phase\u0027] \u003d phase"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        return list_convert_with_links("}],"source_content_type":"text/x-python","patch_set":27,"id":"646b362b_743520db","line":178,"in_reply_to":"82750f6b_748d9238","updated":"2025-03-03 13:50:54.000000000","message":"True! This patch was not supposed to expose the scope field in the API.","commit_id":"f47ad61447b33d4f4bdf227940a03016b99c9ffc"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"015a5499baaea907e491f47dc6e76ec077dcd1df","unresolved":true,"context_lines":[{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        sensitive_patch \u003d api_utils.get_patch_values(patch, \u0027/sensitive\u0027)"},{"line_number":245,"context_line":"        sensitive \u003d sensitive_patch[0] if sensitive_patch else None"},{"line_number":246,"context_line":"        if (not sensitive) and sensitive is not None:"},{"line_number":247,"context_line":"            if rpc_rule[\u0027sensitive\u0027]:"},{"line_number":248,"context_line":"                msg \u003d _(\"Inspection rules cannot have \""},{"line_number":249,"context_line":"                        \"the sensitive flag unset.\")"}],"source_content_type":"text/x-python","patch_set":27,"id":"d7d6baf2_7ad48625","line":246,"updated":"2025-02-28 11:39:34.000000000","message":"if sensitive is set to True, and somebody sends a patch to remove the value (not set it to False, just remove the value), then we wont raise the exception below, but we should. api_utils.get_patch_values(..) will return [], sensitive will become None, and the 2nd if condition will fail, basically. \n(Just wanting to make sure we are covering all possible unallowed patch requests)","commit_id":"f47ad61447b33d4f4bdf227940a03016b99c9ffc"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"b173987e30cf27bbf4d27caada8b271dff124ca1","unresolved":true,"context_lines":[{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        sensitive_patch \u003d api_utils.get_patch_values(patch, \u0027/sensitive\u0027)"},{"line_number":245,"context_line":"        sensitive \u003d sensitive_patch[0] if sensitive_patch else None"},{"line_number":246,"context_line":"        if (not sensitive) and sensitive is not None:"},{"line_number":247,"context_line":"            if rpc_rule[\u0027sensitive\u0027]:"},{"line_number":248,"context_line":"                msg \u003d _(\"Inspection rules cannot have \""},{"line_number":249,"context_line":"                        \"the sensitive flag unset.\")"}],"source_content_type":"text/x-python","patch_set":27,"id":"71f03ab0_148ff42f","line":246,"in_reply_to":"1de5aa88_b4822988","updated":"2025-03-07 11:53:08.000000000","message":"Yes, in this case, branching will not happen, and the patch will be applied","commit_id":"f47ad61447b33d4f4bdf227940a03016b99c9ffc"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"a28322c7aed9bdc4d208a2a17f6ab1b27a7bd41d","unresolved":true,"context_lines":[{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        sensitive_patch \u003d api_utils.get_patch_values(patch, \u0027/sensitive\u0027)"},{"line_number":245,"context_line":"        sensitive \u003d sensitive_patch[0] if sensitive_patch else None"},{"line_number":246,"context_line":"        if (not sensitive) and sensitive is not None:"},{"line_number":247,"context_line":"            if rpc_rule[\u0027sensitive\u0027]:"},{"line_number":248,"context_line":"                msg \u003d _(\"Inspection rules cannot have \""},{"line_number":249,"context_line":"                        \"the sensitive flag unset.\")"}],"source_content_type":"text/x-python","patch_set":27,"id":"1de5aa88_b4822988","line":246,"in_reply_to":"d7d6baf2_7ad48625","updated":"2025-03-03 13:50:54.000000000","message":"That\u0027s a great new POV, thanks! \n\nif get_path_values returns an empty list, `sensitive \u003d sensitive_patch[0] if sensitive_patch else None` becomes None, so the branching shouldn\u0027t happen.\n\nFYI, the CLI also has no support for \u0027unsetting\u0027 this field :) .","commit_id":"f47ad61447b33d4f4bdf227940a03016b99c9ffc"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b398eaab0dbb9de572bcb28b477827e7be570ab0","unresolved":true,"context_lines":[{"line_number":37,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":38,"context_line":"METRICS \u003d metrics_utils.get_metrics_logger(__name__)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"DEFAULT_RETURN_FIELDS \u003d [\u0027uuid\u0027, \u0027description\u0027]"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"def convert_actions(rpc_actions):"}],"source_content_type":"text/x-python","patch_set":31,"id":"f68a812b_49c0e918","line":40,"updated":"2025-03-17 16:14:26.000000000","message":"I\u0027d prefer to return priority and possibly phase by default. These seem to be pretty important and are not large.","commit_id":"4d2f277e496d8373450d2bf5fda644ab5f137342"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"23c58ab750d4b033b09d255fef8d3893b1f04492","unresolved":false,"context_lines":[{"line_number":37,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":38,"context_line":"METRICS \u003d metrics_utils.get_metrics_logger(__name__)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"DEFAULT_RETURN_FIELDS \u003d [\u0027uuid\u0027, \u0027description\u0027]"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"def convert_actions(rpc_actions):"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba91329c_8a98bd6c","line":40,"in_reply_to":"f68a812b_49c0e918","updated":"2025-03-17 17:40:21.000000000","message":"Acknowledged","commit_id":"4d2f277e496d8373450d2bf5fda644ab5f137342"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b398eaab0dbb9de572bcb28b477827e7be570ab0","unresolved":true,"context_lines":[{"line_number":52,"context_line":"    return [{"},{"line_number":53,"context_line":"        \u0027op\u0027: condition[\u0027op\u0027],"},{"line_number":54,"context_line":"        \u0027args\u0027: condition[\u0027args\u0027],"},{"line_number":55,"context_line":"        \u0027multiple\u0027: condition.get(\u0027multiple\u0027, \u0027any\u0027),"},{"line_number":56,"context_line":"        \u0027loop\u0027: condition.get(\u0027loop\u0027, {})"},{"line_number":57,"context_line":"    } for condition in rpc_conditions]"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"b2b2916f_01f7c0f5","line":55,"updated":"2025-03-17 16:14:26.000000000","message":"This returns the value \"any\" if nothing was populated in the database? I wonder if it\u0027s a valid case.","commit_id":"4d2f277e496d8373450d2bf5fda644ab5f137342"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"993eaabee24a9b54dbd01289ebe67c892c298058","unresolved":true,"context_lines":[{"line_number":52,"context_line":"    return [{"},{"line_number":53,"context_line":"        \u0027op\u0027: condition[\u0027op\u0027],"},{"line_number":54,"context_line":"        \u0027args\u0027: condition[\u0027args\u0027],"},{"line_number":55,"context_line":"        \u0027multiple\u0027: condition.get(\u0027multiple\u0027, \u0027any\u0027),"},{"line_number":56,"context_line":"        \u0027loop\u0027: condition.get(\u0027loop\u0027, {})"},{"line_number":57,"context_line":"    } for condition in rpc_conditions]"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"8d9d9a97_cf1d10d5","line":55,"in_reply_to":"3730876d_b3137241","updated":"2025-03-18 10:03:44.000000000","message":"That makes sense.","commit_id":"4d2f277e496d8373450d2bf5fda644ab5f137342"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"f44849bf7c2f90b9e2ec27986d656109b91213b3","unresolved":true,"context_lines":[{"line_number":52,"context_line":"    return [{"},{"line_number":53,"context_line":"        \u0027op\u0027: condition[\u0027op\u0027],"},{"line_number":54,"context_line":"        \u0027args\u0027: condition[\u0027args\u0027],"},{"line_number":55,"context_line":"        \u0027multiple\u0027: condition.get(\u0027multiple\u0027, \u0027any\u0027),"},{"line_number":56,"context_line":"        \u0027loop\u0027: condition.get(\u0027loop\u0027, {})"},{"line_number":57,"context_line":"    } for condition in rpc_conditions]"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"3730876d_b3137241","line":55,"in_reply_to":"881f1281_d7521b03","updated":"2025-03-18 07:21:38.000000000","message":"I understand, but your change returns \"multiple\" even if a user did not set it. It may be confusing. Like, what does \"multiple\" even mean if there is no \"loop\"?","commit_id":"4d2f277e496d8373450d2bf5fda644ab5f137342"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"23c58ab750d4b033b09d255fef8d3893b1f04492","unresolved":true,"context_lines":[{"line_number":52,"context_line":"    return [{"},{"line_number":53,"context_line":"        \u0027op\u0027: condition[\u0027op\u0027],"},{"line_number":54,"context_line":"        \u0027args\u0027: condition[\u0027args\u0027],"},{"line_number":55,"context_line":"        \u0027multiple\u0027: condition.get(\u0027multiple\u0027, \u0027any\u0027),"},{"line_number":56,"context_line":"        \u0027loop\u0027: condition.get(\u0027loop\u0027, {})"},{"line_number":57,"context_line":"    } for condition in rpc_conditions]"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"881f1281_d7521b03","line":55,"in_reply_to":"b2b2916f_01f7c0f5","updated":"2025-03-17 17:40:21.000000000","message":"that\u0027s the default value according to the spec.","commit_id":"4d2f277e496d8373450d2bf5fda644ab5f137342"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b398eaab0dbb9de572bcb28b477827e7be570ab0","unresolved":true,"context_lines":[{"line_number":90,"context_line":"    if sanitize:"},{"line_number":91,"context_line":"        rules_sanitize(inspection_rule, fields)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    inspection_rule[\u0027built_in\u0027] \u003d False"},{"line_number":94,"context_line":"    return inspection_rule"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"8a9fe045_c7fe200d","line":93,"updated":"2025-03-17 16:14:26.000000000","message":"Don\u0027t we also return built-in rules in the API? I think that was my intention.\n\nIf we decide not to return built-in rules, this value is redundant. If we decide to return them, it\u0027s constant. Either way, always returning \"False\" does not provide a lot of value.\n\nIn fact, I\u0027m fine if we skip returning built-in rules for now or at all. But let\u0027s also delay adding this value.","commit_id":"4d2f277e496d8373450d2bf5fda644ab5f137342"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"f44849bf7c2f90b9e2ec27986d656109b91213b3","unresolved":true,"context_lines":[{"line_number":90,"context_line":"    if sanitize:"},{"line_number":91,"context_line":"        rules_sanitize(inspection_rule, fields)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    inspection_rule[\u0027built_in\u0027] \u003d False"},{"line_number":94,"context_line":"    return inspection_rule"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"7a6936d7_462e2c1a","line":93,"in_reply_to":"1ae23abe_34572c48","updated":"2025-03-18 07:21:38.000000000","message":"If we don\u0027t return built-in rules, this field should not be in the API since it\u0027s always False.","commit_id":"4d2f277e496d8373450d2bf5fda644ab5f137342"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"993eaabee24a9b54dbd01289ebe67c892c298058","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    if sanitize:"},{"line_number":91,"context_line":"        rules_sanitize(inspection_rule, fields)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    inspection_rule[\u0027built_in\u0027] \u003d False"},{"line_number":94,"context_line":"    return inspection_rule"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ec8ff_77ec4229","line":93,"in_reply_to":"7a6936d7_462e2c1a","updated":"2025-03-18 10:03:44.000000000","message":"Acknowledged","commit_id":"4d2f277e496d8373450d2bf5fda644ab5f137342"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"23c58ab750d4b033b09d255fef8d3893b1f04492","unresolved":true,"context_lines":[{"line_number":90,"context_line":"    if sanitize:"},{"line_number":91,"context_line":"        rules_sanitize(inspection_rule, fields)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    inspection_rule[\u0027built_in\u0027] \u003d False"},{"line_number":94,"context_line":"    return inspection_rule"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"1ae23abe_34572c48","line":93,"in_reply_to":"8a9fe045_c7fe200d","updated":"2025-03-17 17:40:21.000000000","message":"We do not return built-in rules in the API (I think it makes sense that way) and this field is one of the only ways we differentiate built-in rules in the engine.","commit_id":"4d2f277e496d8373450d2bf5fda644ab5f137342"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b398eaab0dbb9de572bcb28b477827e7be570ab0","unresolved":true,"context_lines":[{"line_number":110,"context_line":"class InspectionRuleController(rest.RestController):"},{"line_number":111,"context_line":"    \"\"\"REST controller for inspection rules.\"\"\""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    invalid_sort_key_list \u003d [\u0027actions\u0027, \u0027conditons\u0027]"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @pecan.expose()"},{"line_number":116,"context_line":"    def _route(self, args, request\u003dNone):"}],"source_content_type":"text/x-python","patch_set":31,"id":"6072d85a_f4fdddb3","line":113,"updated":"2025-03-17 16:14:26.000000000","message":"typo: conditions","commit_id":"4d2f277e496d8373450d2bf5fda644ab5f137342"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"23c58ab750d4b033b09d255fef8d3893b1f04492","unresolved":false,"context_lines":[{"line_number":110,"context_line":"class InspectionRuleController(rest.RestController):"},{"line_number":111,"context_line":"    \"\"\"REST controller for inspection rules.\"\"\""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    invalid_sort_key_list \u003d [\u0027actions\u0027, \u0027conditons\u0027]"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @pecan.expose()"},{"line_number":116,"context_line":"    def _route(self, args, request\u003dNone):"}],"source_content_type":"text/x-python","patch_set":31,"id":"bb409635_2281fc0b","line":113,"in_reply_to":"6072d85a_f4fdddb3","updated":"2025-03-17 17:40:21.000000000","message":"Acknowledged","commit_id":"4d2f277e496d8373450d2bf5fda644ab5f137342"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b398eaab0dbb9de572bcb28b477827e7be570ab0","unresolved":true,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @pecan.expose()"},{"line_number":116,"context_line":"    def _route(self, args, request\u003dNone):"},{"line_number":117,"context_line":"        if not api_utils.allow_inspection_rules():"},{"line_number":118,"context_line":"            msg \u003d _(\"The API version does not allow inspection rules\")"},{"line_number":119,"context_line":"            if api.request.method \u003d\u003d \"GET\":"},{"line_number":120,"context_line":"                raise webob_exc.HTTPNotFound(msg)"}],"source_content_type":"text/x-python","patch_set":31,"id":"c02a1a4a_411a0a91","line":117,"updated":"2025-03-17 16:14:26.000000000","message":"Shouldn\u0027t this be already handled by VERSIONED_CONTROLLER logic in the root?","commit_id":"4d2f277e496d8373450d2bf5fda644ab5f137342"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"23c58ab750d4b033b09d255fef8d3893b1f04492","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @pecan.expose()"},{"line_number":116,"context_line":"    def _route(self, args, request\u003dNone):"},{"line_number":117,"context_line":"        if not api_utils.allow_inspection_rules():"},{"line_number":118,"context_line":"            msg \u003d _(\"The API version does not allow inspection rules\")"},{"line_number":119,"context_line":"            if api.request.method \u003d\u003d \"GET\":"},{"line_number":120,"context_line":"                raise webob_exc.HTTPNotFound(msg)"}],"source_content_type":"text/x-python","patch_set":31,"id":"11009e1c_17ce8967","line":117,"in_reply_to":"c02a1a4a_411a0a91","updated":"2025-03-17 17:40:21.000000000","message":"it did not seem to, without this check.","commit_id":"4d2f277e496d8373450d2bf5fda644ab5f137342"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b398eaab0dbb9de572bcb28b477827e7be570ab0","unresolved":true,"context_lines":[{"line_number":120,"context_line":"                raise webob_exc.HTTPNotFound(msg)"},{"line_number":121,"context_line":"            else:"},{"line_number":122,"context_line":"                raise webob_exc.HTTPMethodNotAllowed(msg)"},{"line_number":123,"context_line":"        return super(InspectionRuleController, self)._route(args, request)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    @METRICS.timer(\u0027InspectionRuleController.get_all\u0027)"},{"line_number":126,"context_line":"    @method.expose()"}],"source_content_type":"text/x-python","patch_set":31,"id":"d7f5b23d_c4dcc4b7","line":123,"updated":"2025-03-17 16:14:26.000000000","message":"nit: outdated syntax, don\u0027t pass any arguments to super()","commit_id":"4d2f277e496d8373450d2bf5fda644ab5f137342"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"23c58ab750d4b033b09d255fef8d3893b1f04492","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                raise webob_exc.HTTPNotFound(msg)"},{"line_number":121,"context_line":"            else:"},{"line_number":122,"context_line":"                raise webob_exc.HTTPMethodNotAllowed(msg)"},{"line_number":123,"context_line":"        return super(InspectionRuleController, self)._route(args, request)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    @METRICS.timer(\u0027InspectionRuleController.get_all\u0027)"},{"line_number":126,"context_line":"    @method.expose()"}],"source_content_type":"text/x-python","patch_set":31,"id":"6b8f92cb_db0406b8","line":123,"in_reply_to":"d7f5b23d_c4dcc4b7","updated":"2025-03-17 17:40:21.000000000","message":"Acknowledged","commit_id":"4d2f277e496d8373450d2bf5fda644ab5f137342"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b398eaab0dbb9de572bcb28b477827e7be570ab0","unresolved":true,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        built_in_flag \u003d api_utils.get_patch_values(patch, \u0027/built_in\u0027)"},{"line_number":251,"context_line":"        if built_in_flag:"},{"line_number":252,"context_line":"            msg \u003d _(\"The \u0027built_in\u0027 field is immutable.\")"},{"line_number":253,"context_line":"            raise exception.PatchError(patch\u003dpatch, reason\u003dmsg)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        rule \u003d api_utils.apply_jsonpatch(rule, patch)"}],"source_content_type":"text/x-python","patch_set":31,"id":"5e71f280_a90725b7","line":252,"updated":"2025-03-17 16:14:26.000000000","message":"See above re build-in","commit_id":"4d2f277e496d8373450d2bf5fda644ab5f137342"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"23c58ab750d4b033b09d255fef8d3893b1f04492","unresolved":true,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        built_in_flag \u003d api_utils.get_patch_values(patch, \u0027/built_in\u0027)"},{"line_number":251,"context_line":"        if built_in_flag:"},{"line_number":252,"context_line":"            msg \u003d _(\"The \u0027built_in\u0027 field is immutable.\")"},{"line_number":253,"context_line":"            raise exception.PatchError(patch\u003dpatch, reason\u003dmsg)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        rule \u003d api_utils.apply_jsonpatch(rule, patch)"}],"source_content_type":"text/x-python","patch_set":31,"id":"e01c4e03_376e9c80","line":252,"in_reply_to":"5e71f280_a90725b7","updated":"2025-03-17 17:40:21.000000000","message":"The built_in field is not a real field in the inspection rule object, it\u0027s only added on fetch. The API can neither create nor modify a built-in rule, this check is mostly for User Experience.","commit_id":"4d2f277e496d8373450d2bf5fda644ab5f137342"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"993eaabee24a9b54dbd01289ebe67c892c298058","unresolved":true,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        built_in_flag \u003d api_utils.get_patch_values(patch, \u0027/built_in\u0027)"},{"line_number":251,"context_line":"        if built_in_flag:"},{"line_number":252,"context_line":"            msg \u003d _(\"The \u0027built_in\u0027 field is immutable.\")"},{"line_number":253,"context_line":"            raise exception.PatchError(patch\u003dpatch, reason\u003dmsg)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        rule \u003d api_utils.apply_jsonpatch(rule, patch)"}],"source_content_type":"text/x-python","patch_set":31,"id":"3f57a24c_36756888","line":252,"in_reply_to":"b7db7eb1_410d0b6c","updated":"2025-03-18 10:03:44.000000000","message":"Acknolwedged!\n\n(Well, this part, I actually meant we are just checking if it\u0027s in the patch to inform the user it\u0027s immutable, not that it makes any difference since it\u0027s not part of the object)","commit_id":"4d2f277e496d8373450d2bf5fda644ab5f137342"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"f44849bf7c2f90b9e2ec27986d656109b91213b3","unresolved":true,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        built_in_flag \u003d api_utils.get_patch_values(patch, \u0027/built_in\u0027)"},{"line_number":251,"context_line":"        if built_in_flag:"},{"line_number":252,"context_line":"            msg \u003d _(\"The \u0027built_in\u0027 field is immutable.\")"},{"line_number":253,"context_line":"            raise exception.PatchError(patch\u003dpatch, reason\u003dmsg)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        rule \u003d api_utils.apply_jsonpatch(rule, patch)"}],"source_content_type":"text/x-python","patch_set":31,"id":"b7db7eb1_410d0b6c","line":252,"in_reply_to":"e01c4e03_376e9c80","updated":"2025-03-18 07:21:38.000000000","message":"What user experience? You\u0027re returning a constant \"False\", how do users benefit from it?","commit_id":"4d2f277e496d8373450d2bf5fda644ab5f137342"}],"ironic/api/controllers/v1/utils.py":[{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"3641972869a6cb2777537f080ffec5275dadd6d0","unresolved":true,"context_lines":[{"line_number":1624,"context_line":"def allow_inspection_rules():"},{"line_number":1625,"context_line":"    \"\"\"Check if accessing inspection rule endpoints is allowed."},{"line_number":1626,"context_line":""},{"line_number":1627,"context_line":"    Version 1.93 of the API exposed rule endpoints."},{"line_number":1628,"context_line":"    \"\"\""},{"line_number":1629,"context_line":"    return api.request.version.minor \u003e\u003d versions.MINOR_96_INSPECTION_RULES"},{"line_number":1630,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"aadeca18_00c7e138","line":1627,"updated":"2025-02-18 17:21:37.000000000","message":"Version 1.96","commit_id":"316225739ab90a218d641ca77d30fde2f7da4662"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"1c9f807e08bf4e66f239d9c15947a224dd19a944","unresolved":false,"context_lines":[{"line_number":1624,"context_line":"def allow_inspection_rules():"},{"line_number":1625,"context_line":"    \"\"\"Check if accessing inspection rule endpoints is allowed."},{"line_number":1626,"context_line":""},{"line_number":1627,"context_line":"    Version 1.93 of the API exposed rule endpoints."},{"line_number":1628,"context_line":"    \"\"\""},{"line_number":1629,"context_line":"    return api.request.version.minor \u003e\u003d versions.MINOR_96_INSPECTION_RULES"},{"line_number":1630,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"cbbc0f3a_49500571","line":1627,"in_reply_to":"aadeca18_00c7e138","updated":"2025-02-18 21:38:37.000000000","message":"Acknowledged","commit_id":"316225739ab90a218d641ca77d30fde2f7da4662"}],"ironic/common/policy.py":[{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"015a5499baaea907e491f47dc6e76ec077dcd1df","unresolved":true,"context_lines":[{"line_number":2015,"context_line":"        check_str\u003dSYSTEM_READER,"},{"line_number":2016,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":2017,"context_line":"        description\u003d\u0027Get inspection rule(s)\u0027,"},{"line_number":2018,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/rules\u0027, \u0027method\u0027: \u0027GET\u0027},"},{"line_number":2019,"context_line":"                    {\u0027path\u0027: \u0027/rules/{rule_id}\u0027, \u0027method\u0027: \u0027GET\u0027}],"},{"line_number":2020,"context_line":"    ),"},{"line_number":2021,"context_line":"    policy.DocumentedRuleDefault("}],"source_content_type":"text/x-python","patch_set":27,"id":"e62f78e5_2cc75029","line":2018,"updated":"2025-02-28 11:39:34.000000000","message":"The spec uses the /v1/inspection_rules path everywhere","commit_id":"f47ad61447b33d4f4bdf227940a03016b99c9ffc"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"a28322c7aed9bdc4d208a2a17f6ab1b27a7bd41d","unresolved":false,"context_lines":[{"line_number":2015,"context_line":"        check_str\u003dSYSTEM_READER,"},{"line_number":2016,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":2017,"context_line":"        description\u003d\u0027Get inspection rule(s)\u0027,"},{"line_number":2018,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/rules\u0027, \u0027method\u0027: \u0027GET\u0027},"},{"line_number":2019,"context_line":"                    {\u0027path\u0027: \u0027/rules/{rule_id}\u0027, \u0027method\u0027: \u0027GET\u0027}],"},{"line_number":2020,"context_line":"    ),"},{"line_number":2021,"context_line":"    policy.DocumentedRuleDefault("}],"source_content_type":"text/x-python","patch_set":27,"id":"1f387782_8ff81561","line":2018,"in_reply_to":"e62f78e5_2cc75029","updated":"2025-03-03 13:50:54.000000000","message":"Acknowledged","commit_id":"f47ad61447b33d4f4bdf227940a03016b99c9ffc"},{"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":"13582d3a84fcbfa7bf024531dd87385b6ca7a346","unresolved":true,"context_lines":[{"line_number":2016,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":2017,"context_line":"        description\u003d\u0027Get inspection rule(s)\u0027,"},{"line_number":2018,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/rules\u0027, \u0027method\u0027: \u0027GET\u0027},"},{"line_number":2019,"context_line":"                    {\u0027path\u0027: \u0027/rules/{rule_id}\u0027, \u0027method\u0027: \u0027GET\u0027}],"},{"line_number":2020,"context_line":"    ),"},{"line_number":2021,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":2022,"context_line":"        name\u003d\u0027baremetal:inspection_rule:list\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"5b0702bc_a8243247","line":2019,"updated":"2025-02-26 19:34:31.000000000","message":"I noticed something weird reviewing this; it looks like we overload :get to allow both get and list; when looking into other policies it\u0027s weirdly inconsistent: runbook:get will not allow you to list; but deploy_templates:get will allow you to list.\n\nI think this may be a bug we should resolve, even if I\u0027m skeptical it is impactful considering our default policy.","commit_id":"f47ad61447b33d4f4bdf227940a03016b99c9ffc"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"015a5499baaea907e491f47dc6e76ec077dcd1df","unresolved":true,"context_lines":[{"line_number":2019,"context_line":"                    {\u0027path\u0027: \u0027/rules/{rule_id}\u0027, \u0027method\u0027: \u0027GET\u0027}],"},{"line_number":2020,"context_line":"    ),"},{"line_number":2021,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":2022,"context_line":"        name\u003d\u0027baremetal:inspection_rule:list\u0027,"},{"line_number":2023,"context_line":"        check_str\u003dAPI_READER,"},{"line_number":2024,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":2025,"context_line":"        description\u003d\u0027Get inspection rule(s)\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a87598f_ace326a4","line":2022,"updated":"2025-02-28 11:39:34.000000000","message":"I dont think there is a need for list at all, get should suffice.","commit_id":"f47ad61447b33d4f4bdf227940a03016b99c9ffc"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"a28322c7aed9bdc4d208a2a17f6ab1b27a7bd41d","unresolved":false,"context_lines":[{"line_number":2019,"context_line":"                    {\u0027path\u0027: \u0027/rules/{rule_id}\u0027, \u0027method\u0027: \u0027GET\u0027}],"},{"line_number":2020,"context_line":"    ),"},{"line_number":2021,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":2022,"context_line":"        name\u003d\u0027baremetal:inspection_rule:list\u0027,"},{"line_number":2023,"context_line":"        check_str\u003dAPI_READER,"},{"line_number":2024,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":2025,"context_line":"        description\u003d\u0027Get inspection rule(s)\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"f288557f_fb9d16e1","line":2022,"in_reply_to":"9a87598f_ace326a4","updated":"2025-03-03 13:50:54.000000000","message":"Acknowledged","commit_id":"f47ad61447b33d4f4bdf227940a03016b99c9ffc"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"a28322c7aed9bdc4d208a2a17f6ab1b27a7bd41d","unresolved":true,"context_lines":[{"line_number":2058,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/rules\u0027, \u0027method\u0027: \u0027DELETE\u0027},"},{"line_number":2059,"context_line":"                    {\u0027path\u0027: \u0027/rules/{rule_id}\u0027, \u0027method\u0027: \u0027DELETE\u0027}],"},{"line_number":2060,"context_line":"    ),"},{"line_number":2061,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":2062,"context_line":"        name\u003d\u0027baremetal:inspection_rule:delete_all\u0027,"},{"line_number":2063,"context_line":"        check_str\u003dSYSTEM_ADMIN,"},{"line_number":2064,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":2065,"context_line":"        description\u003d\u0027Delete all inspection rules\u0027,"},{"line_number":2066,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/rules\u0027, \u0027method\u0027: \u0027DELETE\u0027}],"},{"line_number":2067,"context_line":"    ),"},{"line_number":2068,"context_line":"]"},{"line_number":2069,"context_line":""},{"line_number":2070,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"bdc1c322_07777540","line":2067,"range":{"start_line":2061,"start_character":0,"end_line":2067,"end_character":6},"updated":"2025-03-03 13:50:54.000000000","message":"Delete this part.","commit_id":"f47ad61447b33d4f4bdf227940a03016b99c9ffc"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"b173987e30cf27bbf4d27caada8b271dff124ca1","unresolved":true,"context_lines":[{"line_number":2058,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/rules\u0027, \u0027method\u0027: \u0027DELETE\u0027},"},{"line_number":2059,"context_line":"                    {\u0027path\u0027: \u0027/rules/{rule_id}\u0027, \u0027method\u0027: \u0027DELETE\u0027}],"},{"line_number":2060,"context_line":"    ),"},{"line_number":2061,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":2062,"context_line":"        name\u003d\u0027baremetal:inspection_rule:delete_all\u0027,"},{"line_number":2063,"context_line":"        check_str\u003dSYSTEM_ADMIN,"},{"line_number":2064,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":2065,"context_line":"        description\u003d\u0027Delete all inspection rules\u0027,"},{"line_number":2066,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/rules\u0027, \u0027method\u0027: \u0027DELETE\u0027}],"},{"line_number":2067,"context_line":"    ),"},{"line_number":2068,"context_line":"]"},{"line_number":2069,"context_line":""},{"line_number":2070,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"587a8fc1_8b2299ae","line":2067,"range":{"start_line":2061,"start_character":0,"end_line":2067,"end_character":6},"in_reply_to":"bdc1c322_07777540","updated":"2025-03-07 11:53:08.000000000","message":"Done","commit_id":"f47ad61447b33d4f4bdf227940a03016b99c9ffc"}],"ironic/tests/unit/api/controllers/v1/test_inspection_rule.py":[{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"3641972869a6cb2777537f080ffec5275dadd6d0","unresolved":true,"context_lines":[{"line_number":34,"context_line":"    invalid_version_headers \u003d {api_base.Version.string: \u00271.92\u0027}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class TestListInspectionRules(BaseInspectionRulesAPITest):"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def test_empty(self):"},{"line_number":40,"context_line":"        data \u003d self.get_json(\u0027/inspection_rules\u0027, headers\u003dself.headers)"}],"source_content_type":"text/x-python","patch_set":19,"id":"d92a622c_8966a579","line":37,"updated":"2025-02-18 17:21:37.000000000","message":"We also need to make sure that a sensitive rule can not be marked not sensitive, and will likely need a test for that. Also, a test for making sure sensitive rules don\u0027t reveal unwanted data on a GET request.","commit_id":"316225739ab90a218d641ca77d30fde2f7da4662"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"b9442060f4fdfa3657aa3c0b0a4dfb4eadd39bac","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    invalid_version_headers \u003d {api_base.Version.string: \u00271.92\u0027}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class TestListInspectionRules(BaseInspectionRulesAPITest):"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def test_empty(self):"},{"line_number":40,"context_line":"        data \u003d self.get_json(\u0027/inspection_rules\u0027, headers\u003dself.headers)"}],"source_content_type":"text/x-python","patch_set":19,"id":"d741f1f9_df134626","line":37,"in_reply_to":"d92a622c_8966a579","updated":"2025-02-18 22:45:46.000000000","message":"Acknowledged","commit_id":"316225739ab90a218d641ca77d30fde2f7da4662"}]}
