)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"13b4c83debea4e630c825865a0cc9da42f9d1afa","unresolved":true,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2021-07-19 16:50:02 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP] Add api endpoint for setting boot_mode on managed node"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Story: 2008567"},{"line_number":10,"context_line":"    Task: 41709"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I2d72389edf546b99c536c6b130ca85ababf80591"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"e17d36cb_f4806c13","line":10,"range":{"start_line":8,"start_character":0,"end_line":10,"end_character":15},"updated":"2021-07-19 18:28:00.000000000","message":"don\u0027t indent these. :) They are informational tags just like Change-Id below.","commit_id":"63a368314d4da393b050f0cd06520d536a55d3c6"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"fb4de76b09dd7bec7f1ba67b671c01325a57e794","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2021-07-19 16:50:02 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP] Add api endpoint for setting boot_mode on managed node"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Story: 2008567"},{"line_number":10,"context_line":"    Task: 41709"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I2d72389edf546b99c536c6b130ca85ababf80591"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"ef1cd472_8cfa2690","line":10,"range":{"start_line":8,"start_character":0,"end_line":10,"end_character":15},"in_reply_to":"e17d36cb_f4806c13","updated":"2021-07-19 20:21:45.000000000","message":"Ack","commit_id":"63a368314d4da393b050f0cd06520d536a55d3c6"}],"api-ref/source/baremetal-api-v1-node-management.inc":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"a01706f097f05982d734870cfe3cd7f6fe746350","unresolved":true,"context_lines":[{"line_number":312,"context_line":"Normal response code: 202 (Accepted)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"Error codes:"},{"line_number":315,"context_line":"    - 409 (Conflict, NodeLocked, ClientError)"},{"line_number":316,"context_line":"    - 400 (Invalid, InvalidStateRequested, InvalidParameterValue)"},{"line_number":317,"context_line":"    - 404 (NotFound)"},{"line_number":318,"context_line":"    - 503 (NoFreeConductorWorkers)"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"Request"},{"line_number":321,"context_line":"-------"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":".. rest_parameters:: parameters.yaml"}],"source_content_type":"text/x-c++src","patch_set":22,"id":"f39a7812_c477c9e7","line":320,"range":{"start_line":315,"start_character":1,"end_line":320,"end_character":7},"updated":"2021-08-24 07:51:24.000000000","message":"nit: would be nice to have those sorted by number","commit_id":"bc95c92f7c122b1217459a1d7a125fae47749e6e"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"1f32e990404051405b0dcad8fad4a3ac75898262","unresolved":false,"context_lines":[{"line_number":312,"context_line":"Normal response code: 202 (Accepted)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"Error codes:"},{"line_number":315,"context_line":"    - 409 (Conflict, NodeLocked, ClientError)"},{"line_number":316,"context_line":"    - 400 (Invalid, InvalidStateRequested, InvalidParameterValue)"},{"line_number":317,"context_line":"    - 404 (NotFound)"},{"line_number":318,"context_line":"    - 503 (NoFreeConductorWorkers)"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"Request"},{"line_number":321,"context_line":"-------"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":".. rest_parameters:: parameters.yaml"}],"source_content_type":"text/x-c++src","patch_set":22,"id":"54b65666_f72f57d4","line":320,"range":{"start_line":315,"start_character":1,"end_line":320,"end_character":7},"in_reply_to":"f39a7812_c477c9e7","updated":"2021-08-24 12:57:26.000000000","message":"Done","commit_id":"bc95c92f7c122b1217459a1d7a125fae47749e6e"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"a01706f097f05982d734870cfe3cd7f6fe746350","unresolved":true,"context_lines":[{"line_number":347,"context_line":"Normal response code: 202 (Accepted)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"Error codes:"},{"line_number":350,"context_line":"    - 409 (Conflict, NodeLocked, ClientError)"},{"line_number":351,"context_line":"    - 400 (Invalid, InvalidStateRequested, InvalidParameterValue)"},{"line_number":352,"context_line":"    - 404 (NotFound)"},{"line_number":353,"context_line":"    - 503 (NoFreeConductorWorkers)"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"Request"},{"line_number":356,"context_line":"-------"}],"source_content_type":"text/x-c++src","patch_set":22,"id":"1ea79ac1_445a60ac","line":353,"range":{"start_line":350,"start_character":1,"end_line":353,"end_character":34},"updated":"2021-08-24 07:51:24.000000000","message":"ditto","commit_id":"bc95c92f7c122b1217459a1d7a125fae47749e6e"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"1f32e990404051405b0dcad8fad4a3ac75898262","unresolved":false,"context_lines":[{"line_number":347,"context_line":"Normal response code: 202 (Accepted)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"Error codes:"},{"line_number":350,"context_line":"    - 409 (Conflict, NodeLocked, ClientError)"},{"line_number":351,"context_line":"    - 400 (Invalid, InvalidStateRequested, InvalidParameterValue)"},{"line_number":352,"context_line":"    - 404 (NotFound)"},{"line_number":353,"context_line":"    - 503 (NoFreeConductorWorkers)"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"Request"},{"line_number":356,"context_line":"-------"}],"source_content_type":"text/x-c++src","patch_set":22,"id":"acabdd6c_3f6bfbd5","line":353,"range":{"start_line":350,"start_character":1,"end_line":353,"end_character":34},"in_reply_to":"1ea79ac1_445a60ac","updated":"2021-08-24 12:57:26.000000000","message":"Done","commit_id":"bc95c92f7c122b1217459a1d7a125fae47749e6e"}],"ironic/api/controllers/v1/node.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":"13b4c83debea4e630c825865a0cc9da42f9d1afa","unresolved":true,"context_lines":[{"line_number":838,"context_line":"        topic \u003d api.request.rpcapi.get_topic_for(rpc_node)"},{"line_number":839,"context_line":""},{"line_number":840,"context_line":"        # TODO(cenne): Any more checks?"},{"line_number":841,"context_line":"        if rpc_node.provision_state \u003d\u003d ir_states.ADOPTING:"},{"line_number":842,"context_line":"            msg \u003d _(\"Node is in ADOPTING state, the boot mode will not be set\""},{"line_number":843,"context_line":"                    \"as it may result in erroneous future modification.\""},{"line_number":844,"context_line":"                    \"Try later\"),"}],"source_content_type":"text/x-python","patch_set":5,"id":"4283ec7f_c8c7b9ee","line":841,"updated":"2021-07-19 18:28:00.000000000","message":"so one aspect about adopting, is it is a very quick transient state. So technically I think it is correct to have the check in case someone does anything silly expecting immediate adoption. They can reset these things later (once adoption has completed).","commit_id":"63a368314d4da393b050f0cd06520d536a55d3c6"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"fb4de76b09dd7bec7f1ba67b671c01325a57e794","unresolved":false,"context_lines":[{"line_number":838,"context_line":"        topic \u003d api.request.rpcapi.get_topic_for(rpc_node)"},{"line_number":839,"context_line":""},{"line_number":840,"context_line":"        # TODO(cenne): Any more checks?"},{"line_number":841,"context_line":"        if rpc_node.provision_state \u003d\u003d ir_states.ADOPTING:"},{"line_number":842,"context_line":"            msg \u003d _(\"Node is in ADOPTING state, the boot mode will not be set\""},{"line_number":843,"context_line":"                    \"as it may result in erroneous future modification.\""},{"line_number":844,"context_line":"                    \"Try later\"),"}],"source_content_type":"text/x-python","patch_set":5,"id":"65d2013f_2498e605","line":841,"in_reply_to":"4283ec7f_c8c7b9ee","updated":"2021-07-19 20:21:45.000000000","message":"Ack","commit_id":"63a368314d4da393b050f0cd06520d536a55d3c6"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"13b4c83debea4e630c825865a0cc9da42f9d1afa","unresolved":true,"context_lines":[{"line_number":841,"context_line":"        if rpc_node.provision_state \u003d\u003d ir_states.ADOPTING:"},{"line_number":842,"context_line":"            msg \u003d _(\"Node is in ADOPTING state, the boot mode will not be set\""},{"line_number":843,"context_line":"                    \"as it may result in erroneous future modification.\""},{"line_number":844,"context_line":"                    \"Try later\"),"},{"line_number":845,"context_line":"            raise exception.Conflict(msg,"},{"line_number":846,"context_line":"                                     action\u003dtarget, node\u003dnode_ident,"},{"line_number":847,"context_line":"                                     state\u003drpc_node.provision_state"}],"source_content_type":"text/x-python","patch_set":5,"id":"fdd5bdda_178d564b","line":844,"range":{"start_line":844,"start_character":19,"end_line":844,"end_character":32},"updated":"2021-07-19 18:28:00.000000000","message":"Maybe s/Try later/Try again later./ ?","commit_id":"63a368314d4da393b050f0cd06520d536a55d3c6"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"fb4de76b09dd7bec7f1ba67b671c01325a57e794","unresolved":false,"context_lines":[{"line_number":841,"context_line":"        if rpc_node.provision_state \u003d\u003d ir_states.ADOPTING:"},{"line_number":842,"context_line":"            msg \u003d _(\"Node is in ADOPTING state, the boot mode will not be set\""},{"line_number":843,"context_line":"                    \"as it may result in erroneous future modification.\""},{"line_number":844,"context_line":"                    \"Try later\"),"},{"line_number":845,"context_line":"            raise exception.Conflict(msg,"},{"line_number":846,"context_line":"                                     action\u003dtarget, node\u003dnode_ident,"},{"line_number":847,"context_line":"                                     state\u003drpc_node.provision_state"}],"source_content_type":"text/x-python","patch_set":5,"id":"0edc9f85_4ff375c4","line":844,"range":{"start_line":844,"start_character":19,"end_line":844,"end_character":32},"in_reply_to":"fdd5bdda_178d564b","updated":"2021-07-19 20:21:45.000000000","message":"Done","commit_id":"63a368314d4da393b050f0cd06520d536a55d3c6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cb6827b8d281ce58dbebad7c11f678e0d430c894","unresolved":false,"context_lines":[{"line_number":850,"context_line":"        # TODO(cenne): Any more checks?"},{"line_number":851,"context_line":"        if (api.request.version.minor"},{"line_number":852,"context_line":"                \u003c versions.MINOR_76_NODE_CHANGE_BOOT_MODE):"},{"line_number":853,"context_line":"            raise exception.NotAcceptable("},{"line_number":854,"context_line":"                (_(\"This endpoint is supported from a later api minor version\""},{"line_number":855,"context_line":"                   \": %(min_version)s\") %"},{"line_number":856,"context_line":"                 {\u0027min_version\u0027: versions.MINOR_76_NODE_CHANGE_BOOT_MODE}))"}],"source_content_type":"text/x-python","patch_set":16,"id":"61206612_b85aea7a","line":853,"updated":"2021-08-03 08:39:24.000000000","message":"Per convention for new endpoints, it has to be NotFound (with the same error message)","commit_id":"a246d6e45efc9b4836b3fbf278824391f1a6adbe"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"8354fc3214beece817c7ed99d3c7c21cbbafbd7a","unresolved":false,"context_lines":[{"line_number":850,"context_line":"        # TODO(cenne): Any more checks?"},{"line_number":851,"context_line":"        if (api.request.version.minor"},{"line_number":852,"context_line":"                \u003c versions.MINOR_76_NODE_CHANGE_BOOT_MODE):"},{"line_number":853,"context_line":"            raise exception.NotAcceptable("},{"line_number":854,"context_line":"                (_(\"This endpoint is supported from a later api minor version\""},{"line_number":855,"context_line":"                   \": %(min_version)s\") %"},{"line_number":856,"context_line":"                 {\u0027min_version\u0027: versions.MINOR_76_NODE_CHANGE_BOOT_MODE}))"}],"source_content_type":"text/x-python","patch_set":16,"id":"236f4365_1121d1ca","line":853,"in_reply_to":"61206612_b85aea7a","updated":"2021-08-03 15:23:46.000000000","message":"Done","commit_id":"a246d6e45efc9b4836b3fbf278824391f1a6adbe"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cb6827b8d281ce58dbebad7c11f678e0d430c894","unresolved":false,"context_lines":[{"line_number":851,"context_line":"        if (api.request.version.minor"},{"line_number":852,"context_line":"                \u003c versions.MINOR_76_NODE_CHANGE_BOOT_MODE):"},{"line_number":853,"context_line":"            raise exception.NotAcceptable("},{"line_number":854,"context_line":"                (_(\"This endpoint is supported from a later api minor version\""},{"line_number":855,"context_line":"                   \": %(min_version)s\") %"},{"line_number":856,"context_line":"                 {\u0027min_version\u0027: versions.MINOR_76_NODE_CHANGE_BOOT_MODE}))"},{"line_number":857,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"085b7f58_185fca2e","line":854,"updated":"2021-08-03 08:39:24.000000000","message":"To avoid confusion let\u0027s do it like this:\n\n supported start with the API version 1.%(min_version)s\n\n(because the concept of a \"minor\" version makes more sense in semantic versioning, which we don\u0027t use)","commit_id":"a246d6e45efc9b4836b3fbf278824391f1a6adbe"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"8354fc3214beece817c7ed99d3c7c21cbbafbd7a","unresolved":false,"context_lines":[{"line_number":851,"context_line":"        if (api.request.version.minor"},{"line_number":852,"context_line":"                \u003c versions.MINOR_76_NODE_CHANGE_BOOT_MODE):"},{"line_number":853,"context_line":"            raise exception.NotAcceptable("},{"line_number":854,"context_line":"                (_(\"This endpoint is supported from a later api minor version\""},{"line_number":855,"context_line":"                   \": %(min_version)s\") %"},{"line_number":856,"context_line":"                 {\u0027min_version\u0027: versions.MINOR_76_NODE_CHANGE_BOOT_MODE}))"},{"line_number":857,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"bb7db61a_ecc38b36","line":854,"in_reply_to":"085b7f58_185fca2e","updated":"2021-08-03 15:23:46.000000000","message":"ack\nDONE","commit_id":"a246d6e45efc9b4836b3fbf278824391f1a6adbe"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cb6827b8d281ce58dbebad7c11f678e0d430c894","unresolved":false,"context_lines":[{"line_number":863,"context_line":"                    \u0027modes\u0027: \u0027, \u0027.join(ALLOWED_TARGET_BOOT_MODES)})"},{"line_number":864,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"        if rpc_node.provision_state \u003d\u003d ir_states.ADOPTING:"},{"line_number":867,"context_line":"            msg \u003d _(\"Node is in ADOPTING state, the boot mode will not be set \""},{"line_number":868,"context_line":"                    \"as it may result in erroneous future modification. \""},{"line_number":869,"context_line":"                    \"Try again later.\")"}],"source_content_type":"text/x-python","patch_set":16,"id":"c524fa8c_ba9192b8","line":866,"updated":"2021-08-03 08:39:24.000000000","message":"I think we should exclude more states, at least all \"transient\" states (the ones ending with -ing - see other update methods).","commit_id":"a246d6e45efc9b4836b3fbf278824391f1a6adbe"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"9909ce5b19406146405e413c26ce6d17c0391c6c","unresolved":false,"context_lines":[{"line_number":863,"context_line":"                    \u0027modes\u0027: \u0027, \u0027.join(ALLOWED_TARGET_BOOT_MODES)})"},{"line_number":864,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"        if rpc_node.provision_state \u003d\u003d ir_states.ADOPTING:"},{"line_number":867,"context_line":"            msg \u003d _(\"Node is in ADOPTING state, the boot mode will not be set \""},{"line_number":868,"context_line":"                    \"as it may result in erroneous future modification. \""},{"line_number":869,"context_line":"                    \"Try again later.\")"}],"source_content_type":"text/x-python","patch_set":16,"id":"f65d357b_ff358ebf","line":866,"in_reply_to":"c524fa8c_ba9192b8","updated":"2021-08-04 11:19:29.000000000","message":"ack\n\nAdded the whole list of `UNSTABLE_STATES`. Would be sufficient?.","commit_id":"a246d6e45efc9b4836b3fbf278824391f1a6adbe"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cb6827b8d281ce58dbebad7c11f678e0d430c894","unresolved":false,"context_lines":[{"line_number":894,"context_line":""},{"line_number":895,"context_line":"        \"\"\""},{"line_number":896,"context_line":"        rpc_node \u003d api_utils.check_node_policy_and_retrieve("},{"line_number":897,"context_line":"            \u0027baremetal:node:set_boot_mode\u0027, node_ident)"},{"line_number":898,"context_line":"        topic \u003d api.request.rpcapi.get_topic_for(rpc_node)"},{"line_number":899,"context_line":""},{"line_number":900,"context_line":"        # TODO(cenne): Any more checks?"}],"source_content_type":"text/x-python","patch_set":16,"id":"56ed9a9b_2c1cdf10","line":897,"updated":"2021-08-03 08:39:24.000000000","message":"Maybe we need a separate rule here? Please ask Julia.","commit_id":"a246d6e45efc9b4836b3fbf278824391f1a6adbe"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"9909ce5b19406146405e413c26ce6d17c0391c6c","unresolved":false,"context_lines":[{"line_number":894,"context_line":""},{"line_number":895,"context_line":"        \"\"\""},{"line_number":896,"context_line":"        rpc_node \u003d api_utils.check_node_policy_and_retrieve("},{"line_number":897,"context_line":"            \u0027baremetal:node:set_boot_mode\u0027, node_ident)"},{"line_number":898,"context_line":"        topic \u003d api.request.rpcapi.get_topic_for(rpc_node)"},{"line_number":899,"context_line":""},{"line_number":900,"context_line":"        # TODO(cenne): Any more checks?"}],"source_content_type":"text/x-python","patch_set":16,"id":"6d2e6232_722156ab","line":897,"in_reply_to":"56ed9a9b_2c1cdf10","updated":"2021-08-04 11:19:29.000000000","message":"DONE","commit_id":"a246d6e45efc9b4836b3fbf278824391f1a6adbe"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cb6827b8d281ce58dbebad7c11f678e0d430c894","unresolved":false,"context_lines":[{"line_number":897,"context_line":"            \u0027baremetal:node:set_boot_mode\u0027, node_ident)"},{"line_number":898,"context_line":"        topic \u003d api.request.rpcapi.get_topic_for(rpc_node)"},{"line_number":899,"context_line":""},{"line_number":900,"context_line":"        # TODO(cenne): Any more checks?"},{"line_number":901,"context_line":"        if (api.request.version.minor"},{"line_number":902,"context_line":"                \u003c versions.MINOR_76_NODE_CHANGE_BOOT_MODE):"},{"line_number":903,"context_line":"            raise exception.NotAcceptable("}],"source_content_type":"text/x-python","patch_set":16,"id":"c3312ca3_69e8e70a","line":900,"updated":"2021-08-03 08:39:24.000000000","message":"Same comments","commit_id":"a246d6e45efc9b4836b3fbf278824391f1a6adbe"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cb6827b8d281ce58dbebad7c11f678e0d430c894","unresolved":false,"context_lines":[{"line_number":905,"context_line":"                   \": %(min_version)s\") %"},{"line_number":906,"context_line":"                 {\u0027min_version\u0027: versions.MINOR_76_NODE_CHANGE_BOOT_MODE}))"},{"line_number":907,"context_line":""},{"line_number":908,"context_line":"        if target not in (True, False):"},{"line_number":909,"context_line":"            msg \u003d (_(\"Invalid secure_boot %(state)s requested for node. \""},{"line_number":910,"context_line":"                     \"Allowed secure_boot states are: True, False) \") %"},{"line_number":911,"context_line":"                   {\u0027state\u0027: target})"}],"source_content_type":"text/x-python","patch_set":16,"id":"b3fad854_b3bb255c","line":908,"updated":"2021-08-03 08:39:24.000000000","message":"I don\u0027t think boolean can have any other values?","commit_id":"a246d6e45efc9b4836b3fbf278824391f1a6adbe"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"8354fc3214beece817c7ed99d3c7c21cbbafbd7a","unresolved":false,"context_lines":[{"line_number":905,"context_line":"                   \": %(min_version)s\") %"},{"line_number":906,"context_line":"                 {\u0027min_version\u0027: versions.MINOR_76_NODE_CHANGE_BOOT_MODE}))"},{"line_number":907,"context_line":""},{"line_number":908,"context_line":"        if target not in (True, False):"},{"line_number":909,"context_line":"            msg \u003d (_(\"Invalid secure_boot %(state)s requested for node. \""},{"line_number":910,"context_line":"                     \"Allowed secure_boot states are: True, False) \") %"},{"line_number":911,"context_line":"                   {\u0027state\u0027: target})"}],"source_content_type":"text/x-python","patch_set":16,"id":"afb3dbda_7d074b14","line":908,"in_reply_to":"b3fad854_b3bb255c","updated":"2021-08-03 15:23:46.000000000","message":"It seems to allow `None` through. I\u0027ve written a test to check for the same.\nWe get 202 Accepted instead of the expected HTTP.BAD_REQUEST if I remove this check.","commit_id":"a246d6e45efc9b4836b3fbf278824391f1a6adbe"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cb6827b8d281ce58dbebad7c11f678e0d430c894","unresolved":false,"context_lines":[{"line_number":911,"context_line":"                   {\u0027state\u0027: target})"},{"line_number":912,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":913,"context_line":""},{"line_number":914,"context_line":"        if rpc_node.provision_state \u003d\u003d ir_states.ADOPTING:"},{"line_number":915,"context_line":"            msg \u003d _(\"Node is in ADOPTING state, not altering secure_boot \""},{"line_number":916,"context_line":"                    \"as it may result in erroneous future modification. \""},{"line_number":917,"context_line":"                    \"Try again later.\")"}],"source_content_type":"text/x-python","patch_set":16,"id":"b3fb6e0e_00098fbf","line":914,"updated":"2021-08-03 08:39:24.000000000","message":"same","commit_id":"a246d6e45efc9b4836b3fbf278824391f1a6adbe"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3eb0bb2cec516e38e78c7e6f87142503edbff835","unresolved":false,"context_lines":[{"line_number":867,"context_line":"        if rpc_node.provision_state in ir_states.UNSTABLE_STATES:"},{"line_number":868,"context_line":"            msg \u003d _(\"Node is in %(state)s state. Since node is transitioning, \""},{"line_number":869,"context_line":"                    \"the boot mode will not be set as this may interfere \""},{"line_number":870,"context_line":"                    \"with ongoing changes and result in erroneous modification\""},{"line_number":871,"context_line":"                    \"Try again later.\")"},{"line_number":872,"context_line":"            raise exception.Conflict(msg,"},{"line_number":873,"context_line":"                                     action\u003dtarget, node\u003dnode_ident,"}],"source_content_type":"text/x-python","patch_set":20,"id":"c36d6e18_33cac7a6","line":870,"updated":"2021-08-23 09:25:51.000000000","message":"nit: \"... modification. \" (missing dot and space)","commit_id":"fdf422dd1905e48013146a43bb5709dc45ea667c"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"66724c8f99d0c7b07aed960ce4ef43506ca90f94","unresolved":false,"context_lines":[{"line_number":867,"context_line":"        if rpc_node.provision_state in ir_states.UNSTABLE_STATES:"},{"line_number":868,"context_line":"            msg \u003d _(\"Node is in %(state)s state. Since node is transitioning, \""},{"line_number":869,"context_line":"                    \"the boot mode will not be set as this may interfere \""},{"line_number":870,"context_line":"                    \"with ongoing changes and result in erroneous modification\""},{"line_number":871,"context_line":"                    \"Try again later.\")"},{"line_number":872,"context_line":"            raise exception.Conflict(msg,"},{"line_number":873,"context_line":"                                     action\u003dtarget, node\u003dnode_ident,"}],"source_content_type":"text/x-python","patch_set":20,"id":"e0ded135_ee0ac31f","line":870,"in_reply_to":"c36d6e18_33cac7a6","updated":"2021-08-23 14:05:51.000000000","message":"Fixed.","commit_id":"fdf422dd1905e48013146a43bb5709dc45ea667c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3eb0bb2cec516e38e78c7e6f87142503edbff835","unresolved":false,"context_lines":[{"line_number":916,"context_line":"        if rpc_node.provision_state in ir_states.UNSTABLE_STATES:"},{"line_number":917,"context_line":"            msg \u003d _(\"Node is in %(state)s state. Since node is transitioning, \""},{"line_number":918,"context_line":"                    \"the boot mode will not be set as this may interfere \""},{"line_number":919,"context_line":"                    \"with ongoing changes and result in erroneous modification\""},{"line_number":920,"context_line":"                    \"Try again later.\")"},{"line_number":921,"context_line":"            raise exception.Conflict(msg,"},{"line_number":922,"context_line":"                                     action\u003dtarget, node\u003dnode_ident,"}],"source_content_type":"text/x-python","patch_set":20,"id":"b674df85_a3ff6259","line":919,"updated":"2021-08-23 09:25:51.000000000","message":"same as above","commit_id":"fdf422dd1905e48013146a43bb5709dc45ea667c"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"66724c8f99d0c7b07aed960ce4ef43506ca90f94","unresolved":false,"context_lines":[{"line_number":916,"context_line":"        if rpc_node.provision_state in ir_states.UNSTABLE_STATES:"},{"line_number":917,"context_line":"            msg \u003d _(\"Node is in %(state)s state. Since node is transitioning, \""},{"line_number":918,"context_line":"                    \"the boot mode will not be set as this may interfere \""},{"line_number":919,"context_line":"                    \"with ongoing changes and result in erroneous modification\""},{"line_number":920,"context_line":"                    \"Try again later.\")"},{"line_number":921,"context_line":"            raise exception.Conflict(msg,"},{"line_number":922,"context_line":"                                     action\u003dtarget, node\u003dnode_ident,"}],"source_content_type":"text/x-python","patch_set":20,"id":"c714d03b_3b3ea387","line":919,"in_reply_to":"b674df85_a3ff6259","updated":"2021-08-23 14:05:51.000000000","message":"Fixed.","commit_id":"fdf422dd1905e48013146a43bb5709dc45ea667c"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"a01706f097f05982d734870cfe3cd7f6fe746350","unresolved":true,"context_lines":[{"line_number":835,"context_line":"        \"\"\"Asynchronous set the boot mode of the node."},{"line_number":836,"context_line":""},{"line_number":837,"context_line":"        :param node_ident: the UUID or logical name of a node."},{"line_number":838,"context_line":"        :param target: The desired boot_mode for the node. (uefi/bios)"},{"line_number":839,"context_line":"        :raises: NotFound (HTTP 404) if requested version of the API"},{"line_number":840,"context_line":"                 is less than 1.76."},{"line_number":841,"context_line":"        :raises: InvalidParameterValue (HTTP 400) if the requested target"}],"source_content_type":"text/x-python","patch_set":22,"id":"738e7c7f_81e9699e","line":838,"range":{"start_line":838,"start_character":57,"end_line":838,"end_character":59},"updated":"2021-08-24 07:51:24.000000000","message":"nit: move the dot at the end","commit_id":"bc95c92f7c122b1217459a1d7a125fae47749e6e"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"1f32e990404051405b0dcad8fad4a3ac75898262","unresolved":false,"context_lines":[{"line_number":835,"context_line":"        \"\"\"Asynchronous set the boot mode of the node."},{"line_number":836,"context_line":""},{"line_number":837,"context_line":"        :param node_ident: the UUID or logical name of a node."},{"line_number":838,"context_line":"        :param target: The desired boot_mode for the node. (uefi/bios)"},{"line_number":839,"context_line":"        :raises: NotFound (HTTP 404) if requested version of the API"},{"line_number":840,"context_line":"                 is less than 1.76."},{"line_number":841,"context_line":"        :raises: InvalidParameterValue (HTTP 400) if the requested target"}],"source_content_type":"text/x-python","patch_set":22,"id":"0799fac2_a1cf06c5","line":838,"range":{"start_line":838,"start_character":57,"end_line":838,"end_character":59},"in_reply_to":"738e7c7f_81e9699e","updated":"2021-08-24 12:57:26.000000000","message":"Done","commit_id":"bc95c92f7c122b1217459a1d7a125fae47749e6e"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"a01706f097f05982d734870cfe3cd7f6fe746350","unresolved":true,"context_lines":[{"line_number":872,"context_line":"            raise exception.Conflict(msg,"},{"line_number":873,"context_line":"                                     action\u003dtarget, node\u003dnode_ident,"},{"line_number":874,"context_line":"                                     state\u003drpc_node.provision_state"},{"line_number":875,"context_line":"                                     )"},{"line_number":876,"context_line":"        api.request.rpcapi.change_node_boot_mode(api.request.context,"},{"line_number":877,"context_line":"                                                 rpc_node.uuid, target,"},{"line_number":878,"context_line":"                                                 topic\u003dtopic)"}],"source_content_type":"text/x-python","patch_set":22,"id":"08100e55_7e5b1f71","line":875,"range":{"start_line":875,"start_character":37,"end_line":875,"end_character":38},"updated":"2021-08-24 07:51:24.000000000","message":"nit: this is correct, but we usually close parenthesis on the line of the last argument","commit_id":"bc95c92f7c122b1217459a1d7a125fae47749e6e"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"1f32e990404051405b0dcad8fad4a3ac75898262","unresolved":false,"context_lines":[{"line_number":872,"context_line":"            raise exception.Conflict(msg,"},{"line_number":873,"context_line":"                                     action\u003dtarget, node\u003dnode_ident,"},{"line_number":874,"context_line":"                                     state\u003drpc_node.provision_state"},{"line_number":875,"context_line":"                                     )"},{"line_number":876,"context_line":"        api.request.rpcapi.change_node_boot_mode(api.request.context,"},{"line_number":877,"context_line":"                                                 rpc_node.uuid, target,"},{"line_number":878,"context_line":"                                                 topic\u003dtopic)"}],"source_content_type":"text/x-python","patch_set":22,"id":"a07f8e26_2094046d","line":875,"range":{"start_line":875,"start_character":37,"end_line":875,"end_character":38},"in_reply_to":"08100e55_7e5b1f71","updated":"2021-08-24 12:57:26.000000000","message":"Done","commit_id":"bc95c92f7c122b1217459a1d7a125fae47749e6e"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"a01706f097f05982d734870cfe3cd7f6fe746350","unresolved":true,"context_lines":[{"line_number":887,"context_line":"        \"\"\"Asynchronous set the secure_boot state of the node."},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"        :param node_ident: the UUID or logical name of a node."},{"line_number":890,"context_line":"        :param target: The desired secure_boot for the node. (True/False)"},{"line_number":891,"context_line":"        :raises: NotFound (HTTP 404) if requested version of the API"},{"line_number":892,"context_line":"                 is less than 1.76."},{"line_number":893,"context_line":"        :raises: InvalidParameterValue (HTTP 400) if the requested target"}],"source_content_type":"text/x-python","patch_set":22,"id":"370400d2_6b3ca783","line":890,"range":{"start_line":890,"start_character":23,"end_line":890,"end_character":73},"updated":"2021-08-24 07:51:24.000000000","message":"secure_boot state? Or even better if the secure boot mode is enabled or not on the node","commit_id":"bc95c92f7c122b1217459a1d7a125fae47749e6e"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"1f32e990404051405b0dcad8fad4a3ac75898262","unresolved":false,"context_lines":[{"line_number":887,"context_line":"        \"\"\"Asynchronous set the secure_boot state of the node."},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"        :param node_ident: the UUID or logical name of a node."},{"line_number":890,"context_line":"        :param target: The desired secure_boot for the node. (True/False)"},{"line_number":891,"context_line":"        :raises: NotFound (HTTP 404) if requested version of the API"},{"line_number":892,"context_line":"                 is less than 1.76."},{"line_number":893,"context_line":"        :raises: InvalidParameterValue (HTTP 400) if the requested target"}],"source_content_type":"text/x-python","patch_set":22,"id":"6bfa409d_e8427bfb","line":890,"range":{"start_line":890,"start_character":23,"end_line":890,"end_character":73},"in_reply_to":"370400d2_6b3ca783","updated":"2021-08-24 12:57:26.000000000","message":"Done","commit_id":"bc95c92f7c122b1217459a1d7a125fae47749e6e"}],"ironic/common/policy.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":"13b4c83debea4e630c825865a0cc9da42f9d1afa","unresolved":true,"context_lines":[{"line_number":771,"context_line":"        deprecated_rule\u003ddeprecated_node_set_power_state"},{"line_number":772,"context_line":"    ),"},{"line_number":773,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":774,"context_line":"        name\u003d\u0027baremetal:node:set_boot_mode\u0027,"},{"line_number":775,"context_line":"        check_str\u003dSYSTEM_OR_PROJECT_MEMBER,"},{"line_number":776,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":777,"context_line":"        description\u003d\u0027Change Node boot mode\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"aae70efa_df5c3067","line":774,"range":{"start_line":774,"start_character":0,"end_line":774,"end_character":44},"updated":"2021-07-19 18:28:00.000000000","message":"Since your adding a policy here, I\u0027d kind of prefer that you add a few definitions in to the tests/unit/api/*.yaml files.","commit_id":"63a368314d4da393b050f0cd06520d536a55d3c6"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"9e47f01c21111625c24d4d19da66f706df8c42cb","unresolved":false,"context_lines":[{"line_number":771,"context_line":"        deprecated_rule\u003ddeprecated_node_set_power_state"},{"line_number":772,"context_line":"    ),"},{"line_number":773,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":774,"context_line":"        name\u003d\u0027baremetal:node:set_boot_mode\u0027,"},{"line_number":775,"context_line":"        check_str\u003dSYSTEM_OR_PROJECT_MEMBER,"},{"line_number":776,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":777,"context_line":"        description\u003d\u0027Change Node boot mode\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"c39ad5d4_c34225fb","line":774,"range":{"start_line":774,"start_character":0,"end_line":774,"end_character":44},"in_reply_to":"62ba1a56_f8adc100","updated":"2021-07-20 20:56:09.000000000","message":"Done","commit_id":"63a368314d4da393b050f0cd06520d536a55d3c6"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"fb4de76b09dd7bec7f1ba67b671c01325a57e794","unresolved":true,"context_lines":[{"line_number":771,"context_line":"        deprecated_rule\u003ddeprecated_node_set_power_state"},{"line_number":772,"context_line":"    ),"},{"line_number":773,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":774,"context_line":"        name\u003d\u0027baremetal:node:set_boot_mode\u0027,"},{"line_number":775,"context_line":"        check_str\u003dSYSTEM_OR_PROJECT_MEMBER,"},{"line_number":776,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":777,"context_line":"        description\u003d\u0027Change Node boot mode\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"62ba1a56_f8adc100","line":774,"range":{"start_line":774,"start_character":0,"end_line":774,"end_character":44},"in_reply_to":"aae70efa_df5c3067","updated":"2021-07-19 20:21:45.000000000","message":"Ack","commit_id":"63a368314d4da393b050f0cd06520d536a55d3c6"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"13b4c83debea4e630c825865a0cc9da42f9d1afa","unresolved":true,"context_lines":[{"line_number":776,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":777,"context_line":"        description\u003d\u0027Change Node boot mode\u0027,"},{"line_number":778,"context_line":"        operations\u003d["},{"line_number":779,"context_line":"            {\u0027path\u0027: \u0027/nodes/{node_ident}/states/boot_mode\u0027, \u0027method\u0027: \u0027PUT\u0027}"},{"line_number":780,"context_line":"        ],"},{"line_number":781,"context_line":"        # NOTE(cenne): A legacy rule requiring not lower priveleges"},{"line_number":782,"context_line":"        # found with a quick search. Do set a more appropriate one or remove."}],"source_content_type":"text/x-python","patch_set":5,"id":"b1708398_e7f43c58","line":779,"range":{"start_line":779,"start_character":0,"end_line":779,"end_character":77},"updated":"2021-07-19 18:28:00.000000000","message":"so fyi, this is purely informational for doc reasons.","commit_id":"63a368314d4da393b050f0cd06520d536a55d3c6"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"fb4de76b09dd7bec7f1ba67b671c01325a57e794","unresolved":false,"context_lines":[{"line_number":776,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":777,"context_line":"        description\u003d\u0027Change Node boot mode\u0027,"},{"line_number":778,"context_line":"        operations\u003d["},{"line_number":779,"context_line":"            {\u0027path\u0027: \u0027/nodes/{node_ident}/states/boot_mode\u0027, \u0027method\u0027: \u0027PUT\u0027}"},{"line_number":780,"context_line":"        ],"},{"line_number":781,"context_line":"        # NOTE(cenne): A legacy rule requiring not lower priveleges"},{"line_number":782,"context_line":"        # found with a quick search. Do set a more appropriate one or remove."}],"source_content_type":"text/x-python","patch_set":5,"id":"fa9b8bce_4043cc40","line":779,"range":{"start_line":779,"start_character":0,"end_line":779,"end_character":77},"in_reply_to":"b1708398_e7f43c58","updated":"2021-07-19 20:21:45.000000000","message":"oh... I didn\u0027t know that. Thanks!\n\nThis makes me reassess the choice of deprecated_rule to use. hmm..","commit_id":"63a368314d4da393b050f0cd06520d536a55d3c6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cb6827b8d281ce58dbebad7c11f678e0d430c894","unresolved":false,"context_lines":[{"line_number":780,"context_line":"            {\u0027path\u0027: \u0027/nodes/{node_ident}/states/secure_boot\u0027, \u0027method\u0027: \u0027PUT\u0027}"},{"line_number":781,"context_line":"        ],"},{"line_number":782,"context_line":"        # NOTE(cenne): A legacy rule requiring not lower priveleges"},{"line_number":783,"context_line":"        # found with a quick search. Do set a more appropriate one or remove."},{"line_number":784,"context_line":"        deprecated_rule\u003ddeprecated_bios_disable_cleaning"},{"line_number":785,"context_line":"    ),"},{"line_number":786,"context_line":"    policy.DocumentedRuleDefault("}],"source_content_type":"text/x-python","patch_set":16,"id":"edf5d9f5_eb739a04","line":783,"updated":"2021-08-03 08:39:24.000000000","message":"Maybe reuse the power_state one?","commit_id":"a246d6e45efc9b4836b3fbf278824391f1a6adbe"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"9909ce5b19406146405e413c26ce6d17c0391c6c","unresolved":false,"context_lines":[{"line_number":780,"context_line":"            {\u0027path\u0027: \u0027/nodes/{node_ident}/states/secure_boot\u0027, \u0027method\u0027: \u0027PUT\u0027}"},{"line_number":781,"context_line":"        ],"},{"line_number":782,"context_line":"        # NOTE(cenne): A legacy rule requiring not lower priveleges"},{"line_number":783,"context_line":"        # found with a quick search. Do set a more appropriate one or remove."},{"line_number":784,"context_line":"        deprecated_rule\u003ddeprecated_bios_disable_cleaning"},{"line_number":785,"context_line":"    ),"},{"line_number":786,"context_line":"    policy.DocumentedRuleDefault("}],"source_content_type":"text/x-python","patch_set":16,"id":"f1ad139f_f31e934a","line":783,"in_reply_to":"edf5d9f5_eb739a04","updated":"2021-08-04 11:19:29.000000000","message":"DONE","commit_id":"a246d6e45efc9b4836b3fbf278824391f1a6adbe"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f0c7d463f1240689f172eed71e96fef3e15e9036","unresolved":true,"context_lines":[{"line_number":782,"context_line":"    ),"},{"line_number":783,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":784,"context_line":"        name\u003d\u0027baremetal:node:set_secure_boot\u0027,"},{"line_number":785,"context_line":"        check_str\u003dSYSTEM_OR_PROJECT_MEMBER,"},{"line_number":786,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":787,"context_line":"        description\u003d\u0027Change Node secure boot state\u0027,"},{"line_number":788,"context_line":"        operations\u003d["}],"source_content_type":"text/x-python","patch_set":19,"id":"99fe3776_6a1d8229","line":785,"range":{"start_line":785,"start_character":0,"end_line":785,"end_character":43},"updated":"2021-08-10 23:29:23.000000000","message":"I think this is likely okay :)\n\nI guess the question we in ironic need to ask ourselves: Should any project member be allowed to change a node boot mode or enable/disable secure boot?","commit_id":"d6a3a9fc224eed1df747e0c825ee8db161c048e2"}],"ironic/conductor/manager.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":"13b4c83debea4e630c825865a0cc9da42f9d1afa","unresolved":true,"context_lines":[{"line_number":373,"context_line":"                    task.driver.management.get_supported_boot_modes(task)"},{"line_number":374,"context_line":"                )"},{"line_number":375,"context_line":"            except exception.UnsupportedDriverExtension:"},{"line_number":376,"context_line":"                supported_modes \u003d [boot_modes.LEGACY_BIOS,"},{"line_number":377,"context_line":"                                   boot_modes.UEFI]"},{"line_number":378,"context_line":"                LOG.debug("},{"line_number":379,"context_line":"                    \"Cannot determine supported boot modes of driver \""},{"line_number":380,"context_line":"                    \"%(driver)s. Assuming these are supported: %(modes)s\","}],"source_content_type":"text/x-python","patch_set":5,"id":"22a5f9b0_35cad443","line":377,"range":{"start_line":376,"start_character":0,"end_line":377,"end_character":51},"updated":"2021-07-19 18:28:00.000000000","message":"Truthfully this kind of makes me a little uneasy, but I\u0027m not sure of a better way to *really* handle it in some cases.  Think the driver may support it, but the hardware doesn\u0027t. A good example of this difference is Power hardware where there the boot design/process is much more along the lines of uefi by design, but there is no qualfier, no config, no override, it boots in it\u0027s own way and it has does so that we kind of mentally think of it as \"legacy bios\". So if we try to set it to uefi, it won\u0027t work, if we set it to bios, I think it might, but that is only because bios is implied by the setting we send it over IPMI. For what it is worth, afaik, power hardware does not support redfish or any of the vendor specific drivers.\n\nI guess no action is really required here, just thinking outloud.","commit_id":"63a368314d4da393b050f0cd06520d536a55d3c6"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"672165844d2561f9df4643198cc50103dc67a30f","unresolved":true,"context_lines":[{"line_number":373,"context_line":"                    task.driver.management.get_supported_boot_modes(task)"},{"line_number":374,"context_line":"                )"},{"line_number":375,"context_line":"            except exception.UnsupportedDriverExtension:"},{"line_number":376,"context_line":"                supported_modes \u003d [boot_modes.LEGACY_BIOS,"},{"line_number":377,"context_line":"                                   boot_modes.UEFI]"},{"line_number":378,"context_line":"                LOG.debug("},{"line_number":379,"context_line":"                    \"Cannot determine supported boot modes of driver \""},{"line_number":380,"context_line":"                    \"%(driver)s. Assuming these are supported: %(modes)s\","}],"source_content_type":"text/x-python","patch_set":5,"id":"15dc627b_81a76a54","line":377,"range":{"start_line":376,"start_character":0,"end_line":377,"end_character":51},"in_reply_to":"22a5f9b0_35cad443","updated":"2021-07-21 13:47:00.000000000","message":"I agree. I was also concerned but moreso in the reverse direction. As in - What if some special boot mode is supported that\u0027s not termed strictly either \u0027uefi\u0027 or \u0027bios\u0027? \nIn that case if the driver doesn\u0027t provide the list of supported boot modes, this list may be too restrictive and api callers wont be able to access those hypothetical other modes.\n\nOne way to resolve this is just respect what the user wants to do, go ahead and try to set the boot mode and let the user deal with what happens later 🙃.\nIt\u0027s asynchronous, so shouldn\u0027t block either way (?)\nThe RFE comments mention it\u0027s sort of a raw command, Maybe it\u0027s expected that we don\u0027t reject stuff?","commit_id":"63a368314d4da393b050f0cd06520d536a55d3c6"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"672165844d2561f9df4643198cc50103dc67a30f","unresolved":true,"context_lines":[{"line_number":373,"context_line":"                    task.driver.management.get_supported_boot_modes(task)"},{"line_number":374,"context_line":"                )"},{"line_number":375,"context_line":"            except exception.UnsupportedDriverExtension:"},{"line_number":376,"context_line":"                supported_modes \u003d [boot_modes.LEGACY_BIOS,"},{"line_number":377,"context_line":"                                   boot_modes.UEFI]"},{"line_number":378,"context_line":"                LOG.debug("},{"line_number":379,"context_line":"                    \"Cannot determine supported boot modes of driver \""},{"line_number":380,"context_line":"                    \"%(driver)s. Assuming these are supported: %(modes)s\","}],"source_content_type":"text/x-python","patch_set":9,"id":"6bc2e461_0c64a305","line":377,"range":{"start_line":376,"start_character":0,"end_line":377,"end_character":51},"updated":"2021-07-21 13:47:00.000000000","message":"Is this a better way to do this,\nOr the alternative way currently shown in conductor/utils? :\n    ``supported_boot_modes \u003d ()``\n    # which thus skips the check below if driver doesn\u0027t explicitly return supported boot modes.\n\nThe api already filters out invalid values, so checking against explicit values may not even be required here?","commit_id":"1cc43e650b5a4d8a1d9179b42f2b68fba74ee76a"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"4140dd37768eaf9220e2fc1733d1fb57f1e64e62","unresolved":false,"context_lines":[{"line_number":373,"context_line":"                    task.driver.management.get_supported_boot_modes(task)"},{"line_number":374,"context_line":"                )"},{"line_number":375,"context_line":"            except exception.UnsupportedDriverExtension:"},{"line_number":376,"context_line":"                supported_modes \u003d [boot_modes.LEGACY_BIOS,"},{"line_number":377,"context_line":"                                   boot_modes.UEFI]"},{"line_number":378,"context_line":"                LOG.debug("},{"line_number":379,"context_line":"                    \"Cannot determine supported boot modes of driver \""},{"line_number":380,"context_line":"                    \"%(driver)s. Assuming these are supported: %(modes)s\","}],"source_content_type":"text/x-python","patch_set":9,"id":"ab38ecfd_e41d3afd","line":377,"range":{"start_line":376,"start_character":0,"end_line":377,"end_character":51},"in_reply_to":"6bc2e461_0c64a305","updated":"2021-08-02 10:58:05.000000000","message":"Done","commit_id":"1cc43e650b5a4d8a1d9179b42f2b68fba74ee76a"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"672165844d2561f9df4643198cc50103dc67a30f","unresolved":true,"context_lines":[{"line_number":379,"context_line":"                    \"Cannot determine supported boot modes of driver \""},{"line_number":380,"context_line":"                    \"%(driver)s. Assuming these are supported: %(modes)s\","},{"line_number":381,"context_line":"                    {\u0027driver\u0027: task.node.driver, \u0027modes\u0027: supported_modes})"},{"line_number":382,"context_line":"            if (supported_modes and new_state not in supported_modes):"},{"line_number":383,"context_line":"                raise exception.InvalidParameterValue("},{"line_number":384,"context_line":"                    _(\u0027The driver %(driver)s does not support the boot mode,\u0027"},{"line_number":385,"context_line":"                      \u0027 %(state)s\u0027) %"}],"source_content_type":"text/x-python","patch_set":9,"id":"09e54d1b_2db10da9","line":382,"range":{"start_line":382,"start_character":12,"end_line":382,"end_character":70},"updated":"2021-07-21 13:47:00.000000000","message":"check happens here.","commit_id":"1cc43e650b5a4d8a1d9179b42f2b68fba74ee76a"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"4140dd37768eaf9220e2fc1733d1fb57f1e64e62","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                    \"Cannot determine supported boot modes of driver \""},{"line_number":380,"context_line":"                    \"%(driver)s. Assuming these are supported: %(modes)s\","},{"line_number":381,"context_line":"                    {\u0027driver\u0027: task.node.driver, \u0027modes\u0027: supported_modes})"},{"line_number":382,"context_line":"            if (supported_modes and new_state not in supported_modes):"},{"line_number":383,"context_line":"                raise exception.InvalidParameterValue("},{"line_number":384,"context_line":"                    _(\u0027The driver %(driver)s does not support the boot mode,\u0027"},{"line_number":385,"context_line":"                      \u0027 %(state)s\u0027) %"}],"source_content_type":"text/x-python","patch_set":9,"id":"f7fcb570_631f6373","line":382,"range":{"start_line":382,"start_character":12,"end_line":382,"end_character":70},"in_reply_to":"09e54d1b_2db10da9","updated":"2021-08-02 10:58:05.000000000","message":"Done","commit_id":"1cc43e650b5a4d8a1d9179b42f2b68fba74ee76a"}],"ironic/conductor/rpcapi.py":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"a01706f097f05982d734870cfe3cd7f6fe746350","unresolved":true,"context_lines":[{"line_number":292,"context_line":"        :param context: request context."},{"line_number":293,"context_line":"        :param node_id: node id or uuid."},{"line_number":294,"context_line":"        :param new_state: one of ironic.common.boot_modes values"},{"line_number":295,"context_line":"            (\u0027bios\u0027 / \u0027uefi\u0027)"},{"line_number":296,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":297,"context_line":"        :raises: NoFreeConductorWorker when there is no free worker to start"},{"line_number":298,"context_line":"                 async task."}],"source_content_type":"text/x-python","patch_set":22,"id":"07169473_74491446","line":295,"range":{"start_line":295,"start_character":20,"end_line":295,"end_character":21},"updated":"2021-08-24 07:51:24.000000000","message":"nit: or","commit_id":"bc95c92f7c122b1217459a1d7a125fae47749e6e"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"1f32e990404051405b0dcad8fad4a3ac75898262","unresolved":false,"context_lines":[{"line_number":292,"context_line":"        :param context: request context."},{"line_number":293,"context_line":"        :param node_id: node id or uuid."},{"line_number":294,"context_line":"        :param new_state: one of ironic.common.boot_modes values"},{"line_number":295,"context_line":"            (\u0027bios\u0027 / \u0027uefi\u0027)"},{"line_number":296,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":297,"context_line":"        :raises: NoFreeConductorWorker when there is no free worker to start"},{"line_number":298,"context_line":"                 async task."}],"source_content_type":"text/x-python","patch_set":22,"id":"34455a1b_6a75bea2","line":295,"range":{"start_line":295,"start_character":20,"end_line":295,"end_character":21},"in_reply_to":"07169473_74491446","updated":"2021-08-24 12:57:26.000000000","message":"Done","commit_id":"bc95c92f7c122b1217459a1d7a125fae47749e6e"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"a01706f097f05982d734870cfe3cd7f6fe746350","unresolved":true,"context_lines":[{"line_number":312,"context_line":"        :param context: request context."},{"line_number":313,"context_line":"        :param node_id: node id or uuid."},{"line_number":314,"context_line":"        :param new_state: Target secure boot state"},{"line_number":315,"context_line":"            (True \u003d\u003e \u0027on\u0027 / False \u003d\u003e \u0027off\u0027)"},{"line_number":316,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":317,"context_line":"        :raises: NoFreeConductorWorker when there is no free worker to start"},{"line_number":318,"context_line":"                 async task."}],"source_content_type":"text/x-python","patch_set":22,"id":"32196d10_0c303a92","line":315,"range":{"start_line":315,"start_character":25,"end_line":315,"end_character":27},"updated":"2021-08-24 07:51:24.000000000","message":"nit: or","commit_id":"bc95c92f7c122b1217459a1d7a125fae47749e6e"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"1f32e990404051405b0dcad8fad4a3ac75898262","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        :param context: request context."},{"line_number":313,"context_line":"        :param node_id: node id or uuid."},{"line_number":314,"context_line":"        :param new_state: Target secure boot state"},{"line_number":315,"context_line":"            (True \u003d\u003e \u0027on\u0027 / False \u003d\u003e \u0027off\u0027)"},{"line_number":316,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":317,"context_line":"        :raises: NoFreeConductorWorker when there is no free worker to start"},{"line_number":318,"context_line":"                 async task."}],"source_content_type":"text/x-python","patch_set":22,"id":"de9437f3_4e1d651d","line":315,"range":{"start_line":315,"start_character":25,"end_line":315,"end_character":27},"in_reply_to":"32196d10_0c303a92","updated":"2021-08-24 12:57:26.000000000","message":"Done","commit_id":"bc95c92f7c122b1217459a1d7a125fae47749e6e"}],"ironic/conductor/utils.py":[{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"4f8725e8cf3e60cbf1be443fab0514ee2a13a3d1","unresolved":true,"context_lines":[{"line_number":132,"context_line":"    if task.node.provision_state \u003d\u003d states.ADOPTING:"},{"line_number":133,"context_line":"        return"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    task.driver.management.validate(task)"},{"line_number":136,"context_line":"    try:"},{"line_number":137,"context_line":"        supported_boot_modes \u003d ("},{"line_number":138,"context_line":"            task.driver.management.get_supported_boot_modes(task)"}],"source_content_type":"text/x-python","patch_set":12,"id":"8cc5a16e_0818d447","line":135,"range":{"start_line":135,"start_character":4,"end_line":135,"end_character":41},"updated":"2021-07-27 14:24:09.000000000","message":"Currently validate is in this background running function. (So an RPC error is not raised, unlike other manager functions, which also have tests for this behaviour)\n\n- Do I need to place a validate in the conductor/manager/change_node_boot_mode method that spawns the background helper func?\n- Or encapsulate this in a try block and indicate in node.last_error that validation failed.","commit_id":"e3ebb98767b3429fcd956f487a95d44853fcfda4"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"4140dd37768eaf9220e2fc1733d1fb57f1e64e62","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    if task.node.provision_state \u003d\u003d states.ADOPTING:"},{"line_number":133,"context_line":"        return"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    task.driver.management.validate(task)"},{"line_number":136,"context_line":"    try:"},{"line_number":137,"context_line":"        supported_boot_modes \u003d ("},{"line_number":138,"context_line":"            task.driver.management.get_supported_boot_modes(task)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7f5f4539_f8bc4b42","line":135,"range":{"start_line":135,"start_character":4,"end_line":135,"end_character":41},"in_reply_to":"8cc5a16e_0818d447","updated":"2021-08-02 10:58:05.000000000","message":"Done","commit_id":"e3ebb98767b3429fcd956f487a95d44853fcfda4"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cb6827b8d281ce58dbebad7c11f678e0d430c894","unresolved":false,"context_lines":[{"line_number":1507,"context_line":"    :param task: a TaskManager instance containing the node to act on."},{"line_number":1508,"context_line":"    :param target_boot_mode: Any boot mode in :mod:`ironic.common.boot_modes`."},{"line_number":1509,"context_line":"    \"\"\""},{"line_number":1510,"context_line":"    task.driver.management.validate(task)"},{"line_number":1511,"context_line":"    try:"},{"line_number":1512,"context_line":"        current_boot_mode \u003d task.driver.management.get_boot_mode(task)"},{"line_number":1513,"context_line":"    except Exception as exc:"}],"source_content_type":"text/x-python","patch_set":16,"id":"c175a878_def4a5a2","line":1510,"updated":"2021-08-03 08:39:24.000000000","message":"This is already done in the conductor","commit_id":"a246d6e45efc9b4836b3fbf278824391f1a6adbe"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"8354fc3214beece817c7ed99d3c7c21cbbafbd7a","unresolved":false,"context_lines":[{"line_number":1507,"context_line":"    :param task: a TaskManager instance containing the node to act on."},{"line_number":1508,"context_line":"    :param target_boot_mode: Any boot mode in :mod:`ironic.common.boot_modes`."},{"line_number":1509,"context_line":"    \"\"\""},{"line_number":1510,"context_line":"    task.driver.management.validate(task)"},{"line_number":1511,"context_line":"    try:"},{"line_number":1512,"context_line":"        current_boot_mode \u003d task.driver.management.get_boot_mode(task)"},{"line_number":1513,"context_line":"    except Exception as exc:"}],"source_content_type":"text/x-python","patch_set":16,"id":"a616f828_f7ea8225","line":1510,"in_reply_to":"c175a878_def4a5a2","updated":"2021-08-03 15:23:46.000000000","message":"Yes. I did think about it. But left it in case some other function called this one (in the future).\nI\u0027ll remove it.","commit_id":"a246d6e45efc9b4836b3fbf278824391f1a6adbe"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cb6827b8d281ce58dbebad7c11f678e0d430c894","unresolved":false,"context_lines":[{"line_number":1521,"context_line":""},{"line_number":1522,"context_line":"    if (current_boot_mode is not None"},{"line_number":1523,"context_line":"        and target_boot_mode \u003d\u003d current_boot_mode):"},{"line_number":1524,"context_line":"        LOG.warning(\"Target boot mode \u0027%(target)s\u0027, and current boot mode \""},{"line_number":1525,"context_line":"                    \"\u0027%(current)s\u0027 are identical. No change being made.\""},{"line_number":1526,"context_line":"                    \"for node %(node)s\","},{"line_number":1527,"context_line":"                    {\u0027target\u0027: target_boot_mode, \u0027current\u0027: current_boot_mode,"}],"source_content_type":"text/x-python","patch_set":16,"id":"b32ed08c_433effbf","line":1524,"updated":"2021-08-03 08:39:24.000000000","message":"Let\u0027s downgrade this to LOG.info (I know we do it for power state; this is wrong IMO, it\u0027s not a dangerous situation).","commit_id":"a246d6e45efc9b4836b3fbf278824391f1a6adbe"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"8354fc3214beece817c7ed99d3c7c21cbbafbd7a","unresolved":false,"context_lines":[{"line_number":1521,"context_line":""},{"line_number":1522,"context_line":"    if (current_boot_mode is not None"},{"line_number":1523,"context_line":"        and target_boot_mode \u003d\u003d current_boot_mode):"},{"line_number":1524,"context_line":"        LOG.warning(\"Target boot mode \u0027%(target)s\u0027, and current boot mode \""},{"line_number":1525,"context_line":"                    \"\u0027%(current)s\u0027 are identical. No change being made.\""},{"line_number":1526,"context_line":"                    \"for node %(node)s\","},{"line_number":1527,"context_line":"                    {\u0027target\u0027: target_boot_mode, \u0027current\u0027: current_boot_mode,"}],"source_content_type":"text/x-python","patch_set":16,"id":"0bef2285_f6c92f81","line":1524,"in_reply_to":"b32ed08c_433effbf","updated":"2021-08-03 15:23:46.000000000","message":"ack","commit_id":"a246d6e45efc9b4836b3fbf278824391f1a6adbe"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cb6827b8d281ce58dbebad7c11f678e0d430c894","unresolved":false,"context_lines":[{"line_number":1587,"context_line":""},{"line_number":1588,"context_line":"    if (secure_boot_current is not None"},{"line_number":1589,"context_line":"        and secure_boot_target \u003d\u003d secure_boot_current):"},{"line_number":1590,"context_line":"        LOG.warning(\"Target secure_boot state \u0027%(target)s\u0027, and current \""},{"line_number":1591,"context_line":"                    \"secure_boot state \u0027%(current)s\u0027 are identical. \""},{"line_number":1592,"context_line":"                    \"No change being made for node %(node)s\","},{"line_number":1593,"context_line":"                    {\u0027target\u0027: secure_boot_target,"}],"source_content_type":"text/x-python","patch_set":16,"id":"83d490e6_fada6b4b","line":1590,"updated":"2021-08-03 08:39:24.000000000","message":"same","commit_id":"a246d6e45efc9b4836b3fbf278824391f1a6adbe"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"8354fc3214beece817c7ed99d3c7c21cbbafbd7a","unresolved":false,"context_lines":[{"line_number":1587,"context_line":""},{"line_number":1588,"context_line":"    if (secure_boot_current is not None"},{"line_number":1589,"context_line":"        and secure_boot_target \u003d\u003d secure_boot_current):"},{"line_number":1590,"context_line":"        LOG.warning(\"Target secure_boot state \u0027%(target)s\u0027, and current \""},{"line_number":1591,"context_line":"                    \"secure_boot state \u0027%(current)s\u0027 are identical. \""},{"line_number":1592,"context_line":"                    \"No change being made for node %(node)s\","},{"line_number":1593,"context_line":"                    {\u0027target\u0027: secure_boot_target,"}],"source_content_type":"text/x-python","patch_set":16,"id":"ed8bc7bb_26994a06","line":1590,"in_reply_to":"83d490e6_fada6b4b","updated":"2021-08-03 15:23:46.000000000","message":"ack","commit_id":"a246d6e45efc9b4836b3fbf278824391f1a6adbe"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3eb0bb2cec516e38e78c7e6f87142503edbff835","unresolved":false,"context_lines":[{"line_number":1483,"context_line":"                  \u0027node\u0027: task.node.uuid})"},{"line_number":1484,"context_line":""},{"line_number":1485,"context_line":""},{"line_number":1486,"context_line":"def change_boot_mode_error_handler(e, node):"},{"line_number":1487,"context_line":"    \"\"\"Inform no boot_mode change made if error occurs."},{"line_number":1488,"context_line":""},{"line_number":1489,"context_line":"    This hook gets called upon an exception being raised when spawning"}],"source_content_type":"text/x-python","patch_set":20,"id":"b0b42521_19ad1291","line":1486,"updated":"2021-08-23 09:25:51.000000000","message":"This function is nearly identical to one for secure boot and power state. Maybe use one function with more generic wording? After all, this case is very rare.","commit_id":"fdf422dd1905e48013146a43bb5709dc45ea667c"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"832329eccfbd959fcbb4db8d54cd43241c4690bb","unresolved":false,"context_lines":[{"line_number":1483,"context_line":"                  \u0027node\u0027: task.node.uuid})"},{"line_number":1484,"context_line":""},{"line_number":1485,"context_line":""},{"line_number":1486,"context_line":"def change_boot_mode_error_handler(e, node):"},{"line_number":1487,"context_line":"    \"\"\"Inform no boot_mode change made if error occurs."},{"line_number":1488,"context_line":""},{"line_number":1489,"context_line":"    This hook gets called upon an exception being raised when spawning"}],"source_content_type":"text/x-python","patch_set":20,"id":"8fee7da0_0546ed1f","line":1486,"in_reply_to":"b0b42521_19ad1291","updated":"2021-08-23 17:46:58.000000000","message":"Found there is a generic _spawn_error_handler already. Using it directly now. Will this work?\nAdded the change in Patch 22","commit_id":"fdf422dd1905e48013146a43bb5709dc45ea667c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3eb0bb2cec516e38e78c7e6f87142503edbff835","unresolved":false,"context_lines":[{"line_number":1521,"context_line":"    if (current_boot_mode is not None"},{"line_number":1522,"context_line":"        and target_boot_mode \u003d\u003d current_boot_mode):"},{"line_number":1523,"context_line":"        LOG.info(\"Target boot mode \u0027%(target)s\u0027, and current boot mode \""},{"line_number":1524,"context_line":"                 \"\u0027%(current)s\u0027 are identical. No change being made.\""},{"line_number":1525,"context_line":"                 \"for node %(node)s\","},{"line_number":1526,"context_line":"                 {\u0027target\u0027: target_boot_mode, \u0027current\u0027: current_boot_mode,"},{"line_number":1527,"context_line":"                  \u0027node\u0027: task.node.uuid})"}],"source_content_type":"text/x-python","patch_set":20,"id":"51af6de7_deb8256c","line":1524,"updated":"2021-08-23 09:25:51.000000000","message":"nit: redundant dot after \"made\", needs space instead","commit_id":"fdf422dd1905e48013146a43bb5709dc45ea667c"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"66724c8f99d0c7b07aed960ce4ef43506ca90f94","unresolved":false,"context_lines":[{"line_number":1521,"context_line":"    if (current_boot_mode is not None"},{"line_number":1522,"context_line":"        and target_boot_mode \u003d\u003d current_boot_mode):"},{"line_number":1523,"context_line":"        LOG.info(\"Target boot mode \u0027%(target)s\u0027, and current boot mode \""},{"line_number":1524,"context_line":"                 \"\u0027%(current)s\u0027 are identical. No change being made.\""},{"line_number":1525,"context_line":"                 \"for node %(node)s\","},{"line_number":1526,"context_line":"                 {\u0027target\u0027: target_boot_mode, \u0027current\u0027: current_boot_mode,"},{"line_number":1527,"context_line":"                  \u0027node\u0027: task.node.uuid})"}],"source_content_type":"text/x-python","patch_set":20,"id":"31895ffe_4f0fce5c","line":1524,"in_reply_to":"51af6de7_deb8256c","updated":"2021-08-23 14:05:51.000000000","message":"Done","commit_id":"fdf422dd1905e48013146a43bb5709dc45ea667c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3eb0bb2cec516e38e78c7e6f87142503edbff835","unresolved":false,"context_lines":[{"line_number":1525,"context_line":"                 \"for node %(node)s\","},{"line_number":1526,"context_line":"                 {\u0027target\u0027: target_boot_mode, \u0027current\u0027: current_boot_mode,"},{"line_number":1527,"context_line":"                  \u0027node\u0027: task.node.uuid})"},{"line_number":1528,"context_line":"        node_cache_boot_mode(task)"},{"line_number":1529,"context_line":"        return"},{"line_number":1530,"context_line":"    try:"},{"line_number":1531,"context_line":"        task.driver.management.set_boot_mode(task, mode\u003dtarget_boot_mode)"}],"source_content_type":"text/x-python","patch_set":20,"id":"e6e3c326_0ac9767e","line":1528,"updated":"2021-08-23 09:25:51.000000000","message":"see below","commit_id":"fdf422dd1905e48013146a43bb5709dc45ea667c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3eb0bb2cec516e38e78c7e6f87142503edbff835","unresolved":false,"context_lines":[{"line_number":1530,"context_line":"    try:"},{"line_number":1531,"context_line":"        task.driver.management.set_boot_mode(task, mode\u003dtarget_boot_mode)"},{"line_number":1532,"context_line":"    except Exception as exc:"},{"line_number":1533,"context_line":"        LOG.warning(\u0027Unexpected exception when trying to change boot_mode \u0027"},{"line_number":1534,"context_line":"                    \u0027to %(target)s for node %(node)s. %(class)s: %(exc)s\u0027,"},{"line_number":1535,"context_line":"                    {\u0027node\u0027: task.node.uuid, \u0027target\u0027: target_boot_mode,"},{"line_number":1536,"context_line":"                     \u0027class\u0027: type(exc).__name__, \u0027exc\u0027: exc},"}],"source_content_type":"text/x-python","patch_set":20,"id":"bbbaeed1_130da79d","line":1533,"updated":"2021-08-23 09:25:51.000000000","message":"s/warning/error/ since it results in a failure","commit_id":"fdf422dd1905e48013146a43bb5709dc45ea667c"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"66724c8f99d0c7b07aed960ce4ef43506ca90f94","unresolved":false,"context_lines":[{"line_number":1530,"context_line":"    try:"},{"line_number":1531,"context_line":"        task.driver.management.set_boot_mode(task, mode\u003dtarget_boot_mode)"},{"line_number":1532,"context_line":"    except Exception as exc:"},{"line_number":1533,"context_line":"        LOG.warning(\u0027Unexpected exception when trying to change boot_mode \u0027"},{"line_number":1534,"context_line":"                    \u0027to %(target)s for node %(node)s. %(class)s: %(exc)s\u0027,"},{"line_number":1535,"context_line":"                    {\u0027node\u0027: task.node.uuid, \u0027target\u0027: target_boot_mode,"},{"line_number":1536,"context_line":"                     \u0027class\u0027: type(exc).__name__, \u0027exc\u0027: exc},"}],"source_content_type":"text/x-python","patch_set":20,"id":"bb2c6f3d_f61bba3d","line":1533,"in_reply_to":"bbbaeed1_130da79d","updated":"2021-08-23 14:05:51.000000000","message":"Done","commit_id":"fdf422dd1905e48013146a43bb5709dc45ea667c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3eb0bb2cec516e38e78c7e6f87142503edbff835","unresolved":false,"context_lines":[{"line_number":1542,"context_line":"    else:"},{"line_number":1543,"context_line":"        LOG.info(\"Changed boot_mode to %(mode)s for node %(node)s\","},{"line_number":1544,"context_line":"                 {\u0027mode\u0027: target_boot_mode, \u0027node\u0027: task.node.uuid})"},{"line_number":1545,"context_line":"    node_cache_boot_mode(task)"},{"line_number":1546,"context_line":""},{"line_number":1547,"context_line":""},{"line_number":1548,"context_line":"def change_secure_boot_error_handler(e, node):"}],"source_content_type":"text/x-python","patch_set":20,"id":"d66a9584_31e413a6","line":1545,"updated":"2021-08-23 09:25:51.000000000","message":"since we know the current value already, I think we can simplify this to just setting node.boot_mode and saving.","commit_id":"fdf422dd1905e48013146a43bb5709dc45ea667c"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"feec3cf4bcce6997eaf891cd675454f3cc5fdc20","unresolved":false,"context_lines":[{"line_number":1542,"context_line":"    else:"},{"line_number":1543,"context_line":"        LOG.info(\"Changed boot_mode to %(mode)s for node %(node)s\","},{"line_number":1544,"context_line":"                 {\u0027mode\u0027: target_boot_mode, \u0027node\u0027: task.node.uuid})"},{"line_number":1545,"context_line":"    node_cache_boot_mode(task)"},{"line_number":1546,"context_line":""},{"line_number":1547,"context_line":""},{"line_number":1548,"context_line":"def change_secure_boot_error_handler(e, node):"}],"source_content_type":"text/x-python","patch_set":20,"id":"8730794c_ffc533cd","line":1545,"in_reply_to":"d66a9584_31e413a6","updated":"2021-08-23 14:35:53.000000000","message":"Ack\nDone","commit_id":"fdf422dd1905e48013146a43bb5709dc45ea667c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3eb0bb2cec516e38e78c7e6f87142503edbff835","unresolved":false,"context_lines":[{"line_number":1591,"context_line":"                 {\u0027target\u0027: secure_boot_target,"},{"line_number":1592,"context_line":"                  \u0027current\u0027: secure_boot_current,"},{"line_number":1593,"context_line":"                  \u0027node\u0027: task.node.uuid})"},{"line_number":1594,"context_line":"        node_cache_boot_mode(task)"},{"line_number":1595,"context_line":"        return"},{"line_number":1596,"context_line":"    try:"},{"line_number":1597,"context_line":"        task.driver.management.set_secure_boot_state(task, secure_boot_target)"}],"source_content_type":"text/x-python","patch_set":20,"id":"0cca242f_bcbe72d9","line":1594,"updated":"2021-08-23 09:25:51.000000000","message":"Seems unnecessary?","commit_id":"fdf422dd1905e48013146a43bb5709dc45ea667c"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"66724c8f99d0c7b07aed960ce4ef43506ca90f94","unresolved":true,"context_lines":[{"line_number":1591,"context_line":"                 {\u0027target\u0027: secure_boot_target,"},{"line_number":1592,"context_line":"                  \u0027current\u0027: secure_boot_current,"},{"line_number":1593,"context_line":"                  \u0027node\u0027: task.node.uuid})"},{"line_number":1594,"context_line":"        node_cache_boot_mode(task)"},{"line_number":1595,"context_line":"        return"},{"line_number":1596,"context_line":"    try:"},{"line_number":1597,"context_line":"        task.driver.management.set_secure_boot_state(task, secure_boot_target)"}],"source_content_type":"text/x-python","patch_set":20,"id":"91e1f627_4cb45d19","line":1594,"in_reply_to":"0cca242f_bcbe72d9","updated":"2021-08-23 14:05:51.000000000","message":"Was doing it just in case the current state and cached state were out of sync. (A possible scenario why someone would be asking to change state to one the node is already in; maybe they are seeing something different in node info.)\n\nThat maybe too presumptuous in a general case though. Is this too implausible/unlikely?","commit_id":"fdf422dd1905e48013146a43bb5709dc45ea667c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3eb0bb2cec516e38e78c7e6f87142503edbff835","unresolved":false,"context_lines":[{"line_number":1596,"context_line":"    try:"},{"line_number":1597,"context_line":"        task.driver.management.set_secure_boot_state(task, secure_boot_target)"},{"line_number":1598,"context_line":"    except Exception as exc:"},{"line_number":1599,"context_line":"        LOG.warning(\u0027Unexpected exception when trying to change secure_boot \u0027"},{"line_number":1600,"context_line":"                    \u0027to %(target)s for node %(node)s. %(class)s: %(exc)s\u0027,"},{"line_number":1601,"context_line":"                    {\u0027node\u0027: task.node.uuid, \u0027target\u0027: secure_boot_target,"},{"line_number":1602,"context_line":"                     \u0027class\u0027: type(exc).__name__, \u0027exc\u0027: exc},"}],"source_content_type":"text/x-python","patch_set":20,"id":"6f2754e5_5ca436f1","line":1599,"updated":"2021-08-23 09:25:51.000000000","message":"s/warning/error","commit_id":"fdf422dd1905e48013146a43bb5709dc45ea667c"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"66724c8f99d0c7b07aed960ce4ef43506ca90f94","unresolved":false,"context_lines":[{"line_number":1596,"context_line":"    try:"},{"line_number":1597,"context_line":"        task.driver.management.set_secure_boot_state(task, secure_boot_target)"},{"line_number":1598,"context_line":"    except Exception as exc:"},{"line_number":1599,"context_line":"        LOG.warning(\u0027Unexpected exception when trying to change secure_boot \u0027"},{"line_number":1600,"context_line":"                    \u0027to %(target)s for node %(node)s. %(class)s: %(exc)s\u0027,"},{"line_number":1601,"context_line":"                    {\u0027node\u0027: task.node.uuid, \u0027target\u0027: secure_boot_target,"},{"line_number":1602,"context_line":"                     \u0027class\u0027: type(exc).__name__, \u0027exc\u0027: exc},"}],"source_content_type":"text/x-python","patch_set":20,"id":"b5764b66_4129cc1c","line":1599,"in_reply_to":"6f2754e5_5ca436f1","updated":"2021-08-23 14:05:51.000000000","message":"Done","commit_id":"fdf422dd1905e48013146a43bb5709dc45ea667c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3eb0bb2cec516e38e78c7e6f87142503edbff835","unresolved":false,"context_lines":[{"line_number":1608,"context_line":"    else:"},{"line_number":1609,"context_line":"        LOG.info(\"Changed secure_boot state to %(state)s for node %(node)s\","},{"line_number":1610,"context_line":"                 {\u0027state\u0027: secure_boot_target, \u0027node\u0027: task.node.uuid})"},{"line_number":1611,"context_line":"    node_cache_boot_mode(task)"}],"source_content_type":"text/x-python","patch_set":20,"id":"33e71f0e_9373f474","line":1611,"updated":"2021-08-23 09:25:51.000000000","message":"same comment as for boot mode. this function will try to retrieve secure boot/boot mode once again, we don\u0027t really need that.","commit_id":"fdf422dd1905e48013146a43bb5709dc45ea667c"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"feec3cf4bcce6997eaf891cd675454f3cc5fdc20","unresolved":false,"context_lines":[{"line_number":1608,"context_line":"    else:"},{"line_number":1609,"context_line":"        LOG.info(\"Changed secure_boot state to %(state)s for node %(node)s\","},{"line_number":1610,"context_line":"                 {\u0027state\u0027: secure_boot_target, \u0027node\u0027: task.node.uuid})"},{"line_number":1611,"context_line":"    node_cache_boot_mode(task)"}],"source_content_type":"text/x-python","patch_set":20,"id":"cd1fcd6b_e2c8f5f0","line":1611,"in_reply_to":"33e71f0e_9373f474","updated":"2021-08-23 14:35:53.000000000","message":"Ack\nDone.","commit_id":"fdf422dd1905e48013146a43bb5709dc45ea667c"}],"ironic/tests/unit/api/controllers/v1/test_node.py":[{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"ad1ba4ea3f122aa1a45b0495f2fc9f0832b69c93","unresolved":true,"context_lines":[{"line_number":5397,"context_line":"        self.assertEqual(urlparse.urlparse(response.location).path,"},{"line_number":5398,"context_line":"                         expected_location)"},{"line_number":5399,"context_line":""},{"line_number":5400,"context_line":"    def _test_secure_boot_failure(self, target_state, http_status_code,"},{"line_number":5401,"context_line":"                                  api_version):"},{"line_number":5402,"context_line":""},{"line_number":5403,"context_line":"        body \u003d {\u0027target\u0027: target_state}"}],"source_content_type":"text/x-python","patch_set":19,"id":"7dc038bf_c9d526e7","line":5400,"updated":"2021-08-09 07:56:46.000000000","message":"May is just me, but a test case showing that is not possible to change the secure_boot when we are using LEGACY_BIOS boot would be good","commit_id":"d6a3a9fc224eed1df747e0c825ee8db161c048e2"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"f95ebfe6c5510c3d4e7523d1592b3b8f206582bb","unresolved":false,"context_lines":[{"line_number":5397,"context_line":"        self.assertEqual(urlparse.urlparse(response.location).path,"},{"line_number":5398,"context_line":"                         expected_location)"},{"line_number":5399,"context_line":""},{"line_number":5400,"context_line":"    def _test_secure_boot_failure(self, target_state, http_status_code,"},{"line_number":5401,"context_line":"                                  api_version):"},{"line_number":5402,"context_line":""},{"line_number":5403,"context_line":"        body \u003d {\u0027target\u0027: target_state}"}],"source_content_type":"text/x-python","patch_set":19,"id":"e25a446c_3da59dad","line":5400,"in_reply_to":"7dc038bf_c9d526e7","updated":"2021-08-09 19:38:32.000000000","message":"Ack\nLooking into this.","commit_id":"d6a3a9fc224eed1df747e0c825ee8db161c048e2"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"324db46de058a8d9cdd77d36f218e80822520115","unresolved":false,"context_lines":[{"line_number":5397,"context_line":"        self.assertEqual(urlparse.urlparse(response.location).path,"},{"line_number":5398,"context_line":"                         expected_location)"},{"line_number":5399,"context_line":""},{"line_number":5400,"context_line":"    def _test_secure_boot_failure(self, target_state, http_status_code,"},{"line_number":5401,"context_line":"                                  api_version):"},{"line_number":5402,"context_line":""},{"line_number":5403,"context_line":"        body \u003d {\u0027target\u0027: target_state}"}],"source_content_type":"text/x-python","patch_set":19,"id":"1fabda7b_b00c105d","line":5400,"in_reply_to":"e25a446c_3da59dad","updated":"2021-08-10 15:55:15.000000000","message":"Hi. So I think the API layer won\u0027t even know the actual boot mode, just the cached (\u0026 maybe stale) value.\nAnd since it\u0027s an async endpoint, it just passes it back to be processed asynchronously,\nso as long as it\u0027s a valid request on it\u0027s own, it\u0027ll just respond [202](Accepted) without complaining here.\nAs far as the API is concerned, it is possible, I think.","commit_id":"d6a3a9fc224eed1df747e0c825ee8db161c048e2"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"ad1ba4ea3f122aa1a45b0495f2fc9f0832b69c93","unresolved":true,"context_lines":[{"line_number":5445,"context_line":""},{"line_number":5446,"context_line":"    def test_secure_boot_invalid_request_boo(self):"},{"line_number":5447,"context_line":"        self._test_secure_boot_failure("},{"line_number":5448,"context_line":"            \u0027boo! 👻\u0027, http_client.BAD_REQUEST, \"1.76\")"},{"line_number":5449,"context_line":""},{"line_number":5450,"context_line":"    def test_secure_boot_invalid_request_None(self):"},{"line_number":5451,"context_line":"        self._test_secure_boot_failure("}],"source_content_type":"text/x-python","patch_set":19,"id":"213fab62_9e040056","line":5448,"range":{"start_line":5448,"start_character":18,"end_line":5448,"end_character":20},"updated":"2021-08-09 07:56:46.000000000","message":"what?! I\u0027m wondering why we have a emoji in the code hehehe","commit_id":"d6a3a9fc224eed1df747e0c825ee8db161c048e2"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"2162f7e832c057ebf997ebb5f110dfee11c4874b","unresolved":true,"context_lines":[{"line_number":5445,"context_line":""},{"line_number":5446,"context_line":"    def test_secure_boot_invalid_request_boo(self):"},{"line_number":5447,"context_line":"        self._test_secure_boot_failure("},{"line_number":5448,"context_line":"            \u0027boo! 👻\u0027, http_client.BAD_REQUEST, \"1.76\")"},{"line_number":5449,"context_line":""},{"line_number":5450,"context_line":"    def test_secure_boot_invalid_request_None(self):"},{"line_number":5451,"context_line":"        self._test_secure_boot_failure("}],"source_content_type":"text/x-python","patch_set":19,"id":"7e78d78b_f6a1d13f","line":5448,"range":{"start_line":5448,"start_character":18,"end_line":5448,"end_character":20},"in_reply_to":"213fab62_9e040056","updated":"2021-08-10 08:13:19.000000000","message":":p It\u0027s a test for (in)Secure Boo! mode","commit_id":"d6a3a9fc224eed1df747e0c825ee8db161c048e2"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"47a6083de7ab76caf2e7704d7818f404007fbfc9","unresolved":false,"context_lines":[{"line_number":5445,"context_line":""},{"line_number":5446,"context_line":"    def test_secure_boot_invalid_request_boo(self):"},{"line_number":5447,"context_line":"        self._test_secure_boot_failure("},{"line_number":5448,"context_line":"            \u0027boo! 👻\u0027, http_client.BAD_REQUEST, \"1.76\")"},{"line_number":5449,"context_line":""},{"line_number":5450,"context_line":"    def test_secure_boot_invalid_request_None(self):"},{"line_number":5451,"context_line":"        self._test_secure_boot_failure("}],"source_content_type":"text/x-python","patch_set":19,"id":"0068da4e_188d9c1d","line":5448,"range":{"start_line":5448,"start_character":18,"end_line":5448,"end_character":20},"in_reply_to":"7e78d78b_f6a1d13f","updated":"2021-08-13 11:17:17.000000000","message":"Done","commit_id":"d6a3a9fc224eed1df747e0c825ee8db161c048e2"}],"ironic/tests/unit/api/test_rbac_legacy.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":"f0c7d463f1240689f172eed71e96fef3e15e9036","unresolved":true,"context_lines":[{"line_number":436,"context_line":"  body: *boot_mode_body"},{"line_number":437,"context_line":"  assert_status: 403"},{"line_number":438,"context_line":"  deprecated: true"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"nodes_states_provision_put_admin:"},{"line_number":441,"context_line":"  path: \u0027/v1/nodes/{node_ident}/states/provision\u0027"},{"line_number":442,"context_line":"  method: put"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"d364283a_41a65a22","line":439,"updated":"2021-08-10 23:29:23.000000000","message":"These likely should be duplicated for secure boot endpoint as they are two distinct policies.","commit_id":"d6a3a9fc224eed1df747e0c825ee8db161c048e2"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"47a6083de7ab76caf2e7704d7818f404007fbfc9","unresolved":false,"context_lines":[{"line_number":436,"context_line":"  body: *boot_mode_body"},{"line_number":437,"context_line":"  assert_status: 403"},{"line_number":438,"context_line":"  deprecated: true"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"nodes_states_provision_put_admin:"},{"line_number":441,"context_line":"  path: \u0027/v1/nodes/{node_ident}/states/provision\u0027"},{"line_number":442,"context_line":"  method: put"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"ebd13196_9b9c69fa","line":439,"in_reply_to":"d364283a_41a65a22","updated":"2021-08-13 11:17:17.000000000","message":"Done","commit_id":"d6a3a9fc224eed1df747e0c825ee8db161c048e2"}],"ironic/tests/unit/api/test_rbac_project_scoped.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":"f0c7d463f1240689f172eed71e96fef3e15e9036","unresolved":true,"context_lines":[{"line_number":912,"context_line":"  path: \u0027/v1/nodes/{node_ident}/states/boot_mode\u0027"},{"line_number":913,"context_line":"  method: put"},{"line_number":914,"context_line":"  headers: *third_party_admin_headers"},{"line_number":915,"context_line":"  body: *boot_mode_body"},{"line_number":916,"context_line":"  assert_status: 404"},{"line_number":917,"context_line":""},{"line_number":918,"context_line":"# Provision states"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"33796dec_489e258a","line":915,"updated":"2021-08-10 23:29:23.000000000","message":"so all of the tests added here, should be duplicated for secure_boot as I understand it.","commit_id":"d6a3a9fc224eed1df747e0c825ee8db161c048e2"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"47a6083de7ab76caf2e7704d7818f404007fbfc9","unresolved":false,"context_lines":[{"line_number":912,"context_line":"  path: \u0027/v1/nodes/{node_ident}/states/boot_mode\u0027"},{"line_number":913,"context_line":"  method: put"},{"line_number":914,"context_line":"  headers: *third_party_admin_headers"},{"line_number":915,"context_line":"  body: *boot_mode_body"},{"line_number":916,"context_line":"  assert_status: 404"},{"line_number":917,"context_line":""},{"line_number":918,"context_line":"# Provision states"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"d5d21586_95446279","line":915,"in_reply_to":"33796dec_489e258a","updated":"2021-08-13 11:17:17.000000000","message":"Done","commit_id":"d6a3a9fc224eed1df747e0c825ee8db161c048e2"}],"ironic/tests/unit/conductor/test_manager.py":[{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"4f8725e8cf3e60cbf1be443fab0514ee2a13a3d1","unresolved":true,"context_lines":[{"line_number":140,"context_line":"        # Compare true exception hidden by @messaging.expected_exceptions"},{"line_number":141,"context_line":"        self.assertEqual(exception.NodeLocked, exc.exc_info[0])"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        # In this test worker should not be spawned, but waiting to make sure"},{"line_number":144,"context_line":"        # the below perform_mock assertion is valid."},{"line_number":145,"context_line":"        self._stop_service()"},{"line_number":146,"context_line":"        self.assertFalse(pwr_act_mock.called, \u0027node_power_action has been \u0027"},{"line_number":147,"context_line":"                                              \u0027unexpectedly called.\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5ee85bfa_e6eb621d","line":144,"range":{"start_line":143,"start_character":53,"end_line":144,"end_character":52},"updated":"2021-07-27 14:24:09.000000000","message":"I am finding it difficult to understand this part, can someone help? \nI think I get the general idea, but am confused about what is being said.","commit_id":"5a228b3b86bcac4b6a6a858311d41e5e603104a1"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"4f8725e8cf3e60cbf1be443fab0514ee2a13a3d1","unresolved":true,"context_lines":[{"line_number":456,"context_line":"    def test_change_node_boot_mode_valid(self, get_boot_mock, set_boot_mock):"},{"line_number":457,"context_line":"        # Test change_node_boot_mode including integration with"},{"line_number":458,"context_line":"        # conductor.utils.node_change_boot_mode"},{"line_number":459,"context_line":"        get_boot_mock.side_effect \u003d [boot_modes.LEGACY_BIOS,  # before setting"},{"line_number":460,"context_line":"                                     boot_modes.UEFI]         # after setting"},{"line_number":461,"context_line":"        node \u003d obj_utils.create_test_node(self.context,"},{"line_number":462,"context_line":"                                          driver\u003d\u0027fake-hardware\u0027,"},{"line_number":463,"context_line":"                                          boot_mode\u003dboot_modes.LEGACY_BIOS)"}],"source_content_type":"text/x-python","patch_set":11,"id":"f12a8017_93c054f8","line":460,"range":{"start_line":459,"start_character":0,"end_line":460,"end_character":77},"updated":"2021-07-27 14:24:09.000000000","message":"Is this okay to do? For emulating that change indeed has occurred, without hiccups.\nSince we are not testing the function `set_boot_mode` here (only that it is called), \nI think this is okay.","commit_id":"5a228b3b86bcac4b6a6a858311d41e5e603104a1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3eb0bb2cec516e38e78c7e6f87142503edbff835","unresolved":false,"context_lines":[{"line_number":470,"context_line":""},{"line_number":471,"context_line":"        set_boot_mock.assert_called_once_with(mock.ANY, mock.ANY,"},{"line_number":472,"context_line":"                                              mode\u003dboot_modes.UEFI)"},{"line_number":473,"context_line":"        self.assertEqual(get_boot_mock.call_count, 2)"},{"line_number":474,"context_line":"        # Call once before setting to see if it\u0027s required"},{"line_number":475,"context_line":"        # and once after setting while caching changes to db node"},{"line_number":476,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"2b8ee46c_1d5dbbb8","line":473,"updated":"2021-08-23 09:25:51.000000000","message":"note: this 2 is what worried me in the implementation: we only need one call","commit_id":"fdf422dd1905e48013146a43bb5709dc45ea667c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3eb0bb2cec516e38e78c7e6f87142503edbff835","unresolved":false,"context_lines":[{"line_number":498,"context_line":"                                           boot_modes.LEGACY_BIOS)"},{"line_number":499,"context_line":"        self._stop_service()"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"        self.assertEqual(set_boot_mock.call_count, 0)"},{"line_number":502,"context_line":"        self.assertEqual(get_boot_mock.call_count, 2)"},{"line_number":503,"context_line":"        # Called once before setting to see if it\u0027s even required"},{"line_number":504,"context_line":"        # And once after to cache values to node info in case out of sync"}],"source_content_type":"text/x-python","patch_set":20,"id":"9569f4e2_aeae6d06","line":501,"updated":"2021-08-23 09:25:51.000000000","message":"nit:\n\n set_boot_mock.assert_not_called()","commit_id":"fdf422dd1905e48013146a43bb5709dc45ea667c"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"66724c8f99d0c7b07aed960ce4ef43506ca90f94","unresolved":false,"context_lines":[{"line_number":498,"context_line":"                                           boot_modes.LEGACY_BIOS)"},{"line_number":499,"context_line":"        self._stop_service()"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"        self.assertEqual(set_boot_mock.call_count, 0)"},{"line_number":502,"context_line":"        self.assertEqual(get_boot_mock.call_count, 2)"},{"line_number":503,"context_line":"        # Called once before setting to see if it\u0027s even required"},{"line_number":504,"context_line":"        # And once after to cache values to node info in case out of sync"}],"source_content_type":"text/x-python","patch_set":20,"id":"a61cd310_56efba2b","line":501,"in_reply_to":"9569f4e2_aeae6d06","updated":"2021-08-23 14:05:51.000000000","message":"Done","commit_id":"fdf422dd1905e48013146a43bb5709dc45ea667c"}],"releasenotes/notes/node-boot-mode-0662effa2a2644dc.yaml":[{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"d27d0ca689fba8b1a67e0cd0b6a3046d7729dcd3","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":22,"id":"ff737202_75b6e166","line":11,"updated":"2021-08-24 07:36:33.000000000","message":"Just wondering if you really wanted to change this releasenote \u003d) (You don\u0027t need to submit another patch to fix I would say)","commit_id":"bc95c92f7c122b1217459a1d7a125fae47749e6e"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"e454fa314134d5550fce015870094d89d22c189e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"ad109a7a_75198a0b","line":11,"in_reply_to":"ff737202_75b6e166","updated":"2021-08-24 12:22:43.000000000","message":"Yes, the change was on purpose. A list was not necessary since it\u0027s only one item. And it wasn\u0027t rendering as bullet point anyway, due to missing newline before the list. Should build better now.","commit_id":"bc95c92f7c122b1217459a1d7a125fae47749e6e"}]}
