)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a704fb37b6a2865a62189d6b33db7494906a33e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"8070848a_48546a03","updated":"2023-08-31 21:06:45.000000000","message":"Comments in line. Rebase also required.","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"7e394e83976bd7fac16ef0be453d15505e7368aa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3d61bc79_c52fb718","updated":"2023-08-28 20:48:14.000000000","message":"Please fix noted issue on next patchset or in followup.","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"1161cf4454c758930adc98057e281a0b6dc56df6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f623a134_005fd957","updated":"2023-09-15 02:53:43.000000000","message":"Good news and bad news, update of firmware works (downgrade and upgrade) but the clean step is reach clean failed https://paste.opendev.org/show/bhGNkcKx8vqteeVq2awC/ if anyone has ideas on how I can solve this, I would appreciate. (Ironic will keep the node in clean failed, but if you check the firmware on it it has the new version the user requested)","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":22271,"name":"paresh","email":"paresh.sao@hpe.com","username":"kesper"},"change_message_id":"c274d1bd7cff82973fed536ed4c14fb1f235c54f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"284e22fd_30323103","updated":"2023-09-15 13:32:52.000000000","message":"ilorecheck","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4321b7a6720cf33a1f51687e1a1259161585517d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"9424018a_26dc665e","updated":"2023-09-20 18:19:11.000000000","message":"Okay, I missed one thing, make that three. Given the amount of testing, I think it is fine to land this as-is, but I\u0027d like to see some additional unit testing sorted along with the docs in relative short order.","commit_id":"4eb0dbf7b5cd5af8b97c4b02c54a6f58f8da704a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6a83750966a0d8c0495b9ac57279758f6f1a2e49","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"0abe0c18_3f449a1c","updated":"2023-09-20 18:17:06.000000000","message":"Overall, LGTM. Two items, easy to fix after the release.","commit_id":"4eb0dbf7b5cd5af8b97c4b02c54a6f58f8da704a"}],"ironic/conductor/steps.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a704fb37b6a2865a62189d6b33db7494906a33e","unresolved":true,"context_lines":[{"line_number":26,"context_line":"CONF \u003d cfg.CONF"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"CLEANING_INTERFACE_PRIORITY \u003d {"},{"line_number":30,"context_line":"    # When two clean steps have the same priority, their order is determined"},{"line_number":31,"context_line":"    # by which interface is implementing the clean step. The clean step of the"},{"line_number":32,"context_line":"    # interface with the highest value here, will be executed first in that"}],"source_content_type":"text/x-python","patch_set":3,"id":"ab331982_1b8ff913","line":29,"updated":"2023-08-31 21:06:45.000000000","message":"When rebasing, we should make sure firmware is in the list for deploying interface priority *and* servicing.","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"4aa75cf9c6c7916b47b4f90cd758ae8aa15fba2a","unresolved":false,"context_lines":[{"line_number":26,"context_line":"CONF \u003d cfg.CONF"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"CLEANING_INTERFACE_PRIORITY \u003d {"},{"line_number":30,"context_line":"    # When two clean steps have the same priority, their order is determined"},{"line_number":31,"context_line":"    # by which interface is implementing the clean step. The clean step of the"},{"line_number":32,"context_line":"    # interface with the highest value here, will be executed first in that"}],"source_content_type":"text/x-python","patch_set":3,"id":"4d5cacb6_48057351","line":29,"in_reply_to":"ab331982_1b8ff913","updated":"2023-08-31 21:49:13.000000000","message":"Now I understood after I saw your comment about using deploy and servicing in the other file.","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"eca45742ae1e1f5a59cda7287625e9c5bb014b79","unresolved":true,"context_lines":[{"line_number":50,"context_line":"    \u0027vendor\u0027: 6,"},{"line_number":51,"context_line":"    \u0027power\u0027: 5,"},{"line_number":52,"context_line":"    \u0027management\u0027: 4,"},{"line_number":53,"context_line":"    \u0027deploy\u0027: 3,"},{"line_number":54,"context_line":"    \u0027bios\u0027: 2,"},{"line_number":55,"context_line":"    \u0027raid\u0027: 1,"},{"line_number":56,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":6,"id":"67bdc193_21b741e9","line":53,"updated":"2023-09-19 22:38:25.000000000","message":"You ought to add firmware to this list too.","commit_id":"b96505ebba5695fb2df1aee28b259b600163d1da"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"34a39817d6ed0cf6051314836a4c7a0c23e7c518","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    \u0027vendor\u0027: 6,"},{"line_number":51,"context_line":"    \u0027power\u0027: 5,"},{"line_number":52,"context_line":"    \u0027management\u0027: 4,"},{"line_number":53,"context_line":"    \u0027deploy\u0027: 3,"},{"line_number":54,"context_line":"    \u0027bios\u0027: 2,"},{"line_number":55,"context_line":"    \u0027raid\u0027: 1,"},{"line_number":56,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":6,"id":"114174da_8d3eb36f","line":53,"in_reply_to":"67bdc193_21b741e9","updated":"2023-09-19 22:45:51.000000000","message":"oh right! good catch!","commit_id":"b96505ebba5695fb2df1aee28b259b600163d1da"}],"ironic/conductor/utils.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a704fb37b6a2865a62189d6b33db7494906a33e","unresolved":true,"context_lines":[{"line_number":1747,"context_line":"                    \u0027however we were unable to do so. Possible older API?\u0027)"},{"line_number":1748,"context_line":""},{"line_number":1749,"context_line":""},{"line_number":1750,"context_line":"def node_cache_firmware_components(task, node):"},{"line_number":1751,"context_line":"    \"\"\"Do caching of firmware components if supported by driver\"\"\""},{"line_number":1752,"context_line":"    try:"},{"line_number":1753,"context_line":"        LOG.debug(\u0027Getting Firmware Components for node %s\u0027, node.uuid)"}],"source_content_type":"text/x-python","patch_set":3,"id":"67aec385_eda466f2","line":1750,"range":{"start_line":1750,"start_character":34,"end_line":1750,"end_character":46},"updated":"2023-08-31 21:06:45.000000000","message":"crazy question, why are we carrying both task and node?\n\nwe could just:\n\nnode \u003d task.node or node_id \u003d task.node.uuid and take care of the node references elsewhere.","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"4aa75cf9c6c7916b47b4f90cd758ae8aa15fba2a","unresolved":false,"context_lines":[{"line_number":1747,"context_line":"                    \u0027however we were unable to do so. Possible older API?\u0027)"},{"line_number":1748,"context_line":""},{"line_number":1749,"context_line":""},{"line_number":1750,"context_line":"def node_cache_firmware_components(task, node):"},{"line_number":1751,"context_line":"    \"\"\"Do caching of firmware components if supported by driver\"\"\""},{"line_number":1752,"context_line":"    try:"},{"line_number":1753,"context_line":"        LOG.debug(\u0027Getting Firmware Components for node %s\u0027, node.uuid)"}],"source_content_type":"text/x-python","patch_set":3,"id":"baedfce6_4ba1674e","line":1750,"range":{"start_line":1750,"start_character":34,"end_line":1750,"end_character":46},"in_reply_to":"67aec385_eda466f2","updated":"2023-08-31 21:49:13.000000000","message":"Not a crazy question at all, since I was following how we did things for Bios I\u0027ve ended up following the same pattern, and yeah we don\u0027t need both.","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"4aa75cf9c6c7916b47b4f90cd758ae8aa15fba2a","unresolved":true,"context_lines":[{"line_number":1747,"context_line":"                    \u0027however we were unable to do so. Possible older API?\u0027)"},{"line_number":1748,"context_line":""},{"line_number":1749,"context_line":""},{"line_number":1750,"context_line":"def node_cache_firmware_components(task, node):"},{"line_number":1751,"context_line":"    \"\"\"Do caching of firmware components if supported by driver\"\"\""},{"line_number":1752,"context_line":"    try:"},{"line_number":1753,"context_line":"        LOG.debug(\u0027Getting Firmware Components for node %s\u0027, node.uuid)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9c80fa76_2fc00db9","line":1750,"range":{"start_line":1750,"start_character":34,"end_line":1750,"end_character":46},"in_reply_to":"67aec385_eda466f2","updated":"2023-08-31 21:49:13.000000000","message":"Note a crazy","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a704fb37b6a2865a62189d6b33db7494906a33e","unresolved":true,"context_lines":[{"line_number":1755,"context_line":"    except exception.UnsupportedDriverExtension:"},{"line_number":1756,"context_line":"        LOG.warning(\u0027Firmware Components are not supported for node %s, \u0027"},{"line_number":1757,"context_line":"                    \u0027skipping\u0027, node.uuid)"},{"line_number":1758,"context_line":"    # TODO(zshi) remove this check when classic drivers are removed"},{"line_number":1759,"context_line":"    except Exception:"},{"line_number":1760,"context_line":"        msg \u003d (_(\u0027Caching of Firmware Components failed on node %(node)s.\u0027)"},{"line_number":1761,"context_line":"               % {\u0027node\u0027: node.uuid})"}],"source_content_type":"text/x-python","patch_set":3,"id":"e09f79da_18d420c2","line":1758,"updated":"2023-08-31 21:06:45.000000000","message":"This TODO doesn\u0027t make sense because you\u0027ll always have cases where drivers might not support the extension.","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"4aa75cf9c6c7916b47b4f90cd758ae8aa15fba2a","unresolved":false,"context_lines":[{"line_number":1755,"context_line":"    except exception.UnsupportedDriverExtension:"},{"line_number":1756,"context_line":"        LOG.warning(\u0027Firmware Components are not supported for node %s, \u0027"},{"line_number":1757,"context_line":"                    \u0027skipping\u0027, node.uuid)"},{"line_number":1758,"context_line":"    # TODO(zshi) remove this check when classic drivers are removed"},{"line_number":1759,"context_line":"    except Exception:"},{"line_number":1760,"context_line":"        msg \u003d (_(\u0027Caching of Firmware Components failed on node %(node)s.\u0027)"},{"line_number":1761,"context_line":"               % {\u0027node\u0027: node.uuid})"}],"source_content_type":"text/x-python","patch_set":3,"id":"3468280f_b155d30d","line":1758,"in_reply_to":"e09f79da_18d420c2","updated":"2023-08-31 21:49:13.000000000","message":"Done","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"12aa387f158de5765595570659f318203bb080bb","unresolved":false,"context_lines":[{"line_number":1830,"context_line":"        task.process_event(\u0027fail\u0027)"},{"line_number":1831,"context_line":""},{"line_number":1832,"context_line":""},{"line_number":1833,"context_line":"def node_cache_firmware_components(task):"},{"line_number":1834,"context_line":"    \"\"\"Do caching of firmware components if supported by driver\"\"\""},{"line_number":1835,"context_line":"    try:"},{"line_number":1836,"context_line":"        LOG.debug(\u0027Getting Firmware Components for node %s\u0027, task.node.uuid)"}],"source_content_type":"text/x-python","patch_set":4,"id":"70cd176e_0265ddcf","line":1833,"updated":"2023-09-15 09:08:33.000000000","message":"Side thought: we should stop this file from growing...","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"d305987ba7c8da44420b21fc70c5c71fb81e090b","unresolved":false,"context_lines":[{"line_number":1830,"context_line":"        task.process_event(\u0027fail\u0027)"},{"line_number":1831,"context_line":""},{"line_number":1832,"context_line":""},{"line_number":1833,"context_line":"def node_cache_firmware_components(task):"},{"line_number":1834,"context_line":"    \"\"\"Do caching of firmware components if supported by driver\"\"\""},{"line_number":1835,"context_line":"    try:"},{"line_number":1836,"context_line":"        LOG.debug(\u0027Getting Firmware Components for node %s\u0027, task.node.uuid)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f70c67d_2e6d8e21","line":1833,"in_reply_to":"70cd176e_0265ddcf","updated":"2023-09-18 21:52:14.000000000","message":"yeah, in this point I agree","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"12aa387f158de5765595570659f318203bb080bb","unresolved":false,"context_lines":[{"line_number":1833,"context_line":"def node_cache_firmware_components(task):"},{"line_number":1834,"context_line":"    \"\"\"Do caching of firmware components if supported by driver\"\"\""},{"line_number":1835,"context_line":"    try:"},{"line_number":1836,"context_line":"        LOG.debug(\u0027Getting Firmware Components for node %s\u0027, task.node.uuid)"},{"line_number":1837,"context_line":"        task.driver.firmware.cache_firmware_components(task)"},{"line_number":1838,"context_line":"    except exception.UnsupportedDriverExtension:"},{"line_number":1839,"context_line":"        LOG.warning(\u0027Firmware Components are not supported for node %s, \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab440e8_0efb0b1b","line":1836,"updated":"2023-09-15 09:08:33.000000000","message":"Shouldn\u0027t we call task.driver.firmware.validate first?","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"d305987ba7c8da44420b21fc70c5c71fb81e090b","unresolved":false,"context_lines":[{"line_number":1833,"context_line":"def node_cache_firmware_components(task):"},{"line_number":1834,"context_line":"    \"\"\"Do caching of firmware components if supported by driver\"\"\""},{"line_number":1835,"context_line":"    try:"},{"line_number":1836,"context_line":"        LOG.debug(\u0027Getting Firmware Components for node %s\u0027, task.node.uuid)"},{"line_number":1837,"context_line":"        task.driver.firmware.cache_firmware_components(task)"},{"line_number":1838,"context_line":"    except exception.UnsupportedDriverExtension:"},{"line_number":1839,"context_line":"        LOG.warning(\u0027Firmware Components are not supported for node %s, \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"6412d0ba_3b055615","line":1836,"in_reply_to":"bab440e8_0efb0b1b","updated":"2023-09-18 21:52:14.000000000","message":"I was thinking about this,","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"12aa387f158de5765595570659f318203bb080bb","unresolved":false,"context_lines":[{"line_number":1841,"context_line":"    # TODO(zshi) remove this check when classic drivers are removed"},{"line_number":1842,"context_line":"    except Exception:"},{"line_number":1843,"context_line":"        msg \u003d (_(\u0027Caching of Firmware Components failed on node %(node)s.\u0027)"},{"line_number":1844,"context_line":"               % {\u0027node\u0027: task.node.uuid})"},{"line_number":1845,"context_line":"        LOG.exception(msg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bace11e6_27d3aec1","line":1844,"updated":"2023-09-15 09:08:33.000000000","message":"nit: no need to translation logging messages","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"12aa387f158de5765595570659f318203bb080bb","unresolved":false,"context_lines":[{"line_number":1842,"context_line":"    except Exception:"},{"line_number":1843,"context_line":"        msg \u003d (_(\u0027Caching of Firmware Components failed on node %(node)s.\u0027)"},{"line_number":1844,"context_line":"               % {\u0027node\u0027: task.node.uuid})"},{"line_number":1845,"context_line":"        LOG.exception(msg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa9b5f6_36be9784","line":1845,"updated":"2023-09-15 09:08:33.000000000","message":"nit: don\u0027t pre-format the string, pass the template and the dict as two arguments","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"}],"ironic/drivers/modules/fake.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"7e394e83976bd7fac16ef0be453d15505e7368aa","unresolved":true,"context_lines":[{"line_number":473,"context_line":"                     \u0027required\u0027: True}})"},{"line_number":474,"context_line":"    def update(self, task, settings):"},{"line_number":475,"context_line":"        LOG.debug(\u0027Calling update clean step with settings %s.\u0027,"},{"line_number":476,"context_line":"                  str(settings))"},{"line_number":477,"context_line":"        sleep(CONF.fake.firmware_delay)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def cache_firmware_components(self, task):"}],"source_content_type":"text/x-python","patch_set":3,"id":"6e71a52a_d2bc399c","line":476,"updated":"2023-08-28 20:48:14.000000000","message":"The %s will call the str() for you. This is a performance hit, because we call str(settings) in this config unconditionally, whereas if you exclude it we will only call str(settings) if debug-level logging is enabled.","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a704fb37b6a2865a62189d6b33db7494906a33e","unresolved":true,"context_lines":[{"line_number":473,"context_line":"                     \u0027required\u0027: True}})"},{"line_number":474,"context_line":"    def update(self, task, settings):"},{"line_number":475,"context_line":"        LOG.debug(\u0027Calling update clean step with settings %s.\u0027,"},{"line_number":476,"context_line":"                  str(settings))"},{"line_number":477,"context_line":"        sleep(CONF.fake.firmware_delay)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def cache_firmware_components(self, task):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ca6f2ad5_48e907e0","line":476,"in_reply_to":"6e71a52a_d2bc399c","updated":"2023-08-31 21:06:45.000000000","message":"++","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"4aa75cf9c6c7916b47b4f90cd758ae8aa15fba2a","unresolved":false,"context_lines":[{"line_number":473,"context_line":"                     \u0027required\u0027: True}})"},{"line_number":474,"context_line":"    def update(self, task, settings):"},{"line_number":475,"context_line":"        LOG.debug(\u0027Calling update clean step with settings %s.\u0027,"},{"line_number":476,"context_line":"                  str(settings))"},{"line_number":477,"context_line":"        sleep(CONF.fake.firmware_delay)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def cache_firmware_components(self, task):"}],"source_content_type":"text/x-python","patch_set":3,"id":"32f67258_c7de27b1","line":476,"in_reply_to":"ca6f2ad5_48e907e0","updated":"2023-08-31 21:49:13.000000000","message":"Ack","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"}],"ironic/drivers/modules/redfish/firmware.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"8e731593c72c48e124e186ec00c89e96eaee98a3","unresolved":true,"context_lines":[{"line_number":71,"context_line":"        \"\"\""},{"line_number":72,"context_line":"        redfish_utils.parse_driver_info(task.node)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def cache_firmware_components(self, task):"},{"line_number":75,"context_line":"        \"\"\"Store or update Firmware Components on the given node."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        This method stores Firmware Components to the firmware_information"}],"source_content_type":"text/x-python","patch_set":2,"id":"4f00b556_8ff33120","line":74,"updated":"2023-07-14 08:38:26.000000000","message":"Operators should be enabled to run this as a step too, so they can fetch the firmware version for later automation to use, even if they may not desire to update it (is there another way to do this?)","commit_id":"7fe7e53e49e69b35d44af90b8a526e1c7dde44dd"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"fe21724022693911285f97a58061171d745eb26b","unresolved":true,"context_lines":[{"line_number":71,"context_line":"        \"\"\""},{"line_number":72,"context_line":"        redfish_utils.parse_driver_info(task.node)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def cache_firmware_components(self, task):"},{"line_number":75,"context_line":"        \"\"\"Store or update Firmware Components on the given node."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        This method stores Firmware Components to the firmware_information"}],"source_content_type":"text/x-python","patch_set":2,"id":"a1fe324b_170267af","line":74,"in_reply_to":"4f00b556_8ff33120","updated":"2023-07-17 13:30:36.000000000","message":"hummm I wasn\u0027t thinking about this use case, but i do think it makes sense to allow operators to fetch the current information (in case something changed we would update the information in the DB), maybe we can have another step in the interface that would allow this workflow, wdyt?","commit_id":"7fe7e53e49e69b35d44af90b8a526e1c7dde44dd"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"e7320280ef7b34cc3ca4a95cdf1cdcd44b4d1ab8","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        \"\"\""},{"line_number":72,"context_line":"        redfish_utils.parse_driver_info(task.node)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def cache_firmware_components(self, task):"},{"line_number":75,"context_line":"        \"\"\"Store or update Firmware Components on the given node."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        This method stores Firmware Components to the firmware_information"}],"source_content_type":"text/x-python","patch_set":2,"id":"65729866_35c35841","line":74,"in_reply_to":"a1fe324b_170267af","updated":"2023-09-15 02:49:33.000000000","message":"Done","commit_id":"7fe7e53e49e69b35d44af90b8a526e1c7dde44dd"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a704fb37b6a2865a62189d6b33db7494906a33e","unresolved":true,"context_lines":[{"line_number":126,"context_line":"                    task.context, up_fw)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    @METRICS.timer(\u0027RedfishFirmware.update\u0027)"},{"line_number":129,"context_line":"    @base.clean_step(priority\u003d0, abortable\u003dFalse,"},{"line_number":130,"context_line":"                     argsinfo\u003d_FW_SETTINGS_ARGSINFO,"},{"line_number":131,"context_line":"                     requires_ramdisk\u003dTrue)"},{"line_number":132,"context_line":"    @base.cache_firmware_components"}],"source_content_type":"text/x-python","patch_set":3,"id":"810b63ec_33e547ef","line":129,"updated":"2023-08-31 21:06:45.000000000","message":"You can also decorate this with service steps, and I feel like deploy steps for on-deploy firmware updates.","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"4aa75cf9c6c7916b47b4f90cd758ae8aa15fba2a","unresolved":true,"context_lines":[{"line_number":126,"context_line":"                    task.context, up_fw)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    @METRICS.timer(\u0027RedfishFirmware.update\u0027)"},{"line_number":129,"context_line":"    @base.clean_step(priority\u003d0, abortable\u003dFalse,"},{"line_number":130,"context_line":"                     argsinfo\u003d_FW_SETTINGS_ARGSINFO,"},{"line_number":131,"context_line":"                     requires_ramdisk\u003dTrue)"},{"line_number":132,"context_line":"    @base.cache_firmware_components"}],"source_content_type":"text/x-python","patch_set":3,"id":"bb8145a3_267eb7dd","line":129,"in_reply_to":"810b63ec_33e547ef","updated":"2023-08-31 21:49:13.000000000","message":"Oh, ok! Maybe adding as service and deploy could done later (as new feature?) so we don\u0027t expand the complexit? or Am I thinking too much?","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"e7320280ef7b34cc3ca4a95cdf1cdcd44b4d1ab8","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                    task.context, up_fw)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    @METRICS.timer(\u0027RedfishFirmware.update\u0027)"},{"line_number":129,"context_line":"    @base.clean_step(priority\u003d0, abortable\u003dFalse,"},{"line_number":130,"context_line":"                     argsinfo\u003d_FW_SETTINGS_ARGSINFO,"},{"line_number":131,"context_line":"                     requires_ramdisk\u003dTrue)"},{"line_number":132,"context_line":"    @base.cache_firmware_components"}],"source_content_type":"text/x-python","patch_set":3,"id":"9db7a595_44e29500","line":129,"in_reply_to":"bb8145a3_267eb7dd","updated":"2023-09-15 02:49:33.000000000","message":"Done","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a704fb37b6a2865a62189d6b33db7494906a33e","unresolved":true,"context_lines":[{"line_number":205,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":206,"context_line":"        :param update_service: the sushy firmware update service"},{"line_number":207,"context_line":"        :param settings: the remaining firmware updates to apply"},{"line_number":208,"context_line":"        \"\"\""},{"line_number":209,"context_line":"        node \u003d task.node"},{"line_number":210,"context_line":"        fw_upd \u003d settings[0]"},{"line_number":211,"context_line":"        wait_interval \u003d fw_upd.get(\u0027wait\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"2328d79e_d48484f2","line":208,"updated":"2023-08-31 21:06:45.000000000","message":"In regards to some of the later mentioned task.upgrade_lock() placements, you might want to consider doing it in this method directly since you invoke the lock in three places and then call this method. Just a simplification.","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"e7320280ef7b34cc3ca4a95cdf1cdcd44b4d1ab8","unresolved":true,"context_lines":[{"line_number":205,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":206,"context_line":"        :param update_service: the sushy firmware update service"},{"line_number":207,"context_line":"        :param settings: the remaining firmware updates to apply"},{"line_number":208,"context_line":"        \"\"\""},{"line_number":209,"context_line":"        node \u003d task.node"},{"line_number":210,"context_line":"        fw_upd \u003d settings[0]"},{"line_number":211,"context_line":"        wait_interval \u003d fw_upd.get(\u0027wait\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fe895d05_ea2cfaa6","line":208,"in_reply_to":"2328d79e_d48484f2","updated":"2023-09-15 02:49:33.000000000","message":"will update this in a later patch","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"f2be898bc67cf62baf1027cdf1f6060ea351421d","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":206,"context_line":"        :param update_service: the sushy firmware update service"},{"line_number":207,"context_line":"        :param settings: the remaining firmware updates to apply"},{"line_number":208,"context_line":"        \"\"\""},{"line_number":209,"context_line":"        node \u003d task.node"},{"line_number":210,"context_line":"        fw_upd \u003d settings[0]"},{"line_number":211,"context_line":"        wait_interval \u003d fw_upd.get(\u0027wait\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ae0c76d3_601e9a8a","line":208,"in_reply_to":"fe895d05_ea2cfaa6","updated":"2023-09-19 19:37:05.000000000","message":"Done","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a704fb37b6a2865a62189d6b33db7494906a33e","unresolved":true,"context_lines":[{"line_number":260,"context_line":"    @periodics.node_periodic("},{"line_number":261,"context_line":"        purpose\u003d\u0027checking if async update of firmware component failed\u0027,"},{"line_number":262,"context_line":"        spacing\u003dCONF.redfish.firmware_update_fail_interval,"},{"line_number":263,"context_line":"        filters\u003d{\u0027reserved\u0027: False, \u0027provision_state\u0027: states.CLEANFAIL,"},{"line_number":264,"context_line":"                 \u0027maintenance\u0027: True},"},{"line_number":265,"context_line":"        predicate_extra_fields\u003d[\u0027driver_internal_info\u0027],"},{"line_number":266,"context_line":"        predicate\u003dlambda n: n.driver_internal_info.get(\u0027firmware_updates\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"96864820_99512c2d","line":263,"range":{"start_line":263,"start_character":56,"end_line":263,"end_character":72},"updated":"2023-08-31 21:06:45.000000000","message":"Interesting, we likely need to make this a list of possible states for deploy steps or service for this to be picked up as a state/condition.","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"e7320280ef7b34cc3ca4a95cdf1cdcd44b4d1ab8","unresolved":false,"context_lines":[{"line_number":260,"context_line":"    @periodics.node_periodic("},{"line_number":261,"context_line":"        purpose\u003d\u0027checking if async update of firmware component failed\u0027,"},{"line_number":262,"context_line":"        spacing\u003dCONF.redfish.firmware_update_fail_interval,"},{"line_number":263,"context_line":"        filters\u003d{\u0027reserved\u0027: False, \u0027provision_state\u0027: states.CLEANFAIL,"},{"line_number":264,"context_line":"                 \u0027maintenance\u0027: True},"},{"line_number":265,"context_line":"        predicate_extra_fields\u003d[\u0027driver_internal_info\u0027],"},{"line_number":266,"context_line":"        predicate\u003dlambda n: n.driver_internal_info.get(\u0027firmware_updates\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"65a654aa_273e13ad","line":263,"range":{"start_line":263,"start_character":56,"end_line":263,"end_character":72},"in_reply_to":"2da0ab62_db443c9e","updated":"2023-09-15 02:49:33.000000000","message":"Done","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"4aa75cf9c6c7916b47b4f90cd758ae8aa15fba2a","unresolved":true,"context_lines":[{"line_number":260,"context_line":"    @periodics.node_periodic("},{"line_number":261,"context_line":"        purpose\u003d\u0027checking if async update of firmware component failed\u0027,"},{"line_number":262,"context_line":"        spacing\u003dCONF.redfish.firmware_update_fail_interval,"},{"line_number":263,"context_line":"        filters\u003d{\u0027reserved\u0027: False, \u0027provision_state\u0027: states.CLEANFAIL,"},{"line_number":264,"context_line":"                 \u0027maintenance\u0027: True},"},{"line_number":265,"context_line":"        predicate_extra_fields\u003d[\u0027driver_internal_info\u0027],"},{"line_number":266,"context_line":"        predicate\u003dlambda n: n.driver_internal_info.get(\u0027firmware_updates\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"2da0ab62_db443c9e","line":263,"range":{"start_line":263,"start_character":56,"end_line":263,"end_character":72},"in_reply_to":"96864820_99512c2d","updated":"2023-08-31 21:49:13.000000000","message":"++","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a704fb37b6a2865a62189d6b33db7494906a33e","unresolved":true,"context_lines":[{"line_number":275,"context_line":"                    \u0027Discarding remaining firmware updates.\u0027,"},{"line_number":276,"context_line":"                    {\u0027node\u0027: task.node.uuid})"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        task.upgrade_lock()"},{"line_number":279,"context_line":"        self._clear_update(task.node)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    @METRICS.timer(\u0027RedfishFirmware._query_update_status\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"053b437b_61d74ca9","line":278,"updated":"2023-08-31 21:06:45.000000000","message":"Just FYI, your aware upgrade_lock is blocking until it succeeds right?","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"4aa75cf9c6c7916b47b4f90cd758ae8aa15fba2a","unresolved":true,"context_lines":[{"line_number":275,"context_line":"                    \u0027Discarding remaining firmware updates.\u0027,"},{"line_number":276,"context_line":"                    {\u0027node\u0027: task.node.uuid})"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        task.upgrade_lock()"},{"line_number":279,"context_line":"        self._clear_update(task.node)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    @METRICS.timer(\u0027RedfishFirmware._query_update_status\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"55871b62_f175ae95","line":278,"in_reply_to":"053b437b_61d74ca9","updated":"2023-08-31 21:49:13.000000000","message":"or till it fails right?","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"e7320280ef7b34cc3ca4a95cdf1cdcd44b4d1ab8","unresolved":false,"context_lines":[{"line_number":275,"context_line":"                    \u0027Discarding remaining firmware updates.\u0027,"},{"line_number":276,"context_line":"                    {\u0027node\u0027: task.node.uuid})"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        task.upgrade_lock()"},{"line_number":279,"context_line":"        self._clear_update(task.node)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    @METRICS.timer(\u0027RedfishFirmware._query_update_status\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7bc6dae0_ae282fa7","line":278,"in_reply_to":"55871b62_f175ae95","updated":"2023-09-15 02:49:33.000000000","message":"Done","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a704fb37b6a2865a62189d6b33db7494906a33e","unresolved":true,"context_lines":[{"line_number":281,"context_line":"    @METRICS.timer(\u0027RedfishFirmware._query_update_status\u0027)"},{"line_number":282,"context_line":"    @periodics.node_periodic("},{"line_number":283,"context_line":"        purpose\u003d\u0027checking if async update of firmware component\u0027,"},{"line_number":284,"context_line":"        spacing\u003dCONF.redfish.firmware_update_fail_interval,"},{"line_number":285,"context_line":"        filters\u003d{\u0027reserved\u0027: False, \u0027provision_state\u0027: states.CLEANWAIT,"},{"line_number":286,"context_line":"                 \u0027maintenance\u0027: True},"},{"line_number":287,"context_line":"        predicate_extra_fields\u003d[\u0027driver_internal_info\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"8d68605b_ee8ee2fe","line":284,"range":{"start_line":284,"start_character":29,"end_line":284,"end_character":58},"updated":"2023-08-31 21:06:45.000000000","message":"shouldn\u0027t this have it\u0027s own name?","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"4aa75cf9c6c7916b47b4f90cd758ae8aa15fba2a","unresolved":true,"context_lines":[{"line_number":281,"context_line":"    @METRICS.timer(\u0027RedfishFirmware._query_update_status\u0027)"},{"line_number":282,"context_line":"    @periodics.node_periodic("},{"line_number":283,"context_line":"        purpose\u003d\u0027checking if async update of firmware component\u0027,"},{"line_number":284,"context_line":"        spacing\u003dCONF.redfish.firmware_update_fail_interval,"},{"line_number":285,"context_line":"        filters\u003d{\u0027reserved\u0027: False, \u0027provision_state\u0027: states.CLEANWAIT,"},{"line_number":286,"context_line":"                 \u0027maintenance\u0027: True},"},{"line_number":287,"context_line":"        predicate_extra_fields\u003d[\u0027driver_internal_info\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"783c7b72_8a4d2771","line":284,"range":{"start_line":284,"start_character":29,"end_line":284,"end_character":58},"in_reply_to":"8d68605b_ee8ee2fe","updated":"2023-08-31 21:49:13.000000000","message":"I was thinking about re-using the config we have for `update_firmware`","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a704fb37b6a2865a62189d6b33db7494906a33e","unresolved":true,"context_lines":[{"line_number":283,"context_line":"        purpose\u003d\u0027checking if async update of firmware component\u0027,"},{"line_number":284,"context_line":"        spacing\u003dCONF.redfish.firmware_update_fail_interval,"},{"line_number":285,"context_line":"        filters\u003d{\u0027reserved\u0027: False, \u0027provision_state\u0027: states.CLEANWAIT,"},{"line_number":286,"context_line":"                 \u0027maintenance\u0027: True},"},{"line_number":287,"context_line":"        predicate_extra_fields\u003d[\u0027driver_internal_info\u0027],"},{"line_number":288,"context_line":"        predicate\u003dlambda n: n.driver_internal_info.get(\u0027firmware_updates\u0027),"},{"line_number":289,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":3,"id":"2d150fed_4ecf11cf","line":286,"updated":"2023-08-31 21:06:45.000000000","message":"If this is status for working async updates, shouldn\u0027t this be False?","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"4aa75cf9c6c7916b47b4f90cd758ae8aa15fba2a","unresolved":true,"context_lines":[{"line_number":283,"context_line":"        purpose\u003d\u0027checking if async update of firmware component\u0027,"},{"line_number":284,"context_line":"        spacing\u003dCONF.redfish.firmware_update_fail_interval,"},{"line_number":285,"context_line":"        filters\u003d{\u0027reserved\u0027: False, \u0027provision_state\u0027: states.CLEANWAIT,"},{"line_number":286,"context_line":"                 \u0027maintenance\u0027: True},"},{"line_number":287,"context_line":"        predicate_extra_fields\u003d[\u0027driver_internal_info\u0027],"},{"line_number":288,"context_line":"        predicate\u003dlambda n: n.driver_internal_info.get(\u0027firmware_updates\u0027),"},{"line_number":289,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":3,"id":"710db72d_881de76d","line":286,"in_reply_to":"2d150fed_4ecf11cf","updated":"2023-08-31 21:49:13.000000000","message":"good catch","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"e7320280ef7b34cc3ca4a95cdf1cdcd44b4d1ab8","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        purpose\u003d\u0027checking if async update of firmware component\u0027,"},{"line_number":284,"context_line":"        spacing\u003dCONF.redfish.firmware_update_fail_interval,"},{"line_number":285,"context_line":"        filters\u003d{\u0027reserved\u0027: False, \u0027provision_state\u0027: states.CLEANWAIT,"},{"line_number":286,"context_line":"                 \u0027maintenance\u0027: True},"},{"line_number":287,"context_line":"        predicate_extra_fields\u003d[\u0027driver_internal_info\u0027],"},{"line_number":288,"context_line":"        predicate\u003dlambda n: n.driver_internal_info.get(\u0027firmware_updates\u0027),"},{"line_number":289,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":3,"id":"6ebfbce8_21285117","line":286,"in_reply_to":"710db72d_881de76d","updated":"2023-09-15 02:49:33.000000000","message":"Done","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a704fb37b6a2865a62189d6b33db7494906a33e","unresolved":true,"context_lines":[{"line_number":365,"context_line":"                sushy_task.parse_messages()"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"            messages \u003d [m.message for m in sushy_task.messages]"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"            if (sushy_task.task_state \u003d\u003d sushy.TASK_STATE_COMPLETED"},{"line_number":370,"context_line":"                    and sushy_task.task_status in"},{"line_number":371,"context_line":"                    [sushy.HEALTH_OK, sushy.HEALTH_WARNING]):"}],"source_content_type":"text/x-python","patch_set":3,"id":"23bae102_22851248","line":368,"updated":"2023-08-31 21:06:45.000000000","message":"I\u0027d upgrade the lock here, since it looks like the only path forward involves it, instead of twice down below in each possible path.","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"f2be898bc67cf62baf1027cdf1f6060ea351421d","unresolved":false,"context_lines":[{"line_number":365,"context_line":"                sushy_task.parse_messages()"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"            messages \u003d [m.message for m in sushy_task.messages]"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"            if (sushy_task.task_state \u003d\u003d sushy.TASK_STATE_COMPLETED"},{"line_number":370,"context_line":"                    and sushy_task.task_status in"},{"line_number":371,"context_line":"                    [sushy.HEALTH_OK, sushy.HEALTH_WARNING]):"}],"source_content_type":"text/x-python","patch_set":3,"id":"26606458_8d536f06","line":368,"in_reply_to":"23bae102_22851248","updated":"2023-09-19 19:37:05.000000000","message":"Done","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"12aa387f158de5765595570659f318203bb080bb","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def __init__(self):"},{"line_number":52,"context_line":"        super(RedfishFirmware, self).__init__()"},{"line_number":53,"context_line":"        if sushy is None:"},{"line_number":54,"context_line":"            raise exception.DriverLoadError("},{"line_number":55,"context_line":"                driver\u003d\u0027redfish\u0027,"},{"line_number":56,"context_line":"                reason\u003d_(\"Unable to import the sushy library\"))"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ad1aad9_ef246d02","line":53,"updated":"2023-09-15 09:08:33.000000000","message":"Side note: this cannot be true any more: sushy is a requirement","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"12aa387f158de5765595570659f318203bb080bb","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                bmc_fw \u003d {\u0027component\u0027: \u0027bmc\u0027,"},{"line_number":107,"context_line":"                          \u0027current_version\u0027: manager.firmware_version}"},{"line_number":108,"context_line":"                settings.append(bmc_fw)"},{"line_number":109,"context_line":"        except sushy.exceptions.MissingAttributeError:"},{"line_number":110,"context_line":"            error_msg \u003d (_(\u0027Cannot retrieve firmware for node %s.\u0027)"},{"line_number":111,"context_line":"                         % task.node.uuid)"},{"line_number":112,"context_line":"            LOG.error(error_msg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"d38b5b90_dba501c2","line":109,"updated":"2023-09-15 09:08:33.000000000","message":"Please only catch exception from the code where you expect it. The block is too large.","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"d305987ba7c8da44420b21fc70c5c71fb81e090b","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                bmc_fw \u003d {\u0027component\u0027: \u0027bmc\u0027,"},{"line_number":107,"context_line":"                          \u0027current_version\u0027: manager.firmware_version}"},{"line_number":108,"context_line":"                settings.append(bmc_fw)"},{"line_number":109,"context_line":"        except sushy.exceptions.MissingAttributeError:"},{"line_number":110,"context_line":"            error_msg \u003d (_(\u0027Cannot retrieve firmware for node %s.\u0027)"},{"line_number":111,"context_line":"                         % task.node.uuid)"},{"line_number":112,"context_line":"            LOG.error(error_msg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"f7fed66c_012b1c39","line":109,"in_reply_to":"d38b5b90_dba501c2","updated":"2023-09-18 21:52:14.000000000","message":"Done","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"12aa387f158de5765595570659f318203bb080bb","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            error_msg \u003d (_(\u0027Cannot retrieve firmware for node %s.\u0027)"},{"line_number":111,"context_line":"                         % task.node.uuid)"},{"line_number":112,"context_line":"            LOG.error(error_msg)"},{"line_number":113,"context_line":"            raise exception.UnsupportedDriverExtension(error_msg)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        create_list, update_list, nochange_list \u003d ("},{"line_number":116,"context_line":"            objects.FirmwareComponentList.sync_firmware_components("}],"source_content_type":"text/x-python","patch_set":4,"id":"f63abab0_57003f20","line":113,"updated":"2023-09-15 09:08:33.000000000","message":"This is raised even if only one component is missing. E.g. if the BIOS version is available and the BMC one is not. Is it your intention?","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"d305987ba7c8da44420b21fc70c5c71fb81e090b","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            error_msg \u003d (_(\u0027Cannot retrieve firmware for node %s.\u0027)"},{"line_number":111,"context_line":"                         % task.node.uuid)"},{"line_number":112,"context_line":"            LOG.error(error_msg)"},{"line_number":113,"context_line":"            raise exception.UnsupportedDriverExtension(error_msg)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        create_list, update_list, nochange_list \u003d ("},{"line_number":116,"context_line":"            objects.FirmwareComponentList.sync_firmware_components("}],"source_content_type":"text/x-python","patch_set":4,"id":"ebc0b41f_ace2d6ca","line":113,"in_reply_to":"f63abab0_57003f20","updated":"2023-09-18 21:52:14.000000000","message":"Fixed","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"12aa387f158de5765595570659f318203bb080bb","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                up_fw_cmp.save()"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    @METRICS.timer(\u0027RedfishFirmware.update\u0027)"},{"line_number":138,"context_line":"    @base.clean_step(priority\u003d0, abortable\u003dFalse,"},{"line_number":139,"context_line":"                     argsinfo\u003d_FW_SETTINGS_ARGSINFO,"},{"line_number":140,"context_line":"                     requires_ramdisk\u003dTrue)"},{"line_number":141,"context_line":"    @base.cache_firmware_components"}],"source_content_type":"text/x-python","patch_set":4,"id":"3c9f0f68_717b6db9","line":138,"updated":"2023-09-15 09:08:33.000000000","message":"Why not deploy_step too?","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"d305987ba7c8da44420b21fc70c5c71fb81e090b","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                up_fw_cmp.save()"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    @METRICS.timer(\u0027RedfishFirmware.update\u0027)"},{"line_number":138,"context_line":"    @base.clean_step(priority\u003d0, abortable\u003dFalse,"},{"line_number":139,"context_line":"                     argsinfo\u003d_FW_SETTINGS_ARGSINFO,"},{"line_number":140,"context_line":"                     requires_ramdisk\u003dTrue)"},{"line_number":141,"context_line":"    @base.cache_firmware_components"}],"source_content_type":"text/x-python","patch_set":4,"id":"725747c2_8425554e","line":138,"in_reply_to":"3c9f0f68_717b6db9","updated":"2023-09-18 21:52:14.000000000","message":"added","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"12aa387f158de5765595570659f318203bb080bb","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        return deploy_utils.reboot_to_finish_step(task)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def _execute_firmware_update(self, node, update_service, settings):"},{"line_number":177,"context_line":"        \"\"\"Executes the next firmware update to the node"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        Executes the first firmware update in the settings list to the node."}],"source_content_type":"text/x-python","patch_set":4,"id":"1160bffe_ec30d5c6","line":176,"updated":"2023-09-15 09:08:33.000000000","message":"A lot of added code is a copy-paste from management.py. We need to either converge them to a single implementation or update the calls in management.py to use the firmware interface.","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"d305987ba7c8da44420b21fc70c5c71fb81e090b","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        return deploy_utils.reboot_to_finish_step(task)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def _execute_firmware_update(self, node, update_service, settings):"},{"line_number":177,"context_line":"        \"\"\"Executes the next firmware update to the node"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        Executes the first firmware update in the settings list to the node."}],"source_content_type":"text/x-python","patch_set":4,"id":"53d5d29b_97e232f4","line":176,"in_reply_to":"1160bffe_ec30d5c6","updated":"2023-09-18 21:52:14.000000000","message":"yup, agree I was thinking about this.\n\nI was thinking in a class that would have the common methods and management and firmware would inheritance this class, does it make sense to you? I\u0027m just unsure about the best place to have it... if you have other ideas I would like to hear.","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"12aa387f158de5765595570659f318203bb080bb","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                fw_clean \u003d [cleanup]"},{"line_number":203,"context_line":"            elif cleanup not in fw_clean:"},{"line_number":204,"context_line":"                fw_clean.append(cleanup)"},{"line_number":205,"context_line":"            node.set_driver_internal_info(\u0027firmware_cleanup\u0027, fw_clean)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def _continue_updates(self, task, update_service, settings):"},{"line_number":208,"context_line":"        \"\"\"Continues processing the firmware updates"}],"source_content_type":"text/x-python","patch_set":4,"id":"eec2a0d7_3193d02b","line":205,"updated":"2023-09-15 09:08:33.000000000","message":"I assume, node.save() happens inside of reboot_to_finish_step? Maybe worth leaving a comment","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"d305987ba7c8da44420b21fc70c5c71fb81e090b","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                fw_clean \u003d [cleanup]"},{"line_number":203,"context_line":"            elif cleanup not in fw_clean:"},{"line_number":204,"context_line":"                fw_clean.append(cleanup)"},{"line_number":205,"context_line":"            node.set_driver_internal_info(\u0027firmware_cleanup\u0027, fw_clean)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def _continue_updates(self, task, update_service, settings):"},{"line_number":208,"context_line":"        \"\"\"Continues processing the firmware updates"}],"source_content_type":"text/x-python","patch_set":4,"id":"a3052082_4bb36dca","line":205,"in_reply_to":"eec2a0d7_3193d02b","updated":"2023-09-18 21:52:14.000000000","message":"It happens in set_async_step_flags(), I will add a note","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"12aa387f158de5765595570659f318203bb080bb","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            LOG.info(\u0027Firmware updates completed for node %(node)s\u0027,"},{"line_number":242,"context_line":"                     {\u0027node\u0027: node.uuid})"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"            manager_utils.notify_conductor_resume_clean(task)"},{"line_number":245,"context_line":"        else:"},{"line_number":246,"context_line":"            settings.pop(0)"},{"line_number":247,"context_line":"            self._execute_firmware_update(node,"}],"source_content_type":"text/x-python","patch_set":4,"id":"6c1fa103_dd592d3c","line":244,"updated":"2023-09-15 09:08:33.000000000","message":"Even if not implemented now, let\u0027s write this code in a way that supports deploy steps too","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"12aa387f158de5765595570659f318203bb080bb","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        # updates so when the user takes the node out of"},{"line_number":282,"context_line":"        # maintenance mode, pending firmware updates do not"},{"line_number":283,"context_line":"        # automatically continue."},{"line_number":284,"context_line":"        LOG.warning(\u0027Update firmware failed for node %(node)s. \u0027"},{"line_number":285,"context_line":"                    \u0027Discarding remaining firmware updates.\u0027,"},{"line_number":286,"context_line":"                    {\u0027node\u0027: task.node.uuid})"},{"line_number":287,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fe2f863a_a129a219","line":284,"updated":"2023-09-15 09:08:33.000000000","message":"s/warning/error/","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"d305987ba7c8da44420b21fc70c5c71fb81e090b","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        # updates so when the user takes the node out of"},{"line_number":282,"context_line":"        # maintenance mode, pending firmware updates do not"},{"line_number":283,"context_line":"        # automatically continue."},{"line_number":284,"context_line":"        LOG.warning(\u0027Update firmware failed for node %(node)s. \u0027"},{"line_number":285,"context_line":"                    \u0027Discarding remaining firmware updates.\u0027,"},{"line_number":286,"context_line":"                    {\u0027node\u0027: task.node.uuid})"},{"line_number":287,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"f31799c0_0e209472","line":284,"in_reply_to":"fe2f863a_a129a219","updated":"2023-09-18 21:52:14.000000000","message":"done","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"12aa387f158de5765595570659f318203bb080bb","unresolved":false,"context_lines":[{"line_number":298,"context_line":"    )"},{"line_number":299,"context_line":"    def _query_update_status(self, task, manager, context):"},{"line_number":300,"context_line":"        \"\"\"Periodic job to check firmware update tasks.\"\"\""},{"line_number":301,"context_line":"        self._check_node_redfish_firmware_update(task)"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    @METRICS.timer(\u0027RedfishFirmware._check_node_redfish_firmware_update\u0027)"},{"line_number":304,"context_line":"    def _check_node_redfish_firmware_update(self, task):"}],"source_content_type":"text/x-python","patch_set":4,"id":"93b0241f_ca9ff6ac","line":301,"updated":"2023-09-15 09:08:33.000000000","message":"What\u0027s the point of another method?","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"d305987ba7c8da44420b21fc70c5c71fb81e090b","unresolved":false,"context_lines":[{"line_number":298,"context_line":"    )"},{"line_number":299,"context_line":"    def _query_update_status(self, task, manager, context):"},{"line_number":300,"context_line":"        \"\"\"Periodic job to check firmware update tasks.\"\"\""},{"line_number":301,"context_line":"        self._check_node_redfish_firmware_update(task)"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    @METRICS.timer(\u0027RedfishFirmware._check_node_redfish_firmware_update\u0027)"},{"line_number":304,"context_line":"    def _check_node_redfish_firmware_update(self, task):"}],"source_content_type":"text/x-python","patch_set":4,"id":"abffff22_ae226f10","line":301,"in_reply_to":"93b0241f_ca9ff6ac","updated":"2023-09-18 21:52:14.000000000","message":"right, I was following how we implemented things in BIOS, going to simplify after the next patch set.","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"12aa387f158de5765595570659f318203bb080bb","unresolved":false,"context_lines":[{"line_number":352,"context_line":"            task_monitor \u003d redfish_utils.get_task_monitor("},{"line_number":353,"context_line":"                node, current_update[\u0027task_monitor\u0027])"},{"line_number":354,"context_line":"        except exception.RedfishError:"},{"line_number":355,"context_line":"            # The BMC deleted the Task before we could query it"},{"line_number":356,"context_line":"            LOG.warning(\u0027Firmware update completed for node %(node)s, \u0027"},{"line_number":357,"context_line":"                        \u0027firmware %(firmware_image)s, but success of the \u0027"},{"line_number":358,"context_line":"                        \u0027update is unknown.  Assuming update was successful.\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"17f85327_44b93886","line":355,"updated":"2023-09-15 09:08:33.000000000","message":"Maybe distinguish NotFound from everything else?","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"12aa387f158de5765595570659f318203bb080bb","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        if not task_monitor.is_processing:"},{"line_number":366,"context_line":"            # The last response does not necessarily contain a Task,"},{"line_number":367,"context_line":"            # so get it"},{"line_number":368,"context_line":"            sushy_task \u003d task_monitor.get_task()"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"            # Only parse the messages if the BMC did not return parsed"},{"line_number":371,"context_line":"            # messages"}],"source_content_type":"text/x-python","patch_set":4,"id":"a2dc90a0_808646c0","line":368,"updated":"2023-09-15 09:08:33.000000000","message":"Handle errors here too?","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"33ef837bf50f52130e341b564f819300290c46ce","unresolved":true,"context_lines":[{"line_number":365,"context_line":"        if not task_monitor.is_processing:"},{"line_number":366,"context_line":"            # The last response does not necessarily contain a Task,"},{"line_number":367,"context_line":"            # so get it"},{"line_number":368,"context_line":"            sushy_task \u003d task_monitor.get_task()"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"            # Only parse the messages if the BMC did not return parsed"},{"line_number":371,"context_line":"            # messages"}],"source_content_type":"text/x-python","patch_set":4,"id":"a41d21a6_e3741f38","line":368,"in_reply_to":"46e8e947_3eebc416","updated":"2023-09-19 19:49:25.000000000","message":"So, I\u0027ve checked a few places in our code based and we never really consider handling errors when trying to do get_task(), so I\u0027m a bit puzzled to update, will leave open for now.","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"d305987ba7c8da44420b21fc70c5c71fb81e090b","unresolved":true,"context_lines":[{"line_number":365,"context_line":"        if not task_monitor.is_processing:"},{"line_number":366,"context_line":"            # The last response does not necessarily contain a Task,"},{"line_number":367,"context_line":"            # so get it"},{"line_number":368,"context_line":"            sushy_task \u003d task_monitor.get_task()"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"            # Only parse the messages if the BMC did not return parsed"},{"line_number":371,"context_line":"            # messages"}],"source_content_type":"text/x-python","patch_set":4,"id":"46e8e947_3eebc416","line":368,"in_reply_to":"a2dc90a0_808646c0","updated":"2023-09-18 21:52:14.000000000","message":"right, will keep note, going to re-test my setup with some changes and update this one later.","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"9d928b52468620f02b23aa2cce3084eb3f97b460","unresolved":true,"context_lines":[{"line_number":365,"context_line":"        if not task_monitor.is_processing:"},{"line_number":366,"context_line":"            # The last response does not necessarily contain a Task,"},{"line_number":367,"context_line":"            # so get it"},{"line_number":368,"context_line":"            sushy_task \u003d task_monitor.get_task()"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"            # Only parse the messages if the BMC did not return parsed"},{"line_number":371,"context_line":"            # messages"}],"source_content_type":"text/x-python","patch_set":4,"id":"a95d523a_6a96a3ff","line":368,"in_reply_to":"a41d21a6_e3741f38","updated":"2023-09-19 19:51:46.000000000","message":"We can consider error handling get_task() throughout Ironic code as a backportable bugfix if you want. I\u0027d rather have it here now too 😊","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"12aa387f158de5765595570659f318203bb080bb","unresolved":false,"context_lines":[{"line_number":396,"context_line":""},{"line_number":397,"context_line":"                task.upgrade_lock()"},{"line_number":398,"context_line":"                self._clear_updates(node)"},{"line_number":399,"context_line":"                manager_utils.cleaning_error_handler(task, error_msg)"},{"line_number":400,"context_line":"        else:"},{"line_number":401,"context_line":"            LOG.debug(\u0027Firmware update in progress for node %(node)s, \u0027"},{"line_number":402,"context_line":"                      \u0027firmware %(firmware_image)s.\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"f0beea75_ce39dee6","line":399,"updated":"2023-09-15 09:08:33.000000000","message":"Let\u0027s have a possibility of deploy steps too","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"f2be898bc67cf62baf1027cdf1f6060ea351421d","unresolved":false,"context_lines":[{"line_number":396,"context_line":""},{"line_number":397,"context_line":"                task.upgrade_lock()"},{"line_number":398,"context_line":"                self._clear_updates(node)"},{"line_number":399,"context_line":"                manager_utils.cleaning_error_handler(task, error_msg)"},{"line_number":400,"context_line":"        else:"},{"line_number":401,"context_line":"            LOG.debug(\u0027Firmware update in progress for node %(node)s, \u0027"},{"line_number":402,"context_line":"                      \u0027firmware %(firmware_image)s.\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ead4918f_1ad5663f","line":399,"in_reply_to":"0971ddd1_07aa2d55","updated":"2023-09-19 19:37:05.000000000","message":"Done","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"d305987ba7c8da44420b21fc70c5c71fb81e090b","unresolved":true,"context_lines":[{"line_number":396,"context_line":""},{"line_number":397,"context_line":"                task.upgrade_lock()"},{"line_number":398,"context_line":"                self._clear_updates(node)"},{"line_number":399,"context_line":"                manager_utils.cleaning_error_handler(task, error_msg)"},{"line_number":400,"context_line":"        else:"},{"line_number":401,"context_line":"            LOG.debug(\u0027Firmware update in progress for node %(node)s, \u0027"},{"line_number":402,"context_line":"                      \u0027firmware %(firmware_image)s.\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"0971ddd1_07aa2d55","line":399,"in_reply_to":"f0beea75_ce39dee6","updated":"2023-09-18 21:52:14.000000000","message":"ack","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"12aa387f158de5765595570659f318203bb080bb","unresolved":false,"context_lines":[{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        except exception.IronicException as error:"},{"line_number":444,"context_line":"            firmware_utils.cleanup(node)"},{"line_number":445,"context_line":"            raise error"}],"source_content_type":"text/x-python","patch_set":4,"id":"e85d7992_f6838c27","line":445,"updated":"2023-09-15 09:08:33.000000000","message":"s/ error//\n\nor even better, use save_and_reraise_exception around cleanup()","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"33ef837bf50f52130e341b564f819300290c46ce","unresolved":true,"context_lines":[{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        except exception.IronicException as error:"},{"line_number":444,"context_line":"            firmware_utils.cleanup(node)"},{"line_number":445,"context_line":"            raise error"}],"source_content_type":"text/x-python","patch_set":4,"id":"063ad87d_645e9119","line":445,"in_reply_to":"28439bbb_9bb16518","updated":"2023-09-19 19:49:25.000000000","message":"so something like:\n```\n        except exception.IronicException:\n            with excutils.save_and_reraise_exception():\n                firmware_utils.cleanup(node)\n```\n?","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"d305987ba7c8da44420b21fc70c5c71fb81e090b","unresolved":true,"context_lines":[{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        except exception.IronicException as error:"},{"line_number":444,"context_line":"            firmware_utils.cleanup(node)"},{"line_number":445,"context_line":"            raise error"}],"source_content_type":"text/x-python","patch_set":4,"id":"28439bbb_9bb16518","line":445,"in_reply_to":"e85d7992_f6838c27","updated":"2023-09-18 21:52:14.000000000","message":"ack, I will check to update this!","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"}],"ironic/drivers/modules/redfish/utils.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a704fb37b6a2865a62189d6b33db7494906a33e","unresolved":true,"context_lines":[{"line_number":477,"context_line":""},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"def get_manager(system, manager_id\u003dNone):"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    available_managers \u003d system.managers"},{"line_number":482,"context_line":"    if len(available_managers) \u003d\u003d 0:"},{"line_number":483,"context_line":"        # We don\u0027t have managers"}],"source_content_type":"text/x-python","patch_set":3,"id":"af99d37e_bf1eaa92","line":480,"updated":"2023-08-31 21:06:45.000000000","message":"nit: a docstring would be good here.","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"4aa75cf9c6c7916b47b4f90cd758ae8aa15fba2a","unresolved":false,"context_lines":[{"line_number":477,"context_line":""},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"def get_manager(system, manager_id\u003dNone):"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    available_managers \u003d system.managers"},{"line_number":482,"context_line":"    if len(available_managers) \u003d\u003d 0:"},{"line_number":483,"context_line":"        # We don\u0027t have managers"}],"source_content_type":"text/x-python","patch_set":3,"id":"1d3917bc_c6ef3cfd","line":480,"in_reply_to":"af99d37e_bf1eaa92","updated":"2023-08-31 21:49:13.000000000","message":"Ack","commit_id":"9ccd9625e98b736d96bb861f02a7b494339e4bd2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"12aa387f158de5765595570659f318203bb080bb","unresolved":false,"context_lines":[{"line_number":483,"context_line":"    :param manager_id: the id of the manager"},{"line_number":484,"context_line":"    \"\"\""},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"    available_managers \u003d system.managers"},{"line_number":487,"context_line":"    if len(available_managers) \u003d\u003d 0:"},{"line_number":488,"context_line":"        # We don\u0027t have managers"},{"line_number":489,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":4,"id":"5616799a_b37d1492","line":486,"updated":"2023-09-15 09:08:33.000000000","message":"nit: Although I can hardly imaging a Redfish implementation with Managers, this may potentially raise MissingAttributeError","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"d305987ba7c8da44420b21fc70c5c71fb81e090b","unresolved":false,"context_lines":[{"line_number":483,"context_line":"    :param manager_id: the id of the manager"},{"line_number":484,"context_line":"    \"\"\""},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"    available_managers \u003d system.managers"},{"line_number":487,"context_line":"    if len(available_managers) \u003d\u003d 0:"},{"line_number":488,"context_line":"        # We don\u0027t have managers"},{"line_number":489,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":4,"id":"8ffcd98b_bcda2070","line":486,"in_reply_to":"5616799a_b37d1492","updated":"2023-09-18 21:52:14.000000000","message":"yup, now I\u0027m checking things here instead of checking in the Firmware Interface.","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"12aa387f158de5765595570659f318203bb080bb","unresolved":false,"context_lines":[{"line_number":484,"context_line":"    \"\"\""},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"    available_managers \u003d system.managers"},{"line_number":487,"context_line":"    if len(available_managers) \u003d\u003d 0:"},{"line_number":488,"context_line":"        # We don\u0027t have managers"},{"line_number":489,"context_line":"        return None"},{"line_number":490,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"c3df3457_3140f1b0","line":487,"updated":"2023-09-15 09:08:33.000000000","message":"nit:\n\n if not available_managers","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"d305987ba7c8da44420b21fc70c5c71fb81e090b","unresolved":false,"context_lines":[{"line_number":484,"context_line":"    \"\"\""},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"    available_managers \u003d system.managers"},{"line_number":487,"context_line":"    if len(available_managers) \u003d\u003d 0:"},{"line_number":488,"context_line":"        # We don\u0027t have managers"},{"line_number":489,"context_line":"        return None"},{"line_number":490,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"b7459436_fc02c7d6","line":487,"in_reply_to":"c3df3457_3140f1b0","updated":"2023-09-18 21:52:14.000000000","message":"done","commit_id":"71f2a636016d68428d0a7df291f56de53da27df7"}],"ironic/tests/unit/drivers/modules/redfish/test_firmware.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4321b7a6720cf33a1f51687e1a1259161585517d","unresolved":true,"context_lines":[{"line_number":37,"context_line":"                    enabled_management_interfaces\u003d[\u0027redfish\u0027],"},{"line_number":38,"context_line":"                    enabled_firmware_interfaces\u003d[\u0027redfish\u0027])"},{"line_number":39,"context_line":"        self.node \u003d obj_utils.create_test_node("},{"line_number":40,"context_line":"            self.context, driver\u003d\u0027redfish\u0027, driver_info\u003dINFO_DICT)"}],"source_content_type":"text/x-python","patch_set":9,"id":"035d999b_d8deb54c","line":40,"updated":"2023-09-20 18:19:11.000000000","message":"This file feels like it is missing something ;)","commit_id":"4eb0dbf7b5cd5af8b97c4b02c54a6f58f8da704a"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"f4a587f4aad62e6158cd6b0050f9fcbd7a3c0d62","unresolved":true,"context_lines":[{"line_number":37,"context_line":"                    enabled_management_interfaces\u003d[\u0027redfish\u0027],"},{"line_number":38,"context_line":"                    enabled_firmware_interfaces\u003d[\u0027redfish\u0027])"},{"line_number":39,"context_line":"        self.node \u003d obj_utils.create_test_node("},{"line_number":40,"context_line":"            self.context, driver\u003d\u0027redfish\u0027, driver_info\u003dINFO_DICT)"}],"source_content_type":"text/x-python","patch_set":9,"id":"eeb64632_c4898bb4","line":40,"in_reply_to":"035d999b_d8deb54c","updated":"2023-12-08 16:55:53.000000000","message":"I would go as far as saying that this patch should not have merged like this.","commit_id":"4eb0dbf7b5cd5af8b97c4b02c54a6f58f8da704a"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"1889d3234bbad1941260f1ea9d03ece6465a2ecf","unresolved":true,"context_lines":[{"line_number":37,"context_line":"                    enabled_management_interfaces\u003d[\u0027redfish\u0027],"},{"line_number":38,"context_line":"                    enabled_firmware_interfaces\u003d[\u0027redfish\u0027])"},{"line_number":39,"context_line":"        self.node \u003d obj_utils.create_test_node("},{"line_number":40,"context_line":"            self.context, driver\u003d\u0027redfish\u0027, driver_info\u003dINFO_DICT)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9c458fd5_8df0a1e0","line":40,"in_reply_to":"eeb64632_c4898bb4","updated":"2023-12-11 00:53:00.000000000","message":"I missed Julia\u0027s comment since it was marked as Resolved https://review.opendev.org/c/openstack/ironic/+/885425/comments/9424018a_26dc665e 😞\nWorking on it","commit_id":"4eb0dbf7b5cd5af8b97c4b02c54a6f58f8da704a"}],"releasenotes/notes/firmware-interface-8ad6f91aa1f746a0.yaml":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6a83750966a0d8c0495b9ac57279758f6f1a2e49","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds Firmware Interface support to ironic, we would like to receive"},{"line_number":5,"context_line":"    feedback since this is a new feature we introduced and we as a developer"},{"line_number":6,"context_line":"    community have limited hardware access, reach out to us in case of any"},{"line_number":7,"context_line":"    unexpected behavior."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    - Adds version 1.86 of the Bare Metal API, which includes:"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"fab7951d_4e5e48b9","line":6,"range":{"start_line":6,"start_character":63,"end_line":6,"end_character":67},"updated":"2023-09-20 18:17:06.000000000","message":"I would s/case/the event/","commit_id":"4eb0dbf7b5cd5af8b97c4b02c54a6f58f8da704a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6a83750966a0d8c0495b9ac57279758f6f1a2e49","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds Firmware Interface support to ironic, we would like to receive"},{"line_number":5,"context_line":"    feedback since this is a new feature we introduced and we as a developer"},{"line_number":6,"context_line":"    community have limited hardware access, reach out to us in case of any"},{"line_number":7,"context_line":"    unexpected behavior."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    - Adds version 1.86 of the Bare Metal API, which includes:"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"b75f668e_6a01d4f0","line":6,"range":{"start_line":6,"start_character":14,"end_line":6,"end_character":18},"updated":"2023-09-20 18:17:06.000000000","message":"we have :) We can fix it later.","commit_id":"4eb0dbf7b5cd5af8b97c4b02c54a6f58f8da704a"}]}
