)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"fe40291ffb41b3131a984d082b87f1dd71dd01fe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"afd0e851_563598a1","updated":"2025-03-17 14:31:31.000000000","message":"The node object already has a description field that serves exactly the same purpose, so let\u0027s call this one \"description\" too.\n\nAlso please add a release note.","commit_id":"8abd4893731d792606a63ee3c867176dfd7f6937"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"41adf0cdfbfe815fd2ca9151e1cc5be719120c4a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"c1a5b870_d59572db","updated":"2025-03-18 07:27:48.000000000","message":"A few comments, all related to consistency with nodes (please check yourself what else I could have missed)","commit_id":"f0b66ae2d23c07b2ba3066786c21121630d970a8"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"348e030513bba4809f43a3a615360c0ba6093084","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"083a8b73_dc763a72","updated":"2025-03-18 13:12:33.000000000","message":"cid: wanna rebase this onto inspection so we can move this forward?","commit_id":"f0b66ae2d23c07b2ba3066786c21121630d970a8"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"bebaddeddfb7632e2f78d8fee4e42b596dab6922","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"c6e6aed4_f8842870","updated":"2025-04-04 07:57:33.000000000","message":"please let\u0027s rebase on the most recent change, thanks","commit_id":"c658dd147c6bbc656e1d1c60098c4a8d658ab751"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"fb585a4d18cb7623635bfa5226283a424425b913","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"2003a60a_105f4588","updated":"2025-04-04 12:17:27.000000000","message":"thanks","commit_id":"5b372dd9ed63d80c9a3b0e7a15b5fa5bedfac490"}],"doc/source/contributor/webapi-version-history.rst":[{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"ad048c7c62ca3f6e8b461c2d26d37cf6f5beaa92","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.97 (Flamingo)"},{"line_number":6,"context_line":"-----------------------"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"Add a \u0027description\u0027 field to the Port object."}],"source_content_type":"text/x-rst","patch_set":5,"id":"7c6f5aa0_09f207d9","line":5,"range":{"start_line":5,"start_character":0,"end_line":5,"end_character":15},"updated":"2025-03-19 16:36:52.000000000","message":"s/Flamingo/Epoxy - if within Epoxy release","commit_id":"5487471885c34ffa0787aed6e835fac6455c8ab0"}],"ironic/api/controllers/v1/port.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"41adf0cdfbfe815fd2ca9151e1cc5be719120c4a","unresolved":true,"context_lines":[{"line_number":53,"context_line":"        \u0027pxe_enabled\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027boolean\u0027, \u0027null\u0027]},"},{"line_number":54,"context_line":"        \u0027uuid\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":55,"context_line":"        \u0027name\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":56,"context_line":"        \u0027description\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":57,"context_line":"    },"},{"line_number":58,"context_line":"    \u0027required\u0027: [\u0027address\u0027],"},{"line_number":59,"context_line":"    \u0027oneOf\u0027: ["}],"source_content_type":"text/x-python","patch_set":3,"id":"fb5b9ba9_e33a5f2f","line":56,"updated":"2025-03-18 07:27:48.000000000","message":"You need to use max length to avoid cryptic errors like in https://opendev.org/openstack/ironic/src/branch/master/ironic/api/controllers/v1/node.py#L179","commit_id":"f0b66ae2d23c07b2ba3066786c21121630d970a8"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"4360e692b6c4630c0b070a9cf567c21cd2e0e864","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        \u0027pxe_enabled\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027boolean\u0027, \u0027null\u0027]},"},{"line_number":54,"context_line":"        \u0027uuid\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":55,"context_line":"        \u0027name\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":56,"context_line":"        \u0027description\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":57,"context_line":"    },"},{"line_number":58,"context_line":"    \u0027required\u0027: [\u0027address\u0027],"},{"line_number":59,"context_line":"    \u0027oneOf\u0027: ["}],"source_content_type":"text/x-python","patch_set":3,"id":"8251fea0_604ea07e","line":56,"in_reply_to":"a41f59eb_97ad20a5","updated":"2025-03-19 16:11:18.000000000","message":"Acknowledged","commit_id":"f0b66ae2d23c07b2ba3066786c21121630d970a8"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"f8bb5dd1b688fde9f5d2a89344389770bbb384e2","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        \u0027pxe_enabled\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027boolean\u0027, \u0027null\u0027]},"},{"line_number":54,"context_line":"        \u0027uuid\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":55,"context_line":"        \u0027name\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":56,"context_line":"        \u0027description\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":57,"context_line":"    },"},{"line_number":58,"context_line":"    \u0027required\u0027: [\u0027address\u0027],"},{"line_number":59,"context_line":"    \u0027oneOf\u0027: ["}],"source_content_type":"text/x-python","patch_set":3,"id":"6a0b3f8c_2c8db96c","line":56,"in_reply_to":"a41f59eb_97ad20a5","updated":"2025-03-19 15:27:26.000000000","message":"Done","commit_id":"f0b66ae2d23c07b2ba3066786c21121630d970a8"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"348e030513bba4809f43a3a615360c0ba6093084","unresolved":true,"context_lines":[{"line_number":53,"context_line":"        \u0027pxe_enabled\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027boolean\u0027, \u0027null\u0027]},"},{"line_number":54,"context_line":"        \u0027uuid\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":55,"context_line":"        \u0027name\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":56,"context_line":"        \u0027description\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":57,"context_line":"    },"},{"line_number":58,"context_line":"    \u0027required\u0027: [\u0027address\u0027],"},{"line_number":59,"context_line":"    \u0027oneOf\u0027: ["}],"source_content_type":"text/x-python","patch_set":3,"id":"a41f59eb_97ad20a5","line":56,"in_reply_to":"fb5b9ba9_e33a5f2f","updated":"2025-03-18 13:12:33.000000000","message":"agreed. max length 255","commit_id":"f0b66ae2d23c07b2ba3066786c21121630d970a8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"41adf0cdfbfe815fd2ca9151e1cc5be719120c4a","unresolved":true,"context_lines":[{"line_number":397,"context_line":"                   shard\u003dargs.string_list)"},{"line_number":398,"context_line":"    def get_all(self, node\u003dNone, node_uuid\u003dNone, address\u003dNone, marker\u003dNone,"},{"line_number":399,"context_line":"                limit\u003dNone, sort_key\u003d\u0027id\u0027, sort_dir\u003d\u0027asc\u0027, fields\u003dNone,"},{"line_number":400,"context_line":"                portgroup\u003dNone, detail\u003dNone, shard\u003dNone):"},{"line_number":401,"context_line":"        \"\"\"Retrieve a list of ports."},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"        Note that the \u0027node_uuid\u0027 interface is deprecated in favour"}],"source_content_type":"text/x-python","patch_set":3,"id":"65fd2589_4e76dd2d","line":400,"updated":"2025-03-18 07:27:48.000000000","message":"Nodes have a way to filter by a substring of descriptions https://opendev.org/openstack/ironic/src/branch/master/ironic/api/controllers/v1/node.py#L2478, let\u0027s have this feature here as well.","commit_id":"f0b66ae2d23c07b2ba3066786c21121630d970a8"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"f8bb5dd1b688fde9f5d2a89344389770bbb384e2","unresolved":false,"context_lines":[{"line_number":397,"context_line":"                   shard\u003dargs.string_list)"},{"line_number":398,"context_line":"    def get_all(self, node\u003dNone, node_uuid\u003dNone, address\u003dNone, marker\u003dNone,"},{"line_number":399,"context_line":"                limit\u003dNone, sort_key\u003d\u0027id\u0027, sort_dir\u003d\u0027asc\u0027, fields\u003dNone,"},{"line_number":400,"context_line":"                portgroup\u003dNone, detail\u003dNone, shard\u003dNone):"},{"line_number":401,"context_line":"        \"\"\"Retrieve a list of ports."},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"        Note that the \u0027node_uuid\u0027 interface is deprecated in favour"}],"source_content_type":"text/x-python","patch_set":3,"id":"6ca1cf29_30ce98e6","line":400,"in_reply_to":"65fd2589_4e76dd2d","updated":"2025-03-19 15:27:26.000000000","message":"Done","commit_id":"f0b66ae2d23c07b2ba3066786c21121630d970a8"}],"ironic/api/controllers/v1/utils.py":[{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"4360e692b6c4630c0b070a9cf567c21cd2e0e864","unresolved":true,"context_lines":[{"line_number":2233,"context_line":"def allow_port_description():"},{"line_number":2234,"context_line":"    \"\"\"Check if label is allowed for ports."},{"line_number":2235,"context_line":""},{"line_number":2236,"context_line":"    Version 1.97 of the API added label field to the port object."},{"line_number":2237,"context_line":"    \"\"\""},{"line_number":2238,"context_line":"    return api.request.version.minor \u003e\u003d versions.MINOR_97_PORT_DESCRIPTION"}],"source_content_type":"text/x-python","patch_set":5,"id":"dd2d6e3c_d9332c8d","line":2236,"range":{"start_line":2236,"start_character":0,"end_line":2236,"end_character":65},"updated":"2025-03-19 16:11:18.000000000","message":"s/label/description","commit_id":"5487471885c34ffa0787aed6e835fac6455c8ab0"}],"ironic/api/controllers/v1/versions.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"41adf0cdfbfe815fd2ca9151e1cc5be719120c4a","unresolved":true,"context_lines":[{"line_number":133,"context_line":"# v1.93: Add GET API for virtual media"},{"line_number":134,"context_line":"# v1.94: Add node name support for port creation"},{"line_number":135,"context_line":"# v1.95: Add node support for disable_power_off"},{"line_number":136,"context_line":"# v1.97: Add label field to ports for a fixed and human-readable labels"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"MINOR_0_JUNO \u003d 0"},{"line_number":139,"context_line":"MINOR_1_INITIAL_VERSION \u003d 1"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aeaf119_587d571a","line":136,"updated":"2025-03-18 07:27:48.000000000","message":"You cannot skip a version this way (yes, I know that this change is racing with the inspection rules)","commit_id":"f0b66ae2d23c07b2ba3066786c21121630d970a8"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"4360e692b6c4630c0b070a9cf567c21cd2e0e864","unresolved":false,"context_lines":[{"line_number":133,"context_line":"# v1.93: Add GET API for virtual media"},{"line_number":134,"context_line":"# v1.94: Add node name support for port creation"},{"line_number":135,"context_line":"# v1.95: Add node support for disable_power_off"},{"line_number":136,"context_line":"# v1.97: Add label field to ports for a fixed and human-readable labels"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"MINOR_0_JUNO \u003d 0"},{"line_number":139,"context_line":"MINOR_1_INITIAL_VERSION \u003d 1"}],"source_content_type":"text/x-python","patch_set":3,"id":"49e76b16_b14c3d11","line":136,"in_reply_to":"7aeaf119_587d571a","updated":"2025-03-19 16:11:18.000000000","message":"Acknowledged","commit_id":"f0b66ae2d23c07b2ba3066786c21121630d970a8"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"f8bb5dd1b688fde9f5d2a89344389770bbb384e2","unresolved":false,"context_lines":[{"line_number":133,"context_line":"# v1.93: Add GET API for virtual media"},{"line_number":134,"context_line":"# v1.94: Add node name support for port creation"},{"line_number":135,"context_line":"# v1.95: Add node support for disable_power_off"},{"line_number":136,"context_line":"# v1.97: Add label field to ports for a fixed and human-readable labels"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"MINOR_0_JUNO \u003d 0"},{"line_number":139,"context_line":"MINOR_1_INITIAL_VERSION \u003d 1"}],"source_content_type":"text/x-python","patch_set":3,"id":"447f4e92_12b1bd30","line":136,"in_reply_to":"7aeaf119_587d571a","updated":"2025-03-19 15:27:26.000000000","message":"Done","commit_id":"f0b66ae2d23c07b2ba3066786c21121630d970a8"}],"ironic/common/release_mappings.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"e453b073c2fa121b72a0f6e8317bc1ea671dd6f4","unresolved":true,"context_lines":[{"line_number":818,"context_line":"RELEASE_MAPPING[\u00272023.1\u0027] \u003d RELEASE_MAPPING[\u002721.4\u0027]"},{"line_number":819,"context_line":"RELEASE_MAPPING[\u00272023.2\u0027] \u003d RELEASE_MAPPING[\u002723.0\u0027]"},{"line_number":820,"context_line":"RELEASE_MAPPING[\u00272024.1\u0027] \u003d RELEASE_MAPPING[\u002724.1\u0027]"},{"line_number":821,"context_line":"RELEASE_MAPPING[\u00272024.2\u0027] \u003d RELEASE_MAPPING[\u002726.1\u0027]"},{"line_number":822,"context_line":""},{"line_number":823,"context_line":"# List of available versions with named versions first; \u0027master\u0027 is excluded."},{"line_number":824,"context_line":"RELEASE_VERSIONS \u003d sorted(set(RELEASE_MAPPING) - {\u0027master\u0027}, reverse\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"f125c231_813526de","line":821,"updated":"2025-03-17 19:45:40.000000000","message":"you\u0027re gonna want to make sure this is updated before this lands, given it\u0027s targetted for f -- this is usually done right after the release is cut, just noting this shouldn\u0027t land until rebased on top of that change","commit_id":"f0b66ae2d23c07b2ba3066786c21121630d970a8"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"bebaddeddfb7632e2f78d8fee4e42b596dab6922","unresolved":true,"context_lines":[{"line_number":818,"context_line":"RELEASE_MAPPING[\u00272023.1\u0027] \u003d RELEASE_MAPPING[\u002721.4\u0027]"},{"line_number":819,"context_line":"RELEASE_MAPPING[\u00272023.2\u0027] \u003d RELEASE_MAPPING[\u002723.0\u0027]"},{"line_number":820,"context_line":"RELEASE_MAPPING[\u00272024.1\u0027] \u003d RELEASE_MAPPING[\u002724.1\u0027]"},{"line_number":821,"context_line":"RELEASE_MAPPING[\u00272024.2\u0027] \u003d RELEASE_MAPPING[\u002726.1\u0027]"},{"line_number":822,"context_line":""},{"line_number":823,"context_line":"# List of available versions with named versions first; \u0027master\u0027 is excluded."},{"line_number":824,"context_line":"RELEASE_VERSIONS \u003d sorted(set(RELEASE_MAPPING) - {\u0027master\u0027}, reverse\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"4038418c_d69d82bc","line":821,"in_reply_to":"f125c231_813526de","updated":"2025-04-04 07:57:33.000000000","message":"let\u0027s update this now","commit_id":"f0b66ae2d23c07b2ba3066786c21121630d970a8"}],"ironic/db/sqlalchemy/models.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"41adf0cdfbfe815fd2ca9151e1cc5be719120c4a","unresolved":true,"context_lines":[{"line_number":269,"context_line":"    physical_network \u003d Column(String(64), nullable\u003dTrue)"},{"line_number":270,"context_line":"    is_smartnic \u003d Column(Boolean, nullable\u003dTrue, default\u003dFalse)"},{"line_number":271,"context_line":"    name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":272,"context_line":"    description \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    _node_uuid \u003d orm.relationship("},{"line_number":275,"context_line":"        \"Node\","}],"source_content_type":"text/x-python","patch_set":3,"id":"ea3698df_5e02c8b3","line":272,"updated":"2025-03-18 07:27:48.000000000","message":"Let\u0027s be consistent with nodes: https://opendev.org/openstack/ironic/src/branch/master/ironic/db/sqlalchemy/models.py#L197","commit_id":"f0b66ae2d23c07b2ba3066786c21121630d970a8"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"f8bb5dd1b688fde9f5d2a89344389770bbb384e2","unresolved":false,"context_lines":[{"line_number":269,"context_line":"    physical_network \u003d Column(String(64), nullable\u003dTrue)"},{"line_number":270,"context_line":"    is_smartnic \u003d Column(Boolean, nullable\u003dTrue, default\u003dFalse)"},{"line_number":271,"context_line":"    name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":272,"context_line":"    description \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    _node_uuid \u003d orm.relationship("},{"line_number":275,"context_line":"        \"Node\","}],"source_content_type":"text/x-python","patch_set":3,"id":"96816cb2_b5ba0e03","line":272,"in_reply_to":"46fc472a_99bd2991","updated":"2025-03-19 15:27:26.000000000","message":"Acknowledged","commit_id":"f0b66ae2d23c07b2ba3066786c21121630d970a8"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"348e030513bba4809f43a3a615360c0ba6093084","unresolved":true,"context_lines":[{"line_number":269,"context_line":"    physical_network \u003d Column(String(64), nullable\u003dTrue)"},{"line_number":270,"context_line":"    is_smartnic \u003d Column(Boolean, nullable\u003dTrue, default\u003dFalse)"},{"line_number":271,"context_line":"    name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":272,"context_line":"    description \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    _node_uuid \u003d orm.relationship("},{"line_number":275,"context_line":"        \"Node\","}],"source_content_type":"text/x-python","patch_set":3,"id":"46fc472a_99bd2991","line":272,"in_reply_to":"ea3698df_5e02c8b3","updated":"2025-03-18 13:12:33.000000000","message":"Maybe a text field is overkill? We don\u0027t want a storybook for a port. Then we get into the oversized messages being stuffed in.","commit_id":"f0b66ae2d23c07b2ba3066786c21121630d970a8"}]}
