)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"49f7dcb2d12b682904d4b828d94af47c67201101","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":9,"id":"25cfd474_87a3c30f","line":15,"updated":"2023-08-21 12:30:38.000000000","message":"nit: I don\u0027t know if we still use StoryBoard as we talked about switching to something else at the autumn PTG, but there is a story for this so I thought it would be nice to include it:\nStory: 2010275\nTask: 46206","commit_id":"fee8f9ebbf749ac219215087b6f21793d5d68997"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"afe1bb357b1928b35820505acee2a27622b60cb1","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":9,"id":"3d4aa483_efb99994","line":15,"in_reply_to":"25cfd474_87a3c30f","updated":"2023-08-21 14:43:53.000000000","message":"This patch does not completely implement the task (i.e. all the inspection hooks to be added to Ironic are not present in this patch). Should I still include the Task number as well? (The opendev developer guide states that Story and Task should be on two separate lines if the patch fully implements the Story. [Reference](https://wiki.openstack.org/wiki/GitCommitMessages#Including_external_references:~:text\u003dused%20for%20Storyboard%3A-,Story%3A%201234567,-Task%3A%2098765%20%2D%2D%20use))","commit_id":"fee8f9ebbf749ac219215087b6f21793d5d68997"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"0a53b494e834bda88e56f9ae8cf5cf8cc6fc5b7e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"f0dbadb4_914316cd","line":15,"in_reply_to":"3d4aa483_efb99994","updated":"2023-08-21 14:51:02.000000000","message":"Just the story then, I would say.","commit_id":"fee8f9ebbf749ac219215087b6f21793d5d68997"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3632c9a7eacb611f93b8cf7c2af2016a1e6c9524","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"06380326_b528bdd4","line":15,"in_reply_to":"f0dbadb4_914316cd","updated":"2023-08-21 16:04:34.000000000","message":"We don\u0027t use storyboard any more.","commit_id":"fee8f9ebbf749ac219215087b6f21793d5d68997"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"50d714671fef6662629ef8a45443540badf1e820","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"b541884c_cb4eb0f5","updated":"2023-07-14 14:07:52.000000000","message":"This is shaping well, thanks! Some comments inline.","commit_id":"72907893ce0008b28ff2eecfd8cb6a5c1189daa7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"bba91239_2c7bd556","updated":"2023-08-02 12:46:02.000000000","message":"Getting there! A bunch of new comments inline.","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"979a8cb1ec20dbfff6e2a10036bc5e5a7c2e4b36","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"6435e263_4e915594","updated":"2023-08-17 15:37:32.000000000","message":"This is really close, just a few more minor issues.","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"fdc03237a91842b5a092ee2b4355fb5ad9589731","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"01e0a15a_e0d22c4d","updated":"2023-08-25 08:06:21.000000000","message":"great job!","commit_id":"a86f403d84491a44731817497f7c00a96c782e49"}],"ironic/common/exception.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":880,"context_line":"    _msg_fmt \u003d _(\"Inventory for node %(node)s is invalid: %(reason)s\")"},{"line_number":881,"context_line":""},{"line_number":882,"context_line":""},{"line_number":883,"context_line":"class InspectionFinished(IronicException):"},{"line_number":884,"context_line":"    _msg_fmt \u003d _(\"Inpsection for node %(node)s already finished with error: \""},{"line_number":885,"context_line":"                 \"%(error)s.\")"},{"line_number":886,"context_line":"    code \u003d http_client.BAD_REQUEST"}],"source_content_type":"text/x-python","patch_set":1,"id":"53786dae_1c944f6a","line":883,"updated":"2023-07-05 08:52:25.000000000","message":"I don\u0027t think we need any of these exceptions. This one cannot happen any more.","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"99325987b900b54770907f43fd7859dff56e3ea5","unresolved":false,"context_lines":[{"line_number":880,"context_line":"    _msg_fmt \u003d _(\"Inventory for node %(node)s is invalid: %(reason)s\")"},{"line_number":881,"context_line":""},{"line_number":882,"context_line":""},{"line_number":883,"context_line":"class InspectionFinished(IronicException):"},{"line_number":884,"context_line":"    _msg_fmt \u003d _(\"Inpsection for node %(node)s already finished with error: \""},{"line_number":885,"context_line":"                 \"%(error)s.\")"},{"line_number":886,"context_line":"    code \u003d http_client.BAD_REQUEST"}],"source_content_type":"text/x-python","patch_set":1,"id":"56d1be30_cd652e17","line":883,"in_reply_to":"53786dae_1c944f6a","updated":"2023-07-05 16:23:06.000000000","message":"Done","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":886,"context_line":"    code \u003d http_client.BAD_REQUEST"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"class InspectorError(IronicException):"},{"line_number":890,"context_line":"    code \u003d http_client.BAD_REQUEST # 400"},{"line_number":891,"context_line":""},{"line_number":892,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"cd26af03_aa7cf303","line":889,"updated":"2023-07-05 08:52:25.000000000","message":"There is HardwareInspectionFailure already","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"99325987b900b54770907f43fd7859dff56e3ea5","unresolved":false,"context_lines":[{"line_number":886,"context_line":"    code \u003d http_client.BAD_REQUEST"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"class InspectorError(IronicException):"},{"line_number":890,"context_line":"    code \u003d http_client.BAD_REQUEST # 400"},{"line_number":891,"context_line":""},{"line_number":892,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"afa1f71f_4bc507fb","line":889,"in_reply_to":"cd26af03_aa7cf303","updated":"2023-07-05 16:23:06.000000000","message":"Removed InspectorError","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":890,"context_line":"    code \u003d http_client.BAD_REQUEST # 400"},{"line_number":891,"context_line":""},{"line_number":892,"context_line":""},{"line_number":893,"context_line":"class InvalidInspectionState(InspectorError):"},{"line_number":894,"context_line":"    _msg_fmt \u003d _(\"Node %(node)s has an invalid provision state for \""},{"line_number":895,"context_line":"                 \"inspection: %(state)s. Valid states are %(valid)s.\")"},{"line_number":896,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"b7e6c5e3_bc23781e","line":893,"updated":"2023-07-05 08:52:25.000000000","message":"There is InvalidState already","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"99325987b900b54770907f43fd7859dff56e3ea5","unresolved":false,"context_lines":[{"line_number":890,"context_line":"    code \u003d http_client.BAD_REQUEST # 400"},{"line_number":891,"context_line":""},{"line_number":892,"context_line":""},{"line_number":893,"context_line":"class InvalidInspectionState(InspectorError):"},{"line_number":894,"context_line":"    _msg_fmt \u003d _(\"Node %(node)s has an invalid provision state for \""},{"line_number":895,"context_line":"                 \"inspection: %(state)s. Valid states are %(valid)s.\")"},{"line_number":896,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"0e7d3895_918bd848","line":893,"in_reply_to":"b7e6c5e3_bc23781e","updated":"2023-07-05 16:23:06.000000000","message":"Removed InvalidInspectionState","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":895,"context_line":"                 \"inspection: %(state)s. Valid states are %(valid)s.\")"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":""},{"line_number":898,"context_line":"class InspectionPowerOffFailure(InspectorError):"},{"line_number":899,"context_line":"    _msg_fmt \u003d _(\"Failed to power off node %(node)s after inspection. Check \""},{"line_number":900,"context_line":"                 \"its power management configuration. Inventory: \""},{"line_number":901,"context_line":"                 \"%(inventory)s\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"f3ed34fe_58a27602","line":898,"updated":"2023-07-05 08:52:25.000000000","message":"I\u0027d just use HardwareInspectionFailure","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"99325987b900b54770907f43fd7859dff56e3ea5","unresolved":false,"context_lines":[{"line_number":895,"context_line":"                 \"inspection: %(state)s. Valid states are %(valid)s.\")"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":""},{"line_number":898,"context_line":"class InspectionPowerOffFailure(InspectorError):"},{"line_number":899,"context_line":"    _msg_fmt \u003d _(\"Failed to power off node %(node)s after inspection. Check \""},{"line_number":900,"context_line":"                 \"its power management configuration. Inventory: \""},{"line_number":901,"context_line":"                 \"%(inventory)s\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"38774350_738f5231","line":898,"in_reply_to":"f3ed34fe_58a27602","updated":"2023-07-05 16:23:06.000000000","message":"Done","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"}],"ironic/common/states.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":308,"context_line":"CLEANING \u003d \"cleaning\""},{"line_number":309,"context_line":"DEPLOYING \u003d \"deploying\""},{"line_number":310,"context_line":"TAKEOVER \u003d \"takeover\""},{"line_number":311,"context_line":"INSPECTION \u003d \"inspection\""},{"line_number":312,"context_line":"RESCUE \u003d \"rescue\""},{"line_number":313,"context_line":"CONDUCTOR \u003d \"conductor\""},{"line_number":314,"context_line":"TRANSITION \u003d \"transition\""}],"source_content_type":"text/x-python","patch_set":1,"id":"fbe03863_303f5f70","line":311,"updated":"2023-07-05 08:52:25.000000000","message":"I\u0027m afraid this will be a breaking change (this is why I haven\u0027t done it myself).","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"99325987b900b54770907f43fd7859dff56e3ea5","unresolved":true,"context_lines":[{"line_number":308,"context_line":"CLEANING \u003d \"cleaning\""},{"line_number":309,"context_line":"DEPLOYING \u003d \"deploying\""},{"line_number":310,"context_line":"TAKEOVER \u003d \"takeover\""},{"line_number":311,"context_line":"INSPECTION \u003d \"inspection\""},{"line_number":312,"context_line":"RESCUE \u003d \"rescue\""},{"line_number":313,"context_line":"CONDUCTOR \u003d \"conductor\""},{"line_number":314,"context_line":"TRANSITION \u003d \"transition\""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a9ebda4_2ae95381","line":311,"in_reply_to":"fbe03863_303f5f70","updated":"2023-07-05 16:23:06.000000000","message":"I see. For breaking changes, we need a release note and other things? (I was trying to find a list of requirements in the documentation)\nAlso, we need a strong justification for why we are making that change, of course. Can we make this change at a later stage, or is it better to leave it as it is?","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"}],"ironic/conf/inspector.py":[{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"47d19ea74cd6e2602427fe96f3631d8283cd6c15","unresolved":true,"context_lines":[{"line_number":76,"context_line":"                       \u0027modify this. The default (somewhat conservative) hooks\u0027"},{"line_number":77,"context_line":"                       \u0027 set will create ports and set cpu_arch.\u0027)),"},{"line_number":78,"context_line":"    # TO DO: Add the hooks configuration option"},{"line_number":79,"context_line":"    cfg.StrOpt(\u0027ramdisk_logs_dir\u0027,"},{"line_number":80,"context_line":"               help\u003d_(\u0027If set, logs from ramdisk will be stored in this \u0027"},{"line_number":81,"context_line":"                      \u0027directory.\u0027)),"},{"line_number":82,"context_line":"    cfg.BoolOpt(\u0027always_store_ramdisk_logs\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"c72acc03_2479bc37","line":79,"updated":"2023-07-06 15:21:04.000000000","message":"I think we do not need this option, as the `ironic/drivers/utils:store_ramdisk_logs()` function uses the `CONF.agent.deploy_logs_local_path` config option to create a file path to store the logs. \nOr do we need a separate option to specify the path for the inspection hooks to store ramdisk logs?","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"87b0475b339c2a297685cda4126f802614cb314d","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                       \u0027modify this. The default (somewhat conservative) hooks\u0027"},{"line_number":77,"context_line":"                       \u0027 set will create ports and set cpu_arch.\u0027)),"},{"line_number":78,"context_line":"    # TO DO: Add the hooks configuration option"},{"line_number":79,"context_line":"    cfg.StrOpt(\u0027ramdisk_logs_dir\u0027,"},{"line_number":80,"context_line":"               help\u003d_(\u0027If set, logs from ramdisk will be stored in this \u0027"},{"line_number":81,"context_line":"                      \u0027directory.\u0027)),"},{"line_number":82,"context_line":"    cfg.BoolOpt(\u0027always_store_ramdisk_logs\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"74c815e4_6fcbc6dd","line":79,"in_reply_to":"2577535d_8dbcb086","updated":"2023-07-19 09:46:36.000000000","message":"Done","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"50d714671fef6662629ef8a45443540badf1e820","unresolved":true,"context_lines":[{"line_number":76,"context_line":"                       \u0027modify this. The default (somewhat conservative) hooks\u0027"},{"line_number":77,"context_line":"                       \u0027 set will create ports and set cpu_arch.\u0027)),"},{"line_number":78,"context_line":"    # TO DO: Add the hooks configuration option"},{"line_number":79,"context_line":"    cfg.StrOpt(\u0027ramdisk_logs_dir\u0027,"},{"line_number":80,"context_line":"               help\u003d_(\u0027If set, logs from ramdisk will be stored in this \u0027"},{"line_number":81,"context_line":"                      \u0027directory.\u0027)),"},{"line_number":82,"context_line":"    cfg.BoolOpt(\u0027always_store_ramdisk_logs\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"2577535d_8dbcb086","line":79,"in_reply_to":"c72acc03_2479bc37","updated":"2023-07-14 14:07:52.000000000","message":"I think it\u0027s fine if we use the same option.","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"47d19ea74cd6e2602427fe96f3631d8283cd6c15","unresolved":true,"context_lines":[{"line_number":84,"context_line":"                help\u003d_(\u0027Whether to store ramdisk logs even if it did not \u0027"},{"line_number":85,"context_line":"                       \u0027return an error message (dependent upon \u0027"},{"line_number":86,"context_line":"                       \u0027\"ramdisk_logs_dir\" option being set).\u0027)),"},{"line_number":87,"context_line":"    cfg.StrOpt(\u0027ramdisk_logs_filename_format\u0027,"},{"line_number":88,"context_line":"               default\u003d\u0027{uuid}_{dt:%Y%m%d-%H%M%S.%f}.tar.gz\u0027,"},{"line_number":89,"context_line":"               help\u003d_(\u0027File name template for storing ramdisk logs. The \u0027"},{"line_number":90,"context_line":"                      \u0027following replacements can be used: \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"62c134a7_a1361979","line":87,"updated":"2023-07-06 15:21:04.000000000","message":"We do not need this option anymore, as the `ironic/drivers/utils:store_ramdisk_logs()` function uses the `ironic/drivers/utils.py:get_ramdisk_logs_file_name()` function to create a file name of its own. Please correct me if I am wrong.","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"87b0475b339c2a297685cda4126f802614cb314d","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                help\u003d_(\u0027Whether to store ramdisk logs even if it did not \u0027"},{"line_number":85,"context_line":"                       \u0027return an error message (dependent upon \u0027"},{"line_number":86,"context_line":"                       \u0027\"ramdisk_logs_dir\" option being set).\u0027)),"},{"line_number":87,"context_line":"    cfg.StrOpt(\u0027ramdisk_logs_filename_format\u0027,"},{"line_number":88,"context_line":"               default\u003d\u0027{uuid}_{dt:%Y%m%d-%H%M%S.%f}.tar.gz\u0027,"},{"line_number":89,"context_line":"               help\u003d_(\u0027File name template for storing ramdisk logs. The \u0027"},{"line_number":90,"context_line":"                      \u0027following replacements can be used: \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"fc828219_3f740252","line":87,"in_reply_to":"266149d5_20a136f0","updated":"2023-07-19 09:46:36.000000000","message":"Done","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"50d714671fef6662629ef8a45443540badf1e820","unresolved":true,"context_lines":[{"line_number":84,"context_line":"                help\u003d_(\u0027Whether to store ramdisk logs even if it did not \u0027"},{"line_number":85,"context_line":"                       \u0027return an error message (dependent upon \u0027"},{"line_number":86,"context_line":"                       \u0027\"ramdisk_logs_dir\" option being set).\u0027)),"},{"line_number":87,"context_line":"    cfg.StrOpt(\u0027ramdisk_logs_filename_format\u0027,"},{"line_number":88,"context_line":"               default\u003d\u0027{uuid}_{dt:%Y%m%d-%H%M%S.%f}.tar.gz\u0027,"},{"line_number":89,"context_line":"               help\u003d_(\u0027File name template for storing ramdisk logs. The \u0027"},{"line_number":90,"context_line":"                      \u0027following replacements can be used: \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"266149d5_20a136f0","line":87,"in_reply_to":"62c134a7_a1361979","updated":"2023-07-14 14:07:52.000000000","message":"This is correct.","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"2d69e843424e4504b88f6d909ff04bc1b96cd259","unresolved":true,"context_lines":[{"line_number":93,"context_line":"def register_opts(conf):"},{"line_number":94,"context_line":"    conf.register_opts(opts, group\u003d\u0027inspector\u0027)"},{"line_number":95,"context_line":"    auth.register_auth_opts(conf, \u0027inspector\u0027,"},{"line_number":96,"context_line":"                            service_type\u003d\u0027baremetal-inspection\u0027)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"def list_opts():"}],"source_content_type":"text/x-python","patch_set":3,"id":"3e1b77f4_67772282","line":96,"updated":"2023-07-13 09:09:41.000000000","message":"I think this will not be a breaking change as this is an internal service name?","commit_id":"685d72ea55f237bd5c73d3711cf3c68fc08756c3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"50d714671fef6662629ef8a45443540badf1e820","unresolved":true,"context_lines":[{"line_number":93,"context_line":"def register_opts(conf):"},{"line_number":94,"context_line":"    conf.register_opts(opts, group\u003d\u0027inspector\u0027)"},{"line_number":95,"context_line":"    auth.register_auth_opts(conf, \u0027inspector\u0027,"},{"line_number":96,"context_line":"                            service_type\u003d\u0027baremetal-inspection\u0027)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"def list_opts():"}],"source_content_type":"text/x-python","patch_set":3,"id":"69eada69_b5897377","line":96,"in_reply_to":"3e1b77f4_67772282","updated":"2023-07-14 14:07:52.000000000","message":"Yep. And this is only relevant for the old Inspector support, so you don\u0027t need to change it.","commit_id":"685d72ea55f237bd5c73d3711cf3c68fc08756c3"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"87b0475b339c2a297685cda4126f802614cb314d","unresolved":false,"context_lines":[{"line_number":93,"context_line":"def register_opts(conf):"},{"line_number":94,"context_line":"    conf.register_opts(opts, group\u003d\u0027inspector\u0027)"},{"line_number":95,"context_line":"    auth.register_auth_opts(conf, \u0027inspector\u0027,"},{"line_number":96,"context_line":"                            service_type\u003d\u0027baremetal-inspection\u0027)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"def list_opts():"}],"source_content_type":"text/x-python","patch_set":3,"id":"07013b3f_76d217c4","line":96,"in_reply_to":"69eada69_b5897377","updated":"2023-07-19 09:46:36.000000000","message":"Done","commit_id":"685d72ea55f237bd5c73d3711cf3c68fc08756c3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"50d714671fef6662629ef8a45443540badf1e820","unresolved":true,"context_lines":[{"line_number":70,"context_line":"                help\u003d_(\u0027Whether to update the ports\\\u0027 pxe_enabled field \u0027"},{"line_number":71,"context_line":"                       \u0027according to the inspection data.\u0027)),"},{"line_number":72,"context_line":"    cfg.StrOpt(\u0027default_hooks\u0027,"},{"line_number":73,"context_line":"               default\u003d\u0027ramdisk_error\u0027,"},{"line_number":74,"context_line":"               help\u003d_(\u0027A comma-separated lists of inspection hooks that are \u0027"},{"line_number":75,"context_line":"                      \u0027run by default. In most cases, the operators will not \u0027"},{"line_number":76,"context_line":"                      \u0027modify this. The default (somewhat conservative) hooks\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"c6ec4eaf_20196db4","line":73,"updated":"2023-07-14 14:07:52.000000000","message":"Please append \"validate_interfaces,ports\"","commit_id":"72907893ce0008b28ff2eecfd8cb6a5c1189daa7"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"87b0475b339c2a297685cda4126f802614cb314d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                help\u003d_(\u0027Whether to update the ports\\\u0027 pxe_enabled field \u0027"},{"line_number":71,"context_line":"                       \u0027according to the inspection data.\u0027)),"},{"line_number":72,"context_line":"    cfg.StrOpt(\u0027default_hooks\u0027,"},{"line_number":73,"context_line":"               default\u003d\u0027ramdisk_error\u0027,"},{"line_number":74,"context_line":"               help\u003d_(\u0027A comma-separated lists of inspection hooks that are \u0027"},{"line_number":75,"context_line":"                      \u0027run by default. In most cases, the operators will not \u0027"},{"line_number":76,"context_line":"                      \u0027modify this. The default (somewhat conservative) hooks\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"cd572a67_ffe67038","line":73,"in_reply_to":"c6ec4eaf_20196db4","updated":"2023-07-19 09:46:36.000000000","message":"Done","commit_id":"72907893ce0008b28ff2eecfd8cb6a5c1189daa7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"50d714671fef6662629ef8a45443540badf1e820","unresolved":true,"context_lines":[{"line_number":74,"context_line":"               help\u003d_(\u0027A comma-separated lists of inspection hooks that are \u0027"},{"line_number":75,"context_line":"                      \u0027run by default. In most cases, the operators will not \u0027"},{"line_number":76,"context_line":"                      \u0027modify this. The default (somewhat conservative) hooks\u0027"},{"line_number":77,"context_line":"                      \u0027 set will create ports and set cpu_arch.\u0027)),"},{"line_number":78,"context_line":"    # TO DO: Add the hooks configuration option"},{"line_number":79,"context_line":"    cfg.StrOpt(\u0027ramdisk_logs_dir\u0027,"},{"line_number":80,"context_line":"               help\u003d_(\u0027If set, logs from ramdisk will be stored in this \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"f009dfb1_14c28458","line":77,"updated":"2023-07-14 14:07:52.000000000","message":"The cpu_arch part will be true in the future, but not right now.","commit_id":"72907893ce0008b28ff2eecfd8cb6a5c1189daa7"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"87b0475b339c2a297685cda4126f802614cb314d","unresolved":false,"context_lines":[{"line_number":74,"context_line":"               help\u003d_(\u0027A comma-separated lists of inspection hooks that are \u0027"},{"line_number":75,"context_line":"                      \u0027run by default. In most cases, the operators will not \u0027"},{"line_number":76,"context_line":"                      \u0027modify this. The default (somewhat conservative) hooks\u0027"},{"line_number":77,"context_line":"                      \u0027 set will create ports and set cpu_arch.\u0027)),"},{"line_number":78,"context_line":"    # TO DO: Add the hooks configuration option"},{"line_number":79,"context_line":"    cfg.StrOpt(\u0027ramdisk_logs_dir\u0027,"},{"line_number":80,"context_line":"               help\u003d_(\u0027If set, logs from ramdisk will be stored in this \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"cdc89470_285fc8ea","line":77,"in_reply_to":"f009dfb1_14c28458","updated":"2023-07-19 09:46:36.000000000","message":"Done","commit_id":"72907893ce0008b28ff2eecfd8cb6a5c1189daa7"}],"ironic/drivers/modules/inspector/agent.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"979a8cb1ec20dbfff6e2a10036bc5e5a7c2e4b36","unresolved":true,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class AgentInspect(common.Common):"},{"line_number":39,"context_line":"    \"\"\"In-band inspection.\"\"\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def _start_managed_inspection(self, task):"},{"line_number":42,"context_line":"        \"\"\"Start inspection managed by ironic.\"\"\""},{"line_number":43,"context_line":"        ep \u003d deploy_utils.get_ironic_api_url().rstrip(\u0027/\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7c2185fb_5ec76b0d","line":40,"updated":"2023-08-17 15:37:32.000000000","message":"Let\u0027s make sure to validate hooks in __init__ (to be added) so that we can fail early.","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"05e6a44b4a483d8c23f6923ff2f311b288ed19e4","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class AgentInspect(common.Common):"},{"line_number":39,"context_line":"    \"\"\"In-band inspection.\"\"\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def _start_managed_inspection(self, task):"},{"line_number":42,"context_line":"        \"\"\"Start inspection managed by ironic.\"\"\""},{"line_number":43,"context_line":"        ep \u003d deploy_utils.get_ironic_api_url().rstrip(\u0027/\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"2ed890f1_2a3c7297","line":40,"in_reply_to":"7c2185fb_5ec76b0d","updated":"2023-08-21 11:02:56.000000000","message":"Done, please take a look.","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"979a8cb1ec20dbfff6e2a10036bc5e5a7c2e4b36","unresolved":true,"context_lines":[{"line_number":99,"context_line":"        driver_utils.store_ramdisk_logs(node, logs, label\u003d\u0027inspect\u0027)"},{"line_number":100,"context_line":"    except exception as exc:"},{"line_number":101,"context_line":"        LOG.exception(\u0027Could not store the ramdisk logs for node %(node)s. \u0027"},{"line_number":102,"context_line":"                      \u0027Error: %(error)s\u0027, {\u0027node\u0027: node.uuid, \u0027error\u0027: exc})"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"def _run_preprocess_hooks(task, inventory, plugin_data, hooks):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ed1ffdfd_80f715b1","line":102,"updated":"2023-08-17 15:37:32.000000000","message":"nit: if you use LOG.exception, you don\u0027t need to include the error in the message because the whole traceback will be logged anyway.","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"05e6a44b4a483d8c23f6923ff2f311b288ed19e4","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        driver_utils.store_ramdisk_logs(node, logs, label\u003d\u0027inspect\u0027)"},{"line_number":100,"context_line":"    except exception as exc:"},{"line_number":101,"context_line":"        LOG.exception(\u0027Could not store the ramdisk logs for node %(node)s. \u0027"},{"line_number":102,"context_line":"                      \u0027Error: %(error)s\u0027, {\u0027node\u0027: node.uuid, \u0027error\u0027: exc})"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"def _run_preprocess_hooks(task, inventory, plugin_data, hooks):"}],"source_content_type":"text/x-python","patch_set":8,"id":"60ea77fc_34f848ab","line":102,"in_reply_to":"ed1ffdfd_80f715b1","updated":"2023-08-21 11:02:56.000000000","message":"Done","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"979a8cb1ec20dbfff6e2a10036bc5e5a7c2e4b36","unresolved":true,"context_lines":[{"line_number":118,"context_line":"                      \u0027 error: %(error)s\u0027, {\u0027hook\u0027: hook.name,"},{"line_number":119,"context_line":"                                            \u0027node\u0027: task.node.uuid,"},{"line_number":120,"context_line":"                                            \u0027error\u0027: exc})"},{"line_number":121,"context_line":"            failures.append(\u0027Error in preprocess hook %(hook)s for node \u0027"},{"line_number":122,"context_line":"                            \u0027%(node)s. Error: %(error)s\u0027,"},{"line_number":123,"context_line":"                            {\u0027hook\u0027: hook.name,"},{"line_number":124,"context_line":"                             \u0027node\u0027: task.node.uuid,"}],"source_content_type":"text/x-python","patch_set":8,"id":"b5c034ae_715c4423","line":121,"updated":"2023-08-17 15:37:32.000000000","message":"No need to add node UUID when building the list of failures: you will include it in the message anyway (line 141)","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"05e6a44b4a483d8c23f6923ff2f311b288ed19e4","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                      \u0027 error: %(error)s\u0027, {\u0027hook\u0027: hook.name,"},{"line_number":119,"context_line":"                                            \u0027node\u0027: task.node.uuid,"},{"line_number":120,"context_line":"                                            \u0027error\u0027: exc})"},{"line_number":121,"context_line":"            failures.append(\u0027Error in preprocess hook %(hook)s for node \u0027"},{"line_number":122,"context_line":"                            \u0027%(node)s. Error: %(error)s\u0027,"},{"line_number":123,"context_line":"                            {\u0027hook\u0027: hook.name,"},{"line_number":124,"context_line":"                             \u0027node\u0027: task.node.uuid,"}],"source_content_type":"text/x-python","patch_set":8,"id":"eb83cb5a_e8d6249e","line":121,"in_reply_to":"b5c034ae_715c4423","updated":"2023-08-21 11:02:56.000000000","message":"Done","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"979a8cb1ec20dbfff6e2a10036bc5e5a7c2e4b36","unresolved":true,"context_lines":[{"line_number":130,"context_line":"                                                    \u0027error\u0027: exc})"},{"line_number":131,"context_line":"            failures.append(_(\u0027Unexpected exception %(exc_class)s during \u0027"},{"line_number":132,"context_line":"                              \u0027preprocess hook %(hook)s for node %(node)s. \u0027"},{"line_number":133,"context_line":"                              \u0027Error: %(error)s\u0027 %"},{"line_number":134,"context_line":"                              {\u0027exc_class\u0027: exc.__class__.__name__,"},{"line_number":135,"context_line":"                               \u0027hook\u0027: hook.name,"},{"line_number":136,"context_line":"                               \u0027node\u0027: task.node.uuid,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5d989d9a_8f446319","line":133,"updated":"2023-08-17 15:37:32.000000000","message":"Same","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"05e6a44b4a483d8c23f6923ff2f311b288ed19e4","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                                                    \u0027error\u0027: exc})"},{"line_number":131,"context_line":"            failures.append(_(\u0027Unexpected exception %(exc_class)s during \u0027"},{"line_number":132,"context_line":"                              \u0027preprocess hook %(hook)s for node %(node)s. \u0027"},{"line_number":133,"context_line":"                              \u0027Error: %(error)s\u0027 %"},{"line_number":134,"context_line":"                              {\u0027exc_class\u0027: exc.__class__.__name__,"},{"line_number":135,"context_line":"                               \u0027hook\u0027: hook.name,"},{"line_number":136,"context_line":"                               \u0027node\u0027: task.node.uuid,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5266ca9e_46d58549","line":133,"in_reply_to":"5d989d9a_8f446319","updated":"2023-08-21 11:02:56.000000000","message":"Done","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":true,"context_lines":[{"line_number":144,"context_line":"        _store_logs(plugin_data, task.node)"},{"line_number":145,"context_line":"        raise exception.HardwareInspectionFailure(error\u003dmsg)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    # TODO(masghar): Store unprocessed inspection data"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"def run_inspection_hooks(task, inventory, plugin_data):"}],"source_content_type":"text/x-python","patch_set":8,"id":"93bea3d2_bd804385","line":147,"updated":"2023-08-04 16:11:14.000000000","message":"I realize I do not understand what this entirely means. Where would we want to store the unprocessed inspection data (in the database)?","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"05e6a44b4a483d8c23f6923ff2f311b288ed19e4","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        _store_logs(plugin_data, task.node)"},{"line_number":145,"context_line":"        raise exception.HardwareInspectionFailure(error\u003dmsg)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    # TODO(masghar): Store unprocessed inspection data"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"def run_inspection_hooks(task, inventory, plugin_data):"}],"source_content_type":"text/x-python","patch_set":8,"id":"238ce427_ead5d6b9","line":147,"in_reply_to":"8dc7e035_4579fdfc","updated":"2023-08-21 11:02:56.000000000","message":"Alright.","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"979a8cb1ec20dbfff6e2a10036bc5e5a7c2e4b36","unresolved":true,"context_lines":[{"line_number":144,"context_line":"        _store_logs(plugin_data, task.node)"},{"line_number":145,"context_line":"        raise exception.HardwareInspectionFailure(error\u003dmsg)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    # TODO(masghar): Store unprocessed inspection data"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"def run_inspection_hooks(task, inventory, plugin_data):"}],"source_content_type":"text/x-python","patch_set":8,"id":"8dc7e035_4579fdfc","line":147,"in_reply_to":"93bea3d2_bd804385","updated":"2023-08-17 15:37:32.000000000","message":"Unprocessed data is (was) an a bit exotic feature. I\u0027m not sure we need to replicate it. Definitely not in the 1st iteration.","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"979a8cb1ec20dbfff6e2a10036bc5e5a7c2e4b36","unresolved":true,"context_lines":[{"line_number":171,"context_line":"        _store_logs(plugin_data, task.node)"},{"line_number":172,"context_line":"        raise exception.HardwareInspectionFailure(error\u003dmsg)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"def _run_post_hooks(task, inventory, plugin_data, hooks):"},{"line_number":176,"context_line":"    for hook in hooks:"},{"line_number":177,"context_line":"        LOG.debug(\u0027Running inspection hook %(hook)s for node %(node)s\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"4c354b83_2b0e4f02","line":174,"updated":"2023-08-17 15:37:32.000000000","message":"We need to make sure to respect this option: https://opendev.org/openstack/ironic/src/branch/master/ironic/conf/agent.py#L62.\n\nFirst, store_ramdisk_logs needs to be updated to check for \"never\" (it\u0027s currently done by collect_ramdisk_logs, but you cannot use it).\n\nSecond, if the value is \"always\", we need to also store logs on success (i.e. right here).","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"05e6a44b4a483d8c23f6923ff2f311b288ed19e4","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        _store_logs(plugin_data, task.node)"},{"line_number":172,"context_line":"        raise exception.HardwareInspectionFailure(error\u003dmsg)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"def _run_post_hooks(task, inventory, plugin_data, hooks):"},{"line_number":176,"context_line":"    for hook in hooks:"},{"line_number":177,"context_line":"        LOG.debug(\u0027Running inspection hook %(hook)s for node %(node)s\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"851c16f4_a0a70207","line":174,"in_reply_to":"4c354b83_2b0e4f02","updated":"2023-08-21 11:02:56.000000000","message":"Done, thank you for pointing it out!","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"979a8cb1ec20dbfff6e2a10036bc5e5a7c2e4b36","unresolved":true,"context_lines":[{"line_number":179,"context_line":"        hook.obj.__call__(task, inventory, plugin_data)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"def _power_off_node(task, power_off\u003dTrue):"},{"line_number":183,"context_line":"    if not power_off:"},{"line_number":184,"context_line":"        return"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"0fa7e1f5_3ae8d7db","line":182,"updated":"2023-08-17 15:37:32.000000000","message":"nit: you no longer need the power_off argument, just use the conf option directly.","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"05e6a44b4a483d8c23f6923ff2f311b288ed19e4","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        hook.obj.__call__(task, inventory, plugin_data)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"def _power_off_node(task, power_off\u003dTrue):"},{"line_number":183,"context_line":"    if not power_off:"},{"line_number":184,"context_line":"        return"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"b39e847e_c7edff45","line":182,"in_reply_to":"0fa7e1f5_3ae8d7db","updated":"2023-08-21 11:02:56.000000000","message":"Done","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"}],"ironic/drivers/modules/inspector/hooks/architecture.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":25,"context_line":"        \"\"\"Update node properties with CPU architecture.\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"        try:"},{"line_number":28,"context_line":"            cpu_arch \u003d str(inventory[\u0027cpu\u0027][\u0027architecture\u0027])"},{"line_number":29,"context_line":"            LOG.info(\u0027Discovered CPU architecture: %(cpu_arch)s\u0027,"},{"line_number":30,"context_line":"                     {\u0027cpu_arch\u0027: cpu_arch})"},{"line_number":31,"context_line":"            task.node[\u0027properties\u0027][\u0027cpu_arch\u0027] \u003d cpu_arch"}],"source_content_type":"text/x-python","patch_set":7,"id":"9d19518e_971c93fd","line":28,"updated":"2023-08-02 12:46:02.000000000","message":"nit: no need for str() it\u0027s already a string (if exists)","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        \"\"\"Update node properties with CPU architecture.\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"        try:"},{"line_number":28,"context_line":"            cpu_arch \u003d str(inventory[\u0027cpu\u0027][\u0027architecture\u0027])"},{"line_number":29,"context_line":"            LOG.info(\u0027Discovered CPU architecture: %(cpu_arch)s\u0027,"},{"line_number":30,"context_line":"                     {\u0027cpu_arch\u0027: cpu_arch})"},{"line_number":31,"context_line":"            task.node[\u0027properties\u0027][\u0027cpu_arch\u0027] \u003d cpu_arch"}],"source_content_type":"text/x-python","patch_set":7,"id":"19a23ff5_fb548c0a","line":28,"in_reply_to":"9d19518e_971c93fd","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":28,"context_line":"            cpu_arch \u003d str(inventory[\u0027cpu\u0027][\u0027architecture\u0027])"},{"line_number":29,"context_line":"            LOG.info(\u0027Discovered CPU architecture: %(cpu_arch)s\u0027,"},{"line_number":30,"context_line":"                     {\u0027cpu_arch\u0027: cpu_arch})"},{"line_number":31,"context_line":"            task.node[\u0027properties\u0027][\u0027cpu_arch\u0027] \u003d cpu_arch"},{"line_number":32,"context_line":"        except (KeyError, ValueError, TypeError):"},{"line_number":33,"context_line":"            LOG.warning(\u0027Malformed or missing CPU architecture \u0027"},{"line_number":34,"context_line":"                        \u0027information in inventory: %s\u0027, inventory.get(\u0027cpu\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"683c9f4c_28d676ad","line":31,"updated":"2023-08-02 12:46:02.000000000","message":"We have a certain issue with our objects. The smart objects we use, such as Node or Port, track which field are changed. But if you update a dictionary, it will not track your change and assume that the object is unchanged. We have helpers like https://opendev.org/openstack/ironic/src/branch/master/ironic/objects/node.py#L707 for some dictionaries, but not for properties, so could you add one and use it here?\n\nSecond thing: per https://specs.openstack.org/openstack/ironic-specs/specs/approved/merge-inspector.html#inspection-hooks hooks must call task.node.save(), otherwise you\u0027re relying on something else saving your change. Something else probably will do it, but I\u0027d prefer every hook to be self-contained.","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":28,"context_line":"            cpu_arch \u003d str(inventory[\u0027cpu\u0027][\u0027architecture\u0027])"},{"line_number":29,"context_line":"            LOG.info(\u0027Discovered CPU architecture: %(cpu_arch)s\u0027,"},{"line_number":30,"context_line":"                     {\u0027cpu_arch\u0027: cpu_arch})"},{"line_number":31,"context_line":"            task.node[\u0027properties\u0027][\u0027cpu_arch\u0027] \u003d cpu_arch"},{"line_number":32,"context_line":"        except (KeyError, ValueError, TypeError):"},{"line_number":33,"context_line":"            LOG.warning(\u0027Malformed or missing CPU architecture \u0027"},{"line_number":34,"context_line":"                        \u0027information in inventory: %s\u0027, inventory.get(\u0027cpu\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"23035cc1_16927e9a","line":31,"in_reply_to":"683c9f4c_28d676ad","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":31,"context_line":"            task.node[\u0027properties\u0027][\u0027cpu_arch\u0027] \u003d cpu_arch"},{"line_number":32,"context_line":"        except (KeyError, ValueError, TypeError):"},{"line_number":33,"context_line":"            LOG.warning(\u0027Malformed or missing CPU architecture \u0027"},{"line_number":34,"context_line":"                        \u0027information in inventory: %s\u0027, inventory.get(\u0027cpu\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8e72f3_9721aa77","line":34,"updated":"2023-08-02 12:46:02.000000000","message":"nit: please log the node UUID. In inspector you get it for free, here it needs to be explicit.","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":31,"context_line":"            task.node[\u0027properties\u0027][\u0027cpu_arch\u0027] \u003d cpu_arch"},{"line_number":32,"context_line":"        except (KeyError, ValueError, TypeError):"},{"line_number":33,"context_line":"            LOG.warning(\u0027Malformed or missing CPU architecture \u0027"},{"line_number":34,"context_line":"                        \u0027information in inventory: %s\u0027, inventory.get(\u0027cpu\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"3bf902f1_e88561a2","line":34,"in_reply_to":"ba8e72f3_9721aa77","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"979a8cb1ec20dbfff6e2a10036bc5e5a7c2e4b36","unresolved":true,"context_lines":[{"line_number":32,"context_line":"            task.node.set_properties(\u0027cpu_arch\u0027, cpu_arch)"},{"line_number":33,"context_line":"            task.node.save()"},{"line_number":34,"context_line":"        except (KeyError, ValueError, TypeError):"},{"line_number":35,"context_line":"            LOG.warning(\u0027Malformed or missing CPU architecture information in \u0027"},{"line_number":36,"context_line":"                        \u0027inventory: %(cpu)s for node %(node)s.\u0027,"},{"line_number":37,"context_line":"                        {\u0027cpu\u0027: inventory.get(\u0027cpu\u0027), \u0027node\u0027: task.node.uuid})"}],"source_content_type":"text/x-python","patch_set":8,"id":"9e06637b_f3ce59c6","line":35,"updated":"2023-08-17 15:37:32.000000000","message":"I wonder if we need to raise an exception even.. I\u0027m undecided.","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"05e6a44b4a483d8c23f6923ff2f311b288ed19e4","unresolved":false,"context_lines":[{"line_number":32,"context_line":"            task.node.set_properties(\u0027cpu_arch\u0027, cpu_arch)"},{"line_number":33,"context_line":"            task.node.save()"},{"line_number":34,"context_line":"        except (KeyError, ValueError, TypeError):"},{"line_number":35,"context_line":"            LOG.warning(\u0027Malformed or missing CPU architecture information in \u0027"},{"line_number":36,"context_line":"                        \u0027inventory: %(cpu)s for node %(node)s.\u0027,"},{"line_number":37,"context_line":"                        {\u0027cpu\u0027: inventory.get(\u0027cpu\u0027), \u0027node\u0027: task.node.uuid})"}],"source_content_type":"text/x-python","patch_set":8,"id":"37de6ef2_d351754d","line":35,"in_reply_to":"9e06637b_f3ce59c6","updated":"2023-08-21 11:02:56.000000000","message":"I think an InvalidNodeInventory exception would be appropriate.","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"}],"ironic/drivers/modules/inspector/hooks/base.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"50d714671fef6662629ef8a45443540badf1e820","unresolved":true,"context_lines":[{"line_number":126,"context_line":"                         for x in CONF.inspector.default_hooks.split(\u0027,\u0027)"},{"line_number":127,"context_line":"                         if x.strip()]"},{"line_number":128,"context_line":"        _HOOKS_MGR \u003d stevedore.NamedExtensionManager("},{"line_number":129,"context_line":"            \u0027ironic.drivers.modules.inspector.hooks\u0027,"},{"line_number":130,"context_line":"            names\u003denabled_hooks,"},{"line_number":131,"context_line":"            invoke_on_load\u003dTrue,"},{"line_number":132,"context_line":"            invoke_args\u003dargs,"}],"source_content_type":"text/x-python","patch_set":4,"id":"024fd5e1_f5afdfd5","line":129,"updated":"2023-07-14 14:07:52.000000000","message":"I\u0027d prefer \u0027ironic.inspection.hooks\u0027 (it does not have to match the module, it\u0027s more of a logical name)","commit_id":"72907893ce0008b28ff2eecfd8cb6a5c1189daa7"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"87b0475b339c2a297685cda4126f802614cb314d","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                         for x in CONF.inspector.default_hooks.split(\u0027,\u0027)"},{"line_number":127,"context_line":"                         if x.strip()]"},{"line_number":128,"context_line":"        _HOOKS_MGR \u003d stevedore.NamedExtensionManager("},{"line_number":129,"context_line":"            \u0027ironic.drivers.modules.inspector.hooks\u0027,"},{"line_number":130,"context_line":"            names\u003denabled_hooks,"},{"line_number":131,"context_line":"            invoke_on_load\u003dTrue,"},{"line_number":132,"context_line":"            invoke_args\u003dargs,"}],"source_content_type":"text/x-python","patch_set":4,"id":"14da8d0f_ab79e9e1","line":129,"in_reply_to":"024fd5e1_f5afdfd5","updated":"2023-07-19 09:46:36.000000000","message":"Done","commit_id":"72907893ce0008b28ff2eecfd8cb6a5c1189daa7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":45,"context_line":"        :param plugin_data: Plugin data sent by the ramdisk. May be modified by"},{"line_number":46,"context_line":"                            the hook."},{"line_number":47,"context_line":"        :param error: Error returned by the ramdisk (optional)"},{"line_number":48,"context_line":"        :param logs: Logs returned by the ramdisk (optional)"},{"line_number":49,"context_line":"        :returns: nothing."},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"45dd248f_a7cefe7f","line":48,"updated":"2023-08-02 12:46:02.000000000","message":"These two are not valid.","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        :param plugin_data: Plugin data sent by the ramdisk. May be modified by"},{"line_number":46,"context_line":"                            the hook."},{"line_number":47,"context_line":"        :param error: Error returned by the ramdisk (optional)"},{"line_number":48,"context_line":"        :param logs: Logs returned by the ramdisk (optional)"},{"line_number":49,"context_line":"        :returns: nothing."},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"b1522d26_f73b3814","line":48,"in_reply_to":"45dd248f_a7cefe7f","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":64,"context_line":"        \"\"\""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"class WithValidation(object):"},{"line_number":68,"context_line":"    REQUIRED_PARAMS \u003d set()"},{"line_number":69,"context_line":"    \"\"\"Set with names of required parameters.\"\"\""},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"a8d8d871_2e203fdb","line":67,"updated":"2023-08-02 12:46:02.000000000","message":"This class is unused and probably cannot be used as is in the new architecture. Let\u0027s drop it for now?","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        \"\"\""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"class WithValidation(object):"},{"line_number":68,"context_line":"    REQUIRED_PARAMS \u003d set()"},{"line_number":69,"context_line":"    \"\"\"Set with names of required parameters.\"\"\""},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"b5c6d2da_4d3e1e53","line":67,"in_reply_to":"a8d8d871_2e203fdb","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":151,"context_line":"        missing \u003d [d for d in deps if d not in valid_hook_names]"},{"line_number":152,"context_line":"        if missing:"},{"line_number":153,"context_line":"            errors.append(\u0027Hook %(hook)s requires the following hooks to be \u0027"},{"line_number":154,"context_line":"                          \u0027enabled before it: %(deps)s. The following hooks \u0027"},{"line_number":155,"context_line":"                          \u0027are missing: %(missing)s.\u0027 %"},{"line_number":156,"context_line":"                          {\u0027hook\u0027: hook.name,"},{"line_number":157,"context_line":"                           \u0027deps\u0027: \u0027, \u0027.join(deps),"}],"source_content_type":"text/x-python","patch_set":7,"id":"343b871c_83cd75bd","line":154,"updated":"2023-08-02 12:46:02.000000000","message":"nit: maybe only report the missing hooks? the operators don\u0027t really need to know which dependencies are already satisfied.","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        missing \u003d [d for d in deps if d not in valid_hook_names]"},{"line_number":152,"context_line":"        if missing:"},{"line_number":153,"context_line":"            errors.append(\u0027Hook %(hook)s requires the following hooks to be \u0027"},{"line_number":154,"context_line":"                          \u0027enabled before it: %(deps)s. The following hooks \u0027"},{"line_number":155,"context_line":"                          \u0027are missing: %(missing)s.\u0027 %"},{"line_number":156,"context_line":"                          {\u0027hook\u0027: hook.name,"},{"line_number":157,"context_line":"                           \u0027deps\u0027: \u0027, \u0027.join(deps),"}],"source_content_type":"text/x-python","patch_set":7,"id":"882dcf41_357dc9a4","line":154,"in_reply_to":"343b871c_83cd75bd","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"979a8cb1ec20dbfff6e2a10036bc5e5a7c2e4b36","unresolved":true,"context_lines":[{"line_number":120,"context_line":"            valid_hook_names.add(hook.name)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    if errors:"},{"line_number":123,"context_line":"        LOG.error(\u0027Some hooks failed to load due to dependency problems: \u0027"},{"line_number":124,"context_line":"                  \u0027%(errors)s:\u0027, {\u0027errors\u0027: errors})"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    return valid_hooks"}],"source_content_type":"text/x-python","patch_set":8,"id":"dc3f0280_8bf64359","line":123,"updated":"2023-08-17 15:37:32.000000000","message":"This has to be a hard failure, not just a log message.","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"05e6a44b4a483d8c23f6923ff2f311b288ed19e4","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            valid_hook_names.add(hook.name)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    if errors:"},{"line_number":123,"context_line":"        LOG.error(\u0027Some hooks failed to load due to dependency problems: \u0027"},{"line_number":124,"context_line":"                  \u0027%(errors)s:\u0027, {\u0027errors\u0027: errors})"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    return valid_hooks"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f6300b9_019d944d","line":123,"in_reply_to":"dc3f0280_8bf64359","updated":"2023-08-21 11:02:56.000000000","message":"Done","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"979a8cb1ec20dbfff6e2a10036bc5e5a7c2e4b36","unresolved":true,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    if errors:"},{"line_number":123,"context_line":"        LOG.error(\u0027Some hooks failed to load due to dependency problems: \u0027"},{"line_number":124,"context_line":"                  \u0027%(errors)s:\u0027, {\u0027errors\u0027: errors})"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    return valid_hooks"}],"source_content_type":"text/x-python","patch_set":8,"id":"a928698e_e5f9b826","line":124,"updated":"2023-08-17 15:37:32.000000000","message":"nit: better join errors for readability","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"05e6a44b4a483d8c23f6923ff2f311b288ed19e4","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    if errors:"},{"line_number":123,"context_line":"        LOG.error(\u0027Some hooks failed to load due to dependency problems: \u0027"},{"line_number":124,"context_line":"                  \u0027%(errors)s:\u0027, {\u0027errors\u0027: errors})"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    return valid_hooks"}],"source_content_type":"text/x-python","patch_set":8,"id":"b481897d_c4b72fea","line":124,"in_reply_to":"a928698e_e5f9b826","updated":"2023-08-21 11:02:56.000000000","message":"Done","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"}],"ironic/drivers/modules/inspector/hooks/ramdisk_error.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":20,"context_line":"    \"\"\"Hook to process error sent from the ramdisk.\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def preprocess(self, task, inventory, plugin_data):"},{"line_number":23,"context_line":"        if plugin_data[\u0027error\u0027]:"},{"line_number":24,"context_line":"            msg \u003d _(\"Ramdisk reported error: %(error)s\") % {"},{"line_number":25,"context_line":"                \u0027error\u0027: plugin_data[\u0027error\u0027]}"},{"line_number":26,"context_line":"            raise exception.HardwareInspectionFailure(error\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3524ebbd_12cd7e83","line":23,"updated":"2023-08-02 12:46:02.000000000","message":"The \u0027error\u0027 field may be missing completely, please use get()","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    \"\"\"Hook to process error sent from the ramdisk.\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def preprocess(self, task, inventory, plugin_data):"},{"line_number":23,"context_line":"        if plugin_data[\u0027error\u0027]:"},{"line_number":24,"context_line":"            msg \u003d _(\"Ramdisk reported error: %(error)s\") % {"},{"line_number":25,"context_line":"                \u0027error\u0027: plugin_data[\u0027error\u0027]}"},{"line_number":26,"context_line":"            raise exception.HardwareInspectionFailure(error\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"6e12a9a6_272769c1","line":23,"in_reply_to":"3524ebbd_12cd7e83","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"}],"ironic/drivers/modules/inspector/inspection_hooks/__init__.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"e2b884d2_edf1f792","updated":"2023-07-05 08:52:25.000000000","message":"nit: no need to repeat \"inspection\" in the package name, I\u0027d stick with ironic.drivers.modules.inspector.hooks","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"99325987b900b54770907f43fd7859dff56e3ea5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"b7244fa3_1b75005e","in_reply_to":"e2b884d2_edf1f792","updated":"2023-07-05 16:23:06.000000000","message":"That\u0027s cleaner! Renamed it to `hooks`","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"}],"ironic/drivers/modules/inspector/inspection_hooks/base.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":63,"context_line":"                            the hook."},{"line_number":64,"context_line":"        :returns: nothing."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        [RFC 6902] - http://tools.ietf.org/html/rfc6902"},{"line_number":67,"context_line":"        \"\"\""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"0c7112b8_267a7c01","line":66,"updated":"2023-07-05 08:52:25.000000000","message":"Unused reference?","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"99325987b900b54770907f43fd7859dff56e3ea5","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                            the hook."},{"line_number":64,"context_line":"        :returns: nothing."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        [RFC 6902] - http://tools.ietf.org/html/rfc6902"},{"line_number":67,"context_line":"        \"\"\""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7d2b18b0_59f55e04","line":66,"in_reply_to":"0c7112b8_267a7c01","updated":"2023-07-05 16:23:06.000000000","message":"Removed","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"}],"ironic/drivers/modules/inspector/inspection_hooks/ramdisk_error.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":5,"context_line":"    \"\"\"Hook to process error sent from the ramdisk.\"\"\""},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    def preprocess(self, task, inventory, plugin_data):"},{"line_number":8,"context_line":"        # if plugin_data[\u0027logs\u0027] and the config option is enabled:"},{"line_number":9,"context_line":"            # Store the logs"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"        if plugin_data[\u0027error\u0027]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba277540_83140df1","line":8,"updated":"2023-07-05 08:52:25.000000000","message":"Thinking about it, maybe we want to have logs processing in the core process module (the way you actually have it) so that it happens even in the event of serious errors.","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"99325987b900b54770907f43fd7859dff56e3ea5","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    \"\"\"Hook to process error sent from the ramdisk.\"\"\""},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    def preprocess(self, task, inventory, plugin_data):"},{"line_number":8,"context_line":"        # if plugin_data[\u0027logs\u0027] and the config option is enabled:"},{"line_number":9,"context_line":"            # Store the logs"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"        if plugin_data[\u0027error\u0027]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"145064bf_f36892d2","line":8,"in_reply_to":"ba277540_83140df1","updated":"2023-07-05 16:23:06.000000000","message":"Makes sense!","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":11,"context_line":"        if plugin_data[\u0027error\u0027]:"},{"line_number":12,"context_line":"            msg \u003d _(\"Ramdisk reported error: %(error)s, inventory \u003d \""},{"line_number":13,"context_line":"                    \"\u0027%(inventory)s\u0027\") % {\u0027error\u0027: plugin_data[\u0027error\u0027],"},{"line_number":14,"context_line":"                                          \u0027inventory\u0027: inventory}"},{"line_number":15,"context_line":"            raise exception.InspectorError(msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"0bd4fd5e_dc76fe23","line":14,"updated":"2023-07-05 08:52:25.000000000","message":"Let\u0027s not include inventory in the error message, it may contain sensitive stuff (and definitely will be very large).","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"99325987b900b54770907f43fd7859dff56e3ea5","unresolved":true,"context_lines":[{"line_number":11,"context_line":"        if plugin_data[\u0027error\u0027]:"},{"line_number":12,"context_line":"            msg \u003d _(\"Ramdisk reported error: %(error)s, inventory \u003d \""},{"line_number":13,"context_line":"                    \"\u0027%(inventory)s\u0027\") % {\u0027error\u0027: plugin_data[\u0027error\u0027],"},{"line_number":14,"context_line":"                                          \u0027inventory\u0027: inventory}"},{"line_number":15,"context_line":"            raise exception.InspectorError(msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f07c5d5_851eb7bc","line":14,"in_reply_to":"0bd4fd5e_dc76fe23","updated":"2023-07-05 16:23:06.000000000","message":"Makes sense. Does that mean I should remove inventory from all the logs and exceptions in `ironic/drivers/modules/inspector/process.py` as well?","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"05e6a44b4a483d8c23f6923ff2f311b288ed19e4","unresolved":false,"context_lines":[{"line_number":11,"context_line":"        if plugin_data[\u0027error\u0027]:"},{"line_number":12,"context_line":"            msg \u003d _(\"Ramdisk reported error: %(error)s, inventory \u003d \""},{"line_number":13,"context_line":"                    \"\u0027%(inventory)s\u0027\") % {\u0027error\u0027: plugin_data[\u0027error\u0027],"},{"line_number":14,"context_line":"                                          \u0027inventory\u0027: inventory}"},{"line_number":15,"context_line":"            raise exception.InspectorError(msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"b7d6e633_e84f9edb","line":14,"in_reply_to":"9f07c5d5_851eb7bc","updated":"2023-08-21 11:02:56.000000000","message":"Done","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"}],"ironic/drivers/modules/inspector/inspection_hooks/validate_interfaces.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u0027\u0027\u0027"},{"line_number":2,"context_line":"from ironic_lib import utils as il_utils"},{"line_number":3,"context_line":"import netaddr"},{"line_number":4,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":1,"id":"637c9d14_eab6f4a2","line":1,"updated":"2023-07-05 08:52:25.000000000","message":"Should be removed","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"99325987b900b54770907f43fd7859dff56e3ea5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u0027\u0027\u0027"},{"line_number":2,"context_line":"from ironic_lib import utils as il_utils"},{"line_number":3,"context_line":"import netaddr"},{"line_number":4,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":1,"id":"27f3f683_7eb9b136","line":1,"in_reply_to":"637c9d14_eab6f4a2","updated":"2023-07-05 16:23:06.000000000","message":"Ack","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":16,"context_line":"LOG \u003d utils.getProcessingLogger(\u0027ironic_inspector.plugins.validate_interfaces\u0027)"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class ValidateInterfacesHook(base.InspectionHook):"},{"line_number":20,"context_line":"    \"\"\"Hook to validate network interfaces.\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"84779bba_576b3ae6","line":19,"updated":"2023-07-05 08:52:25.000000000","message":"Please reuse the code I\u0027m introducing in https://review.opendev.org/c/openstack/ironic/+/885450?usp\u003ddashboard","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"99325987b900b54770907f43fd7859dff56e3ea5","unresolved":true,"context_lines":[{"line_number":16,"context_line":"LOG \u003d utils.getProcessingLogger(\u0027ironic_inspector.plugins.validate_interfaces\u0027)"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class ValidateInterfacesHook(base.InspectionHook):"},{"line_number":20,"context_line":"    \"\"\"Hook to validate network interfaces.\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"d08ffc58_f4851556","line":19,"in_reply_to":"84779bba_576b3ae6","updated":"2023-07-05 16:23:06.000000000","message":"Ack","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"2c3dac8f680d6778e7d18b2b8eeceb07204bf4e0","unresolved":false,"context_lines":[{"line_number":16,"context_line":"LOG \u003d utils.getProcessingLogger(\u0027ironic_inspector.plugins.validate_interfaces\u0027)"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class ValidateInterfacesHook(base.InspectionHook):"},{"line_number":20,"context_line":"    \"\"\"Hook to validate network interfaces.\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"2c82701c_5037c245","line":19,"in_reply_to":"d08ffc58_f4851556","updated":"2023-07-12 16:40:36.000000000","message":"Done","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"}],"ironic/drivers/modules/inspector/process.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":36,"context_line":"LOG \u003d utils.getProcessingLogger(__name__)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def _store_logs(inventory, plugin_data, node_uuid):"},{"line_number":40,"context_line":"    logs \u003d plugin_data.get(\u0027logs\u0027)"},{"line_number":41,"context_line":"    if not logs:"},{"line_number":42,"context_line":"        LOG.warning(\u0027No logs were passed by the ramdisk\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"40183c30_bc892692","line":39,"updated":"2023-07-05 08:52:25.000000000","message":"I suggest we migrate to the implementation in deploy_utils, even if it requires extending it.","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"47d19ea74cd6e2602427fe96f3631d8283cd6c15","unresolved":true,"context_lines":[{"line_number":36,"context_line":"LOG \u003d utils.getProcessingLogger(__name__)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def _store_logs(inventory, plugin_data, node_uuid):"},{"line_number":40,"context_line":"    logs \u003d plugin_data.get(\u0027logs\u0027)"},{"line_number":41,"context_line":"    if not logs:"},{"line_number":42,"context_line":"        LOG.warning(\u0027No logs were passed by the ramdisk\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ef504c02_11096c94","line":39,"in_reply_to":"40183c30_bc892692","updated":"2023-07-06 15:21:04.000000000","message":"Done","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"2c3dac8f680d6778e7d18b2b8eeceb07204bf4e0","unresolved":false,"context_lines":[{"line_number":36,"context_line":"LOG \u003d utils.getProcessingLogger(__name__)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def _store_logs(inventory, plugin_data, node_uuid):"},{"line_number":40,"context_line":"    logs \u003d plugin_data.get(\u0027logs\u0027)"},{"line_number":41,"context_line":"    if not logs:"},{"line_number":42,"context_line":"        LOG.warning(\u0027No logs were passed by the ramdisk\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ad90e874_5581b77d","line":39,"in_reply_to":"ef504c02_11096c94","updated":"2023-07-12 16:40:36.000000000","message":"Done","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":39,"context_line":"def _store_logs(inventory, plugin_data, node_uuid):"},{"line_number":40,"context_line":"    logs \u003d plugin_data.get(\u0027logs\u0027)"},{"line_number":41,"context_line":"    if not logs:"},{"line_number":42,"context_line":"        LOG.warning(\u0027No logs were passed by the ramdisk\u0027,"},{"line_number":43,"context_line":"                    data\u003dplugin_data, node_uuid\u003dnode_uuid)"},{"line_number":44,"context_line":"        return"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"6f7d88e0_445fc515","line":42,"updated":"2023-07-05 08:52:25.000000000","message":"Commenting here, but needs to happen everywhere: the Ironic\u0027s logging facility does not support passing data/node_uuid as keyword arguments, you actually need to include them in the string.","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"47d19ea74cd6e2602427fe96f3631d8283cd6c15","unresolved":false,"context_lines":[{"line_number":39,"context_line":"def _store_logs(inventory, plugin_data, node_uuid):"},{"line_number":40,"context_line":"    logs \u003d plugin_data.get(\u0027logs\u0027)"},{"line_number":41,"context_line":"    if not logs:"},{"line_number":42,"context_line":"        LOG.warning(\u0027No logs were passed by the ramdisk\u0027,"},{"line_number":43,"context_line":"                    data\u003dplugin_data, node_uuid\u003dnode_uuid)"},{"line_number":44,"context_line":"        return"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ac249774_38152bc5","line":42,"in_reply_to":"6f7d88e0_445fc515","updated":"2023-07-06 15:21:04.000000000","message":"Done","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":120,"context_line":"        msg \u003d _(\u0027The following failures happened during running \u0027"},{"line_number":121,"context_line":"                \u0027pre-processing hooks:\\n%s\u0027) % \u0027\\n\u0027.join(failures)"},{"line_number":122,"context_line":"        if node is not None:"},{"line_number":123,"context_line":"            task.process_event(event\u003d\u0027fail\u0027,"},{"line_number":124,"context_line":"                               target_state\u003dstates.INSPECTFAIL,"},{"line_number":125,"context_line":"                               last_error\u003dfailures)"},{"line_number":126,"context_line":"        _store_logs(inventory, plugin_data, node.uuid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"4802e0d2_f367a0b9","line":123,"updated":"2023-07-05 08:52:25.000000000","message":"No need for this, just raise an exception. It will be handled in https://opendev.org/openstack/ironic/src/branch/master/ironic/conductor/inspection.py#L140-L148","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"47d19ea74cd6e2602427fe96f3631d8283cd6c15","unresolved":true,"context_lines":[{"line_number":120,"context_line":"        msg \u003d _(\u0027The following failures happened during running \u0027"},{"line_number":121,"context_line":"                \u0027pre-processing hooks:\\n%s\u0027) % \u0027\\n\u0027.join(failures)"},{"line_number":122,"context_line":"        if node is not None:"},{"line_number":123,"context_line":"            task.process_event(event\u003d\u0027fail\u0027,"},{"line_number":124,"context_line":"                               target_state\u003dstates.INSPECTFAIL,"},{"line_number":125,"context_line":"                               last_error\u003dfailures)"},{"line_number":126,"context_line":"        _store_logs(inventory, plugin_data, node.uuid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f8e208e_3b220d8e","line":123,"in_reply_to":"4802e0d2_f367a0b9","updated":"2023-07-06 15:21:04.000000000","message":"Alright! If node is None, the error message should be different, right? Also, is it possible for the node object to be None?","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"05e6a44b4a483d8c23f6923ff2f311b288ed19e4","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        msg \u003d _(\u0027The following failures happened during running \u0027"},{"line_number":121,"context_line":"                \u0027pre-processing hooks:\\n%s\u0027) % \u0027\\n\u0027.join(failures)"},{"line_number":122,"context_line":"        if node is not None:"},{"line_number":123,"context_line":"            task.process_event(event\u003d\u0027fail\u0027,"},{"line_number":124,"context_line":"                               target_state\u003dstates.INSPECTFAIL,"},{"line_number":125,"context_line":"                               last_error\u003dfailures)"},{"line_number":126,"context_line":"        _store_logs(inventory, plugin_data, node.uuid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"e6d48625_2a4a05bc","line":123,"in_reply_to":"7f8e208e_3b220d8e","updated":"2023-08-21 11:02:56.000000000","message":"Done","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":126,"context_line":"        _store_logs(inventory, plugin_data, node.uuid)"},{"line_number":127,"context_line":"        raise exception.HardwareInspectionFailure(error\u003dmsg)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    if node.inspection_finished_at is not None:"},{"line_number":130,"context_line":"        # Race condition or inspection cancelled"},{"line_number":131,"context_line":"        raise exception.InspectionFinished(node\u003dnode.id,"},{"line_number":132,"context_line":"                                           error \u003d node.last_error)"}],"source_content_type":"text/x-python","patch_set":1,"id":"6ecf66fd_c12bb23b","line":129,"updated":"2023-07-05 08:52:25.000000000","message":"An upside of having the whole process behind a node lock: this is no longer possible!","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"05e6a44b4a483d8c23f6923ff2f311b288ed19e4","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        _store_logs(inventory, plugin_data, node.uuid)"},{"line_number":127,"context_line":"        raise exception.HardwareInspectionFailure(error\u003dmsg)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    if node.inspection_finished_at is not None:"},{"line_number":130,"context_line":"        # Race condition or inspection cancelled"},{"line_number":131,"context_line":"        raise exception.InspectionFinished(node\u003dnode.id,"},{"line_number":132,"context_line":"                                           error \u003d node.last_error)"}],"source_content_type":"text/x-python","patch_set":1,"id":"e9ece68f_d299381f","line":129,"in_reply_to":"49526d50_11bbf727","updated":"2023-08-21 11:02:56.000000000","message":"Done","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"99325987b900b54770907f43fd7859dff56e3ea5","unresolved":true,"context_lines":[{"line_number":126,"context_line":"        _store_logs(inventory, plugin_data, node.uuid)"},{"line_number":127,"context_line":"        raise exception.HardwareInspectionFailure(error\u003dmsg)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    if node.inspection_finished_at is not None:"},{"line_number":130,"context_line":"        # Race condition or inspection cancelled"},{"line_number":131,"context_line":"        raise exception.InspectionFinished(node\u003dnode.id,"},{"line_number":132,"context_line":"                                           error \u003d node.last_error)"}],"source_content_type":"text/x-python","patch_set":1,"id":"49526d50_11bbf727","line":129,"in_reply_to":"6ecf66fd_c12bb23b","updated":"2023-07-05 16:23:06.000000000","message":"Okay. It was possible before because multiple threads or functions could be inspecting and updating the same node object?","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":131,"context_line":"        raise exception.InspectionFinished(node\u003dnode.id,"},{"line_number":132,"context_line":"                                           error \u003d node.last_error)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    inspect_utils.store_inspection_data(task.node, unprocessed_inventory,"},{"line_number":135,"context_line":"                                        plugin_data, context\u003dtask.context)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"64724531_4ca4ea8b","line":134,"updated":"2023-07-05 08:52:25.000000000","message":"We don\u0027t support storing unprocessed data, this should be replaced via a TODO","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"47d19ea74cd6e2602427fe96f3631d8283cd6c15","unresolved":true,"context_lines":[{"line_number":131,"context_line":"        raise exception.InspectionFinished(node\u003dnode.id,"},{"line_number":132,"context_line":"                                           error \u003d node.last_error)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    inspect_utils.store_inspection_data(task.node, unprocessed_inventory,"},{"line_number":135,"context_line":"                                        plugin_data, context\u003dtask.context)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"a6a6b364_032f1b61","line":134,"in_reply_to":"64724531_4ca4ea8b","updated":"2023-07-06 15:21:04.000000000","message":"Okay. Questions: Why not store it? Is it too much of a overhead, or just unnecessary?","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"05e6a44b4a483d8c23f6923ff2f311b288ed19e4","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        raise exception.InspectionFinished(node\u003dnode.id,"},{"line_number":132,"context_line":"                                           error \u003d node.last_error)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    inspect_utils.store_inspection_data(task.node, unprocessed_inventory,"},{"line_number":135,"context_line":"                                        plugin_data, context\u003dtask.context)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ee83925_21646683","line":134,"in_reply_to":"a6a6b364_032f1b61","updated":"2023-08-21 11:02:56.000000000","message":"Done","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":137,"context_line":"    try:"},{"line_number":138,"context_line":"        _process_node(task, inventory, plugin_data)"},{"line_number":139,"context_line":"    except exception.InspectorError as exc:"},{"line_number":140,"context_line":"        task.process_event(event\u003d\u0027fail\u0027,"},{"line_number":141,"context_line":"                           target_state\u003dstates.INSPECTFAIL,"},{"line_number":142,"context_line":"                           last_error\u003dstr(exc))"},{"line_number":143,"context_line":"        with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":1,"id":"06daff35_3f8e6711","line":140,"updated":"2023-07-05 08:52:25.000000000","message":"Same here: not needed (but we may actually consider storing logs).","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"47d19ea74cd6e2602427fe96f3631d8283cd6c15","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    try:"},{"line_number":138,"context_line":"        _process_node(task, inventory, plugin_data)"},{"line_number":139,"context_line":"    except exception.InspectorError as exc:"},{"line_number":140,"context_line":"        task.process_event(event\u003d\u0027fail\u0027,"},{"line_number":141,"context_line":"                           target_state\u003dstates.INSPECTFAIL,"},{"line_number":142,"context_line":"                           last_error\u003dstr(exc))"},{"line_number":143,"context_line":"        with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":1,"id":"762333e1_5b3b0fe8","line":140,"in_reply_to":"06daff35_3f8e6711","updated":"2023-07-06 15:21:04.000000000","message":"Ack","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":147,"context_line":"        msg \u003d _(\u0027Unexpected exception %(exc_class)s during processing: \u0027"},{"line_number":148,"context_line":"                \u0027%(error)s\u0027) % {\u0027exc_class\u0027: exc.__class__.__name__,"},{"line_number":149,"context_line":"                                \u0027error\u0027: exc}"},{"line_number":150,"context_line":"        task.process_event(event\u003d\u0027fail\u0027,"},{"line_number":151,"context_line":"                           target_state\u003dstates.INSPECTFAIL,"},{"line_number":152,"context_line":"                           last_error\u003dmsg)"},{"line_number":153,"context_line":"        _store_logs(inventory, plugin_data, node)"}],"source_content_type":"text/x-python","patch_set":1,"id":"c6cbfd6a_78e045d6","line":150,"updated":"2023-07-05 08:52:25.000000000","message":"And here (everything else is fine).","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"47d19ea74cd6e2602427fe96f3631d8283cd6c15","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        msg \u003d _(\u0027Unexpected exception %(exc_class)s during processing: \u0027"},{"line_number":148,"context_line":"                \u0027%(error)s\u0027) % {\u0027exc_class\u0027: exc.__class__.__name__,"},{"line_number":149,"context_line":"                                \u0027error\u0027: exc}"},{"line_number":150,"context_line":"        task.process_event(event\u003d\u0027fail\u0027,"},{"line_number":151,"context_line":"                           target_state\u003dstates.INSPECTFAIL,"},{"line_number":152,"context_line":"                           last_error\u003dmsg)"},{"line_number":153,"context_line":"        _store_logs(inventory, plugin_data, node)"}],"source_content_type":"text/x-python","patch_set":1,"id":"82d11424_0cf0e154","line":150,"in_reply_to":"c6cbfd6a_78e045d6","updated":"2023-07-06 15:21:04.000000000","message":"Ack","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":153,"context_line":"        _store_logs(inventory, plugin_data, node)"},{"line_number":154,"context_line":"        raise exception.InspectorError(_msg_fmt\u003dmsg, code\u003d500)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    if CONF.processing.always_store_ramdisk_logs:"},{"line_number":157,"context_line":"        _store_logs(inventory, plugin_data, node)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    result \u003d {\u0027uuid\u0027: task.node.id}"}],"source_content_type":"text/x-python","patch_set":1,"id":"92a1ae61_3f348235","line":156,"updated":"2023-07-05 08:52:25.000000000","message":"This option no longer exists","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"47d19ea74cd6e2602427fe96f3631d8283cd6c15","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        _store_logs(inventory, plugin_data, node)"},{"line_number":154,"context_line":"        raise exception.InspectorError(_msg_fmt\u003dmsg, code\u003d500)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    if CONF.processing.always_store_ramdisk_logs:"},{"line_number":157,"context_line":"        _store_logs(inventory, plugin_data, node)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    result \u003d {\u0027uuid\u0027: task.node.id}"}],"source_content_type":"text/x-python","patch_set":1,"id":"0da12506_8897572f","line":156,"in_reply_to":"92a1ae61_3f348235","updated":"2023-07-06 15:21:04.000000000","message":"Done","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":169,"context_line":"        hook.obj.__call__(task, inventory, plugin_data)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"# @node_cache.fsm_transition(istate.Events.process, reentrant\u003dFalse)"},{"line_number":173,"context_line":"def _process_node(task, inventory, plugin_data):"},{"line_number":174,"context_line":"    # NOTE(dtantsur): repeat the check in case something changed"},{"line_number":175,"context_line":"    keep_power_on \u003d utils.check_provision_state(task.node)"}],"source_content_type":"text/x-python","patch_set":1,"id":"152bb5b7_ad91d228","line":172,"updated":"2023-07-05 08:52:25.000000000","message":"All this stuff is not required in Ironic proper.","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"47d19ea74cd6e2602427fe96f3631d8283cd6c15","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        hook.obj.__call__(task, inventory, plugin_data)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"# @node_cache.fsm_transition(istate.Events.process, reentrant\u003dFalse)"},{"line_number":173,"context_line":"def _process_node(task, inventory, plugin_data):"},{"line_number":174,"context_line":"    # NOTE(dtantsur): repeat the check in case something changed"},{"line_number":175,"context_line":"    keep_power_on \u003d utils.check_provision_state(task.node)"}],"source_content_type":"text/x-python","patch_set":1,"id":"0176bdad_d206c7ba","line":172,"in_reply_to":"152bb5b7_ad91d228","updated":"2023-07-06 15:21:04.000000000","message":"Done","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":187,"context_line":"        power_action \u003d CONF.inspector.power_off"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    # utils.executor().submit(_finish, task, inventory, power_off\u003dpower_action)"},{"line_number":190,"context_line":"    # TO DO Change this to use an executor"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    _finish(task, inventory, power_off\u003dpower_action)"},{"line_number":193,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"b2af6935_2465359b","line":190,"updated":"2023-07-05 08:52:25.000000000","message":"Not needed, we\u0027re already running in a thread.","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"47d19ea74cd6e2602427fe96f3631d8283cd6c15","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        power_action \u003d CONF.inspector.power_off"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    # utils.executor().submit(_finish, task, inventory, power_off\u003dpower_action)"},{"line_number":190,"context_line":"    # TO DO Change this to use an executor"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    _finish(task, inventory, power_off\u003dpower_action)"},{"line_number":193,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bddc94ee_236ab069","line":190,"in_reply_to":"b2af6935_2465359b","updated":"2023-07-06 15:21:04.000000000","message":"Ack","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":209,"context_line":"                                                          inventory\u003dinventory)"},{"line_number":210,"context_line":"        LOG.info(\u0027Node powered off\u0027, node\u003dnode.uuid, data\u003dinventory)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    task.process_event(event\u003d\u0027done\u0027, target_state\u003dstates.MANAGEABLE)"},{"line_number":213,"context_line":"    LOG.info(\u0027Inspection finished successfully\u0027, node\u003dnode.uuid,"},{"line_number":214,"context_line":"             data\u003dinventory)"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"48d3df09_a7478a2e","line":212,"updated":"2023-07-05 08:52:25.000000000","message":"Not needed, both \u0027done\u0027 action and logging happen in https://opendev.org/openstack/ironic/src/branch/master/ironic/conductor/inspection.py#L150-L151","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"47d19ea74cd6e2602427fe96f3631d8283cd6c15","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                                                          inventory\u003dinventory)"},{"line_number":210,"context_line":"        LOG.info(\u0027Node powered off\u0027, node\u003dnode.uuid, data\u003dinventory)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    task.process_event(event\u003d\u0027done\u0027, target_state\u003dstates.MANAGEABLE)"},{"line_number":213,"context_line":"    LOG.info(\u0027Inspection finished successfully\u0027, node\u003dnode.uuid,"},{"line_number":214,"context_line":"             data\u003dinventory)"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"2b73a400_7b706bb2","line":212,"in_reply_to":"48d3df09_a7478a2e","updated":"2023-07-06 15:21:04.000000000","message":"Ack, removed.","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":214,"context_line":"             data\u003dinventory)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"\u0027\u0027\u0027"},{"line_number":217,"context_line":"def reapply(node_uuid, data\u003dNone):"},{"line_number":218,"context_line":"    \"\"\"Re-apply inspection steps."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    Re-apply preprocessing and postprocessing inspection hooks on stored"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4ea658_eb953486","line":217,"updated":"2023-07-05 08:52:25.000000000","message":"Yeah, no reapply for now (I don\u0027t know if we even introduce this API ever).","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"47d19ea74cd6e2602427fe96f3631d8283cd6c15","unresolved":true,"context_lines":[{"line_number":214,"context_line":"             data\u003dinventory)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"\u0027\u0027\u0027"},{"line_number":217,"context_line":"def reapply(node_uuid, data\u003dNone):"},{"line_number":218,"context_line":"    \"\"\"Re-apply inspection steps."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    Re-apply preprocessing and postprocessing inspection hooks on stored"}],"source_content_type":"text/x-python","patch_set":1,"id":"a5550263_e4e85834","line":217,"in_reply_to":"3f4ea658_eb953486","updated":"2023-07-06 15:21:04.000000000","message":"Okay. Out of curiosity, the reapply action that was available earlier allowed inspection hooks and rules to be re-applied on the inventory/plugin_data, right?","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"05e6a44b4a483d8c23f6923ff2f311b288ed19e4","unresolved":false,"context_lines":[{"line_number":214,"context_line":"             data\u003dinventory)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"\u0027\u0027\u0027"},{"line_number":217,"context_line":"def reapply(node_uuid, data\u003dNone):"},{"line_number":218,"context_line":"    \"\"\"Re-apply inspection steps."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    Re-apply preprocessing and postprocessing inspection hooks on stored"}],"source_content_type":"text/x-python","patch_set":1,"id":"ea6f4f27_c2cf4446","line":217,"in_reply_to":"a5550263_e4e85834","updated":"2023-08-21 11:02:56.000000000","message":"Done","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":11,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":12,"context_line":"# limitations under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"\"\"\"Handling _run data from the ramdisk.\"\"\""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_config import cfg"},{"line_number":17,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":7,"id":"1b65ee75_d90f25fe","line":14,"updated":"2023-08-02 12:46:02.000000000","message":"The reference to _run seems invalid.\n\nActually, I wonder if there is value to splitting this logic into process.py. I\u0027d personally keep it in agent.py (close to the interface implementation).","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":12,"context_line":"# limitations under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"\"\"\"Handling _run data from the ramdisk.\"\"\""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_config import cfg"},{"line_number":17,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":7,"id":"4d87eebe_018c6c12","line":14,"in_reply_to":"1b65ee75_d90f25fe","updated":"2023-08-04 16:11:14.000000000","message":"Good idea! Moved everything to agent.py. It looks cleaner now (imo).","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"# See https://docs.openstack.org/ironic/latest/contributor/states.html"},{"line_number":34,"context_line":"VALID_STATES \u003d frozenset([\u0027enroll\u0027, \u0027manageable\u0027, \u0027inspecting\u0027, \u0027inspect wait\u0027,"},{"line_number":35,"context_line":"                          \u0027inspect failed\u0027])"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"cf62f880_4abba737","line":33,"updated":"2023-08-02 12:46:02.000000000","message":"nit: the new link is https://docs.openstack.org/ironic/latest/user/states.html","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"# See https://docs.openstack.org/ironic/latest/contributor/states.html"},{"line_number":34,"context_line":"VALID_STATES \u003d frozenset([\u0027enroll\u0027, \u0027manageable\u0027, \u0027inspecting\u0027, \u0027inspect wait\u0027,"},{"line_number":35,"context_line":"                          \u0027inspect failed\u0027])"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"e6d1fbe9_cab37138","line":33,"in_reply_to":"cf62f880_4abba737","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":42,"context_line":"    logs \u003d plugin_data.get(\u0027logs\u0027)"},{"line_number":43,"context_line":"    if not logs:"},{"line_number":44,"context_line":"        LOG.warning(\u0027No logs were passed by the ramdisk for node %(node)s. \u0027"},{"line_number":45,"context_line":"                    \u0027Plugin data: %(data)s\u0027, {\u0027node\u0027: node.uuid,"},{"line_number":46,"context_line":"                                              \u0027data\u0027: plugin_data})"},{"line_number":47,"context_line":"        return"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"47b20094_bb699fd6","line":45,"updated":"2023-08-02 12:46:02.000000000","message":"Plugin data can be huge, let\u0027s not log it completely.","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    logs \u003d plugin_data.get(\u0027logs\u0027)"},{"line_number":43,"context_line":"    if not logs:"},{"line_number":44,"context_line":"        LOG.warning(\u0027No logs were passed by the ramdisk for node %(node)s. \u0027"},{"line_number":45,"context_line":"                    \u0027Plugin data: %(data)s\u0027, {\u0027node\u0027: node.uuid,"},{"line_number":46,"context_line":"                                              \u0027data\u0027: plugin_data})"},{"line_number":47,"context_line":"        return"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"138cdc13_ee82604e","line":45,"in_reply_to":"47b20094_bb699fd6","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":47,"context_line":"        return"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    try:"},{"line_number":50,"context_line":"        driver_utils.store_ramdisk_logs(node, logs)"},{"line_number":51,"context_line":"    except exception as exc:"},{"line_number":52,"context_line":"        LOG.exception(\u0027Could not store the ramdisk logs for node %(node)s. \u0027"},{"line_number":53,"context_line":"                      \u0027Error: %(error)s\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"6c22508f_bf9635d5","line":50,"updated":"2023-08-02 12:46:02.000000000","message":"Let\u0027s pass label\u003d\u0027inspect\u0027 to distinguish files from ones from deployment","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        return"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    try:"},{"line_number":50,"context_line":"        driver_utils.store_ramdisk_logs(node, logs)"},{"line_number":51,"context_line":"    except exception as exc:"},{"line_number":52,"context_line":"        LOG.exception(\u0027Could not store the ramdisk logs for node %(node)s. \u0027"},{"line_number":53,"context_line":"                      \u0027Error: %(error)s\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f9103c0_d5af54e8","line":50,"in_reply_to":"6c22508f_bf9635d5","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":53,"context_line":"                      \u0027Error: %(error)s\u0027,"},{"line_number":54,"context_line":"                      {\u0027node\u0027: node.uuid, \u0027error\u0027: exc})"},{"line_number":55,"context_line":"    else:"},{"line_number":56,"context_line":"        LOG.info(\u0027Ramdisk logs were stored in file for node %(node)s\u0027,"},{"line_number":57,"context_line":"                 {\u0027node\u0027: node.uuid})"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"72e50cdd_5b2e92de","line":56,"updated":"2023-08-02 12:46:02.000000000","message":"nit: it\u0027s not necessarily a file. I wonder if we should move the logging to store_ramdisk_logs to be more informative.","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":true,"context_lines":[{"line_number":53,"context_line":"                      \u0027Error: %(error)s\u0027,"},{"line_number":54,"context_line":"                      {\u0027node\u0027: node.uuid, \u0027error\u0027: exc})"},{"line_number":55,"context_line":"    else:"},{"line_number":56,"context_line":"        LOG.info(\u0027Ramdisk logs were stored in file for node %(node)s\u0027,"},{"line_number":57,"context_line":"                 {\u0027node\u0027: node.uuid})"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"a6ea4d6f_6064d0bb","line":56,"in_reply_to":"72e50cdd_5b2e92de","updated":"2023-08-04 16:11:14.000000000","message":"Added log statements to store_ramdisk_logs and removed from here. How does it look now?","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"05e6a44b4a483d8c23f6923ff2f311b288ed19e4","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                      \u0027Error: %(error)s\u0027,"},{"line_number":54,"context_line":"                      {\u0027node\u0027: node.uuid, \u0027error\u0027: exc})"},{"line_number":55,"context_line":"    else:"},{"line_number":56,"context_line":"        LOG.info(\u0027Ramdisk logs were stored in file for node %(node)s\u0027,"},{"line_number":57,"context_line":"                 {\u0027node\u0027: node.uuid})"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"93dca5ca_87ade811","line":56,"in_reply_to":"a6ea4d6f_6064d0bb","updated":"2023-08-21 11:02:56.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":61,"context_line":"    failures \u003d []"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    for hook in hooks:"},{"line_number":64,"context_line":"        LOG.debug(\u0027Running preprocessing inspection hook %s\u0027, hook.name)"},{"line_number":65,"context_line":"        # NOTE(dtantsur): catch exceptions, so that we have changes to update"},{"line_number":66,"context_line":"        # node inspection status with after look up"},{"line_number":67,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"a2d731cb_45de1580","line":64,"updated":"2023-08-02 12:46:02.000000000","message":"Please log the node UUID (same in all instances below)","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    failures \u003d []"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    for hook in hooks:"},{"line_number":64,"context_line":"        LOG.debug(\u0027Running preprocessing inspection hook %s\u0027, hook.name)"},{"line_number":65,"context_line":"        # NOTE(dtantsur): catch exceptions, so that we have changes to update"},{"line_number":66,"context_line":"        # node inspection status with after look up"},{"line_number":67,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"46d4201d_3b801985","line":64,"in_reply_to":"a2d731cb_45de1580","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":70,"context_line":"            LOG.error(\u0027Hook %(hook)s failed, delaying error report until node \u0027"},{"line_number":71,"context_line":"                      \u0027look up. Error: %(error)s\u0027, {\u0027hook\u0027: hook.name,"},{"line_number":72,"context_line":"                                                    \u0027error\u0027: exc})"},{"line_number":73,"context_line":"            failures.append(\u0027HardwareInspectionFailure during preprocessing in\u0027"},{"line_number":74,"context_line":"                            \u0027 %(hook)s: %(error)s\u0027 %"},{"line_number":75,"context_line":"                            {\u0027hook\u0027: hook.name, \u0027error\u0027: exc})"},{"line_number":76,"context_line":"        except Exception as exc:"}],"source_content_type":"text/x-python","patch_set":7,"id":"8428c493_b89960cd","line":73,"updated":"2023-08-02 12:46:02.000000000","message":"s/HardwareInspectionFailure/error/ (no need to mention class names, they\u0027re not public)","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            LOG.error(\u0027Hook %(hook)s failed, delaying error report until node \u0027"},{"line_number":71,"context_line":"                      \u0027look up. Error: %(error)s\u0027, {\u0027hook\u0027: hook.name,"},{"line_number":72,"context_line":"                                                    \u0027error\u0027: exc})"},{"line_number":73,"context_line":"            failures.append(\u0027HardwareInspectionFailure during preprocessing in\u0027"},{"line_number":74,"context_line":"                            \u0027 %(hook)s: %(error)s\u0027 %"},{"line_number":75,"context_line":"                            {\u0027hook\u0027: hook.name, \u0027error\u0027: exc})"},{"line_number":76,"context_line":"        except Exception as exc:"}],"source_content_type":"text/x-python","patch_set":7,"id":"02ed306d_3a994fa6","line":73,"in_reply_to":"8428c493_b89960cd","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":74,"context_line":"                            \u0027 %(hook)s: %(error)s\u0027 %"},{"line_number":75,"context_line":"                            {\u0027hook\u0027: hook.name, \u0027error\u0027: exc})"},{"line_number":76,"context_line":"        except Exception as exc:"},{"line_number":77,"context_line":"            LOG.exception(\u0027Hook %(hook)s failed, delaying error report until \u0027"},{"line_number":78,"context_line":"                          \u0027node look up: %(error)s\u0027, {\u0027hook\u0027: hook.name,"},{"line_number":79,"context_line":"                                                      \u0027error\u0027: exc})"},{"line_number":80,"context_line":"            failures.append(_(\u0027Unexpected exception %(exc_class)s during \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"d37eea1a_3623b6b9","line":77,"updated":"2023-08-02 12:46:02.000000000","message":"The \"delaying error report\" part is no longer valid, we don\u0027t run preprocessing hooks before lookup.","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                            \u0027 %(hook)s: %(error)s\u0027 %"},{"line_number":75,"context_line":"                            {\u0027hook\u0027: hook.name, \u0027error\u0027: exc})"},{"line_number":76,"context_line":"        except Exception as exc:"},{"line_number":77,"context_line":"            LOG.exception(\u0027Hook %(hook)s failed, delaying error report until \u0027"},{"line_number":78,"context_line":"                          \u0027node look up: %(error)s\u0027, {\u0027hook\u0027: hook.name,"},{"line_number":79,"context_line":"                                                      \u0027error\u0027: exc})"},{"line_number":80,"context_line":"            failures.append(_(\u0027Unexpected exception %(exc_class)s during \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"350f52f5_cae36314","line":77,"in_reply_to":"d37eea1a_3623b6b9","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":83,"context_line":"                             \u0027hook\u0027: hook.name,"},{"line_number":84,"context_line":"                             \u0027error\u0027: exc})"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    if failures or task.node is None:"},{"line_number":87,"context_line":"        msg \u003d _(\u0027The following failures happened during running \u0027"},{"line_number":88,"context_line":"                \u0027pre-processing hooks:\\n%s\u0027) % \u0027\\n\u0027.join(failures)"},{"line_number":89,"context_line":"        _store_logs(plugin_data, task.node)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9c48a149_ad0748c9","line":86,"updated":"2023-08-02 12:46:02.000000000","message":"task.node cannot be None","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                             \u0027hook\u0027: hook.name,"},{"line_number":84,"context_line":"                             \u0027error\u0027: exc})"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    if failures or task.node is None:"},{"line_number":87,"context_line":"        msg \u003d _(\u0027The following failures happened during running \u0027"},{"line_number":88,"context_line":"                \u0027pre-processing hooks:\\n%s\u0027) % \u0027\\n\u0027.join(failures)"},{"line_number":89,"context_line":"        _store_logs(plugin_data, task.node)"}],"source_content_type":"text/x-python","patch_set":7,"id":"4073b057_c55d4c18","line":86,"in_reply_to":"9c48a149_ad0748c9","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":99,"context_line":"    processing."},{"line_number":100,"context_line":"    \"\"\""},{"line_number":101,"context_line":"    node \u003d task.node"},{"line_number":102,"context_line":"    result \u003d dict()"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    hooks \u003d hooks_base.validate_inspection_hooks()"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"84ead36e_7aa701f5","line":102,"updated":"2023-08-02 12:46:02.000000000","message":"Unused","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    processing."},{"line_number":100,"context_line":"    \"\"\""},{"line_number":101,"context_line":"    node \u003d task.node"},{"line_number":102,"context_line":"    result \u003d dict()"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    hooks \u003d hooks_base.validate_inspection_hooks()"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"a43f68cb_92f9d5b6","line":102,"in_reply_to":"84ead36e_7aa701f5","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":111,"context_line":"        with excutils.save_and_reraise_exception():"},{"line_number":112,"context_line":"            _store_logs(plugin_data, node)"},{"line_number":113,"context_line":"    except Exception as exc:"},{"line_number":114,"context_line":"        LOG.exception(\u0027Unexpected exception during processing\u0027)"},{"line_number":115,"context_line":"        msg \u003d _(\u0027Unexpected exception %(exc_class)s during processing: \u0027"},{"line_number":116,"context_line":"                \u0027%(error)s\u0027) % {\u0027exc_class\u0027: exc.__class__.__name__,"},{"line_number":117,"context_line":"                                \u0027error\u0027: exc}"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f5ddac2_176e2fbb","line":114,"updated":"2023-08-02 12:46:02.000000000","message":"Please add node UUID to logging","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        with excutils.save_and_reraise_exception():"},{"line_number":112,"context_line":"            _store_logs(plugin_data, node)"},{"line_number":113,"context_line":"    except Exception as exc:"},{"line_number":114,"context_line":"        LOG.exception(\u0027Unexpected exception during processing\u0027)"},{"line_number":115,"context_line":"        msg \u003d _(\u0027Unexpected exception %(exc_class)s during processing: \u0027"},{"line_number":116,"context_line":"                \u0027%(error)s\u0027) % {\u0027exc_class\u0027: exc.__class__.__name__,"},{"line_number":117,"context_line":"                                \u0027error\u0027: exc}"}],"source_content_type":"text/x-python","patch_set":7,"id":"93aa710e_d18dc0fc","line":114,"in_reply_to":"3f5ddac2_176e2fbb","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":118,"context_line":"        _store_logs(plugin_data, node)"},{"line_number":119,"context_line":"        raise exception.HardwareInspectionFailure(error\u003dmsg)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    result \u003d {\u0027uuid\u0027: task.node.id}"},{"line_number":122,"context_line":"    return result"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ca31791e_d9c1e1ca","line":121,"updated":"2023-08-02 12:46:02.000000000","message":"Result is not used in this implementation.","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        _store_logs(plugin_data, node)"},{"line_number":119,"context_line":"        raise exception.HardwareInspectionFailure(error\u003dmsg)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    result \u003d {\u0027uuid\u0027: task.node.id}"},{"line_number":122,"context_line":"    return result"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"c392306f_678f9d9e","line":121,"in_reply_to":"ca31791e_d9c1e1ca","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"def _run_post_hooks(task, inventory, plugin_data, hooks):"},{"line_number":126,"context_line":"    for hook in hooks:"},{"line_number":127,"context_line":"        LOG.debug(\u0027Running post-processing hook %(hook)s for node %(node)s\u0027,"},{"line_number":128,"context_line":"                  {\u0027hook\u0027: hook.name, \u0027node\u0027: task.node.uuid})"},{"line_number":129,"context_line":"        hook.obj.__call__(task, inventory, plugin_data)"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"a58268c7_d94bb074","line":127,"updated":"2023-08-02 12:46:02.000000000","message":"They\u0027re no longer post-processing, let\u0027s just call them \"inspection hook\"","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"def _run_post_hooks(task, inventory, plugin_data, hooks):"},{"line_number":126,"context_line":"    for hook in hooks:"},{"line_number":127,"context_line":"        LOG.debug(\u0027Running post-processing hook %(hook)s for node %(node)s\u0027,"},{"line_number":128,"context_line":"                  {\u0027hook\u0027: hook.name, \u0027node\u0027: task.node.uuid})"},{"line_number":129,"context_line":"        hook.obj.__call__(task, inventory, plugin_data)"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"57eeeec2_01b81371","line":127,"in_reply_to":"a58268c7_d94bb074","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":134,"context_line":"    keep_power_on \u003d check_provision_state(task.node)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    _run_post_hooks(task, inventory, plugin_data, hooks)"},{"line_number":137,"context_line":"    inspect_utils.store_inspection_data(task.node, inventory,"},{"line_number":138,"context_line":"                                        plugin_data, context\u003dtask.context)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    # Determine how to handle power"}],"source_content_type":"text/x-python","patch_set":7,"id":"117109b1_eba71d8d","line":137,"updated":"2023-08-02 12:46:02.000000000","message":"This is done already: https://opendev.org/openstack/ironic/src/branch/master/ironic/conductor/inspection.py#L133","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    keep_power_on \u003d check_provision_state(task.node)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    _run_post_hooks(task, inventory, plugin_data, hooks)"},{"line_number":137,"context_line":"    inspect_utils.store_inspection_data(task.node, inventory,"},{"line_number":138,"context_line":"                                        plugin_data, context\u003dtask.context)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    # Determine how to handle power"}],"source_content_type":"text/x-python","patch_set":7,"id":"f696a8e4_88f9caee","line":137,"in_reply_to":"117109b1_eba71d8d","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":140,"context_line":"    # Determine how to handle power"},{"line_number":141,"context_line":"    manage_boot \u003d inspector_interface.ironic_manages_boot("},{"line_number":142,"context_line":"        task, raise_exc\u003dCONF.inspector.require_managed_boot)"},{"line_number":143,"context_line":"    if keep_power_on or not manage_boot:"},{"line_number":144,"context_line":"        power_action \u003d False"},{"line_number":145,"context_line":"    else:"},{"line_number":146,"context_line":"        power_action \u003d CONF.inspector.power_off"}],"source_content_type":"text/x-python","patch_set":7,"id":"0a4caa71_454ef821","line":143,"updated":"2023-08-02 12:46:02.000000000","message":"I don\u0027t think we should use manage_boot here. Even for unmanaged boot, something has to power off the node if CONF.inspector.power_off is true.","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    # Determine how to handle power"},{"line_number":141,"context_line":"    manage_boot \u003d inspector_interface.ironic_manages_boot("},{"line_number":142,"context_line":"        task, raise_exc\u003dCONF.inspector.require_managed_boot)"},{"line_number":143,"context_line":"    if keep_power_on or not manage_boot:"},{"line_number":144,"context_line":"        power_action \u003d False"},{"line_number":145,"context_line":"    else:"},{"line_number":146,"context_line":"        power_action \u003d CONF.inspector.power_off"}],"source_content_type":"text/x-python","patch_set":7,"id":"78d90739_f638188a","line":143,"in_reply_to":"0a4caa71_454ef821","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":157,"context_line":"    try:"},{"line_number":158,"context_line":"        cond_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":159,"context_line":"    except Exception as exc:"},{"line_number":160,"context_line":"        if node.provision_state \u003d\u003d \u0027enroll\u0027:"},{"line_number":161,"context_line":"            LOG.info(\"Failed to power off the node %(node)s in \u0027enroll\u0027 \""},{"line_number":162,"context_line":"                     \"state, ignoring; error was %(error)s\","},{"line_number":163,"context_line":"                     {\u0027node\u0027: node.uuid, \u0027error\u0027: exc})"}],"source_content_type":"text/x-python","patch_set":7,"id":"b028cc61_674aa6ba","line":160,"updated":"2023-08-02 12:46:02.000000000","message":"This new interface does not allow inspection in the enroll state (see below)","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    try:"},{"line_number":158,"context_line":"        cond_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":159,"context_line":"    except Exception as exc:"},{"line_number":160,"context_line":"        if node.provision_state \u003d\u003d \u0027enroll\u0027:"},{"line_number":161,"context_line":"            LOG.info(\"Failed to power off the node %(node)s in \u0027enroll\u0027 \""},{"line_number":162,"context_line":"                     \"state, ignoring; error was %(error)s\","},{"line_number":163,"context_line":"                     {\u0027node\u0027: node.uuid, \u0027error\u0027: exc})"}],"source_content_type":"text/x-python","patch_set":7,"id":"0b3bdbbe_7c938e88","line":160,"in_reply_to":"b028cc61_674aa6ba","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":165,"context_line":"            msg \u003d _(\"Failed to power off node %(node)s after inspection. \""},{"line_number":166,"context_line":"                    \"Check its power management configuration.\") % {\u0027node\u0027:"},{"line_number":167,"context_line":"                                                                    node.uuid}"},{"line_number":168,"context_line":"            raise exception.HardwareInspectionFailure(_msg_fmt\u003dmsg)"},{"line_number":169,"context_line":"    LOG.info(\u0027Node %(node)s powered off\u0027, {\u0027node\u0027: node.uuid})"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"d2c71233_2446b2bf","line":168,"updated":"2023-08-02 12:46:02.000000000","message":"Please never pass _msg_fmt, it\u0027s an internal thing. Just pass msg as the first (and only) positional argument","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":165,"context_line":"            msg \u003d _(\"Failed to power off node %(node)s after inspection. \""},{"line_number":166,"context_line":"                    \"Check its power management configuration.\") % {\u0027node\u0027:"},{"line_number":167,"context_line":"                                                                    node.uuid}"},{"line_number":168,"context_line":"            raise exception.HardwareInspectionFailure(_msg_fmt\u003dmsg)"},{"line_number":169,"context_line":"    LOG.info(\u0027Node %(node)s powered off\u0027, {\u0027node\u0027: node.uuid})"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"d25415e3_328ecec1","line":168,"in_reply_to":"d2c71233_2446b2bf","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":169,"context_line":"    LOG.info(\u0027Node %(node)s powered off\u0027, {\u0027node\u0027: node.uuid})"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"def check_provision_state(node):"},{"line_number":173,"context_line":"    \"\"\"Sanity checks the provision state of the node."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    :param node: A node object"}],"source_content_type":"text/x-python","patch_set":7,"id":"70fc9393_43e47db3","line":172,"updated":"2023-08-02 12:46:02.000000000","message":"Actually, all this logic no longer works. We will never reach continue_inspection in agent.py if the state is incorrect: https://opendev.org/openstack/ironic/src/branch/master/ironic/conductor/manager.py#L3699. Just drop it and the constants.","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    LOG.info(\u0027Node %(node)s powered off\u0027, {\u0027node\u0027: node.uuid})"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"def check_provision_state(node):"},{"line_number":173,"context_line":"    \"\"\"Sanity checks the provision state of the node."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    :param node: A node object"}],"source_content_type":"text/x-python","patch_set":7,"id":"d6e46299_78b1e90b","line":172,"in_reply_to":"70fc9393_43e47db3","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"}],"ironic/drivers/modules/inspector/utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"65b4403f_ac290302","updated":"2023-07-05 08:52:25.000000000","message":"I suspect all this stuff can be removed with migration.","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"5d7c70f35ac1816f2e760505d10e226a18107c63","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"94fd025e_990bfcbe","in_reply_to":"65b4403f_ac290302","updated":"2023-07-12 15:24:33.000000000","message":"Done","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"}],"ironic/drivers/utils.py":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"fdc03237a91842b5a092ee2b4355fb5ad9589731","unresolved":true,"context_lines":[{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    \"\"\""},{"line_number":301,"context_line":"    if CONF.agent.deploy_logs_collect \u003d\u003d \u0027never\u0027:"},{"line_number":302,"context_line":"        return"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    logs_file_name \u003d get_ramdisk_logs_file_name(node, label\u003dlabel)"},{"line_number":305,"context_line":"    data \u003d base64.decode_as_bytes(logs)"}],"source_content_type":"text/x-python","patch_set":11,"id":"897c127f_d0add7e8","line":302,"updated":"2023-08-25 08:06:21.000000000","message":"nit: I would\u0027ve added a LOG info also here, but I\u0027m probably overthinking this :)","commit_id":"a86f403d84491a44731817497f7c00a96c782e49"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"d0ef53c59a72236134e65543f943704f3d77fa54","unresolved":false,"context_lines":[{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    \"\"\""},{"line_number":301,"context_line":"    if CONF.agent.deploy_logs_collect \u003d\u003d \u0027never\u0027:"},{"line_number":302,"context_line":"        return"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    logs_file_name \u003d get_ramdisk_logs_file_name(node, label\u003dlabel)"},{"line_number":305,"context_line":"    data \u003d base64.decode_as_bytes(logs)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1e67fc3b_14407ba1","line":302,"in_reply_to":"897c127f_d0add7e8","updated":"2023-08-25 11:41:06.000000000","message":"Done","commit_id":"a86f403d84491a44731817497f7c00a96c782e49"}],"ironic/objects/node.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"979a8cb1ec20dbfff6e2a10036bc5e5a7c2e4b36","unresolved":true,"context_lines":[{"line_number":753,"context_line":"        self.instance_info[key] \u003d value"},{"line_number":754,"context_line":"        self._changed_fields.add(\u0027instance_info\u0027)"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"    def set_properties(self, key, value):"},{"line_number":757,"context_line":"        \"\"\"Set a `properties` value."},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"        Setting a `properties` dict value via this method ensures that this"}],"source_content_type":"text/x-python","patch_set":8,"id":"e0c8b0f1_0b75b23e","line":756,"updated":"2023-08-17 15:37:32.000000000","message":"nit: set_property (you\u0027re setting only one at a time)","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"05e6a44b4a483d8c23f6923ff2f311b288ed19e4","unresolved":false,"context_lines":[{"line_number":753,"context_line":"        self.instance_info[key] \u003d value"},{"line_number":754,"context_line":"        self._changed_fields.add(\u0027instance_info\u0027)"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"    def set_properties(self, key, value):"},{"line_number":757,"context_line":"        \"\"\"Set a `properties` value."},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"        Setting a `properties` dict value via this method ensures that this"}],"source_content_type":"text/x-python","patch_set":8,"id":"81d6bf8f_dbead21c","line":756,"in_reply_to":"e0c8b0f1_0b75b23e","updated":"2023-08-21 11:02:56.000000000","message":"Done","commit_id":"2cfa83f799e31ad7802b6088d20401bce0808d13"}],"ironic/tests/unit/drivers/modules/inspector/hooks/test_architecture.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cd13fc3a1c070e680722b2a55659b8cfbf5272bd","unresolved":true,"context_lines":[{"line_number":33,"context_line":"        with task_manager.acquire(self.context, self.node.id) as task:"},{"line_number":34,"context_line":"            architecture_hook.ArchitectureHook().__call__(task, self.inventory,"},{"line_number":35,"context_line":"                                                          self.plugin_data)"},{"line_number":36,"context_line":"            result \u003d self.node.properties"},{"line_number":37,"context_line":"            self.assertEqual(result[\u0027cpu_arch\u0027],"},{"line_number":38,"context_line":"                             self.inventory[\u0027cpu\u0027][\u0027architecture\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"60b01000_32fe082e","line":36,"updated":"2023-08-02 12:46:02.000000000","message":"To check for missing save(), call self.node.refresh() before doing any further checks","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        with task_manager.acquire(self.context, self.node.id) as task:"},{"line_number":34,"context_line":"            architecture_hook.ArchitectureHook().__call__(task, self.inventory,"},{"line_number":35,"context_line":"                                                          self.plugin_data)"},{"line_number":36,"context_line":"            result \u003d self.node.properties"},{"line_number":37,"context_line":"            self.assertEqual(result[\u0027cpu_arch\u0027],"},{"line_number":38,"context_line":"                             self.inventory[\u0027cpu\u0027][\u0027architecture\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"2af963c7_8ec91bbb","line":36,"in_reply_to":"60b01000_32fe082e","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"e56e326584c31103556e314c96d895b7d2f01535","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        with task_manager.acquire(self.context, self.node.id) as task:"},{"line_number":34,"context_line":"            architecture_hook.ArchitectureHook().__call__(task, self.inventory,"},{"line_number":35,"context_line":"                                                          self.plugin_data)"},{"line_number":36,"context_line":"            result \u003d self.node.properties"},{"line_number":37,"context_line":"            self.assertEqual(result[\u0027cpu_arch\u0027],"},{"line_number":38,"context_line":"                             self.inventory[\u0027cpu\u0027][\u0027architecture\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"af2ac7c6_395c11fc","line":36,"in_reply_to":"60b01000_32fe082e","updated":"2023-08-04 16:11:14.000000000","message":"Done","commit_id":"864f2946dd7e8b5dec965cace198d8ad4b0cc286"}],"ironic/tests/unit/drivers/modules/inspector/hooks/test_ports.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"50d714671fef6662629ef8a45443540badf1e820","unresolved":true,"context_lines":[{"line_number":23,"context_line":"_PXE_INTERFACE \u003d \u0027aa:bb:cc:dd:ee:ff\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"_VALID \u003d {"},{"line_number":27,"context_line":"    \u0027lo\u0027: {"},{"line_number":28,"context_line":"        \u0027name\u0027: \u0027lo\u0027,"},{"line_number":29,"context_line":"        \u0027mac_address\u0027: \u002700:00:00:00:00:00\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9efd4366_ac849560","line":26,"updated":"2023-07-14 14:07:52.000000000","message":"These are duplicated between test_ports and test_validate_interfaces, please fix that (you can make on module import the other).","commit_id":"72907893ce0008b28ff2eecfd8cb6a5c1189daa7"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"87b0475b339c2a297685cda4126f802614cb314d","unresolved":false,"context_lines":[{"line_number":23,"context_line":"_PXE_INTERFACE \u003d \u0027aa:bb:cc:dd:ee:ff\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"_VALID \u003d {"},{"line_number":27,"context_line":"    \u0027lo\u0027: {"},{"line_number":28,"context_line":"        \u0027name\u0027: \u0027lo\u0027,"},{"line_number":29,"context_line":"        \u0027mac_address\u0027: \u002700:00:00:00:00:00\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"a9f24714_4af10071","line":26,"in_reply_to":"9efd4366_ac849560","updated":"2023-07-19 09:46:36.000000000","message":"Done","commit_id":"72907893ce0008b28ff2eecfd8cb6a5c1189daa7"}],"releasenotes/notes/add-inspection-hooks-06e1e15d81061c83.yaml":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"fdc03237a91842b5a092ee2b4355fb5ad9589731","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    endpoint. The four default configuration hooks ramdisk-error,"},{"line_number":7,"context_line":"    validate-interfaces, ports and architecture are added. Two new"},{"line_number":8,"context_line":"    configuration options \u0027default_hooks\u0027 and \u0027hooks\u0027 are added in the"},{"line_number":9,"context_line":"    `inspector` section to configure the inspection hooks that will be run."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":11,"id":"964078db_d3bf64af","line":9,"range":{"start_line":9,"start_character":24,"end_line":9,"end_character":75},"updated":"2023-08-25 08:06:21.000000000","message":"nit: would\u0027ve changed to \"to allow configuring respectively the default enabled hooks and optional additional hooks\"","commit_id":"a86f403d84491a44731817497f7c00a96c782e49"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"d0ef53c59a72236134e65543f943704f3d77fa54","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    endpoint. The four default configuration hooks ramdisk-error,"},{"line_number":7,"context_line":"    validate-interfaces, ports and architecture are added. Two new"},{"line_number":8,"context_line":"    configuration options \u0027default_hooks\u0027 and \u0027hooks\u0027 are added in the"},{"line_number":9,"context_line":"    `inspector` section to configure the inspection hooks that will be run."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":11,"id":"b934db63_4c9d629d","line":9,"range":{"start_line":9,"start_character":24,"end_line":9,"end_character":75},"in_reply_to":"964078db_d3bf64af","updated":"2023-08-25 11:41:06.000000000","message":"Done","commit_id":"a86f403d84491a44731817497f7c00a96c782e49"}],"setup.cfg":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d43714dfd63931a25a095a4ca5c4cafa045eb62a","unresolved":true,"context_lines":[{"line_number":191,"context_line":"ironic.database.migration_backend \u003d"},{"line_number":192,"context_line":"    sqlalchemy \u003d ironic.db.sqlalchemy.migration"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"[inspector]"},{"line_number":195,"context_line":"default_hooks \u003d ironic.drivers.modules.inspector.inspection_hooks.ramdisk_error:RamdiskErrorHook"},{"line_number":196,"context_line":"hooks \u003d $default_hooks"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-ttcn-cfg","patch_set":1,"id":"e3cdbb28_644dc6d5","line":194,"updated":"2023-07-05 08:52:25.000000000","message":"setup.cfg is not where operator-facing configuration is defined. Configuration here is for the build process. You need to update https://opendev.org/openstack/ironic/src/branch/master/ironic/conf/inspector.py","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"99325987b900b54770907f43fd7859dff56e3ea5","unresolved":false,"context_lines":[{"line_number":191,"context_line":"ironic.database.migration_backend \u003d"},{"line_number":192,"context_line":"    sqlalchemy \u003d ironic.db.sqlalchemy.migration"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"[inspector]"},{"line_number":195,"context_line":"default_hooks \u003d ironic.drivers.modules.inspector.inspection_hooks.ramdisk_error:RamdiskErrorHook"},{"line_number":196,"context_line":"hooks \u003d $default_hooks"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-ttcn-cfg","patch_set":1,"id":"7dc84b69_bacbf31c","line":194,"in_reply_to":"e3cdbb28_644dc6d5","updated":"2023-07-05 16:23:06.000000000","message":"I see! Removing the changes from here. (ironic/conf/inspector.py already updated).","commit_id":"923b3cad42ef324653eb2fac86cdee36da0ba3d9"}]}
