)]}'
{"/PATCHSET_LEVEL":[{"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":"3e128202fa61b831e26cce8253fe6290b63853d8","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"585ecbda_ed71bbba","updated":"2026-04-16 21:35:00.000000000","message":"After reading through this, we need to either:\n\n- Somehow make this use SERVICE* states\n- Introduce a new state to mean \"re-inspecting and returning to active\"\n\nas presented here, it would be extremely difficult for an operator to tell, via our nodes api, what the next provision state is once inspection completes -- with other things that operate on active nodes, like node servicing or rescuing, we have unique states which help communicate to the operator what\u0027s going on.","commit_id":"6bd42a87e17c103d2b95f57e835e391caf41c691"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0db25f7a93120790e81ff76db0c5ed6bc8ea04d2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"e204a4dc_56cc4fd9","updated":"2026-04-16 16:18:31.000000000","message":"I like the idea, some comments on the implementation inline","commit_id":"6bd42a87e17c103d2b95f57e835e391caf41c691"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"78813b4bef500f22ec60c027fee49d765954d082","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c3b529f4_1402b9fa","in_reply_to":"585ecbda_ed71bbba","updated":"2026-07-09 02:22:46.000000000","message":"Completely redid this as steps","commit_id":"6bd42a87e17c103d2b95f57e835e391caf41c691"}],"specs/approved/inspection-interface-oob-states.rst":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0db25f7a93120790e81ff76db0c5ed6bc8ea04d2","unresolved":true,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"       class InspectInterface(BaseInterface):"},{"line_number":59,"context_line":"           ..."},{"line_number":60,"context_line":"           def is_oob(self):"},{"line_number":61,"context_line":"               \"\"\"Return True if this implementation is out-of-band."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"               OOB implementations communicate with the BMC or management"}],"source_content_type":"text/x-rst","patch_set":1,"id":"22201d78_421ac9ff","line":60,"updated":"2026-04-16 16:18:31.000000000","message":"In my experience, oob is not clear for people outside of our bubble. I\u0027d change it to requires_ramdisk, which has prior art in Ironic","commit_id":"6bd42a87e17c103d2b95f57e835e391caf41c691"},{"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":"3e128202fa61b831e26cce8253fe6290b63853d8","unresolved":true,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"       class InspectInterface(BaseInterface):"},{"line_number":59,"context_line":"           ..."},{"line_number":60,"context_line":"           def is_oob(self):"},{"line_number":61,"context_line":"               \"\"\"Return True if this implementation is out-of-band."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"               OOB implementations communicate with the BMC or management"}],"source_content_type":"text/x-rst","patch_set":1,"id":"b343bb4c_043e0c9f","line":60,"in_reply_to":"22201d78_421ac9ff","updated":"2026-04-16 21:35:00.000000000","message":"++","commit_id":"6bd42a87e17c103d2b95f57e835e391caf41c691"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0db25f7a93120790e81ff76db0c5ed6bc8ea04d2","unresolved":true,"context_lines":[{"line_number":97,"context_line":"   started from ``available``, ``active``, or ``rescue``,"},{"line_number":98,"context_line":"   the node is returned to its prior state and ``last_error`` is populated"},{"line_number":99,"context_line":"   with the failure reason."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Alternatives"},{"line_number":102,"context_line":"------------"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"202b4a47_f36a5174","line":100,"updated":"2026-04-16 16:18:31.000000000","message":"Curious: are we going to create/update ports by default? It can disrupt the instance quite a bit (imagine the NIC used to attach a VIF get swapped with a different MAC)","commit_id":"6bd42a87e17c103d2b95f57e835e391caf41c691"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"78813b4bef500f22ec60c027fee49d765954d082","unresolved":false,"context_lines":[{"line_number":97,"context_line":"   started from ``available``, ``active``, or ``rescue``,"},{"line_number":98,"context_line":"   the node is returned to its prior state and ``last_error`` is populated"},{"line_number":99,"context_line":"   with the failure reason."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Alternatives"},{"line_number":102,"context_line":"------------"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"fc884bbd_ff60f1cb","line":100,"in_reply_to":"202b4a47_f36a5174","updated":"2026-07-09 02:22:46.000000000","message":"It will now just be a servicing step.","commit_id":"6bd42a87e17c103d2b95f57e835e391caf41c691"},{"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":"3e128202fa61b831e26cce8253fe6290b63853d8","unresolved":true,"context_lines":[{"line_number":109,"context_line":"  target (e.g. ``inspect_oob``) could be introduced to distinguish the"},{"line_number":110,"context_line":"  extended paths from the standard ``inspect`` target.  Rejected in favour"},{"line_number":111,"context_line":"  of reusing the existing ``inspect`` target with a microversion guard, which"},{"line_number":112,"context_line":"  is consistent with how Ironic has evolved other state-machine extensions."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Data model impact"},{"line_number":115,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"2ce9e507_25ff1ef5","line":112,"updated":"2026-04-16 21:35:00.000000000","message":"I do think that unless we do something like this -- or maybe even consider this a form of servicing, somehow (with servicing states) -- we\u0027re going to need code changes in Nova\u0027s virt driver and we run the risk of breaking downstream integrations.","commit_id":"6bd42a87e17c103d2b95f57e835e391caf41c691"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"78813b4bef500f22ec60c027fee49d765954d082","unresolved":false,"context_lines":[{"line_number":109,"context_line":"  target (e.g. ``inspect_oob``) could be introduced to distinguish the"},{"line_number":110,"context_line":"  extended paths from the standard ``inspect`` target.  Rejected in favour"},{"line_number":111,"context_line":"  of reusing the existing ``inspect`` target with a microversion guard, which"},{"line_number":112,"context_line":"  is consistent with how Ironic has evolved other state-machine extensions."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Data model impact"},{"line_number":115,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"e5c04925_234dcb9a","line":112,"in_reply_to":"2ce9e507_25ff1ef5","updated":"2026-07-09 02:22:46.000000000","message":"Done","commit_id":"6bd42a87e17c103d2b95f57e835e391caf41c691"},{"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":"3e128202fa61b831e26cce8253fe6290b63853d8","unresolved":true,"context_lines":[{"line_number":115,"context_line":"-----------------"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"None.  The existing ``target_provision_state`` column on the ``nodes`` table"},{"line_number":118,"context_line":"is sufficient to track the return state during inspection."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"State Machine Impact"},{"line_number":121,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"10d273d3_e1cbcee3","line":118,"updated":"2026-04-16 21:35:00.000000000","message":"How does an API user determine that a node currently undergoing inspection will return to ACTIVE? Unlike other mixed active/not-active workflows, this uses the same state verbs and will not fully communicate status via our API.","commit_id":"6bd42a87e17c103d2b95f57e835e391caf41c691"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"78813b4bef500f22ec60c027fee49d765954d082","unresolved":false,"context_lines":[{"line_number":115,"context_line":"-----------------"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"None.  The existing ``target_provision_state`` column on the ``nodes`` table"},{"line_number":118,"context_line":"is sufficient to track the return state during inspection."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"State Machine Impact"},{"line_number":121,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"2c96ca4c_59e08e01","line":118,"in_reply_to":"10d273d3_e1cbcee3","updated":"2026-07-09 02:22:46.000000000","message":"Done","commit_id":"6bd42a87e17c103d2b95f57e835e391caf41c691"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0db25f7a93120790e81ff76db0c5ed6bc8ea04d2","unresolved":true,"context_lines":[{"line_number":139,"context_line":"    inspecting --[done]--\u003e deploy failed  (when target \u003d\u003d deploy failed)"},{"line_number":140,"context_line":"    inspecting --[done]--\u003e rescue         (when target \u003d\u003d rescue)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"New ``fail`` event transitions (return to originating state on error)::"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    inspecting --[fail]--\u003e available      (when target \u003d\u003d available)"},{"line_number":145,"context_line":"    inspecting --[fail]--\u003e active         (when target \u003d\u003d active)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"33f722ed_55add716","line":142,"updated":"2026-04-16 16:18:31.000000000","message":"I really don\u0027t like this part. How will users detect a failure, given that last_error can easily be overridden by something else?","commit_id":"6bd42a87e17c103d2b95f57e835e391caf41c691"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"78813b4bef500f22ec60c027fee49d765954d082","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    inspecting --[done]--\u003e deploy failed  (when target \u003d\u003d deploy failed)"},{"line_number":140,"context_line":"    inspecting --[done]--\u003e rescue         (when target \u003d\u003d rescue)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"New ``fail`` event transitions (return to originating state on error)::"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    inspecting --[fail]--\u003e available      (when target \u003d\u003d available)"},{"line_number":145,"context_line":"    inspecting --[fail]--\u003e active         (when target \u003d\u003d active)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"80ffb14f_b04647ee","line":142,"in_reply_to":"33f722ed_55add716","updated":"2026-07-09 02:22:46.000000000","message":"It will now have the same failure surface as servicing steps.","commit_id":"6bd42a87e17c103d2b95f57e835e391caf41c691"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0db25f7a93120790e81ff76db0c5ed6bc8ea04d2","unresolved":true,"context_lines":[{"line_number":173,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"No new commands are needed.  The existing"},{"line_number":176,"context_line":"``openstack baremetal node manage --inspect`` (or equivalent ``provision``"},{"line_number":177,"context_line":"subcommand) will work transparently from the newly permitted states once"},{"line_number":178,"context_line":"the client negotiates the new microversion."},{"line_number":179,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"84288771_af332106","line":176,"updated":"2026-04-16 16:18:31.000000000","message":"nit: `baremetal node inspect`","commit_id":"6bd42a87e17c103d2b95f57e835e391caf41c691"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0db25f7a93120790e81ff76db0c5ed6bc8ea04d2","unresolved":true,"context_lines":[{"line_number":197,"context_line":"Nova driver impact"},{"line_number":198,"context_line":"------------------"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"None."},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"Ramdisk impact"},{"line_number":203,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"60726baa_91fe51f8","line":200,"updated":"2026-04-16 16:18:31.000000000","message":"You sure? The driver may freak out if an active instance moves to an unexpected state.","commit_id":"6bd42a87e17c103d2b95f57e835e391caf41c691"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"78813b4bef500f22ec60c027fee49d765954d082","unresolved":false,"context_lines":[{"line_number":197,"context_line":"Nova driver impact"},{"line_number":198,"context_line":"------------------"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"None."},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"Ramdisk impact"},{"line_number":203,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bfdb46c7_ca0ce6b9","line":200,"in_reply_to":"0c7e4ba1_02b039a8","updated":"2026-07-09 02:22:46.000000000","message":"Done","commit_id":"6bd42a87e17c103d2b95f57e835e391caf41c691"},{"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":"a0ab45f7d3a710cd48102170523f206ff0b0f41e","unresolved":true,"context_lines":[{"line_number":197,"context_line":"Nova driver impact"},{"line_number":198,"context_line":"------------------"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"None."},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"Ramdisk impact"},{"line_number":203,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"0c7e4ba1_02b039a8","line":200,"in_reply_to":"60726baa_91fe51f8","updated":"2026-04-16 20:22:50.000000000","message":"https://opendev.org/openstack/nova/src/commit/e337c61a87155676105919d0ed6d7090c89365cc/nova/virt/ironic/ironic_states.py#L247\n\nYou will likely need changes, or at a minimum, test to validate no change in behavior. If it breaks nova driver, we may have some obligation to ensure it doesn\u0027t when used with an older microversion (as nova\u0027s driver stickies to a microversion, this would prevent breakage on upgrade).","commit_id":"6bd42a87e17c103d2b95f57e835e391caf41c691"}]}
