)]}'
{"/COMMIT_MSG":[{"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":"88005ce3f5fe731902207caecbf265a22853500f","unresolved":true,"context_lines":[{"line_number":10,"context_line":"work for first milestone of trait based port scheduling."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Depends-On: https://review.opendev.org/c/openstack/ironic/+/955447"},{"line_number":13,"context_line":"Depends-On: https://review.opendev.org/c/openstack/ironic-tempest-plugin/+/955799"},{"line_number":14,"context_line":"Change-Id: I5a9d9c19182b232bc1b8446644cab0bf6d68d139"},{"line_number":15,"context_line":"Signed-off-by: Clif Houck \u003cme@clifhouck.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"107afc40_dbc1886b","line":13,"updated":"2025-08-15 18:26:02.000000000","message":"Same as before: please avoid depends-on across patches in the same repo.\n\nRe the ironic-tempest-plugin -- it seems like this dep is backwards? We should add the tests once these have already landed? Or am I misreading something...","commit_id":"299c461304e641715c4aca1b35f4448d0be28286"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"07bde795ccc1085507209fa804f1afada546217a","unresolved":true,"context_lines":[{"line_number":10,"context_line":"work for first milestone of trait based port scheduling."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Depends-On: https://review.opendev.org/c/openstack/ironic/+/955447"},{"line_number":13,"context_line":"Depends-On: https://review.opendev.org/c/openstack/ironic-tempest-plugin/+/955799"},{"line_number":14,"context_line":"Change-Id: I5a9d9c19182b232bc1b8446644cab0bf6d68d139"},{"line_number":15,"context_line":"Signed-off-by: Clif Houck \u003cme@clifhouck.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"ecf3e633_e8092776","line":13,"in_reply_to":"107afc40_dbc1886b","updated":"2025-08-18 18:54:25.000000000","message":"I believe the tempest test was failing because I introduced new (but correct and more consistent with other obejcts) behavior that strips out fields that aren\u0027t supported by a specific API version.","commit_id":"299c461304e641715c4aca1b35f4448d0be28286"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"9ab552ea343d9da96414406e3ab3f6c013e2b282","unresolved":false,"context_lines":[{"line_number":10,"context_line":"work for first milestone of trait based port scheduling."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Depends-On: https://review.opendev.org/c/openstack/ironic/+/955447"},{"line_number":13,"context_line":"Depends-On: https://review.opendev.org/c/openstack/ironic-tempest-plugin/+/955799"},{"line_number":14,"context_line":"Change-Id: I5a9d9c19182b232bc1b8446644cab0bf6d68d139"},{"line_number":15,"context_line":"Signed-off-by: Clif Houck \u003cme@clifhouck.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"e7a347e6_e688ed43","line":13,"in_reply_to":"ecf3e633_e8092776","updated":"2025-09-03 15:02:51.000000000","message":"Done","commit_id":"299c461304e641715c4aca1b35f4448d0be28286"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"e786f6f84cbe61a10fec665d03e35ed77fec1037","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"e1723521_119fb690","updated":"2025-08-13 19:47:06.000000000","message":"recheck dependent change is good","commit_id":"299c461304e641715c4aca1b35f4448d0be28286"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"85a26213a45fe0ef7a1e745da3e3aa5dc544bc7e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"aad68baf_4e138283","updated":"2025-08-23 15:31:22.000000000","message":"I\u0027m a BIG -1 on this change. This field needs to be inherited from the Port itself and in fact the ports in the port group need to have the same value otherwise things are going to go sideways.\n\nThis is going to make it much harder for scheduling with neutron if we have all these in dependent fields.","commit_id":"81e5b52167c640e19aeff7dde8a3f75057a3095f"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"d9e4adf93fb5c8fda34128b85c5d7353cbfc265b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"d70675aa_fadc15ec","updated":"2025-08-23 15:36:36.000000000","message":"So to expand on that. With the goal being to have ports and portgroups inter-changeable, which is great and something we want, the portgroup will really need to contain the ports that its grouping. This should use the DB model to read the data from the port its and then constraint that all the ports in the group have the same value. I don\u0027t see why we would ever want to copy this data into another column in the DB and duplicate it and worry about having to keep it in sync.","commit_id":"81e5b52167c640e19aeff7dde8a3f75057a3095f"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"8d6118ec288c10284a37637b3438d02b38d62934","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"6084c04b_8a742138","updated":"2025-08-21 17:24:11.000000000","message":"recheck CI flake","commit_id":"81e5b52167c640e19aeff7dde8a3f75057a3095f"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"a8ed4ba100b3c1c936a0a270286f500172283d22","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"15bb7a5e_4d0d6750","updated":"2025-08-19 13:56:06.000000000","message":"recheck flake","commit_id":"81e5b52167c640e19aeff7dde8a3f75057a3095f"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"9ff5637debc5ed158f0c7960524d64bfe8481d2a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"76511ed7_6d710a0b","updated":"2025-08-21 13:21:05.000000000","message":"recheck please","commit_id":"81e5b52167c640e19aeff7dde8a3f75057a3095f"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"9ab552ea343d9da96414406e3ab3f6c013e2b282","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"21c281e5_0fea0f81","in_reply_to":"aad68baf_4e138283","updated":"2025-09-03 15:02:51.000000000","message":"Done","commit_id":"81e5b52167c640e19aeff7dde8a3f75057a3095f"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"9ab552ea343d9da96414406e3ab3f6c013e2b282","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"40ebf0f8_848489f3","in_reply_to":"d70675aa_fadc15ec","updated":"2025-09-03 15:02:51.000000000","message":"Done","commit_id":"81e5b52167c640e19aeff7dde8a3f75057a3095f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d8265ea338e6e31bd3aaee6e4e80c5a0377e222e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1440e9aa_b48da6f1","updated":"2025-08-29 15:59:24.000000000","message":"I think we need to revisit this based upon the discussion from the meeting of the 25th. https://meetings.opendev.org/irclogs/%23openstack-ironic/%23openstack-ironic.2025-08-25.log.html As such, marking -1. If we want to take a different path or handle that as multiple patches just let me know.","commit_id":"8303ea4351485c2cb9a15d30e23027fd3d7ee470"},{"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":"7b0c3ce56209cfd9cc204daa9c1d4087037ec642","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"10cc3ec5_5ba11703","updated":"2025-09-10 22:43:55.000000000","message":"forgot to send a message from earlier","commit_id":"8a3302d7d22b2150a9d63d4e9e4a9641a25d89b9"},{"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":"5c2252b24b89560bba696ab8c22efcabd1648a51","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"eb445f78_15cd4d54","updated":"2025-09-24 19:57:05.000000000","message":"reminder to update webapi-version-history since we released F","commit_id":"8a3302d7d22b2150a9d63d4e9e4a9641a25d89b9"},{"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":"0bd5080a385ca78ca5ff50130bc3746710818f36","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":12,"id":"152f58ec_74139a8f","updated":"2025-10-09 19:57:12.000000000","message":"Feedback isn\u0027t blocking as the file is already inconsistent; but I do wonder if there\u0027s something I\u0027m missing or if we\u0027re just inconsistent :D","commit_id":"d8cfd43799a9e3e48c0207a90b9c7eeb634cd9dd"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"758c767e93af69d2b64b6f19948daa6640289a95","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":12,"id":"7b84a90f_139c91a5","updated":"2025-10-10 06:16:42.000000000","message":"well I’m a +2 on this change overall but since it failed tests I think you can also address Jay’s feedback about i18n when the tests get fixed up.","commit_id":"d8cfd43799a9e3e48c0207a90b9c7eeb634cd9dd"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"5ac0b3de8f90ed7dc92e2cba354c1695ec9aa3de","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"5cf33f72_57b167e4","in_reply_to":"152f58ec_74139a8f","updated":"2025-10-15 14:25:28.000000000","message":"Done","commit_id":"d8cfd43799a9e3e48c0207a90b9c7eeb634cd9dd"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"5ac0b3de8f90ed7dc92e2cba354c1695ec9aa3de","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"c4f240b6_ed837488","in_reply_to":"7b84a90f_139c91a5","updated":"2025-10-15 14:25:28.000000000","message":"Acknowledged","commit_id":"d8cfd43799a9e3e48c0207a90b9c7eeb634cd9dd"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"eb1f0b95dece414044d7549abb7b8b0abb9217c8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"0526d3d2_56bc5571","updated":"2025-10-13 21:35:20.000000000","message":"recheck unrelated unit test failure?","commit_id":"4a4ea08fce2c82e53fc76104df012e192532ac44"}],"doc/source/contributor/webapi-version-history.rst":[{"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":"5c2252b24b89560bba696ab8c22efcabd1648a51","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.102 (Flamingo)"},{"line_number":6,"context_line":"-----------------------"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"Add a \u0027physical_network\u0027 field to the Portgroup object."}],"source_content_type":"text/x-rst","patch_set":9,"id":"fde10757_9080c838","line":5,"updated":"2025-09-24 19:57:05.000000000","message":"Gazpatcho (sp?) at this point.","commit_id":"8303ea4351485c2cb9a15d30e23027fd3d7ee470"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"33e4ece8e963fafa5f528d0154542b9be8990ed9","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.102 (Flamingo)"},{"line_number":6,"context_line":"-----------------------"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"Add a \u0027physical_network\u0027 field to the Portgroup object."}],"source_content_type":"text/x-rst","patch_set":9,"id":"4377bc46_4ee8b303","line":5,"in_reply_to":"fde10757_9080c838","updated":"2025-10-13 19:59:43.000000000","message":"Done","commit_id":"8303ea4351485c2cb9a15d30e23027fd3d7ee470"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"8a7ee74e8d1e2dbec29923ee8de7273123c90725","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.102 (Flamingo)"},{"line_number":6,"context_line":"-----------------------"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"Add a \u0027physical_network\u0027 field to the Portgroup object."}],"source_content_type":"text/x-rst","patch_set":11,"id":"d6824168_c08d2c85","line":5,"range":{"start_line":5,"start_character":7,"end_line":5,"end_character":15},"updated":"2025-09-23 19:05:47.000000000","message":"Gazpacho","commit_id":"8a3302d7d22b2150a9d63d4e9e4a9641a25d89b9"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"33e4ece8e963fafa5f528d0154542b9be8990ed9","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.102 (Flamingo)"},{"line_number":6,"context_line":"-----------------------"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"Add a \u0027physical_network\u0027 field to the Portgroup object."}],"source_content_type":"text/x-rst","patch_set":11,"id":"d9d8c23d_515b5ec7","line":5,"range":{"start_line":5,"start_character":7,"end_line":5,"end_character":15},"in_reply_to":"d6824168_c08d2c85","updated":"2025-10-13 19:59:43.000000000","message":"Done","commit_id":"8a3302d7d22b2150a9d63d4e9e4a9641a25d89b9"}],"ironic/api/controllers/v1/port.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":"0bd5080a385ca78ca5ff50130bc3746710818f36","unresolved":true,"context_lines":[{"line_number":822,"context_line":"        if (api_utils.allow_portgroup_physical_network()"},{"line_number":823,"context_line":"            and api_utils.is_path_updated(patch, \u0027/physical_network\u0027)"},{"line_number":824,"context_line":"            and portgroup is not None):"},{"line_number":825,"context_line":"            raise exception.Invalid(\u0027physical_network cannot be changed while \u0027"},{"line_number":826,"context_line":"                                    \u0027the port belongs to a portgroup.\u0027)"},{"line_number":827,"context_line":""},{"line_number":828,"context_line":"        notify_extra \u003d {\u0027node_uuid\u0027: rpc_node.uuid,"}],"source_content_type":"text/x-python","patch_set":12,"id":"933afe59_fa8b1fc6","line":825,"updated":"2025-10-09 19:57:12.000000000","message":"Obviously just above this it is missing too, but the msg on port 809 is wrapped in i18n wrapper (the _(\"blah\") around msg) -- is there a reason this one shouldn\u0027t be? I don\u0027t see why the invalid exceptions (here and above) shouldn\u0027t be internationalized, but am I missing something?","commit_id":"d8cfd43799a9e3e48c0207a90b9c7eeb634cd9dd"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"5ac0b3de8f90ed7dc92e2cba354c1695ec9aa3de","unresolved":false,"context_lines":[{"line_number":822,"context_line":"        if (api_utils.allow_portgroup_physical_network()"},{"line_number":823,"context_line":"            and api_utils.is_path_updated(patch, \u0027/physical_network\u0027)"},{"line_number":824,"context_line":"            and portgroup is not None):"},{"line_number":825,"context_line":"            raise exception.Invalid(\u0027physical_network cannot be changed while \u0027"},{"line_number":826,"context_line":"                                    \u0027the port belongs to a portgroup.\u0027)"},{"line_number":827,"context_line":""},{"line_number":828,"context_line":"        notify_extra \u003d {\u0027node_uuid\u0027: rpc_node.uuid,"}],"source_content_type":"text/x-python","patch_set":12,"id":"757dd6e2_b09e6d75","line":825,"in_reply_to":"445d5d88_c3b94abc","updated":"2025-10-15 14:25:28.000000000","message":"Done","commit_id":"d8cfd43799a9e3e48c0207a90b9c7eeb634cd9dd"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"33e4ece8e963fafa5f528d0154542b9be8990ed9","unresolved":true,"context_lines":[{"line_number":822,"context_line":"        if (api_utils.allow_portgroup_physical_network()"},{"line_number":823,"context_line":"            and api_utils.is_path_updated(patch, \u0027/physical_network\u0027)"},{"line_number":824,"context_line":"            and portgroup is not None):"},{"line_number":825,"context_line":"            raise exception.Invalid(\u0027physical_network cannot be changed while \u0027"},{"line_number":826,"context_line":"                                    \u0027the port belongs to a portgroup.\u0027)"},{"line_number":827,"context_line":""},{"line_number":828,"context_line":"        notify_extra \u003d {\u0027node_uuid\u0027: rpc_node.uuid,"}],"source_content_type":"text/x-python","patch_set":12,"id":"445d5d88_c3b94abc","line":825,"in_reply_to":"933afe59_fa8b1fc6","updated":"2025-10-13 19:59:43.000000000","message":"It\u0027s easy to miss/forget about `_()` denoting an internationalized string. That\u0027s my excuse at least.","commit_id":"d8cfd43799a9e3e48c0207a90b9c7eeb634cd9dd"}],"ironic/api/controllers/v1/portgroup.py":[{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"9ab552ea343d9da96414406e3ab3f6c013e2b282","unresolved":true,"context_lines":[{"line_number":565,"context_line":"                api_utils.get_patch_values(patch, \u0027/physical_network\u0027)[0]"},{"line_number":566,"context_line":"            # Update each port in the portgroup to have matching"},{"line_number":567,"context_line":"            # physical_network."},{"line_number":568,"context_line":"            for p in objects.Port.list_by_portgroup_id("},{"line_number":569,"context_line":"                    api.request.context, pg[\u0027id\u0027]):"},{"line_number":570,"context_line":"                if new_physical_network !\u003d p.physical_network:"},{"line_number":571,"context_line":"                    p.physical_network \u003d new_physical_network"}],"source_content_type":"text/x-python","patch_set":11,"id":"50a04612_fe429db3","line":568,"updated":"2025-09-03 15:02:51.000000000","message":"To reviewers: Is this the right way to propagate this change to constituent ports?","commit_id":"8a3302d7d22b2150a9d63d4e9e4a9641a25d89b9"},{"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":"acf2b732b48a8a413b31bc6c0ba1d487e4c8f12a","unresolved":true,"context_lines":[{"line_number":565,"context_line":"                api_utils.get_patch_values(patch, \u0027/physical_network\u0027)[0]"},{"line_number":566,"context_line":"            # Update each port in the portgroup to have matching"},{"line_number":567,"context_line":"            # physical_network."},{"line_number":568,"context_line":"            for p in objects.Port.list_by_portgroup_id("},{"line_number":569,"context_line":"                    api.request.context, pg[\u0027id\u0027]):"},{"line_number":570,"context_line":"                if new_physical_network !\u003d p.physical_network:"},{"line_number":571,"context_line":"                    p.physical_network \u003d new_physical_network"}],"source_content_type":"text/x-python","patch_set":11,"id":"eeee13b4_a9b22d1f","line":568,"in_reply_to":"50a04612_fe429db3","updated":"2025-09-10 18:08:25.000000000","message":"I\u0027m not sure what the right pattern is, but I\u0027m concerned this isn\u0027t it. I\u0027m pretty sure we shouldn\u0027t be directly modifying objects in this layer, but IMBW.","commit_id":"8a3302d7d22b2150a9d63d4e9e4a9641a25d89b9"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"8a7ee74e8d1e2dbec29923ee8de7273123c90725","unresolved":true,"context_lines":[{"line_number":565,"context_line":"                api_utils.get_patch_values(patch, \u0027/physical_network\u0027)[0]"},{"line_number":566,"context_line":"            # Update each port in the portgroup to have matching"},{"line_number":567,"context_line":"            # physical_network."},{"line_number":568,"context_line":"            for p in objects.Port.list_by_portgroup_id("},{"line_number":569,"context_line":"                    api.request.context, pg[\u0027id\u0027]):"},{"line_number":570,"context_line":"                if new_physical_network !\u003d p.physical_network:"},{"line_number":571,"context_line":"                    p.physical_network \u003d new_physical_network"}],"source_content_type":"text/x-python","patch_set":11,"id":"fe9a8a86_52fc9ba6","line":568,"in_reply_to":"c1d598c7_427d9fb7","updated":"2025-09-23 19:05:47.000000000","message":"Yeah, *ideally* we trigger an rpc operation and hold a lock on the node to prevent any potential conflicts or concurrency issues.","commit_id":"8a3302d7d22b2150a9d63d4e9e4a9641a25d89b9"},{"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":"7b0c3ce56209cfd9cc204daa9c1d4087037ec642","unresolved":true,"context_lines":[{"line_number":565,"context_line":"                api_utils.get_patch_values(patch, \u0027/physical_network\u0027)[0]"},{"line_number":566,"context_line":"            # Update each port in the portgroup to have matching"},{"line_number":567,"context_line":"            # physical_network."},{"line_number":568,"context_line":"            for p in objects.Port.list_by_portgroup_id("},{"line_number":569,"context_line":"                    api.request.context, pg[\u0027id\u0027]):"},{"line_number":570,"context_line":"                if new_physical_network !\u003d p.physical_network:"},{"line_number":571,"context_line":"                    p.physical_network \u003d new_physical_network"}],"source_content_type":"text/x-python","patch_set":11,"id":"c1d598c7_427d9fb7","line":568,"in_reply_to":"eeee13b4_a9b22d1f","updated":"2025-09-10 22:43:55.000000000","message":"I think destroy_portgroup in RPC API is the best model for this. Why isn\u0027t create_portgroup funneled thru RPC though?","commit_id":"8a3302d7d22b2150a9d63d4e9e4a9641a25d89b9"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"33e4ece8e963fafa5f528d0154542b9be8990ed9","unresolved":false,"context_lines":[{"line_number":565,"context_line":"                api_utils.get_patch_values(patch, \u0027/physical_network\u0027)[0]"},{"line_number":566,"context_line":"            # Update each port in the portgroup to have matching"},{"line_number":567,"context_line":"            # physical_network."},{"line_number":568,"context_line":"            for p in objects.Port.list_by_portgroup_id("},{"line_number":569,"context_line":"                    api.request.context, pg[\u0027id\u0027]):"},{"line_number":570,"context_line":"                if new_physical_network !\u003d p.physical_network:"},{"line_number":571,"context_line":"                    p.physical_network \u003d new_physical_network"}],"source_content_type":"text/x-python","patch_set":11,"id":"d810e66e_30870f5e","line":568,"in_reply_to":"fe9a8a86_52fc9ba6","updated":"2025-10-13 19:59:43.000000000","message":"Done","commit_id":"8a3302d7d22b2150a9d63d4e9e4a9641a25d89b9"}],"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":"505bac8740ca9be8a1add80c170cfe8eb78c21ef","unresolved":true,"context_lines":[{"line_number":861,"context_line":"            \u0027Deployment\u0027: [\u00271.0\u0027],"},{"line_number":862,"context_line":"            \u0027DeployTemplate\u0027: [\u00271.1\u0027],"},{"line_number":863,"context_line":"            \u0027Port\u0027: [\u00271.12\u0027],"},{"line_number":864,"context_line":"            \u0027Portgroup\u0027: [\u00271.5\u0027],"},{"line_number":865,"context_line":"            \u0027Trait\u0027: [\u00271.0\u0027],"},{"line_number":866,"context_line":"            \u0027TraitList\u0027: [\u00271.0\u0027],"},{"line_number":867,"context_line":"            \u0027VolumeConnector\u0027: [\u00271.0\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"0c6d501f_b9fe6b35","line":864,"updated":"2025-08-11 17:34:54.000000000","message":"reminder to bump object","commit_id":"bf53b7acf1d73f8ad6b10fbf6d7537908193c89d"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"a050883e2ef8779eb93b9bcd76277181aca99498","unresolved":false,"context_lines":[{"line_number":861,"context_line":"            \u0027Deployment\u0027: [\u00271.0\u0027],"},{"line_number":862,"context_line":"            \u0027DeployTemplate\u0027: [\u00271.1\u0027],"},{"line_number":863,"context_line":"            \u0027Port\u0027: [\u00271.12\u0027],"},{"line_number":864,"context_line":"            \u0027Portgroup\u0027: [\u00271.5\u0027],"},{"line_number":865,"context_line":"            \u0027Trait\u0027: [\u00271.0\u0027],"},{"line_number":866,"context_line":"            \u0027TraitList\u0027: [\u00271.0\u0027],"},{"line_number":867,"context_line":"            \u0027VolumeConnector\u0027: [\u00271.0\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"0a85e10e_4f314df9","line":864,"in_reply_to":"0c6d501f_b9fe6b35","updated":"2025-08-13 16:36:57.000000000","message":"Done","commit_id":"bf53b7acf1d73f8ad6b10fbf6d7537908193c89d"}],"ironic/objects/portgroup.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":"da6b39e7f44066007a5e0cdb544a9138dde7f489","unresolved":true,"context_lines":[{"line_number":58,"context_line":"        \u0027physical_network\u0027: object_fields.StringField(nullable\u003dTrue),"},{"line_number":59,"context_line":"    }"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    # TODO(clif): Abstract this, already exists in Port object."},{"line_number":62,"context_line":"    def _convert_field_by_version(self, field_name, introduced_version,"},{"line_number":63,"context_line":"                                  target_version,"},{"line_number":64,"context_line":"                                  remove_unavailable_fields\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a046209_c8b0567d","line":61,"updated":"2025-08-22 17:00:50.000000000","message":"it\u0027d be nice to do this in a followup, especially since we\u0027re about to embark on making port/portgroup even more interchangable than before","commit_id":"81e5b52167c640e19aeff7dde8a3f75057a3095f"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"9ab552ea343d9da96414406e3ab3f6c013e2b282","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        \u0027physical_network\u0027: object_fields.StringField(nullable\u003dTrue),"},{"line_number":59,"context_line":"    }"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    # TODO(clif): Abstract this, already exists in Port object."},{"line_number":62,"context_line":"    def _convert_field_by_version(self, field_name, introduced_version,"},{"line_number":63,"context_line":"                                  target_version,"},{"line_number":64,"context_line":"                                  remove_unavailable_fields\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":8,"id":"cbb3d1d5_39944448","line":61,"in_reply_to":"9a046209_c8b0567d","updated":"2025-09-03 15:02:51.000000000","message":"Acknowledged","commit_id":"81e5b52167c640e19aeff7dde8a3f75057a3095f"}],"releasenotes/notes/portgroup-physical_network-ea6df85c3e7a18ea.yaml":[{"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":"505bac8740ca9be8a1add80c170cfe8eb78c21ef","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new \"physical_network\" field has been added to the Portgroup object. This"},{"line_number":5,"context_line":"    field is semantically the same as the \"physical_network\" Port field."},{"line_number":6,"context_line":"    Relevant to trait based port scheduling feature."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"11eb7b16_b8c8671a","line":6,"updated":"2025-08-11 17:34:54.000000000","message":"I\u0027d just say \"This will allow portgroups to be scheduled by physical network, similar to ports, in a future change\"","commit_id":"bf53b7acf1d73f8ad6b10fbf6d7537908193c89d"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"a050883e2ef8779eb93b9bcd76277181aca99498","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new \"physical_network\" field has been added to the Portgroup object. This"},{"line_number":5,"context_line":"    field is semantically the same as the \"physical_network\" Port field."},{"line_number":6,"context_line":"    Relevant to trait based port scheduling feature."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"13880fdf_7c0b46a3","line":6,"in_reply_to":"11eb7b16_b8c8671a","updated":"2025-08-13 16:36:57.000000000","message":"Done","commit_id":"bf53b7acf1d73f8ad6b10fbf6d7537908193c89d"}]}
