)]}'
{"api-ref/source/baremetal-api-v1-node-management.inc":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"716ad37675c00269340c24d36a23390440e92c67","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    - target_provision_state: target_provision_state"},{"line_number":290,"context_line":"    - provision_updated_at: provision_updated_at"},{"line_number":291,"context_line":"    - boot_mode: boot_mode"},{"line_number":292,"context_line":"    - secure_boot: secure_boot"},{"line_number":293,"context_line":"    - last_error: last_error"},{"line_number":294,"context_line":"    - console_enabled: console_enabled"},{"line_number":295,"context_line":"    - raid_config: raid_config"}],"source_content_type":"text/x-c++src","patch_set":20,"id":"baaa577b_8ed9844f","line":292,"updated":"2021-07-01 13:31:18.000000000","message":"nit: move to the end of the list (since they\u0027re newer)","commit_id":"ef55ec98cc84b5692fc9b879a209ce2b9facc296"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"3dab62b37ba93631f19c4752dbe54c9d2d1f9079","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    - target_provision_state: target_provision_state"},{"line_number":290,"context_line":"    - provision_updated_at: provision_updated_at"},{"line_number":291,"context_line":"    - boot_mode: boot_mode"},{"line_number":292,"context_line":"    - secure_boot: secure_boot"},{"line_number":293,"context_line":"    - last_error: last_error"},{"line_number":294,"context_line":"    - console_enabled: console_enabled"},{"line_number":295,"context_line":"    - raid_config: raid_config"}],"source_content_type":"text/x-c++src","patch_set":20,"id":"a1c26fd8_dc52f13e","line":292,"in_reply_to":"baaa577b_8ed9844f","updated":"2021-07-01 14:23:53.000000000","message":"ack","commit_id":"ef55ec98cc84b5692fc9b879a209ce2b9facc296"}],"doc/source/contributor/webapi-version-history.rst":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"df63b2e2a7884365b934a82ef6036bcabf24c76e","unresolved":true,"context_lines":[{"line_number":2,"context_line":"REST API Version History"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"1.75 (?, ?)"},{"line_number":6,"context_line":"----------------------"},{"line_number":7,"context_line":"Add `boot_mode` and `secure_boot` to node object and expose their state at:"},{"line_number":8,"context_line":"* ``/v1/nodes/{node_ident}/states``"}],"source_content_type":"text/x-rst","patch_set":5,"id":"b84f9155_57af2e80","line":5,"range":{"start_line":5,"start_character":6,"end_line":5,"end_character":7},"updated":"2021-06-22 07:42:31.000000000","message":"nit: Xena","commit_id":"3928c0e714c6dfed6bc3e4ddf75d1562ba9025d4"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9f3f66bdb7c7300d064f6094ddc110f8e49c49bd","unresolved":false,"context_lines":[{"line_number":2,"context_line":"REST API Version History"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"1.75 (?, ?)"},{"line_number":6,"context_line":"----------------------"},{"line_number":7,"context_line":"Add `boot_mode` and `secure_boot` to node object and expose their state at:"},{"line_number":8,"context_line":"* ``/v1/nodes/{node_ident}/states``"}],"source_content_type":"text/x-rst","patch_set":7,"id":"93ff56de_c0e51a31","line":5,"updated":"2021-06-24 09:38:32.000000000","message":"You can put Xena instead of the first question mark","commit_id":"cd548ec84fd817a18cba2fb54ff7b03564d5f6b4"}],"ironic/api/controllers/v1/node.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9f3f66bdb7c7300d064f6094ddc110f8e49c49bd","unresolved":false,"context_lines":[{"line_number":692,"context_line":"    attr_list \u003d [\u0027console_enabled\u0027, \u0027last_error\u0027, \u0027power_state\u0027,"},{"line_number":693,"context_line":"                 \u0027provision_state\u0027, \u0027target_power_state\u0027,"},{"line_number":694,"context_line":"                 \u0027target_provision_state\u0027, \u0027provision_updated_at\u0027,"},{"line_number":695,"context_line":"                 \u0027boot_mode\u0027, \u0027secure_boot\u0027]"},{"line_number":696,"context_line":"    if api_utils.allow_raid_config():"},{"line_number":697,"context_line":"        attr_list.extend([\u0027raid_config\u0027, \u0027target_raid_config\u0027])"},{"line_number":698,"context_line":"    states \u003d {}"}],"source_content_type":"text/x-python","patch_set":7,"id":"2810bd29_430baf76","line":695,"updated":"2021-06-24 09:38:32.000000000","message":"The functional test fails because you\u0027ve added the fields here (correctly), but haven\u0027t added them to the Node API object proper.","commit_id":"cd548ec84fd817a18cba2fb54ff7b03564d5f6b4"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9942b31a96a03a294092e8ec8ba6ee5c57652566","unresolved":true,"context_lines":[{"line_number":142,"context_line":"            \u0027bios_interface\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":143,"context_line":"            \u0027boot_interface\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":144,"context_line":"            \u0027boot_mode\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":145,"context_line":"            \u0027secure_boot\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027boolean\u0027, \u0027null\u0027]},"},{"line_number":146,"context_line":"            \u0027chassis_uuid\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":147,"context_line":"            \u0027conductor_group\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":148,"context_line":"            \u0027console_enabled\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027boolean\u0027, \u0027null\u0027]},"}],"source_content_type":"text/x-python","patch_set":11,"id":"afd919f0_dd5bf724","line":145,"updated":"2021-06-25 10:54:38.000000000","message":"Could you keep properties sorted?","commit_id":"dab61e1b9041367df465a2c2a7989b23ebf29293"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"4998d6fbbe68ccb8c8b3193e2f32b0039960773a","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            \u0027bios_interface\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":143,"context_line":"            \u0027boot_interface\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":144,"context_line":"            \u0027boot_mode\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":145,"context_line":"            \u0027secure_boot\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027boolean\u0027, \u0027null\u0027]},"},{"line_number":146,"context_line":"            \u0027chassis_uuid\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":147,"context_line":"            \u0027conductor_group\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":148,"context_line":"            \u0027console_enabled\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027boolean\u0027, \u0027null\u0027]},"}],"source_content_type":"text/x-python","patch_set":11,"id":"7719e71d_ede87273","line":145,"in_reply_to":"afd919f0_dd5bf724","updated":"2021-06-25 12:49:50.000000000","message":"Done","commit_id":"dab61e1b9041367df465a2c2a7989b23ebf29293"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9942b31a96a03a294092e8ec8ba6ee5c57652566","unresolved":true,"context_lines":[{"line_number":1228,"context_line":"            \u0027bios_interface\u0027,"},{"line_number":1229,"context_line":"            \u0027boot_interface\u0027,"},{"line_number":1230,"context_line":"            \u0027boot_mode\u0027,"},{"line_number":1231,"context_line":"            \u0027secure_boot\u0027,"},{"line_number":1232,"context_line":"            \u0027clean_step\u0027,"},{"line_number":1233,"context_line":"            \u0027conductor_group\u0027,"},{"line_number":1234,"context_line":"            \u0027console_enabled\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"12bafca3_e68f19c0","line":1231,"updated":"2021-06-25 10:54:38.000000000","message":"Same re sorting","commit_id":"dab61e1b9041367df465a2c2a7989b23ebf29293"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"4998d6fbbe68ccb8c8b3193e2f32b0039960773a","unresolved":false,"context_lines":[{"line_number":1228,"context_line":"            \u0027bios_interface\u0027,"},{"line_number":1229,"context_line":"            \u0027boot_interface\u0027,"},{"line_number":1230,"context_line":"            \u0027boot_mode\u0027,"},{"line_number":1231,"context_line":"            \u0027secure_boot\u0027,"},{"line_number":1232,"context_line":"            \u0027clean_step\u0027,"},{"line_number":1233,"context_line":"            \u0027conductor_group\u0027,"},{"line_number":1234,"context_line":"            \u0027console_enabled\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"134e50f9_37d92a69","line":1231,"in_reply_to":"12bafca3_e68f19c0","updated":"2021-06-25 12:49:50.000000000","message":"Done","commit_id":"dab61e1b9041367df465a2c2a7989b23ebf29293"}],"ironic/api/controllers/v1/versions.py":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"df63b2e2a7884365b934a82ef6036bcabf24c76e","unresolved":true,"context_lines":[{"line_number":112,"context_line":"# v1.72: Add agent_status and agent_status_message to /v1/heartbeat"},{"line_number":113,"context_line":"# v1.73: Add support for deploy and undeploy verbs"},{"line_number":114,"context_line":"# v1.74: Add bios registry to /v1/nodes/{node}/bios/{setting}"},{"line_number":115,"context_line":"# v1.75: Add boot_mode, secure_boot feilds to node object."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"MINOR_0_JUNO \u003d 0"},{"line_number":118,"context_line":"MINOR_1_INITIAL_VERSION \u003d 1"}],"source_content_type":"text/x-python","patch_set":5,"id":"f8391af3_81fb7159","line":115,"range":{"start_line":115,"start_character":36,"end_line":115,"end_character":42},"updated":"2021-06-22 07:42:31.000000000","message":"nit: fields","commit_id":"3928c0e714c6dfed6bc3e4ddf75d1562ba9025d4"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"716ad37675c00269340c24d36a23390440e92c67","unresolved":false,"context_lines":[{"line_number":112,"context_line":"# v1.72: Add agent_status and agent_status_message to /v1/heartbeat"},{"line_number":113,"context_line":"# v1.73: Add support for deploy and undeploy verbs"},{"line_number":114,"context_line":"# v1.74: Add bios registry to /v1/nodes/{node}/bios/{setting}"},{"line_number":115,"context_line":"# v1.75: Add boot_mode, secure_boot feilds to node object."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"MINOR_0_JUNO \u003d 0"},{"line_number":118,"context_line":"MINOR_1_INITIAL_VERSION \u003d 1"}],"source_content_type":"text/x-python","patch_set":20,"id":"170ffc74_88967085","line":115,"updated":"2021-07-01 13:31:18.000000000","message":"nit: fields","commit_id":"ef55ec98cc84b5692fc9b879a209ce2b9facc296"}],"ironic/common/release_mappings.py":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"df63b2e2a7884365b934a82ef6036bcabf24c76e","unresolved":true,"context_lines":[{"line_number":344,"context_line":"        \u0027objects\u0027: {"},{"line_number":345,"context_line":"            \u0027Allocation\u0027: [\u00271.1\u0027],"},{"line_number":346,"context_line":"            \u0027BIOSSetting\u0027: [\u00271.1\u0027],"},{"line_number":347,"context_line":"            \u0027Node\u0027: [\u00271.35\u0027, \u00271.35\u0027],"},{"line_number":348,"context_line":"            \u0027Conductor\u0027: [\u00271.3\u0027],"},{"line_number":349,"context_line":"            \u0027Chassis\u0027: [\u00271.3\u0027],"},{"line_number":350,"context_line":"            \u0027Deployment\u0027: [\u00271.0\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"46eb48d6_442c751f","line":347,"range":{"start_line":347,"start_character":22,"end_line":347,"end_character":26},"updated":"2021-06-22 07:42:31.000000000","message":"if you\u0027re changing node definition, this should be 1.36","commit_id":"3928c0e714c6dfed6bc3e4ddf75d1562ba9025d4"}],"ironic/conductor/utils.py":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"df63b2e2a7884365b934a82ef6036bcabf24c76e","unresolved":true,"context_lines":[{"line_number":1430,"context_line":"             {\u0027vendor\u0027: vendor, \u0027node\u0027: task.node.uuid})"},{"line_number":1431,"context_line":""},{"line_number":1432,"context_line":""},{"line_number":1433,"context_line":"def node_cache_boot_mode(task):"},{"line_number":1434,"context_line":"    \"\"\"Cache boot_mode and secure_boot state if supported by driver."},{"line_number":1435,"context_line":""},{"line_number":1436,"context_line":"    :param task: a TaskManager instance containing the node to check."}],"source_content_type":"text/x-python","patch_set":5,"id":"50b4ba18_1afa345c","line":1433,"updated":"2021-06-22 07:42:31.000000000","message":"I could see this split in two functions, boot_mode AND secure_boot states caching","commit_id":"3928c0e714c6dfed6bc3e4ddf75d1562ba9025d4"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9f3f66bdb7c7300d064f6094ddc110f8e49c49bd","unresolved":false,"context_lines":[{"line_number":1430,"context_line":"             {\u0027vendor\u0027: vendor, \u0027node\u0027: task.node.uuid})"},{"line_number":1431,"context_line":""},{"line_number":1432,"context_line":""},{"line_number":1433,"context_line":"def node_cache_boot_mode(task):"},{"line_number":1434,"context_line":"    \"\"\"Cache boot_mode and secure_boot state if supported by driver."},{"line_number":1435,"context_line":""},{"line_number":1436,"context_line":"    :param task: a TaskManager instance containing the node to check."}],"source_content_type":"text/x-python","patch_set":7,"id":"764c9e73_ecc35a23","line":1433,"updated":"2021-06-24 09:38:32.000000000","message":"Please add unit tests for this function","commit_id":"cd548ec84fd817a18cba2fb54ff7b03564d5f6b4"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9942b31a96a03a294092e8ec8ba6ee5c57652566","unresolved":true,"context_lines":[{"line_number":1430,"context_line":"             {\u0027vendor\u0027: vendor, \u0027node\u0027: task.node.uuid})"},{"line_number":1431,"context_line":""},{"line_number":1432,"context_line":""},{"line_number":1433,"context_line":"def node_cache_boot_mode(task):"},{"line_number":1434,"context_line":"    \"\"\"Cache boot_mode and secure_boot state if supported by driver."},{"line_number":1435,"context_line":""},{"line_number":1436,"context_line":"    :param task: a TaskManager instance containing the node to check."}],"source_content_type":"text/x-python","patch_set":11,"id":"f794208d_a7562b2b","line":1433,"updated":"2021-06-25 10:54:38.000000000","message":"I don\u0027t think we call this new function anywhere, do we? I think we should call it on the transition to \"manageable\" state and on power sync (same place where other cache functions are called).\n\nPlease also update https://opendev.org/openstack/ironic/src/branch/master/ironic/drivers/modules/boot_mode_utils.py to set the new fields on changing them.","commit_id":"dab61e1b9041367df465a2c2a7989b23ebf29293"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"4998d6fbbe68ccb8c8b3193e2f32b0039960773a","unresolved":true,"context_lines":[{"line_number":1430,"context_line":"             {\u0027vendor\u0027: vendor, \u0027node\u0027: task.node.uuid})"},{"line_number":1431,"context_line":""},{"line_number":1432,"context_line":""},{"line_number":1433,"context_line":"def node_cache_boot_mode(task):"},{"line_number":1434,"context_line":"    \"\"\"Cache boot_mode and secure_boot state if supported by driver."},{"line_number":1435,"context_line":""},{"line_number":1436,"context_line":"    :param task: a TaskManager instance containing the node to check."}],"source_content_type":"text/x-python","patch_set":11,"id":"59422470_48608f54","line":1433,"in_reply_to":"f794208d_a7562b2b","updated":"2021-06-25 12:49:50.000000000","message":"Ack","commit_id":"dab61e1b9041367df465a2c2a7989b23ebf29293"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9942b31a96a03a294092e8ec8ba6ee5c57652566","unresolved":true,"context_lines":[{"line_number":1436,"context_line":"    :param task: a TaskManager instance containing the node to check."},{"line_number":1437,"context_line":"    \"\"\""},{"line_number":1438,"context_line":"    # First let driver validate it has info to manage baremetal"},{"line_number":1439,"context_line":"    task.driver.management.validate(task)"},{"line_number":1440,"context_line":""},{"line_number":1441,"context_line":"    # Try to retrieve boot mode and secure_boot state"},{"line_number":1442,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"ffac581b_42b27746","line":1439,"updated":"2021-06-25 10:54:38.000000000","message":"I\u0027d remove this and let the caller figure it out (similarly to vendor).","commit_id":"dab61e1b9041367df465a2c2a7989b23ebf29293"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"4998d6fbbe68ccb8c8b3193e2f32b0039960773a","unresolved":false,"context_lines":[{"line_number":1436,"context_line":"    :param task: a TaskManager instance containing the node to check."},{"line_number":1437,"context_line":"    \"\"\""},{"line_number":1438,"context_line":"    # First let driver validate it has info to manage baremetal"},{"line_number":1439,"context_line":"    task.driver.management.validate(task)"},{"line_number":1440,"context_line":""},{"line_number":1441,"context_line":"    # Try to retrieve boot mode and secure_boot state"},{"line_number":1442,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"2230e529_79386b90","line":1439,"in_reply_to":"ffac581b_42b27746","updated":"2021-06-25 12:49:50.000000000","message":"Done","commit_id":"dab61e1b9041367df465a2c2a7989b23ebf29293"}],"ironic/db/sqlalchemy/alembic/versions/c1846a214450_add_boot_mode_and_secure_boot.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":"88f527085712c3911f97f2cc59031b123bd9b70c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"down_revision \u003d \u00272bbd96b6ccb9\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from alembic import op"},{"line_number":26,"context_line":"import sqlalchemy as sa"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def upgrade():"}],"source_content_type":"text/x-python","patch_set":5,"id":"da5442fb_bb802300","line":26,"updated":"2021-06-21 19:33:17.000000000","message":"You will need to reorder this to be compliance to the hacking checks for openstack. Basically move the imports to line 12.","commit_id":"3928c0e714c6dfed6bc3e4ddf75d1562ba9025d4"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9f3f66bdb7c7300d064f6094ddc110f8e49c49bd","unresolved":false,"context_lines":[{"line_number":22,"context_line":"revision \u003d \u0027c1846a214450\u0027"},{"line_number":23,"context_line":"down_revision \u003d \u00272bbd96b6ccb9\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from alembic import op"},{"line_number":26,"context_line":"import sqlalchemy as sa"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"08140fb4_e3b6b0ad","line":25,"updated":"2021-06-24 09:38:32.000000000","message":"This is an issue in the auto-generated code, it has to be fixed by hand (see other files here)","commit_id":"cd548ec84fd817a18cba2fb54ff7b03564d5f6b4"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9f3f66bdb7c7300d064f6094ddc110f8e49c49bd","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def upgrade():"},{"line_number":30,"context_line":"    op.add_column(\u0027nodes\u0027, sa.Column(\u0027boot_mode\u0027,"},{"line_number":31,"context_line":"                  sa.String(length\u003d4), nullable\u003dTrue))"},{"line_number":32,"context_line":"    op.add_column(\u0027nodes\u0027, sa.Column(\u0027secure_boot\u0027,"},{"line_number":33,"context_line":"                  sa.Boolean(), nullable\u003dTrue))"}],"source_content_type":"text/x-python","patch_set":7,"id":"805e8922_29951997","line":31,"updated":"2021-06-24 09:38:32.000000000","message":"see models.py re length","commit_id":"cd548ec84fd817a18cba2fb54ff7b03564d5f6b4"}],"ironic/db/sqlalchemy/models.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":"88f527085712c3911f97f2cc59031b123bd9b70c","unresolved":true,"context_lines":[{"line_number":208,"context_line":"    storage_interface \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":209,"context_line":"    power_interface \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":210,"context_line":"    vendor_interface \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"class Port(Base):"},{"line_number":214,"context_line":"    \"\"\"Represents a network port of a bare metal node.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"70357f26_b1cd8164","side":"PARENT","line":211,"updated":"2021-06-21 19:33:17.000000000","message":"Please remove the blank line here.","commit_id":"416a0951c8351afb48689ee4fcee7b137f371cd2"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"88f527085712c3911f97f2cc59031b123bd9b70c","unresolved":true,"context_lines":[{"line_number":209,"context_line":"    power_interface \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":210,"context_line":"    vendor_interface \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    boot_mode \u003d Column(String(4), nullable\u003dTrue)"},{"line_number":213,"context_line":"    secure_boot \u003d Column(Boolean, nullable\u003dTrue)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"05fde1b0_dfa07b2b","line":212,"updated":"2021-06-21 19:33:17.000000000","message":"Why String(4) ? UEFI, Bios, but not Legacy, None could work....","commit_id":"3928c0e714c6dfed6bc3e4ddf75d1562ba9025d4"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9f3f66bdb7c7300d064f6094ddc110f8e49c49bd","unresolved":false,"context_lines":[{"line_number":209,"context_line":"    power_interface \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":210,"context_line":"    vendor_interface \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    boot_mode \u003d Column(String(4), nullable\u003dTrue)"},{"line_number":213,"context_line":"    secure_boot \u003d Column(Boolean, nullable\u003dTrue)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"c76c7d24_47bffd20","line":212,"updated":"2021-06-24 09:38:32.000000000","message":"maybe I\u0027m a bit paranoid, but let\u0027s leave a bit more space for future changes? like 16?","commit_id":"cd548ec84fd817a18cba2fb54ff7b03564d5f6b4"}],"ironic/drivers/modules/boot_mode_utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"716ad37675c00269340c24d36a23390440e92c67","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                 \"mode %(boot_mode)s\","},{"line_number":70,"context_line":"                 {\u0027uuid\u0027: task.node.uuid, \u0027boot_mode\u0027: ironic_boot_mode})"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    manager_utils.node_cache_boot_mode(task)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def sync_boot_mode(task):"}],"source_content_type":"text/x-python","patch_set":20,"id":"f09d1f4b_26ef8737","line":72,"updated":"2021-07-01 13:31:18.000000000","message":"This should be under the \"else\" branch, so that we don\u0027t run it on UnsupportedDriverExtension","commit_id":"ef55ec98cc84b5692fc9b879a209ce2b9facc296"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"716ad37675c00269340c24d36a23390440e92c67","unresolved":false,"context_lines":[{"line_number":334,"context_line":"    else:"},{"line_number":335,"context_line":"        LOG.info(\u0027Secure boot has been enabled for node %s\u0027, task.node.uuid)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"    manager_utils.node_cache_boot_mode(task)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"@task_manager.require_exclusive_lock"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a813f0b_9ebb3db7","line":337,"updated":"2021-07-01 13:31:18.000000000","message":"same","commit_id":"ef55ec98cc84b5692fc9b879a209ce2b9facc296"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"716ad37675c00269340c24d36a23390440e92c67","unresolved":false,"context_lines":[{"line_number":361,"context_line":"    else:"},{"line_number":362,"context_line":"        LOG.info(\u0027Secure boot has been disabled for node %s\u0027, task.node.uuid)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    manager_utils.node_cache_boot_mode(task)"}],"source_content_type":"text/x-python","patch_set":20,"id":"91d10be4_1e1890d4","line":364,"updated":"2021-07-01 13:31:18.000000000","message":"same","commit_id":"ef55ec98cc84b5692fc9b879a209ce2b9facc296"}],"ironic/objects/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":"88f527085712c3911f97f2cc59031b123bd9b70c","unresolved":true,"context_lines":[{"line_number":166,"context_line":"        \u0027retired\u0027: objects.fields.BooleanField(nullable\u003dTrue),"},{"line_number":167,"context_line":"        \u0027retired_reason\u0027: object_fields.StringField(nullable\u003dTrue),"},{"line_number":168,"context_line":"        \u0027network_data\u0027: object_fields.FlexibleDictField(nullable\u003dTrue),"},{"line_number":169,"context_line":"    }"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def as_dict(self, secure\u003dFalse, mask_configdrive\u003dTrue):"},{"line_number":172,"context_line":"        d \u003d super(Node, self).as_dict()"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf6b1f1b_531dca6e","side":"PARENT","line":169,"updated":"2021-06-21 19:33:17.000000000","message":"This is not the only place the fields need to be added to be visible on a node object. At least from the API standpoint. They also need to be present in ironic/api/v1/controllers/node.py. You\u0027ll see a list of field names.","commit_id":"416a0951c8351afb48689ee4fcee7b137f371cd2"}],"ironic/tests/unit/api/controllers/v1/test_node.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9942b31a96a03a294092e8ec8ba6ee5c57652566","unresolved":true,"context_lines":[{"line_number":496,"context_line":"                                 headers\u003d{api_base.Version.string: \u00271.75\u0027})"},{"line_number":497,"context_line":"            self.assertEqual(data[\u0027boot_mode\u0027], value)"},{"line_number":498,"context_line":"            self.assertIsNone(data[\u0027secure_boot\u0027])"},{"line_number":499,"context_line":"        for value in (True, False):"},{"line_number":500,"context_line":"            node \u003d obj_utils.create_test_node(self.context,"},{"line_number":501,"context_line":"                                              boot_mode\u003d\u0027uefi\u0027,"},{"line_number":502,"context_line":"                                              secure_boot\u003dvalue,"}],"source_content_type":"text/x-python","patch_set":11,"id":"daf23342_56568def","line":499,"updated":"2021-06-25 10:54:38.000000000","message":"Please split this part into a new test function","commit_id":"dab61e1b9041367df465a2c2a7989b23ebf29293"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"4998d6fbbe68ccb8c8b3193e2f32b0039960773a","unresolved":false,"context_lines":[{"line_number":496,"context_line":"                                 headers\u003d{api_base.Version.string: \u00271.75\u0027})"},{"line_number":497,"context_line":"            self.assertEqual(data[\u0027boot_mode\u0027], value)"},{"line_number":498,"context_line":"            self.assertIsNone(data[\u0027secure_boot\u0027])"},{"line_number":499,"context_line":"        for value in (True, False):"},{"line_number":500,"context_line":"            node \u003d obj_utils.create_test_node(self.context,"},{"line_number":501,"context_line":"                                              boot_mode\u003d\u0027uefi\u0027,"},{"line_number":502,"context_line":"                                              secure_boot\u003dvalue,"}],"source_content_type":"text/x-python","patch_set":11,"id":"90ca7735_1b94af82","line":499,"in_reply_to":"daf23342_56568def","updated":"2021-06-25 12:49:50.000000000","message":"Done","commit_id":"dab61e1b9041367df465a2c2a7989b23ebf29293"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"14e4f6fa56713efbc23e7e7f9a46d0fea0217c93","unresolved":false,"context_lines":[{"line_number":1712,"context_line":"                                 headers\u003d{api_base.Version.string: \u00271.75\u0027})"},{"line_number":1713,"context_line":"            self.assertEqual(data[\u0027boot_mode\u0027], value)"},{"line_number":1714,"context_line":"            self.assertIsNone(data[\u0027secure_boot\u0027])"},{"line_number":1715,"context_line":"        for value in (True, False):"},{"line_number":1716,"context_line":"            node \u003d obj_utils.create_test_node(self.context,"},{"line_number":1717,"context_line":"                                              boot_mode\u003d\u0027uefi\u0027,"},{"line_number":1718,"context_line":"                                              secure_boot\u003dvalue,"}],"source_content_type":"text/x-python","patch_set":18,"id":"f75c4641_f1b8d099","line":1715,"updated":"2021-06-30 14:20:34.000000000","message":"This should be another test function since it checks a slightly different aspect (another field)","commit_id":"28505c5712058843b35fb00441ac4e9cf70146bb"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"70e740b954aaacf51b9ef25b88dad3875a946809","unresolved":false,"context_lines":[{"line_number":1712,"context_line":"                                 headers\u003d{api_base.Version.string: \u00271.75\u0027})"},{"line_number":1713,"context_line":"            self.assertEqual(data[\u0027boot_mode\u0027], value)"},{"line_number":1714,"context_line":"            self.assertIsNone(data[\u0027secure_boot\u0027])"},{"line_number":1715,"context_line":"        for value in (True, False):"},{"line_number":1716,"context_line":"            node \u003d obj_utils.create_test_node(self.context,"},{"line_number":1717,"context_line":"                                              boot_mode\u003d\u0027uefi\u0027,"},{"line_number":1718,"context_line":"                                              secure_boot\u003dvalue,"}],"source_content_type":"text/x-python","patch_set":18,"id":"b0a0be8e_93189084","line":1715,"in_reply_to":"f75c4641_f1b8d099","updated":"2021-06-30 14:56:28.000000000","message":"Done.","commit_id":"28505c5712058843b35fb00441ac4e9cf70146bb"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"14e4f6fa56713efbc23e7e7f9a46d0fea0217c93","unresolved":false,"context_lines":[{"line_number":1720,"context_line":"            data \u003d self.get_json(\u0027/nodes/%s/states\u0027 % node.uuid,"},{"line_number":1721,"context_line":"                                 headers\u003d{api_base.Version.string: \u00271.75\u0027})"},{"line_number":1722,"context_line":"            self.assertEqual(data[\u0027boot_mode\u0027], \u0027uefi\u0027)"},{"line_number":1723,"context_line":"            self.assertEqual(data[\u0027secure_boot\u0027], value)"},{"line_number":1724,"context_line":""},{"line_number":1725,"context_line":"    def test_node_by_instance_uuid(self):"},{"line_number":1726,"context_line":"        node \u003d obj_utils.create_test_node("}],"source_content_type":"text/x-python","patch_set":18,"id":"79dcf269_66ed1db0","line":1723,"updated":"2021-06-30 14:20:34.000000000","message":"And let\u0027s add one more test that the new fields are not visible in old versions (I suspect they are)","commit_id":"28505c5712058843b35fb00441ac4e9cf70146bb"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"70e740b954aaacf51b9ef25b88dad3875a946809","unresolved":true,"context_lines":[{"line_number":1720,"context_line":"            data \u003d self.get_json(\u0027/nodes/%s/states\u0027 % node.uuid,"},{"line_number":1721,"context_line":"                                 headers\u003d{api_base.Version.string: \u00271.75\u0027})"},{"line_number":1722,"context_line":"            self.assertEqual(data[\u0027boot_mode\u0027], \u0027uefi\u0027)"},{"line_number":1723,"context_line":"            self.assertEqual(data[\u0027secure_boot\u0027], value)"},{"line_number":1724,"context_line":""},{"line_number":1725,"context_line":"    def test_node_by_instance_uuid(self):"},{"line_number":1726,"context_line":"        node \u003d obj_utils.create_test_node("}],"source_content_type":"text/x-python","patch_set":18,"id":"0c52f382_9d1e8e63","line":1723,"in_reply_to":"79dcf269_66ed1db0","updated":"2021-06-30 14:56:28.000000000","message":"ack\n\ntest running.","commit_id":"28505c5712058843b35fb00441ac4e9cf70146bb"}],"ironic/tests/unit/conductor/test_utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9942b31a96a03a294092e8ec8ba6ee5c57652566","unresolved":true,"context_lines":[{"line_number":2374,"context_line":""},{"line_number":2375,"context_line":"        self.node.refresh()"},{"line_number":2376,"context_line":"        self.assertEqual(\"fake-efi\", self.node.boot_mode)"},{"line_number":2377,"context_line":"        self.assertEqual(True, self.node.secure_boot)"},{"line_number":2378,"context_line":""},{"line_number":2379,"context_line":"    def test_already_present(self, mock_get_boot, mock_get_secure):"},{"line_number":2380,"context_line":"        self.node.boot_mode \u003d \"fake-efi\""}],"source_content_type":"text/x-python","patch_set":11,"id":"10e6206b_3807cad9","line":2377,"updated":"2021-06-25 10:54:38.000000000","message":"please use self.assertTrue (same below)","commit_id":"dab61e1b9041367df465a2c2a7989b23ebf29293"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"4998d6fbbe68ccb8c8b3193e2f32b0039960773a","unresolved":false,"context_lines":[{"line_number":2374,"context_line":""},{"line_number":2375,"context_line":"        self.node.refresh()"},{"line_number":2376,"context_line":"        self.assertEqual(\"fake-efi\", self.node.boot_mode)"},{"line_number":2377,"context_line":"        self.assertEqual(True, self.node.secure_boot)"},{"line_number":2378,"context_line":""},{"line_number":2379,"context_line":"    def test_already_present(self, mock_get_boot, mock_get_secure):"},{"line_number":2380,"context_line":"        self.node.boot_mode \u003d \"fake-efi\""}],"source_content_type":"text/x-python","patch_set":11,"id":"13fa46b5_7e86ec1a","line":2377,"in_reply_to":"10e6206b_3807cad9","updated":"2021-06-25 12:49:50.000000000","message":"Done","commit_id":"dab61e1b9041367df465a2c2a7989b23ebf29293"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9942b31a96a03a294092e8ec8ba6ee5c57652566","unresolved":true,"context_lines":[{"line_number":2455,"context_line":""},{"line_number":2456,"context_line":"        with task_manager.acquire(self.context, self.node.id,"},{"line_number":2457,"context_line":"                                  shared\u003dTrue) as task:"},{"line_number":2458,"context_line":"            conductor_utils.node_cache_vendor(task)"},{"line_number":2459,"context_line":"            # Test that function aborts and doesn\u0027t do anything else."},{"line_number":2460,"context_line":"            # NOTE(cenne): Do we want to update states to None instead?"},{"line_number":2461,"context_line":"            self.assertFalse(mock_get_secure.called)"}],"source_content_type":"text/x-python","patch_set":11,"id":"c8a7ca48_210fb575","line":2458,"updated":"2021-06-25 10:54:38.000000000","message":"s/vendor/boot_mode/","commit_id":"dab61e1b9041367df465a2c2a7989b23ebf29293"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"4998d6fbbe68ccb8c8b3193e2f32b0039960773a","unresolved":false,"context_lines":[{"line_number":2455,"context_line":""},{"line_number":2456,"context_line":"        with task_manager.acquire(self.context, self.node.id,"},{"line_number":2457,"context_line":"                                  shared\u003dTrue) as task:"},{"line_number":2458,"context_line":"            conductor_utils.node_cache_vendor(task)"},{"line_number":2459,"context_line":"            # Test that function aborts and doesn\u0027t do anything else."},{"line_number":2460,"context_line":"            # NOTE(cenne): Do we want to update states to None instead?"},{"line_number":2461,"context_line":"            self.assertFalse(mock_get_secure.called)"}],"source_content_type":"text/x-python","patch_set":11,"id":"f2db6ab8_b6d714c6","line":2458,"in_reply_to":"c8a7ca48_210fb575","updated":"2021-06-25 12:49:50.000000000","message":"Done","commit_id":"dab61e1b9041367df465a2c2a7989b23ebf29293"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9942b31a96a03a294092e8ec8ba6ee5c57652566","unresolved":true,"context_lines":[{"line_number":2457,"context_line":"                                  shared\u003dTrue) as task:"},{"line_number":2458,"context_line":"            conductor_utils.node_cache_vendor(task)"},{"line_number":2459,"context_line":"            # Test that function aborts and doesn\u0027t do anything else."},{"line_number":2460,"context_line":"            # NOTE(cenne): Do we want to update states to None instead?"},{"line_number":2461,"context_line":"            self.assertFalse(mock_get_secure.called)"},{"line_number":2462,"context_line":"            self.assertTrue(task.shared)"},{"line_number":2463,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"cbd55ff3_9e23c6a5","line":2460,"updated":"2021-06-25 10:54:38.000000000","message":"A good question...","commit_id":"dab61e1b9041367df465a2c2a7989b23ebf29293"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9942b31a96a03a294092e8ec8ba6ee5c57652566","unresolved":true,"context_lines":[{"line_number":2478,"context_line":""},{"line_number":2479,"context_line":"        with task_manager.acquire(self.context, self.node.id,"},{"line_number":2480,"context_line":"                                  shared\u003dTrue) as task:"},{"line_number":2481,"context_line":"            conductor_utils.node_cache_vendor(task)"},{"line_number":2482,"context_line":"            # Test that function aborts and doesn\u0027t do anything else."},{"line_number":2483,"context_line":"            # NOTE(cenne): Do we want to update states to None instead?"},{"line_number":2484,"context_line":"            self.assertTrue(task.shared)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f3f1379_08594fb5","line":2481,"updated":"2021-06-25 10:54:38.000000000","message":"s/vendor/boot_mode/","commit_id":"dab61e1b9041367df465a2c2a7989b23ebf29293"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"4998d6fbbe68ccb8c8b3193e2f32b0039960773a","unresolved":false,"context_lines":[{"line_number":2478,"context_line":""},{"line_number":2479,"context_line":"        with task_manager.acquire(self.context, self.node.id,"},{"line_number":2480,"context_line":"                                  shared\u003dTrue) as task:"},{"line_number":2481,"context_line":"            conductor_utils.node_cache_vendor(task)"},{"line_number":2482,"context_line":"            # Test that function aborts and doesn\u0027t do anything else."},{"line_number":2483,"context_line":"            # NOTE(cenne): Do we want to update states to None instead?"},{"line_number":2484,"context_line":"            self.assertTrue(task.shared)"}],"source_content_type":"text/x-python","patch_set":11,"id":"60168364_054fa68f","line":2481,"in_reply_to":"5f3f1379_08594fb5","updated":"2021-06-25 12:49:50.000000000","message":"Done","commit_id":"dab61e1b9041367df465a2c2a7989b23ebf29293"}],"releasenotes/notes/node-boot-mode-0662effa2a2644dc.yaml":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"716ad37675c00269340c24d36a23390440e92c67","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds ``boot_mode`` and ``secure_boot`` fields to node. These indicate the "},{"line_number":5,"context_line":"    boot mode (bios/uefi) and secure boot state (True/False) detected in the "},{"line_number":6,"context_line":"    most recent powersync or management transition. "},{"line_number":7,"context_line":"    If underlying driver does not support detecting these, they shall be "},{"line_number":8,"context_line":"    populated with null values."},{"line_number":9,"context_line":"  - | "}],"source_content_type":"text/x-yaml","patch_set":20,"id":"4416f800_c8cec04a","line":6,"updated":"2021-07-01 13:31:18.000000000","message":"nit: \"power sync\", \"transition to the ``manageable`` state\"","commit_id":"ef55ec98cc84b5692fc9b879a209ce2b9facc296"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"716ad37675c00269340c24d36a23390440e92c67","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    If underlying driver does not support detecting these, they shall be "},{"line_number":8,"context_line":"    populated with null values."},{"line_number":9,"context_line":"  - | "},{"line_number":10,"context_line":"    These fields are also be available under a node\u0027s states endpoint:"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    * ``/v1/nodes/{node_ident}/states``"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":20,"id":"8173062f_9952f576","line":10,"updated":"2021-07-01 13:31:18.000000000","message":"Release notes are rendered all together from all changes. There is no guarantee that this item will right below the previous one. I suggest you merge them into one item (pretty much just replace -| with an empty line).","commit_id":"ef55ec98cc84b5692fc9b879a209ce2b9facc296"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"716ad37675c00269340c24d36a23390440e92c67","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    * ``/v1/nodes/{node_ident}/states``"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"upgrade: Regular db upgrade."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"4c789088_e128d2b5","line":14,"updated":"2021-07-01 13:31:18.000000000","message":"This should be removed for the same reason: all notes are rendered on one page (see https://docs.openstack.org/releasenotes/ironic/unreleased.html for an example or render locally with `tox -ereleasenotes`).","commit_id":"ef55ec98cc84b5692fc9b879a209ce2b9facc296"},{"author":{"_account_id":33344,"name":"cenne","email":"cennedee+opendev@protonmail.com","username":"cenne.d","status":"effervescent bubbling"},"change_message_id":"3dab62b37ba93631f19c4752dbe54c9d2d1f9079","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    * ``/v1/nodes/{node_ident}/states``"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"upgrade: Regular db upgrade."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"6a26a866_1b3f17ab","line":14,"in_reply_to":"4c789088_e128d2b5","updated":"2021-07-01 14:23:53.000000000","message":"got it. thanks.","commit_id":"ef55ec98cc84b5692fc9b879a209ce2b9facc296"}]}
