)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"cf5cfde3adaec602a13464048206ca047353f23d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"a5849bd6_3c905395","updated":"2025-05-08 16:28:45.000000000","message":"Comments from a sync video chat with a few stakeholders. I will put a revision into this spec in the next few days.","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a5cb7c1cde373d2d9d8bd5989ea7d194497a9f57","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"4c2fef7b_f51b90a6","updated":"2025-05-08 16:02:40.000000000","message":"Just adding some thoughts.","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"0819bf3e9df5d89dbbd914004fda33b32af834ce","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f630b473_6fe38a93","updated":"2025-04-09 15:04:32.000000000","message":"Other notes from PTG:\n- Ensure we have the \"fail on binding\" patch landed and that network plugging issues are represented well back to the user\n\n\nAlternative from johnthetubaguy:\n- Create a new concept of a portgroup that is late-bound, these portgroups could be chosen between, like deploy templates, by trait. This allows an operator to curate combinations of networks that are known to work at the cost of reducing the overall flexibility.","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"84bd073459720dc8402555d83ac1b6a8c3771f80","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"bd6ca628_eccb2b17","in_reply_to":"f630b473_6fe38a93","updated":"2025-04-25 18:10:53.000000000","message":"So, The concept of a late binding portgroup is sort of the same basic challenge as we\u0027re seeing with deferred addressing ports. Someone has to deal with the metadata and a late binding portgroup is likely just worse.\n\nAn alternative is a portgroup which dynamically assmebles capible ports, which I think was one of the original intents, but reality didn\u0027t quite map out to it cleanly.","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"68f2702813f76baafccfe30eeeb6b46a24ff9af0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"b9d2ec7d_e69d0ef0","updated":"2025-05-13 20:51:15.000000000","message":"I have things to ponder but pushing what I have now.","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"9e42a6074d266af0ae4b65e2744df826cad00c81","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"27c9c250_2e4ac35c","updated":"2025-05-13 10:09:20.000000000","message":"I mostly came here to say thank you to @juliaashleykreger@gmail.com and @jay@jvf.cc as this is looking really good. It took me a while to get my head around some bits of it, and I need to re-review with that in mind.","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"93affd78956e9dbfdd57d261a1b7261c0899b159","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"7ea86f4a_70bd3f30","updated":"2025-05-14 12:22:08.000000000","message":"Some comments, some thoughts, some questions; based on a first review pass (top-down).","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5774fc60776a18490a18f90273ea385dc4e3dffa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d2953b79_75a9be12","updated":"2025-05-14 20:27:43.000000000","message":"Still a couple outstanding comments, but this is much closer (I hope!)","commit_id":"a9eaffad36ad24043a453f8638f18c06d1c48877"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"45006b636af7a38943d5bfaf5efb7a03decd51c8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"67f9b2e0_77427b4a","updated":"2025-05-19 18:31:03.000000000","message":"Overall, in a great place/ Feels like my +1 is actually a +2, but given that it seems like a revision is due. I am definitely biased, but overall I think this is in a great shape.","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"78ce8225f9fa9edb1780be2832a05b430c6c0e23","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"e23b3a85_8b623c8b","updated":"2025-05-21 14:03:28.000000000","message":"There is another spec proposed https://review.opendev.org/c/openstack/ironic-specs/+/940861, maybe it can be take consideration in a grand plan 😊","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"620eff8c5fdfc9b6c3a0b9e784b9bcb2a5196282","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"73cb3d8c_89bb0e23","updated":"2025-05-19 14:32:59.000000000","message":"Will hold off for more reviews before revision. Thank you!","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"ff9eb196c2028495f04e2e257c0b42eda190c4fa","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":9,"id":"a91752c2_a8217f91","updated":"2025-06-18 21:25:09.000000000","message":"I\u0027m onboard with this. Withholding core review because I wrote too much of it.","commit_id":"a5e2b886819845897b46bc1db53a1066bc15d900"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"cef9bdad66ab01917e152cb9ce619744f60c2f42","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"9d4a3542_975ca401","updated":"2025-06-23 18:35:56.000000000","message":"While I started this spec, JayF and others have largely taken tihs and moved it forward. Given the state, status, and all of the other details, I\u0027m going to go ahead and approve this unless people scream soon().","commit_id":"a5e2b886819845897b46bc1db53a1066bc15d900"}],"specs/approved/trait-based-port-scheduling.rst":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ceb48c5575447faae4799f55762ff2197090f8b8","unresolved":true,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"The Teardown of the vif on that portwould trigger the dynamic portgroup to"},{"line_number":93,"context_line":"be deleted."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":".. TODO::"},{"line_number":97,"context_line":"   - Add a \"dynamic_portgroup\" field, boolean value, to the Portgroup Object"}],"source_content_type":"text/x-rst","patch_set":2,"id":"74053c4a_bf677a18","line":94,"updated":"2025-03-31 13:33:33.000000000","message":"We likely also need to discuss what the actual mental modeling of a dynamic portgroup would be, how we would work to assemble it, in other words match values to determine ports are able to be bound together.\n\nThis would likely require \"class\" and \"local_link_information\" to match for the switch *and/or* the switch mac.","commit_id":"8a82ee1f2497d13ed708b69d0f8bdc28d6108585"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"84bd073459720dc8402555d83ac1b6a8c3771f80","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"The Teardown of the vif on that portwould trigger the dynamic portgroup to"},{"line_number":93,"context_line":"be deleted."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":".. TODO::"},{"line_number":97,"context_line":"   - Add a \"dynamic_portgroup\" field, boolean value, to the Portgroup Object"}],"source_content_type":"text/x-rst","patch_set":2,"id":"4dab98b6_4573a27f","line":94,"in_reply_to":"74053c4a_bf677a18","updated":"2025-04-25 18:10:53.000000000","message":"I decided this was a bad idea. Why is covered in the next update.","commit_id":"8a82ee1f2497d13ed708b69d0f8bdc28d6108585"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ceb48c5575447faae4799f55762ff2197090f8b8","unresolved":true,"context_lines":[{"line_number":292,"context_line":"To the Port object, and ultimately API:"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"- \"vendor\" - String field - 32 characters"},{"line_number":295,"context_line":"- \"class\" - String field - 80 characters"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"To the Portgroup object, and ultimately API:"},{"line_number":298,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"947bddf7_33892704","line":295,"updated":"2025-03-31 13:33:33.000000000","message":"It occurs to me, we\u0027re going to need \"available_for_dynamic_portgroup\"","commit_id":"8a82ee1f2497d13ed708b69d0f8bdc28d6108585"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"84bd073459720dc8402555d83ac1b6a8c3771f80","unresolved":false,"context_lines":[{"line_number":292,"context_line":"To the Port object, and ultimately API:"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"- \"vendor\" - String field - 32 characters"},{"line_number":295,"context_line":"- \"class\" - String field - 80 characters"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"To the Portgroup object, and ultimately API:"},{"line_number":298,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"bef0cade_c1ec0b95","line":295,"in_reply_to":"947bddf7_33892704","updated":"2025-04-25 18:10:53.000000000","message":"Done","commit_id":"8a82ee1f2497d13ed708b69d0f8bdc28d6108585"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a5cb7c1cde373d2d9d8bd5989ea7d194497a9f57","unresolved":true,"context_lines":[{"line_number":27,"context_line":"Except, this is fundamentally limited in that with this model, we cannot:"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"* Dynamically assemble portgroups"},{"line_number":30,"context_line":"* Hint or weight to a specific port or device class."},{"line_number":31,"context_line":"* Avoid other specific types of interfaces or networks."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"For example, an operator may have a machine with:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"886cdf64_798090b7","line":30,"updated":"2025-05-08 16:02:40.000000000","message":"NIT: port or port group?","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"a7a5d2fab7b172c8744ff9a9bbc1991691c7af1b","unresolved":false,"context_lines":[{"line_number":27,"context_line":"Except, this is fundamentally limited in that with this model, we cannot:"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"* Dynamically assemble portgroups"},{"line_number":30,"context_line":"* Hint or weight to a specific port or device class."},{"line_number":31,"context_line":"* Avoid other specific types of interfaces or networks."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"For example, an operator may have a machine with:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"330c321e_28255aa6","line":30,"in_reply_to":"886cdf64_798090b7","updated":"2025-05-12 21:15:54.000000000","message":"Done","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"0819bf3e9df5d89dbbd914004fda33b32af834ce","unresolved":true,"context_lines":[{"line_number":207,"context_line":"from a file and is mapped as a key-value reference list."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"The overall idea is to create a modeling where we have a list of dictionaries,"},{"line_number":210,"context_line":"where the key value is the flavor name, which maps to a description of an"},{"line_number":211,"context_line":"overall action and a filter to apply when the condition is met."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":".. NOTE::"}],"source_content_type":"text/x-rst","patch_set":4,"id":"381284bf_091ee607","line":210,"updated":"2025-04-09 15:04:32.000000000","message":"s/flavor/trait/","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"a7a5d2fab7b172c8744ff9a9bbc1991691c7af1b","unresolved":false,"context_lines":[{"line_number":207,"context_line":"from a file and is mapped as a key-value reference list."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"The overall idea is to create a modeling where we have a list of dictionaries,"},{"line_number":210,"context_line":"where the key value is the flavor name, which maps to a description of an"},{"line_number":211,"context_line":"overall action and a filter to apply when the condition is met."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":".. NOTE::"}],"source_content_type":"text/x-rst","patch_set":4,"id":"f9bedc9b_38b25740","line":210,"in_reply_to":"381284bf_091ee607","updated":"2025-05-12 21:15:54.000000000","message":"Done","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a5cb7c1cde373d2d9d8bd5989ea7d194497a9f57","unresolved":true,"context_lines":[{"line_number":217,"context_line":""},{"line_number":218,"context_line":".. code-block:: yaml"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"  ---"},{"line_number":221,"context_line":"  custom_trait_name:"},{"line_number":222,"context_line":"    - action: bond_ports"},{"line_number":223,"context_line":"      filter: port.vendor \u003d\u003d \u0027vendor_string\u0027 \u0026\u0026 minimum_count \u003d\u003d 2"}],"source_content_type":"text/x-rst","patch_set":4,"id":"e37a4a01_e82d2af4","line":220,"updated":"2025-05-08 16:02:40.000000000","message":"NIT: it took me a while to understand this, likely due to the amount of context needed to understand it. I wonder if we should break this down to a text description of some use cases, and work through the details. I think JayF and I can try and work through some of that and come back with a more concrete suggestion around that.\n\nFWIW, I am thinking about `port.description\u003d\u0027purple\u0027 \u0026\u0026 vif.network.tags \u003d~ \u0027storage\u0027`","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"a7a5d2fab7b172c8744ff9a9bbc1991691c7af1b","unresolved":false,"context_lines":[{"line_number":217,"context_line":""},{"line_number":218,"context_line":".. code-block:: yaml"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"  ---"},{"line_number":221,"context_line":"  custom_trait_name:"},{"line_number":222,"context_line":"    - action: bond_ports"},{"line_number":223,"context_line":"      filter: port.vendor \u003d\u003d \u0027vendor_string\u0027 \u0026\u0026 minimum_count \u003d\u003d 2"}],"source_content_type":"text/x-rst","patch_set":4,"id":"18c08759_499f5271","line":220,"in_reply_to":"e37a4a01_e82d2af4","updated":"2025-05-12 21:15:54.000000000","message":"Done","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e10d009bc6bc366e6125d72dc913c34a4e82038e","unresolved":true,"context_lines":[{"line_number":218,"context_line":".. code-block:: yaml"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"  ---"},{"line_number":221,"context_line":"  custom_trait_name:"},{"line_number":222,"context_line":"    - action: bond_ports"},{"line_number":223,"context_line":"      filter: port.vendor \u003d\u003d \u0027vendor_string\u0027 \u0026\u0026 minimum_count \u003d\u003d 2"},{"line_number":224,"context_line":"  custom_direct_attach_a_purple_to_storage:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5b473679_1a465e80","line":221,"updated":"2025-05-09 09:26:01.000000000","message":"I wonder if we want the option of a default here, or actually just looking at traits on the node, even when the instance doesn\u0027t explicitly request the trait? unsure.","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"a7a5d2fab7b172c8744ff9a9bbc1991691c7af1b","unresolved":false,"context_lines":[{"line_number":218,"context_line":".. code-block:: yaml"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"  ---"},{"line_number":221,"context_line":"  custom_trait_name:"},{"line_number":222,"context_line":"    - action: bond_ports"},{"line_number":223,"context_line":"      filter: port.vendor \u003d\u003d \u0027vendor_string\u0027 \u0026\u0026 minimum_count \u003d\u003d 2"},{"line_number":224,"context_line":"  custom_direct_attach_a_purple_to_storage:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5784c13b_3f8390a3","line":221,"in_reply_to":"5b473679_1a465e80","updated":"2025-05-12 21:15:54.000000000","message":"Added a section on future post-MVP features and added this to it. I think it\u0027s an obvious next step but do not want to bloat the MVP.","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"cf5cfde3adaec602a13464048206ca047353f23d","unresolved":true,"context_lines":[{"line_number":228,"context_line":"    - action: bond_and_attach_ports"},{"line_number":229,"context_line":"      filter: port.vendor \u003d\u003d \u0027purple\u0027 \u0026\u0026 count \u003d\u003d 2"},{"line_number":230,"context_line":"  custom_bond_green_stroage_to_storage_by_2:"},{"line_number":231,"context_line":"    - action: bond_and_attach_ports"},{"line_number":232,"context_line":"      filter: port.vendor \u003d\u003d \u0027green\u0027 \u0026\u0026 port.class \u003d\u003d \u0027storage\u0027 \u0026\u0026 count \u003d\u003d 2 \u0026\u0026 ( vif.network.name \u003d~ \u0027storage\u0027 or vif.network.tags \u003d~ \u0027storage\u0027 )"},{"line_number":233,"context_line":"  custom_use_physnet_a_or_b"},{"line_number":234,"context_line":"    - action: attach_port"}],"source_content_type":"text/x-rst","patch_set":4,"id":"e8a8aaa1_9c15020b","line":231,"updated":"2025-05-08 16:28:45.000000000","message":"MVP suggestion: Push the ability to dynamically assemble portgroups to a phase two, and focus merely on scheduling existing ports/portgroups as an initial implementation.","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"a7a5d2fab7b172c8744ff9a9bbc1991691c7af1b","unresolved":false,"context_lines":[{"line_number":228,"context_line":"    - action: bond_and_attach_ports"},{"line_number":229,"context_line":"      filter: port.vendor \u003d\u003d \u0027purple\u0027 \u0026\u0026 count \u003d\u003d 2"},{"line_number":230,"context_line":"  custom_bond_green_stroage_to_storage_by_2:"},{"line_number":231,"context_line":"    - action: bond_and_attach_ports"},{"line_number":232,"context_line":"      filter: port.vendor \u003d\u003d \u0027green\u0027 \u0026\u0026 port.class \u003d\u003d \u0027storage\u0027 \u0026\u0026 count \u003d\u003d 2 \u0026\u0026 ( vif.network.name \u003d~ \u0027storage\u0027 or vif.network.tags \u003d~ \u0027storage\u0027 )"},{"line_number":233,"context_line":"  custom_use_physnet_a_or_b"},{"line_number":234,"context_line":"    - action: attach_port"}],"source_content_type":"text/x-rst","patch_set":4,"id":"d6f2854a_0d5664ea","line":231,"in_reply_to":"e8a8aaa1_9c15020b","updated":"2025-05-12 21:15:54.000000000","message":"I\u0027ve made a comment about this in the spec.","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"cf5cfde3adaec602a13464048206ca047353f23d","unresolved":true,"context_lines":[{"line_number":229,"context_line":"      filter: port.vendor \u003d\u003d \u0027purple\u0027 \u0026\u0026 count \u003d\u003d 2"},{"line_number":230,"context_line":"  custom_bond_green_stroage_to_storage_by_2:"},{"line_number":231,"context_line":"    - action: bond_and_attach_ports"},{"line_number":232,"context_line":"      filter: port.vendor \u003d\u003d \u0027green\u0027 \u0026\u0026 port.class \u003d\u003d \u0027storage\u0027 \u0026\u0026 count \u003d\u003d 2 \u0026\u0026 ( vif.network.name \u003d~ \u0027storage\u0027 or vif.network.tags \u003d~ \u0027storage\u0027 )"},{"line_number":233,"context_line":"  custom_use_physnet_a_or_b"},{"line_number":234,"context_line":"    - action: attach_port"},{"line_number":235,"context_line":"      filter: port.physical_network \u003d\u003d \u0027fabric_a\u0027"}],"source_content_type":"text/x-rst","patch_set":4,"id":"4f33416a_e08a9fe6","line":232,"updated":"2025-05-08 16:28:45.000000000","message":"Consider using glob or pattern matching, is this what\u0027s implied by \u0027\u003d~\u0027?","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"68f2702813f76baafccfe30eeeb6b46a24ff9af0","unresolved":true,"context_lines":[{"line_number":229,"context_line":"      filter: port.vendor \u003d\u003d \u0027purple\u0027 \u0026\u0026 count \u003d\u003d 2"},{"line_number":230,"context_line":"  custom_bond_green_stroage_to_storage_by_2:"},{"line_number":231,"context_line":"    - action: bond_and_attach_ports"},{"line_number":232,"context_line":"      filter: port.vendor \u003d\u003d \u0027green\u0027 \u0026\u0026 port.class \u003d\u003d \u0027storage\u0027 \u0026\u0026 count \u003d\u003d 2 \u0026\u0026 ( vif.network.name \u003d~ \u0027storage\u0027 or vif.network.tags \u003d~ \u0027storage\u0027 )"},{"line_number":233,"context_line":"  custom_use_physnet_a_or_b"},{"line_number":234,"context_line":"    - action: attach_port"},{"line_number":235,"context_line":"      filter: port.physical_network \u003d\u003d \u0027fabric_a\u0027"}],"source_content_type":"text/x-rst","patch_set":4,"id":"8a38bed0_5e9b85c4","line":232,"in_reply_to":"1e6efac8_8d35e1a9","updated":"2025-05-13 20:51:15.000000000","message":"I figured equals and startswith are trivial to implement and cover most reasonable use cases (e.g. storage-a, storage-b, storage-c are 3 networks, but you always want your storage hooked to the mellanox ports, we can handle that with one trait with a startswith. I want to avoid any sort of situation where we need an operator to configure \"N\" of a thing in a given pattern.","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"a7a5d2fab7b172c8744ff9a9bbc1991691c7af1b","unresolved":true,"context_lines":[{"line_number":229,"context_line":"      filter: port.vendor \u003d\u003d \u0027purple\u0027 \u0026\u0026 count \u003d\u003d 2"},{"line_number":230,"context_line":"  custom_bond_green_stroage_to_storage_by_2:"},{"line_number":231,"context_line":"    - action: bond_and_attach_ports"},{"line_number":232,"context_line":"      filter: port.vendor \u003d\u003d \u0027green\u0027 \u0026\u0026 port.class \u003d\u003d \u0027storage\u0027 \u0026\u0026 count \u003d\u003d 2 \u0026\u0026 ( vif.network.name \u003d~ \u0027storage\u0027 or vif.network.tags \u003d~ \u0027storage\u0027 )"},{"line_number":233,"context_line":"  custom_use_physnet_a_or_b"},{"line_number":234,"context_line":"    - action: attach_port"},{"line_number":235,"context_line":"      filter: port.physical_network \u003d\u003d \u0027fabric_a\u0027"}],"source_content_type":"text/x-rst","patch_set":4,"id":"61b0e678_5c25a9d7","line":232,"in_reply_to":"4f33416a_e08a9fe6","updated":"2025-05-12 21:15:54.000000000","message":"I\u0027ve made a comment about this. Decided to specify it as a prefix match as that should handle all existing use cases without bringing us down the potentially-hairy path of regexp.","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"9e42a6074d266af0ae4b65e2744df826cad00c81","unresolved":true,"context_lines":[{"line_number":229,"context_line":"      filter: port.vendor \u003d\u003d \u0027purple\u0027 \u0026\u0026 count \u003d\u003d 2"},{"line_number":230,"context_line":"  custom_bond_green_stroage_to_storage_by_2:"},{"line_number":231,"context_line":"    - action: bond_and_attach_ports"},{"line_number":232,"context_line":"      filter: port.vendor \u003d\u003d \u0027green\u0027 \u0026\u0026 port.class \u003d\u003d \u0027storage\u0027 \u0026\u0026 count \u003d\u003d 2 \u0026\u0026 ( vif.network.name \u003d~ \u0027storage\u0027 or vif.network.tags \u003d~ \u0027storage\u0027 )"},{"line_number":233,"context_line":"  custom_use_physnet_a_or_b"},{"line_number":234,"context_line":"    - action: attach_port"},{"line_number":235,"context_line":"      filter: port.physical_network \u003d\u003d \u0027fabric_a\u0027"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1e6efac8_8d35e1a9","line":232,"in_reply_to":"61b0e678_5c25a9d7","updated":"2025-05-13 10:09:20.000000000","message":"FWIW, when I see this, it reminds me of the prometheus syntax:\nhttps://prometheus.io/docs/prometheus/latest/querying/basics/#instant-vector-selectors\n\nI like the keep in simple approach... I think just equals is also fine, it could be extended later? (Adding an extra tag on a network shouldn\u0027t be a big deal).","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"b2091a3e8dd6fb54c12cb997bd9223bd3c74724e","unresolved":false,"context_lines":[{"line_number":229,"context_line":"      filter: port.vendor \u003d\u003d \u0027purple\u0027 \u0026\u0026 count \u003d\u003d 2"},{"line_number":230,"context_line":"  custom_bond_green_stroage_to_storage_by_2:"},{"line_number":231,"context_line":"    - action: bond_and_attach_ports"},{"line_number":232,"context_line":"      filter: port.vendor \u003d\u003d \u0027green\u0027 \u0026\u0026 port.class \u003d\u003d \u0027storage\u0027 \u0026\u0026 count \u003d\u003d 2 \u0026\u0026 ( vif.network.name \u003d~ \u0027storage\u0027 or vif.network.tags \u003d~ \u0027storage\u0027 )"},{"line_number":233,"context_line":"  custom_use_physnet_a_or_b"},{"line_number":234,"context_line":"    - action: attach_port"},{"line_number":235,"context_line":"      filter: port.physical_network \u003d\u003d \u0027fabric_a\u0027"}],"source_content_type":"text/x-rst","patch_set":4,"id":"19526d2b_4b9be51b","line":232,"in_reply_to":"8a38bed0_5e9b85c4","updated":"2025-06-09 19:27:52.000000000","message":"Done","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a5cb7c1cde373d2d9d8bd5989ea7d194497a9f57","unresolved":true,"context_lines":[{"line_number":237,"context_line":"      filter: port.physical_network \u003d\u003d \u0027fabric_b\u0027"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":".. NOTE::"},{"line_number":240,"context_line":"   In this model, port objects *may* be ports or portgroups. For bonding,"},{"line_number":241,"context_line":"   it should all be individual ports, but this code will need to supporess"},{"line_number":242,"context_line":"   exceptions around missing attributes."},{"line_number":243,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"ce44f49f_1e9a2c16","line":240,"updated":"2025-05-08 16:02:40.000000000","message":"I do wonder if we want an explicit attach_port_group here, so you get to make an explicit choice?","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"a7a5d2fab7b172c8744ff9a9bbc1991691c7af1b","unresolved":false,"context_lines":[{"line_number":237,"context_line":"      filter: port.physical_network \u003d\u003d \u0027fabric_b\u0027"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":".. NOTE::"},{"line_number":240,"context_line":"   In this model, port objects *may* be ports or portgroups. For bonding,"},{"line_number":241,"context_line":"   it should all be individual ports, but this code will need to supporess"},{"line_number":242,"context_line":"   exceptions around missing attributes."},{"line_number":243,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"c39f3a24_5067c48b","line":240,"in_reply_to":"ce44f49f_1e9a2c16","updated":"2025-05-12 21:15:54.000000000","message":"Done","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a5cb7c1cde373d2d9d8bd5989ea7d194497a9f57","unresolved":true,"context_lines":[{"line_number":252,"context_line":"   under the value so filter queries can values set on networks as well,"},{"line_number":253,"context_line":"   because a very common pattern is for a user to ask Nova to create an"},{"line_number":254,"context_line":"   instance on one or more networks and not pre-create the Neutron Ports"},{"line_number":255,"context_line":"   for the instance being requested."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":".. NOTE::"},{"line_number":258,"context_line":"   This mental modeling could potentially be viewed as"}],"source_content_type":"text/x-rst","patch_set":4,"id":"488eeb6e_c6c02ccb","line":255,"updated":"2025-05-08 16:02:40.000000000","message":"I think Nova has normally created these ports on behalf of the user, before we get to the point of sending ironic a port uuid, but agreed on higher level point being made here.","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"a7a5d2fab7b172c8744ff9a9bbc1991691c7af1b","unresolved":false,"context_lines":[{"line_number":252,"context_line":"   under the value so filter queries can values set on networks as well,"},{"line_number":253,"context_line":"   because a very common pattern is for a user to ask Nova to create an"},{"line_number":254,"context_line":"   instance on one or more networks and not pre-create the Neutron Ports"},{"line_number":255,"context_line":"   for the instance being requested."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":".. NOTE::"},{"line_number":258,"context_line":"   This mental modeling could potentially be viewed as"}],"source_content_type":"text/x-rst","patch_set":4,"id":"df1a3347_182689c7","line":255,"in_reply_to":"488eeb6e_c6c02ccb","updated":"2025-05-12 21:15:54.000000000","message":"Done","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a5cb7c1cde373d2d9d8bd5989ea7d194497a9f57","unresolved":true,"context_lines":[{"line_number":257,"context_line":".. NOTE::"},{"line_number":258,"context_line":"   This mental modeling could potentially be viewed as"},{"line_number":259,"context_line":"   \"trait based pre-provisioning\" actions, however the initial MVP"},{"line_number":260,"context_line":"   would be focused around VIF attach/detach flows."},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"An eventual hope might be to make this an API endpoint which"},{"line_number":263,"context_line":"is merged with a configuration file, however that is beyond the"}],"source_content_type":"text/x-rst","patch_set":4,"id":"cd72bc79_ffcbe951","line":260,"updated":"2025-05-08 16:02:40.000000000","message":"I wonder if something is needed around provisioning/cleaning/inspection networks? I guess we are still using the pxe_enabled flag here to pick the provisioning port... even if that is doing DHCP-less virtual media boot? I guess vif detach should return things back to the \"default\" state where cleaning would work.","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"a7a5d2fab7b172c8744ff9a9bbc1991691c7af1b","unresolved":false,"context_lines":[{"line_number":257,"context_line":".. NOTE::"},{"line_number":258,"context_line":"   This mental modeling could potentially be viewed as"},{"line_number":259,"context_line":"   \"trait based pre-provisioning\" actions, however the initial MVP"},{"line_number":260,"context_line":"   would be focused around VIF attach/detach flows."},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"An eventual hope might be to make this an API endpoint which"},{"line_number":263,"context_line":"is merged with a configuration file, however that is beyond the"}],"source_content_type":"text/x-rst","patch_set":4,"id":"e4b0e236_38edc854","line":260,"in_reply_to":"cd72bc79_ffcbe951","updated":"2025-05-12 21:15:54.000000000","message":"Yeah, I think it\u0027ll quickly be useful to apply to cleaning/provisioning/servicing networks. I\u0027ll add it as a future enhancement.","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"0819bf3e9df5d89dbbd914004fda33b32af834ce","unresolved":true,"context_lines":[{"line_number":272,"context_line":"to Ironic\u0027s state machine all leverage pre-configured networks."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"A challenge exists that these pre-configured networks may, or"},{"line_number":275,"context_line":"may not have a physical network. And depending on the overall"},{"line_number":276,"context_line":"Neutron environment complexity, an operator may be leveraging"},{"line_number":277,"context_line":"VXLAN networks which are functionally attached to baremetal."},{"line_number":278,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"d6e0bf99_3d3f2606","line":275,"updated":"2025-04-09 15:04:32.000000000","message":"Julia suggests in PTG that we may need changes to networking-baremetal to prevent this kind of issue from happening (a potential race with neutron)","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"2d0ac44e73b3b896cbfca474b7cdf41527770a62","unresolved":true,"context_lines":[{"line_number":272,"context_line":"to Ironic\u0027s state machine all leverage pre-configured networks."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"A challenge exists that these pre-configured networks may, or"},{"line_number":275,"context_line":"may not have a physical network. And depending on the overall"},{"line_number":276,"context_line":"Neutron environment complexity, an operator may be leveraging"},{"line_number":277,"context_line":"VXLAN networks which are functionally attached to baremetal."},{"line_number":278,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"d4186f86_f73722bf","line":275,"in_reply_to":"38546ede_7a42c8c7","updated":"2025-05-12 22:28:22.000000000","message":"I think it would have worked better if this paragraph and the next were combined.","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"45006b636af7a38943d5bfaf5efb7a03decd51c8","unresolved":true,"context_lines":[{"line_number":272,"context_line":"to Ironic\u0027s state machine all leverage pre-configured networks."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"A challenge exists that these pre-configured networks may, or"},{"line_number":275,"context_line":"may not have a physical network. And depending on the overall"},{"line_number":276,"context_line":"Neutron environment complexity, an operator may be leveraging"},{"line_number":277,"context_line":"VXLAN networks which are functionally attached to baremetal."},{"line_number":278,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"b57c83b9_e4c4f1b3","line":275,"in_reply_to":"50cd99f5_61df8a64","updated":"2025-05-19 18:31:03.000000000","message":"I *think* it is optional on both sides, in other words a non-existing one is the same as a distinct physnet.","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"68f2702813f76baafccfe30eeeb6b46a24ff9af0","unresolved":true,"context_lines":[{"line_number":272,"context_line":"to Ironic\u0027s state machine all leverage pre-configured networks."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"A challenge exists that these pre-configured networks may, or"},{"line_number":275,"context_line":"may not have a physical network. And depending on the overall"},{"line_number":276,"context_line":"Neutron environment complexity, an operator may be leveraging"},{"line_number":277,"context_line":"VXLAN networks which are functionally attached to baremetal."},{"line_number":278,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"50cd99f5_61df8a64","line":275,"in_reply_to":"abe2ee13_3ca5a539","updated":"2025-05-13 20:51:15.000000000","message":"Given I read this a third, different way -- e.g. reflecting on nodes using OVN or other methods which modify what network a device is hooked into in a more VM style way, it\u0027d be useful to get clarity.","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"7d310e5c96dff1825e561d9e53f57d40fbb752b0","unresolved":false,"context_lines":[{"line_number":272,"context_line":"to Ironic\u0027s state machine all leverage pre-configured networks."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"A challenge exists that these pre-configured networks may, or"},{"line_number":275,"context_line":"may not have a physical network. And depending on the overall"},{"line_number":276,"context_line":"Neutron environment complexity, an operator may be leveraging"},{"line_number":277,"context_line":"VXLAN networks which are functionally attached to baremetal."},{"line_number":278,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"345076d2_ce8abf9e","line":275,"in_reply_to":"b57c83b9_e4c4f1b3","updated":"2025-06-18 21:17:22.000000000","message":"Done","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"9e42a6074d266af0ae4b65e2744df826cad00c81","unresolved":true,"context_lines":[{"line_number":272,"context_line":"to Ironic\u0027s state machine all leverage pre-configured networks."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"A challenge exists that these pre-configured networks may, or"},{"line_number":275,"context_line":"may not have a physical network. And depending on the overall"},{"line_number":276,"context_line":"Neutron environment complexity, an operator may be leveraging"},{"line_number":277,"context_line":"VXLAN networks which are functionally attached to baremetal."},{"line_number":278,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"abe2ee13_3ca5a539","line":275,"in_reply_to":"d4186f86_f73722bf","updated":"2025-05-13 10:09:20.000000000","message":"I think Neutron networks always have a physical network defined.\n\nHowever, the host/agent you bind the port to in neutron, may not exist and may not have a physical network defined.\n\nAnd equally, I think in Ironic the ports / port groups may not have physical network defined.\n\nIs this is what was meant?","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"a7a5d2fab7b172c8744ff9a9bbc1991691c7af1b","unresolved":true,"context_lines":[{"line_number":272,"context_line":"to Ironic\u0027s state machine all leverage pre-configured networks."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"A challenge exists that these pre-configured networks may, or"},{"line_number":275,"context_line":"may not have a physical network. And depending on the overall"},{"line_number":276,"context_line":"Neutron environment complexity, an operator may be leveraging"},{"line_number":277,"context_line":"VXLAN networks which are functionally attached to baremetal."},{"line_number":278,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"38546ede_7a42c8c7","line":275,"in_reply_to":"d6e0bf99_3d3f2606","updated":"2025-05-12 21:15:54.000000000","message":"I\u0027m editing the spec now, and am unsure what this means now without context.","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"0819bf3e9df5d89dbbd914004fda33b32af834ce","unresolved":true,"context_lines":[{"line_number":290,"context_line":""},{"line_number":291,"context_line":"This option shall be in the ``[DEFAULT]]`` configuration section"},{"line_number":292,"context_line":"and called ``ironic_network_attachment_filter``, and will take"},{"line_number":293,"context_line":"a filter value like one which could be set for a flavor mapping."},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"Alternatives"},{"line_number":296,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"6393d458_8da8f9fe","line":293,"updated":"2025-04-09 15:04:32.000000000","message":"Use case: filtering networks that are unsuitable for use by Ironic tenants for security or physical layout reasons","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"a7a5d2fab7b172c8744ff9a9bbc1991691c7af1b","unresolved":false,"context_lines":[{"line_number":290,"context_line":""},{"line_number":291,"context_line":"This option shall be in the ``[DEFAULT]]`` configuration section"},{"line_number":292,"context_line":"and called ``ironic_network_attachment_filter``, and will take"},{"line_number":293,"context_line":"a filter value like one which could be set for a flavor mapping."},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"Alternatives"},{"line_number":296,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"a7078d96_cf87ec67","line":293,"in_reply_to":"6393d458_8da8f9fe","updated":"2025-05-12 21:15:54.000000000","message":"Added a note about this to Security Impact.","commit_id":"633d758271e4480b609af3a3305ea9cf5ddecac5"},{"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":"93affd78956e9dbfdd57d261a1b7261c0899b159","unresolved":true,"context_lines":[{"line_number":8,"context_line":"Trait based Port Scheduling to achieve Dynamic Networking"},{"line_number":9,"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\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\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":10,"context_line":""},{"line_number":11,"context_line":"To state networking is complex, is an understatement."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"And to that end, Ironic\u0027s modeling of how one links a \"virtual interface\""},{"line_number":14,"context_line":"to physical interfaces is woefully inadequate beyond \"basic\" connectivity."}],"source_content_type":"text/x-rst","patch_set":5,"id":"d5e3389e_24f29571","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":30},"updated":"2025-05-14 12:22:08.000000000","message":"Confusing. Did you mean \u0027say\u0027?","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5774fc60776a18490a18f90273ea385dc4e3dffa","unresolved":true,"context_lines":[{"line_number":8,"context_line":"Trait based Port Scheduling to achieve Dynamic Networking"},{"line_number":9,"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\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\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":10,"context_line":""},{"line_number":11,"context_line":"To state networking is complex, is an understatement."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"And to that end, Ironic\u0027s modeling of how one links a \"virtual interface\""},{"line_number":14,"context_line":"to physical interfaces is woefully inadequate beyond \"basic\" connectivity."}],"source_content_type":"text/x-rst","patch_set":5,"id":"e6cbeda6_ea0a074b","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":30},"in_reply_to":"d5e3389e_24f29571","updated":"2025-05-14 20:27:43.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5e56f114285eb0765e374f62a8331c41aac4f6d2","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Trait based Port Scheduling to achieve Dynamic Networking"},{"line_number":9,"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\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\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":10,"context_line":""},{"line_number":11,"context_line":"To state networking is complex, is an understatement."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"And to that end, Ironic\u0027s modeling of how one links a \"virtual interface\""},{"line_number":14,"context_line":"to physical interfaces is woefully inadequate beyond \"basic\" connectivity."}],"source_content_type":"text/x-rst","patch_set":5,"id":"519a77be_2f474406","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":30},"in_reply_to":"e6cbeda6_ea0a074b","updated":"2025-05-19 11:29:00.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"93affd78956e9dbfdd57d261a1b7261c0899b159","unresolved":true,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"As of the authoring of this document, Ironic relies upon the following model"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"* Require a matching or undefined physical network."},{"line_number":23,"context_line":"* Prefer ports or port groups with a physical network defined"},{"line_number":24,"context_line":"* Prefer portgroups to ports"},{"line_number":25,"context_line":"* Prefer ports which are PXE Enabled."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Except, this is fundamentally limited in that with this model, we cannot:"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"f66b28d1_29775072","line":25,"range":{"start_line":22,"start_character":0,"end_line":25,"end_character":37},"updated":"2025-05-14 12:22:08.000000000","message":"My understanding of this portion:\nAlthough, it\u0027s possible to map/link virtual network interfaces to both defined and undefined physical network interfaces, Ironic prefers ports and portgroups where the physical network is defined, even when that\u0027s the case, Ironic also gives preference to portgroups over ports, and finally when there is just ports, Ironic gives preference to ports with PXE enabled.","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5e56f114285eb0765e374f62a8331c41aac4f6d2","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"As of the authoring of this document, Ironic relies upon the following model"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"* Require a matching or undefined physical network."},{"line_number":23,"context_line":"* Prefer ports or port groups with a physical network defined"},{"line_number":24,"context_line":"* Prefer portgroups to ports"},{"line_number":25,"context_line":"* Prefer ports which are PXE Enabled."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Except, this is fundamentally limited in that with this model, we cannot:"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"664c97ff_8cf3cc79","line":25,"range":{"start_line":22,"start_character":0,"end_line":25,"end_character":37},"in_reply_to":"b8b8bba1_95379210","updated":"2025-05-19 11:29:00.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5774fc60776a18490a18f90273ea385dc4e3dffa","unresolved":true,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"As of the authoring of this document, Ironic relies upon the following model"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"* Require a matching or undefined physical network."},{"line_number":23,"context_line":"* Prefer ports or port groups with a physical network defined"},{"line_number":24,"context_line":"* Prefer portgroups to ports"},{"line_number":25,"context_line":"* Prefer ports which are PXE Enabled."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Except, this is fundamentally limited in that with this model, we cannot:"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"b8b8bba1_95379210","line":25,"range":{"start_line":22,"start_character":0,"end_line":25,"end_character":37},"in_reply_to":"f66b28d1_29775072","updated":"2025-05-14 20:27:43.000000000","message":"This is exactly what this is trying to communicate; sounds like you understand it and we communicated it right \\o/","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"93affd78956e9dbfdd57d261a1b7261c0899b159","unresolved":true,"context_lines":[{"line_number":27,"context_line":"Except, this is fundamentally limited in that with this model, we cannot:"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"* Dynamically assemble portgroups"},{"line_number":30,"context_line":"* Hint or weight to a specific port, portgroup, or device class."},{"line_number":31,"context_line":"* Avoid other specific types of interfaces or networks."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"For example, an operator may have a machine with:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"de91c3f4_9d922271","line":30,"range":{"start_line":30,"start_character":10,"end_line":30,"end_character":35},"updated":"2025-05-14 12:22:08.000000000","message":"??","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"ef960df8697bed2baed11b188421cdb7316bf546","unresolved":false,"context_lines":[{"line_number":27,"context_line":"Except, this is fundamentally limited in that with this model, we cannot:"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"* Dynamically assemble portgroups"},{"line_number":30,"context_line":"* Hint or weight to a specific port, portgroup, or device class."},{"line_number":31,"context_line":"* Avoid other specific types of interfaces or networks."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"For example, an operator may have a machine with:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"807874a4_75253c84","line":30,"range":{"start_line":30,"start_character":10,"end_line":30,"end_character":35},"in_reply_to":"5203fbc4_f856ee06","updated":"2025-05-16 17:33:06.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5774fc60776a18490a18f90273ea385dc4e3dffa","unresolved":true,"context_lines":[{"line_number":27,"context_line":"Except, this is fundamentally limited in that with this model, we cannot:"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"* Dynamically assemble portgroups"},{"line_number":30,"context_line":"* Hint or weight to a specific port, portgroup, or device class."},{"line_number":31,"context_line":"* Avoid other specific types of interfaces or networks."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"For example, an operator may have a machine with:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5203fbc4_f856ee06","line":30,"range":{"start_line":30,"start_character":10,"end_line":30,"end_character":35},"in_reply_to":"de91c3f4_9d922271","updated":"2025-05-14 20:27:43.000000000","message":"Weight is commonly used as a field name to indicate priority. So this line is basically saying that we can\u0027t currently prefer one port over another in a general way.","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"93affd78956e9dbfdd57d261a1b7261c0899b159","unresolved":true,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"* Dynamically assemble portgroups"},{"line_number":30,"context_line":"* Hint or weight to a specific port, portgroup, or device class."},{"line_number":31,"context_line":"* Avoid other specific types of interfaces or networks."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"For example, an operator may have a machine with:"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"e0750b5b_2448e43e","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":55},"updated":"2025-05-14 12:22:08.000000000","message":"Are we talking about other interfaces besides physical and virtual? What could those other interfaces be?","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"ef960df8697bed2baed11b188421cdb7316bf546","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"* Dynamically assemble portgroups"},{"line_number":30,"context_line":"* Hint or weight to a specific port, portgroup, or device class."},{"line_number":31,"context_line":"* Avoid other specific types of interfaces or networks."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"For example, an operator may have a machine with:"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"99622e57_d9f8753a","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":55},"in_reply_to":"3bd9c502_293f7d10","updated":"2025-05-16 17:33:06.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5774fc60776a18490a18f90273ea385dc4e3dffa","unresolved":true,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"* Dynamically assemble portgroups"},{"line_number":30,"context_line":"* Hint or weight to a specific port, portgroup, or device class."},{"line_number":31,"context_line":"* Avoid other specific types of interfaces or networks."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"For example, an operator may have a machine with:"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"3bd9c502_293f7d10","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":55},"in_reply_to":"e0750b5b_2448e43e","updated":"2025-05-14 20:27:43.000000000","message":"In a physical networking world, you can actually have different physical *interconnects* which have to be modeled in Ironic.\n\nFor example, a server with:\n- 2 DPUs (ethernet 100Gb/s)\n- 2 FC (fibre channel)\n- 2 Ethernet (ethernet 1Gb/s)\n\nNeeds to connect to these networks:\n- Storage\n- High speed data\n- Management\n\nRight now, the only way to express this mapping is incredibly specific -- I can say \"port X is on physical_network storage\" but I can\u0027t say \"networks used for storage should always use port X\".","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"93affd78956e9dbfdd57d261a1b7261c0899b159","unresolved":true,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"For example, an operator may have a machine with:"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"- 2 Green Network Devices"},{"line_number":36,"context_line":"- 4 Purple Network Devices"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"And that operator may know that their traffic *can* pass over any interface,"},{"line_number":39,"context_line":"but it won\u0027t be ideal. In fact, it *might* actively harm desired workload by"}],"source_content_type":"text/x-rst","patch_set":5,"id":"96ea84fb_6b4c19fb","line":36,"range":{"start_line":35,"start_character":0,"end_line":36,"end_character":26},"updated":"2025-05-14 12:22:08.000000000","message":"I assume the color names here are more than just random fake naming?","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5774fc60776a18490a18f90273ea385dc4e3dffa","unresolved":true,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"For example, an operator may have a machine with:"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"- 2 Green Network Devices"},{"line_number":36,"context_line":"- 4 Purple Network Devices"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"And that operator may know that their traffic *can* pass over any interface,"},{"line_number":39,"context_line":"but it won\u0027t be ideal. In fact, it *might* actively harm desired workload by"}],"source_content_type":"text/x-rst","patch_set":5,"id":"d0d8278a_6b0180e6","line":36,"range":{"start_line":35,"start_character":0,"end_line":36,"end_character":26},"in_reply_to":"96ea84fb_6b4c19fb","updated":"2025-05-14 20:27:43.000000000","message":"Yes, the colors here are just placeholders. You could imagine Green as one type of device (maybe a fibre channel card?) and Purple as another (ethernet).","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5e56f114285eb0765e374f62a8331c41aac4f6d2","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"For example, an operator may have a machine with:"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"- 2 Green Network Devices"},{"line_number":36,"context_line":"- 4 Purple Network Devices"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"And that operator may know that their traffic *can* pass over any interface,"},{"line_number":39,"context_line":"but it won\u0027t be ideal. In fact, it *might* actively harm desired workload by"}],"source_content_type":"text/x-rst","patch_set":5,"id":"f819e4f8_0f70e65c","line":36,"range":{"start_line":35,"start_character":0,"end_line":36,"end_character":26},"in_reply_to":"d0d8278a_6b0180e6","updated":"2025-05-19 11:29:00.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"93affd78956e9dbfdd57d261a1b7261c0899b159","unresolved":true,"context_lines":[{"line_number":39,"context_line":"but it won\u0027t be ideal. In fact, it *might* actively harm desired workload by"},{"line_number":40,"context_line":"negatively impacting overall system performance. To be clear, Ironic can\u0027t"},{"line_number":41,"context_line":"and shouldn\u0027t know those details, but the operator needs to be able to"},{"line_number":42,"context_line":"either explicitly state the precise mappings they want, or supply enough"},{"line_number":43,"context_line":"sufficient information as part of their desired traits which can be translated"},{"line_number":44,"context_line":"by Ironic and configuration to help facilitate the creation of the temporary"},{"line_number":45,"context_line":"portgroups as well as the weighted selection of ports to interfaces."},{"line_number":46,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"063d2f30_9c4b87bb","line":43,"range":{"start_line":42,"start_character":59,"end_line":43,"end_character":22},"updated":"2025-05-14 12:22:08.000000000","message":"s/supply enough sufficient/supply sufficient/","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5774fc60776a18490a18f90273ea385dc4e3dffa","unresolved":false,"context_lines":[{"line_number":39,"context_line":"but it won\u0027t be ideal. In fact, it *might* actively harm desired workload by"},{"line_number":40,"context_line":"negatively impacting overall system performance. To be clear, Ironic can\u0027t"},{"line_number":41,"context_line":"and shouldn\u0027t know those details, but the operator needs to be able to"},{"line_number":42,"context_line":"either explicitly state the precise mappings they want, or supply enough"},{"line_number":43,"context_line":"sufficient information as part of their desired traits which can be translated"},{"line_number":44,"context_line":"by Ironic and configuration to help facilitate the creation of the temporary"},{"line_number":45,"context_line":"portgroups as well as the weighted selection of ports to interfaces."},{"line_number":46,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"2d6d563f_32f2a43b","line":43,"range":{"start_line":42,"start_character":59,"end_line":43,"end_character":22},"in_reply_to":"063d2f30_9c4b87bb","updated":"2025-05-14 20:27:43.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"93affd78956e9dbfdd57d261a1b7261c0899b159","unresolved":true,"context_lines":[{"line_number":47,"context_line":"Proposed change"},{"line_number":48,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"To bridge that context together with necessary context, then the cleanest path"},{"line_number":51,"context_line":"is to facilitate a trait which once populated can impact the underlying logic"},{"line_number":52,"context_line":"to handle attachments and potentially trigger dynamic association of ports"},{"line_number":53,"context_line":"into portgroups *and* ultimately the configuration attachment."}],"source_content_type":"text/x-rst","patch_set":5,"id":"14b4a417_d7564b59","line":50,"range":{"start_line":50,"start_character":0,"end_line":50,"end_character":54},"updated":"2025-05-14 12:22:08.000000000","message":"To bridge what context? Is this talking about the context within an API request or ... ?","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"93affd78956e9dbfdd57d261a1b7261c0899b159","unresolved":true,"context_lines":[{"line_number":47,"context_line":"Proposed change"},{"line_number":48,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"To bridge that context together with necessary context, then the cleanest path"},{"line_number":51,"context_line":"is to facilitate a trait which once populated can impact the underlying logic"},{"line_number":52,"context_line":"to handle attachments and potentially trigger dynamic association of ports"},{"line_number":53,"context_line":"into portgroups *and* ultimately the configuration attachment."}],"source_content_type":"text/x-rst","patch_set":5,"id":"7e6c7d34_1fc94122","line":50,"range":{"start_line":50,"start_character":47,"end_line":50,"end_character":73},"updated":"2025-05-14 12:22:08.000000000","message":"nit: s/context, then the cleanest/context, the cleanest/","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5774fc60776a18490a18f90273ea385dc4e3dffa","unresolved":false,"context_lines":[{"line_number":47,"context_line":"Proposed change"},{"line_number":48,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"To bridge that context together with necessary context, then the cleanest path"},{"line_number":51,"context_line":"is to facilitate a trait which once populated can impact the underlying logic"},{"line_number":52,"context_line":"to handle attachments and potentially trigger dynamic association of ports"},{"line_number":53,"context_line":"into portgroups *and* ultimately the configuration attachment."}],"source_content_type":"text/x-rst","patch_set":5,"id":"736b5909_31e511e0","line":50,"range":{"start_line":50,"start_character":0,"end_line":50,"end_character":54},"in_reply_to":"14b4a417_d7564b59","updated":"2025-05-14 20:27:43.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5774fc60776a18490a18f90273ea385dc4e3dffa","unresolved":false,"context_lines":[{"line_number":47,"context_line":"Proposed change"},{"line_number":48,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"To bridge that context together with necessary context, then the cleanest path"},{"line_number":51,"context_line":"is to facilitate a trait which once populated can impact the underlying logic"},{"line_number":52,"context_line":"to handle attachments and potentially trigger dynamic association of ports"},{"line_number":53,"context_line":"into portgroups *and* ultimately the configuration attachment."}],"source_content_type":"text/x-rst","patch_set":5,"id":"04f70827_d3f00b4c","line":50,"range":{"start_line":50,"start_character":47,"end_line":50,"end_character":73},"in_reply_to":"7e6c7d34_1fc94122","updated":"2025-05-14 20:27:43.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"93affd78956e9dbfdd57d261a1b7261c0899b159","unresolved":true,"context_lines":[{"line_number":61,"context_line":"which has a trait ``bond_purple_by_2``, which matches an internal name"},{"line_number":62,"context_line":"in ironic configuration which then associates to varying logic of rules,"},{"line_number":63,"context_line":"which would help identify and map ports together, then in the overall"},{"line_number":64,"context_line":"deploy and actual action of creating the network attachments, can the"},{"line_number":65,"context_line":"attachments be assembled in the requested and desired fashion"},{"line_number":66,"context_line":"in a semi-automatic model."},{"line_number":67,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"0fbb15d5_47ad86a4","line":64,"range":{"start_line":64,"start_character":62,"end_line":64,"end_character":69},"updated":"2025-05-14 12:22:08.000000000","message":"Confusing:\ns/the network attachments, can the/the network attachments, the/","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5774fc60776a18490a18f90273ea385dc4e3dffa","unresolved":false,"context_lines":[{"line_number":61,"context_line":"which has a trait ``bond_purple_by_2``, which matches an internal name"},{"line_number":62,"context_line":"in ironic configuration which then associates to varying logic of rules,"},{"line_number":63,"context_line":"which would help identify and map ports together, then in the overall"},{"line_number":64,"context_line":"deploy and actual action of creating the network attachments, can the"},{"line_number":65,"context_line":"attachments be assembled in the requested and desired fashion"},{"line_number":66,"context_line":"in a semi-automatic model."},{"line_number":67,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"6301ad22_60dd71fc","line":64,"range":{"start_line":64,"start_character":62,"end_line":64,"end_character":69},"in_reply_to":"0fbb15d5_47ad86a4","updated":"2025-05-14 20:27:43.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"93affd78956e9dbfdd57d261a1b7261c0899b159","unresolved":true,"context_lines":[{"line_number":57,"context_line":"this mapping so a user leveraging Nova can request a baremetal node"},{"line_number":58,"context_line":"and Ironic does the needful."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"For example, if I have a flavor named creatively as \u0027example_flavor\u0027,"},{"line_number":61,"context_line":"which has a trait ``bond_purple_by_2``, which matches an internal name"},{"line_number":62,"context_line":"in ironic configuration which then associates to varying logic of rules,"},{"line_number":63,"context_line":"which would help identify and map ports together, then in the overall"},{"line_number":64,"context_line":"deploy and actual action of creating the network attachments, can the"},{"line_number":65,"context_line":"attachments be assembled in the requested and desired fashion"},{"line_number":66,"context_line":"in a semi-automatic model."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"This is disjointed from the existing portgroups model as well as the direct"},{"line_number":69,"context_line":"hinting of a port for interface attachments, and we\u0027ll cover those breakouts"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bd405c2c_b4154044","line":66,"range":{"start_line":60,"start_character":0,"end_line":66,"end_character":26},"updated":"2025-05-14 12:22:08.000000000","message":"This might be confusing to the future assignee.\n\nMy interpretation \"If I have a flavor named creatively as \u0027example_flavour\u0027, with a trait ``bond_purple_by_2`` matching a name in the Ironic configuration which will somehow (that I don\u0027t know yet) associate to some rules for identifying and mapping ports together\"","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5774fc60776a18490a18f90273ea385dc4e3dffa","unresolved":false,"context_lines":[{"line_number":57,"context_line":"this mapping so a user leveraging Nova can request a baremetal node"},{"line_number":58,"context_line":"and Ironic does the needful."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"For example, if I have a flavor named creatively as \u0027example_flavor\u0027,"},{"line_number":61,"context_line":"which has a trait ``bond_purple_by_2``, which matches an internal name"},{"line_number":62,"context_line":"in ironic configuration which then associates to varying logic of rules,"},{"line_number":63,"context_line":"which would help identify and map ports together, then in the overall"},{"line_number":64,"context_line":"deploy and actual action of creating the network attachments, can the"},{"line_number":65,"context_line":"attachments be assembled in the requested and desired fashion"},{"line_number":66,"context_line":"in a semi-automatic model."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"This is disjointed from the existing portgroups model as well as the direct"},{"line_number":69,"context_line":"hinting of a port for interface attachments, and we\u0027ll cover those breakouts"}],"source_content_type":"text/x-rst","patch_set":5,"id":"37f81457_4947ac21","line":66,"range":{"start_line":60,"start_character":0,"end_line":66,"end_character":26},"in_reply_to":"bd405c2c_b4154044","updated":"2025-05-14 20:27:43.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"93affd78956e9dbfdd57d261a1b7261c0899b159","unresolved":true,"context_lines":[{"line_number":93,"context_line":"-------------"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"In order to enable the allocation, or ultimately \"scheduling\" to borrow an"},{"line_number":96,"context_line":"overloaded term, we need some additional fields values which a user of"},{"line_number":97,"context_line":"this feature can leverage to make decision in filter logic such that"},{"line_number":98,"context_line":"a decision can be made. Fundamentally the idea is to hydrate a port with"},{"line_number":99,"context_line":"``vendor`` and ``class`` fields, along with a"}],"source_content_type":"text/x-rst","patch_set":5,"id":"366448ea_064e16fd","line":96,"range":{"start_line":96,"start_character":41,"end_line":96,"end_character":54},"updated":"2025-05-14 12:22:08.000000000","message":"nit: maybe s/fields values/field values/","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5774fc60776a18490a18f90273ea385dc4e3dffa","unresolved":false,"context_lines":[{"line_number":93,"context_line":"-------------"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"In order to enable the allocation, or ultimately \"scheduling\" to borrow an"},{"line_number":96,"context_line":"overloaded term, we need some additional fields values which a user of"},{"line_number":97,"context_line":"this feature can leverage to make decision in filter logic such that"},{"line_number":98,"context_line":"a decision can be made. Fundamentally the idea is to hydrate a port with"},{"line_number":99,"context_line":"``vendor`` and ``class`` fields, along with a"}],"source_content_type":"text/x-rst","patch_set":5,"id":"0d6cdf5e_5a369ae4","line":96,"range":{"start_line":96,"start_character":41,"end_line":96,"end_character":54},"in_reply_to":"366448ea_064e16fd","updated":"2025-05-14 20:27:43.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"93affd78956e9dbfdd57d261a1b7261c0899b159","unresolved":true,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"In order to enable the allocation, or ultimately \"scheduling\" to borrow an"},{"line_number":96,"context_line":"overloaded term, we need some additional fields values which a user of"},{"line_number":97,"context_line":"this feature can leverage to make decision in filter logic such that"},{"line_number":98,"context_line":"a decision can be made. Fundamentally the idea is to hydrate a port with"},{"line_number":99,"context_line":"``vendor`` and ``class`` fields, along with a"},{"line_number":100,"context_line":"``available_for_dynamic_portgroup`` value which which will need to be set"},{"line_number":101,"context_line":"to ``True``."}],"source_content_type":"text/x-rst","patch_set":5,"id":"c369f5f0_50318224","line":98,"range":{"start_line":97,"start_character":26,"end_line":98,"end_character":22},"updated":"2025-05-14 12:22:08.000000000","message":"confusing.","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5774fc60776a18490a18f90273ea385dc4e3dffa","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"In order to enable the allocation, or ultimately \"scheduling\" to borrow an"},{"line_number":96,"context_line":"overloaded term, we need some additional fields values which a user of"},{"line_number":97,"context_line":"this feature can leverage to make decision in filter logic such that"},{"line_number":98,"context_line":"a decision can be made. Fundamentally the idea is to hydrate a port with"},{"line_number":99,"context_line":"``vendor`` and ``class`` fields, along with a"},{"line_number":100,"context_line":"``available_for_dynamic_portgroup`` value which which will need to be set"},{"line_number":101,"context_line":"to ``True``."}],"source_content_type":"text/x-rst","patch_set":5,"id":"1ea24b4b_f179d55a","line":98,"range":{"start_line":97,"start_character":26,"end_line":98,"end_character":22},"in_reply_to":"c369f5f0_50318224","updated":"2025-05-14 20:27:43.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"82ce158d7548bf4789110ab6653e27b3a078fcfd","unresolved":true,"context_lines":[{"line_number":125,"context_line":"   modeling you could infer \"attach to y vendor\" class of device. To describe"},{"line_number":126,"context_line":"   this another way, Ironic would evaluate the trait names and if there is"},{"line_number":127,"context_line":"   a match, limited preparatory actions and changes would take place on the"},{"line_number":128,"context_line":"   node which would be expected to be unwound as part of undeploy."},{"line_number":129,"context_line":"4) Nova would then be able to look up the node\u0027s ports and portgroups and"},{"line_number":130,"context_line":"   generate required user metadata which is **required** to be submitted"},{"line_number":131,"context_line":"   upon the deploy command."}],"source_content_type":"text/x-rst","patch_set":5,"id":"d83fabdb_2c56c550","line":128,"updated":"2025-05-13 11:22:57.000000000","message":"Its worth noting, with routed networks (e.g. multi-segment networks with delayed IP allocation), this is required, to get the IP address ahead of the config drive data generation. Although maybe that is out of scope around the context here.\n\nIts just which Ironic port that is picked might change the segment the IP comes from, in theory.\n\n... oh wait, I see you talk about that below in more detail.","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5774fc60776a18490a18f90273ea385dc4e3dffa","unresolved":false,"context_lines":[{"line_number":125,"context_line":"   modeling you could infer \"attach to y vendor\" class of device. To describe"},{"line_number":126,"context_line":"   this another way, Ironic would evaluate the trait names and if there is"},{"line_number":127,"context_line":"   a match, limited preparatory actions and changes would take place on the"},{"line_number":128,"context_line":"   node which would be expected to be unwound as part of undeploy."},{"line_number":129,"context_line":"4) Nova would then be able to look up the node\u0027s ports and portgroups and"},{"line_number":130,"context_line":"   generate required user metadata which is **required** to be submitted"},{"line_number":131,"context_line":"   upon the deploy command."}],"source_content_type":"text/x-rst","patch_set":5,"id":"231a365c_226aecf6","line":128,"in_reply_to":"d83fabdb_2c56c550","updated":"2025-05-14 20:27:43.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"93affd78956e9dbfdd57d261a1b7261c0899b159","unresolved":true,"context_lines":[{"line_number":126,"context_line":"   this another way, Ironic would evaluate the trait names and if there is"},{"line_number":127,"context_line":"   a match, limited preparatory actions and changes would take place on the"},{"line_number":128,"context_line":"   node which would be expected to be unwound as part of undeploy."},{"line_number":129,"context_line":"4) Nova would then be able to look up the node\u0027s ports and portgroups and"},{"line_number":130,"context_line":"   generate required user metadata which is **required** to be submitted"},{"line_number":131,"context_line":"   upon the deploy command."},{"line_number":132,"context_line":"5) Deployment would then be triggered."},{"line_number":133,"context_line":"6) Network Interfaces through existing neutron client modeling"},{"line_number":134,"context_line":"   would work as it does today, permitting any future interfaces to"}],"source_content_type":"text/x-rst","patch_set":5,"id":"686c0da9_ff9d2d64","line":131,"range":{"start_line":129,"start_character":0,"end_line":131,"end_character":27},"updated":"2025-05-14 12:22:08.000000000","message":"Will this be part of this changeset or already in place as of today?","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5774fc60776a18490a18f90273ea385dc4e3dffa","unresolved":true,"context_lines":[{"line_number":126,"context_line":"   this another way, Ironic would evaluate the trait names and if there is"},{"line_number":127,"context_line":"   a match, limited preparatory actions and changes would take place on the"},{"line_number":128,"context_line":"   node which would be expected to be unwound as part of undeploy."},{"line_number":129,"context_line":"4) Nova would then be able to look up the node\u0027s ports and portgroups and"},{"line_number":130,"context_line":"   generate required user metadata which is **required** to be submitted"},{"line_number":131,"context_line":"   upon the deploy command."},{"line_number":132,"context_line":"5) Deployment would then be triggered."},{"line_number":133,"context_line":"6) Network Interfaces through existing neutron client modeling"},{"line_number":134,"context_line":"   would work as it does today, permitting any future interfaces to"}],"source_content_type":"text/x-rst","patch_set":5,"id":"fc97199b_d5858ae3","line":131,"range":{"start_line":129,"start_character":0,"end_line":131,"end_character":27},"in_reply_to":"686c0da9_ff9d2d64","updated":"2025-05-14 20:27:43.000000000","message":"I believe this is how it already works.","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5e56f114285eb0765e374f62a8331c41aac4f6d2","unresolved":false,"context_lines":[{"line_number":126,"context_line":"   this another way, Ironic would evaluate the trait names and if there is"},{"line_number":127,"context_line":"   a match, limited preparatory actions and changes would take place on the"},{"line_number":128,"context_line":"   node which would be expected to be unwound as part of undeploy."},{"line_number":129,"context_line":"4) Nova would then be able to look up the node\u0027s ports and portgroups and"},{"line_number":130,"context_line":"   generate required user metadata which is **required** to be submitted"},{"line_number":131,"context_line":"   upon the deploy command."},{"line_number":132,"context_line":"5) Deployment would then be triggered."},{"line_number":133,"context_line":"6) Network Interfaces through existing neutron client modeling"},{"line_number":134,"context_line":"   would work as it does today, permitting any future interfaces to"}],"source_content_type":"text/x-rst","patch_set":5,"id":"24435e4e_74f72d6d","line":131,"range":{"start_line":129,"start_character":0,"end_line":131,"end_character":27},"in_reply_to":"fc97199b_d5858ae3","updated":"2025-05-19 11:29:00.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"82ce158d7548bf4789110ab6653e27b3a078fcfd","unresolved":true,"context_lines":[{"line_number":142,"context_line":"`bug 2106073 \u003chttps://bugs.launchpad.net/nova/+bug/2106073\u003e`_."},{"line_number":143,"context_line":"The TL;DR is that a Nova user, if they request networks instead of ports,"},{"line_number":144,"context_line":"may end up in a situation where address generation is ultimately deferred"},{"line_number":145,"context_line":"because port \"scheduling\" and attachments need to be able to take place"},{"line_number":146,"context_line":"independently of a virtual or physical machine instance, as the physical"},{"line_number":147,"context_line":"location in the network is yet to have any insight. The solution is to"},{"line_number":148,"context_line":"likely identify broken metadata cases in the Ironic codebase as we"}],"source_content_type":"text/x-rst","patch_set":5,"id":"d882b3be_e07686c7","line":145,"updated":"2025-05-13 11:22:57.000000000","message":"I believe you get the same behaviour when a user provides a pre-created port, the IP address will be deferred until the port is bound to a specific host?\n\nNow when you re-use a pre-created port, things are different.\n\nThere are also differences when you retry a second host, I think in that case, there are potentially differences around ports getting deleted / re-created.","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"68f2702813f76baafccfe30eeeb6b46a24ff9af0","unresolved":true,"context_lines":[{"line_number":142,"context_line":"`bug 2106073 \u003chttps://bugs.launchpad.net/nova/+bug/2106073\u003e`_."},{"line_number":143,"context_line":"The TL;DR is that a Nova user, if they request networks instead of ports,"},{"line_number":144,"context_line":"may end up in a situation where address generation is ultimately deferred"},{"line_number":145,"context_line":"because port \"scheduling\" and attachments need to be able to take place"},{"line_number":146,"context_line":"independently of a virtual or physical machine instance, as the physical"},{"line_number":147,"context_line":"location in the network is yet to have any insight. The solution is to"},{"line_number":148,"context_line":"likely identify broken metadata cases in the Ironic codebase as we"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ed8e8ae5_aab0b0c3","line":145,"in_reply_to":"d882b3be_e07686c7","updated":"2025-05-13 20:51:15.000000000","message":"There\u0027s a whole patchset from Julia around this issue if you wanna look: https://review.opendev.org/c/openstack/ironic/+/946378 and the two follow ons to it.","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"b2091a3e8dd6fb54c12cb997bd9223bd3c74724e","unresolved":false,"context_lines":[{"line_number":142,"context_line":"`bug 2106073 \u003chttps://bugs.launchpad.net/nova/+bug/2106073\u003e`_."},{"line_number":143,"context_line":"The TL;DR is that a Nova user, if they request networks instead of ports,"},{"line_number":144,"context_line":"may end up in a situation where address generation is ultimately deferred"},{"line_number":145,"context_line":"because port \"scheduling\" and attachments need to be able to take place"},{"line_number":146,"context_line":"independently of a virtual or physical machine instance, as the physical"},{"line_number":147,"context_line":"location in the network is yet to have any insight. The solution is to"},{"line_number":148,"context_line":"likely identify broken metadata cases in the Ironic codebase as we"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1fc8610c_e21da0c2","line":145,"in_reply_to":"ed8e8ae5_aab0b0c3","updated":"2025-06-09 19:27:52.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"93affd78956e9dbfdd57d261a1b7261c0899b159","unresolved":true,"context_lines":[{"line_number":156,"context_line":"portgroup metadata on hand along with what is known to be the physical"},{"line_number":157,"context_line":"port addresses and ulitimately the resulting IP addresses and parameters."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"A standalone user *can* also follow this exact process, or if so"},{"line_number":160,"context_line":"so inclined, directly request specific VIF to portgroup or port"},{"line_number":161,"context_line":"mappings they are manually managing. Again, the overall goal for this"},{"line_number":162,"context_line":"specification is automatic and streamlined for an integrated use case."},{"line_number":163,"context_line":"The *major* difference which delineates the standalone use class from"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9c4e5f9a_df6849e8","line":160,"range":{"start_line":159,"start_character":56,"end_line":160,"end_character":11},"updated":"2025-05-14 12:22:08.000000000","message":"s/or if so so inclined/or if so inclined/","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"ef960df8697bed2baed11b188421cdb7316bf546","unresolved":false,"context_lines":[{"line_number":156,"context_line":"portgroup metadata on hand along with what is known to be the physical"},{"line_number":157,"context_line":"port addresses and ulitimately the resulting IP addresses and parameters."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"A standalone user *can* also follow this exact process, or if so"},{"line_number":160,"context_line":"so inclined, directly request specific VIF to portgroup or port"},{"line_number":161,"context_line":"mappings they are manually managing. Again, the overall goal for this"},{"line_number":162,"context_line":"specification is automatic and streamlined for an integrated use case."},{"line_number":163,"context_line":"The *major* difference which delineates the standalone use class from"}],"source_content_type":"text/x-rst","patch_set":5,"id":"c3e69aae_8d0bfe5f","line":160,"range":{"start_line":159,"start_character":56,"end_line":160,"end_character":11},"in_reply_to":"9c4e5f9a_df6849e8","updated":"2025-05-16 17:33:06.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"93affd78956e9dbfdd57d261a1b7261c0899b159","unresolved":true,"context_lines":[{"line_number":160,"context_line":"so inclined, directly request specific VIF to portgroup or port"},{"line_number":161,"context_line":"mappings they are manually managing. Again, the overall goal for this"},{"line_number":162,"context_line":"specification is automatic and streamlined for an integrated use case."},{"line_number":163,"context_line":"The *major* difference which delineates the standalone use class from"},{"line_number":164,"context_line":"this feature is that standalone users are able to make those decisions"},{"line_number":165,"context_line":"upfront and change other resources. Where as a Nova user in an integrated"},{"line_number":166,"context_line":"context simply cannot because they don\u0027t know in advance what machine"}],"source_content_type":"text/x-rst","patch_set":5,"id":"569774bb_156d8b64","line":163,"range":{"start_line":163,"start_character":55,"end_line":163,"end_character":64},"updated":"2025-05-14 12:22:08.000000000","message":"s/use class/use case/","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"ef960df8697bed2baed11b188421cdb7316bf546","unresolved":false,"context_lines":[{"line_number":160,"context_line":"so inclined, directly request specific VIF to portgroup or port"},{"line_number":161,"context_line":"mappings they are manually managing. Again, the overall goal for this"},{"line_number":162,"context_line":"specification is automatic and streamlined for an integrated use case."},{"line_number":163,"context_line":"The *major* difference which delineates the standalone use class from"},{"line_number":164,"context_line":"this feature is that standalone users are able to make those decisions"},{"line_number":165,"context_line":"upfront and change other resources. Where as a Nova user in an integrated"},{"line_number":166,"context_line":"context simply cannot because they don\u0027t know in advance what machine"}],"source_content_type":"text/x-rst","patch_set":5,"id":"12498959_771f1288","line":163,"range":{"start_line":163,"start_character":55,"end_line":163,"end_character":64},"in_reply_to":"569774bb_156d8b64","updated":"2025-05-16 17:33:06.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"82ce158d7548bf4789110ab6653e27b3a078fcfd","unresolved":true,"context_lines":[{"line_number":165,"context_line":"upfront and change other resources. Where as a Nova user in an integrated"},{"line_number":166,"context_line":"context simply cannot because they don\u0027t know in advance what machine"},{"line_number":167,"context_line":"they may be mapped to nor can they influence that in any other way beyond"},{"line_number":168,"context_line":"what is provided today."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Trait name to value mapping"},{"line_number":171,"context_line":"---------------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"b5e6e943_c7f257c1","line":168,"updated":"2025-05-13 11:22:57.000000000","message":"This is also key feature, I think, in the Nova case, flavors will limit the options to a range of (hopefully tested) combinations, explicitly allowed by the cloud operator.","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"7d310e5c96dff1825e561d9e53f57d40fbb752b0","unresolved":false,"context_lines":[{"line_number":165,"context_line":"upfront and change other resources. Where as a Nova user in an integrated"},{"line_number":166,"context_line":"context simply cannot because they don\u0027t know in advance what machine"},{"line_number":167,"context_line":"they may be mapped to nor can they influence that in any other way beyond"},{"line_number":168,"context_line":"what is provided today."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Trait name to value mapping"},{"line_number":171,"context_line":"---------------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"b8063ec5_c8603d93","line":168,"in_reply_to":"b5e6e943_c7f257c1","updated":"2025-06-18 21:17:22.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"82ce158d7548bf4789110ab6653e27b3a078fcfd","unresolved":true,"context_lines":[{"line_number":168,"context_line":"what is provided today."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Trait name to value mapping"},{"line_number":171,"context_line":"---------------------------"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"An initial proposed model is to make the mapping of flavor to action modeling"},{"line_number":174,"context_line":"for this feature starting with just a configuration setting which is loaded"}],"source_content_type":"text/x-rst","patch_set":5,"id":"a0b1c0d3_c4fe5cb4","line":171,"updated":"2025-05-13 11:22:57.000000000","message":"So this bit really confused me, for a while.\n\nI think it confused me, as I assumed it was all about dynamic port groups (which I don\u0027t really care about, personally) rather than tweaking the way we pick which Ironic ports (and port groups!) we are mapping to here.\n\nMy personal preference, which might be more confusing, is to split this into two sections, first one talking about changing how we bind specific port_groups (and ports), based on things like network tags or similar.\n\nWe should walk through an example that is contrived to show the flexibility, i.e. we have multiple networks that select a subset of pre-existing port groups and ports, or something like that. Say you have 5 NICs, a single 10GbE, and two bonded 100GbE, with one of the bonds being a smart nic of some type, but the user requests just the single 10GbE and the smart nic, leaving the remaining network card unused for that use case. (This is quite a common case with IB cards where K8s operators manage pkeys)\n\nWe can then have a second section that talkings about \"bond_and_attach_ports\" as a possible future extension to the spec? Similar to the note about doing multiple actions.","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"b2091a3e8dd6fb54c12cb997bd9223bd3c74724e","unresolved":false,"context_lines":[{"line_number":168,"context_line":"what is provided today."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Trait name to value mapping"},{"line_number":171,"context_line":"---------------------------"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"An initial proposed model is to make the mapping of flavor to action modeling"},{"line_number":174,"context_line":"for this feature starting with just a configuration setting which is loaded"}],"source_content_type":"text/x-rst","patch_set":5,"id":"143a20b2_9c58b3d7","line":171,"in_reply_to":"72666137_1392821c","updated":"2025-06-09 19:27:52.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"68f2702813f76baafccfe30eeeb6b46a24ff9af0","unresolved":true,"context_lines":[{"line_number":168,"context_line":"what is provided today."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Trait name to value mapping"},{"line_number":171,"context_line":"---------------------------"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"An initial proposed model is to make the mapping of flavor to action modeling"},{"line_number":174,"context_line":"for this feature starting with just a configuration setting which is loaded"}],"source_content_type":"text/x-rst","patch_set":5,"id":"72666137_1392821c","line":171,"in_reply_to":"a0b1c0d3_c4fe5cb4","updated":"2025-05-13 20:51:15.000000000","message":"Do you want to put together a specific example with what you\u0027re thinking? I\u0027ll be happy to integrate it. Otherwise I\u0027ll work around to splitting this up more later.","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"82ce158d7548bf4789110ab6653e27b3a078fcfd","unresolved":true,"context_lines":[{"line_number":190,"context_line":"  ---"},{"line_number":191,"context_line":"  custom_trait_name:"},{"line_number":192,"context_line":"    - action: bond_ports"},{"line_number":193,"context_line":"      filter: port.vendor \u003d\u003d \u0027vendor_string\u0027 \u0026\u0026 minimum_count \u003d\u003d 2"},{"line_number":194,"context_line":"  custom_direct_attach_a_purple_to_storage:"},{"line_number":195,"context_line":"    - action: attach_port"},{"line_number":196,"context_line":"      filter: port.vendor \u003d\u003d \u0027purple\u0027 \u0026\u0026 vif.network.name \u003d\u003d \u0027storage\u0027:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"d08c7118_f0cc7d3c","line":193,"updated":"2025-05-13 11:22:57.000000000","message":"I think we need a very clear definition of which fields are available here, and what it means in the case of either ports or port_groups?\n\nMy preference is to change this to either: bond_port or bond_port_group, so we are explicit in the config, rather than assume we try for a port_group first, and create confusion for the operator.\n\nWe need to be careful on what happens when no traits match, I guess if the ironic node has matching traits set on it that appear in this list, we turn off the default port selection behaviour all together? Again, to avoid strange surpizes?","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5774fc60776a18490a18f90273ea385dc4e3dffa","unresolved":true,"context_lines":[{"line_number":190,"context_line":"  ---"},{"line_number":191,"context_line":"  custom_trait_name:"},{"line_number":192,"context_line":"    - action: bond_ports"},{"line_number":193,"context_line":"      filter: port.vendor \u003d\u003d \u0027vendor_string\u0027 \u0026\u0026 minimum_count \u003d\u003d 2"},{"line_number":194,"context_line":"  custom_direct_attach_a_purple_to_storage:"},{"line_number":195,"context_line":"    - action: attach_port"},{"line_number":196,"context_line":"      filter: port.vendor \u003d\u003d \u0027purple\u0027 \u0026\u0026 vif.network.name \u003d\u003d \u0027storage\u0027:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"e07d050f_7da3bb3c","line":193,"in_reply_to":"1665c2f2_69e66d67","updated":"2025-05-14 20:27:43.000000000","message":"Still need to address the \"trait but no match\" case. Made the available ports much more specific.","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"68f2702813f76baafccfe30eeeb6b46a24ff9af0","unresolved":true,"context_lines":[{"line_number":190,"context_line":"  ---"},{"line_number":191,"context_line":"  custom_trait_name:"},{"line_number":192,"context_line":"    - action: bond_ports"},{"line_number":193,"context_line":"      filter: port.vendor \u003d\u003d \u0027vendor_string\u0027 \u0026\u0026 minimum_count \u003d\u003d 2"},{"line_number":194,"context_line":"  custom_direct_attach_a_purple_to_storage:"},{"line_number":195,"context_line":"    - action: attach_port"},{"line_number":196,"context_line":"      filter: port.vendor \u003d\u003d \u0027purple\u0027 \u0026\u0026 vif.network.name \u003d\u003d \u0027storage\u0027:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1665c2f2_69e66d67","line":193,"in_reply_to":"d08c7118_f0cc7d3c","updated":"2025-05-13 20:51:15.000000000","message":"++ good call on the \"trait is set but no match\" case","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"7d310e5c96dff1825e561d9e53f57d40fbb752b0","unresolved":false,"context_lines":[{"line_number":190,"context_line":"  ---"},{"line_number":191,"context_line":"  custom_trait_name:"},{"line_number":192,"context_line":"    - action: bond_ports"},{"line_number":193,"context_line":"      filter: port.vendor \u003d\u003d \u0027vendor_string\u0027 \u0026\u0026 minimum_count \u003d\u003d 2"},{"line_number":194,"context_line":"  custom_direct_attach_a_purple_to_storage:"},{"line_number":195,"context_line":"    - action: attach_port"},{"line_number":196,"context_line":"      filter: port.vendor \u003d\u003d \u0027purple\u0027 \u0026\u0026 vif.network.name \u003d\u003d \u0027storage\u0027:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"f77e39b1_61d61938","line":193,"in_reply_to":"e07d050f_7da3bb3c","updated":"2025-06-18 21:17:22.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"93affd78956e9dbfdd57d261a1b7261c0899b159","unresolved":true,"context_lines":[{"line_number":222,"context_line":".. NOTE::"},{"line_number":223,"context_line":"   In this model, vif.network should be a parameter method which takes"},{"line_number":224,"context_line":"   the Neutron port ``network_id`` value and resolves that data structure"},{"line_number":225,"context_line":"   under the value so filter queries can values set on networks as well,"},{"line_number":226,"context_line":"   because a very common pattern is for a user to ask Nova to create an"},{"line_number":227,"context_line":"   instance on one or more networks and not pre-create the Neutron Ports"},{"line_number":228,"context_line":"   for the instance being requested."}],"source_content_type":"text/x-rst","patch_set":5,"id":"f10e5246_958a363e","line":225,"range":{"start_line":225,"start_character":19,"end_line":225,"end_character":71},"updated":"2025-05-14 12:22:08.000000000","message":"confusing.","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5774fc60776a18490a18f90273ea385dc4e3dffa","unresolved":false,"context_lines":[{"line_number":222,"context_line":".. NOTE::"},{"line_number":223,"context_line":"   In this model, vif.network should be a parameter method which takes"},{"line_number":224,"context_line":"   the Neutron port ``network_id`` value and resolves that data structure"},{"line_number":225,"context_line":"   under the value so filter queries can values set on networks as well,"},{"line_number":226,"context_line":"   because a very common pattern is for a user to ask Nova to create an"},{"line_number":227,"context_line":"   instance on one or more networks and not pre-create the Neutron Ports"},{"line_number":228,"context_line":"   for the instance being requested."}],"source_content_type":"text/x-rst","patch_set":5,"id":"fdf985d5_b50cac9e","line":225,"range":{"start_line":225,"start_character":19,"end_line":225,"end_character":71},"in_reply_to":"f10e5246_958a363e","updated":"2025-05-14 20:27:43.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"82ce158d7548bf4789110ab6653e27b3a078fcfd","unresolved":true,"context_lines":[{"line_number":252,"context_line":"Which is all well and good, except VXLAN networks have no"},{"line_number":253,"context_line":"functional concept, at present, of being on separate physical"},{"line_number":254,"context_line":"network fabrics. This is contrary to the VLAN model where separate"},{"line_number":255,"context_line":"physical network fabrics are actively considered."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"As such, in this model to help alignment, and help prevent"},{"line_number":258,"context_line":"Ironic service or port fabric usage from crossing over into"}],"source_content_type":"text/x-rst","patch_set":5,"id":"997abed2_acd06554","line":255,"updated":"2025-05-13 11:22:57.000000000","message":"oh, I forgot about that... it is horrible. There is a specific interface on each host for all the VXLAN/geneve networks.\n\nFWIW, this cases massive problems with SR-IOV and hardware offloaded OVS where you want to support both VLAN and VXLAN networks, you have to hack that right now, giving each side of the bond either a None physnet or physnet1 for the VXLAN and VLAN respectively. Its very yuck there too. (i.e. there is common ground here for changing things, I feel!)","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"82ce158d7548bf4789110ab6653e27b3a078fcfd","unresolved":true,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"Future Enhancements"},{"line_number":270,"context_line":"-------------------"},{"line_number":271,"context_line":"Obvious minor future enhancements to this feature would include:"},{"line_number":272,"context_line":"  - specifying a default set of rules to apply to a single node  (e.g."},{"line_number":273,"context_line":"    node.driver_info.default_network_rule\u003dmykey)"}],"source_content_type":"text/x-rst","patch_set":5,"id":"897d7d33_0cd7f0fd","line":270,"updated":"2025-05-13 11:22:57.000000000","message":"I think we should move bond_and_attach_ports into here, honestly.\n\nNoting, that the main changes are all on the Ironic side for the next steps.","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"b2091a3e8dd6fb54c12cb997bd9223bd3c74724e","unresolved":false,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"Future Enhancements"},{"line_number":270,"context_line":"-------------------"},{"line_number":271,"context_line":"Obvious minor future enhancements to this feature would include:"},{"line_number":272,"context_line":"  - specifying a default set of rules to apply to a single node  (e.g."},{"line_number":273,"context_line":"    node.driver_info.default_network_rule\u003dmykey)"}],"source_content_type":"text/x-rst","patch_set":5,"id":"217a31cd_2e8ed144","line":270,"in_reply_to":"6ff86938_f8ed612d","updated":"2025-06-09 19:27:52.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5774fc60776a18490a18f90273ea385dc4e3dffa","unresolved":true,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"Future Enhancements"},{"line_number":270,"context_line":"-------------------"},{"line_number":271,"context_line":"Obvious minor future enhancements to this feature would include:"},{"line_number":272,"context_line":"  - specifying a default set of rules to apply to a single node  (e.g."},{"line_number":273,"context_line":"    node.driver_info.default_network_rule\u003dmykey)"}],"source_content_type":"text/x-rst","patch_set":5,"id":"6ff86938_f8ed612d","line":270,"in_reply_to":"897d7d33_0cd7f0fd","updated":"2025-05-14 20:27:43.000000000","message":"I clearly split this into two milestones.","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"82ce158d7548bf4789110ab6653e27b3a078fcfd","unresolved":true,"context_lines":[{"line_number":306,"context_line":"approach may be palatable to operators who are deeply invested in convereged"},{"line_number":307,"context_line":"multitenant platforms."},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"Data model impact"},{"line_number":310,"context_line":"-----------------"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"In order to facilitate this, we\u0027ll need to add new field values on ports and"}],"source_content_type":"text/x-rst","patch_set":5,"id":"8f79ecc9_35e49c02","line":309,"updated":"2025-05-13 11:22:57.000000000","message":"If we skip the \"bond_and_attach_ports\" bit, I think these are nice to have, assuming the logic has access to fields like port.extra and port_group.extra?","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"b2091a3e8dd6fb54c12cb997bd9223bd3c74724e","unresolved":false,"context_lines":[{"line_number":306,"context_line":"approach may be palatable to operators who are deeply invested in convereged"},{"line_number":307,"context_line":"multitenant platforms."},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"Data model impact"},{"line_number":310,"context_line":"-----------------"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"In order to facilitate this, we\u0027ll need to add new field values on ports and"}],"source_content_type":"text/x-rst","patch_set":5,"id":"d820dd50_68dd0b86","line":309,"in_reply_to":"87dc6c00_de80d6bc","updated":"2025-06-09 19:27:52.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5774fc60776a18490a18f90273ea385dc4e3dffa","unresolved":true,"context_lines":[{"line_number":306,"context_line":"approach may be palatable to operators who are deeply invested in convereged"},{"line_number":307,"context_line":"multitenant platforms."},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"Data model impact"},{"line_number":310,"context_line":"-----------------"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"In order to facilitate this, we\u0027ll need to add new field values on ports and"}],"source_content_type":"text/x-rst","patch_set":5,"id":"87dc6c00_de80d6bc","line":309,"in_reply_to":"8f79ecc9_35e49c02","updated":"2025-05-14 20:27:43.000000000","message":"I\u0027ve added access to extra as a next step. I don\u0027t know if we want to walk the entire extra dictionary, and if the fields we\u0027re adding aren\u0027t expressive enough for an MVP, we should evaluate how to make them more expressive.\n\nTrying to keep extra from being a dumping ground ala node.[nearly_everything] 😄","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"93affd78956e9dbfdd57d261a1b7261c0899b159","unresolved":true,"context_lines":[{"line_number":310,"context_line":"-----------------"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"In order to facilitate this, we\u0027ll need to add new field values on ports and"},{"line_number":313,"context_line":"portgroups to enable more verbose operator interactions with the objects in"},{"line_number":314,"context_line":"order for an operator to be able to easily."},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"To the Port object, and ultimately API:"},{"line_number":317,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"eab30160_933c3ccb","line":314,"range":{"start_line":313,"start_character":73,"end_line":314,"end_character":42},"updated":"2025-05-14 12:22:08.000000000","message":"confusing","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"ef960df8697bed2baed11b188421cdb7316bf546","unresolved":false,"context_lines":[{"line_number":310,"context_line":"-----------------"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"In order to facilitate this, we\u0027ll need to add new field values on ports and"},{"line_number":313,"context_line":"portgroups to enable more verbose operator interactions with the objects in"},{"line_number":314,"context_line":"order for an operator to be able to easily."},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"To the Port object, and ultimately API:"},{"line_number":317,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"4ff56104_eb7cec1b","line":314,"range":{"start_line":313,"start_character":73,"end_line":314,"end_character":42},"in_reply_to":"eab30160_933c3ccb","updated":"2025-05-16 17:33:06.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"82ce158d7548bf4789110ab6653e27b3a078fcfd","unresolved":true,"context_lines":[{"line_number":317,"context_line":""},{"line_number":318,"context_line":"- \"vendor\" - String field - 32 characters"},{"line_number":319,"context_line":"- \"class\" - String field - 80 characters"},{"line_number":320,"context_line":"- \"available_for_dynamic_portgroup\" - Boolean - Default False"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"To the Portgroup object, and ultimately API:"},{"line_number":323,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"73335229_7b6d8c24","line":320,"updated":"2025-05-13 11:22:57.000000000","message":"I think we should defer the dynamic_portgroup bit, potentially?","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5774fc60776a18490a18f90273ea385dc4e3dffa","unresolved":false,"context_lines":[{"line_number":317,"context_line":""},{"line_number":318,"context_line":"- \"vendor\" - String field - 32 characters"},{"line_number":319,"context_line":"- \"class\" - String field - 80 characters"},{"line_number":320,"context_line":"- \"available_for_dynamic_portgroup\" - Boolean - Default False"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"To the Portgroup object, and ultimately API:"},{"line_number":323,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5ff58f8f_d2b0080f","line":320,"in_reply_to":"73335229_7b6d8c24","updated":"2025-05-14 20:27:43.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"82ce158d7548bf4789110ab6653e27b3a078fcfd","unresolved":true,"context_lines":[{"line_number":322,"context_line":"To the Portgroup object, and ultimately API:"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"- \"class\" - String field - String field - 80 characters"},{"line_number":325,"context_line":"- \"physical_network\" - String field - 64 characters"},{"line_number":326,"context_line":"- \"dynamic_portgroup\" - Boolean value - Read only to API consumers,"},{"line_number":327,"context_line":"  default False but set to True internally so Ironic can know when"},{"line_number":328,"context_line":"  the portgroup must be torn down."}],"source_content_type":"text/x-rst","patch_set":5,"id":"74196fb9_050b5994","line":325,"updated":"2025-05-13 11:22:57.000000000","message":"For clarity, this would just tell you what physical_network you have set on all the ports in the port group? Making it read-only?\n\nOr do you mean you need to set it when you create the port group now?\n\n(My preference is for it to be read only, and keep the fact that you can\u0027t have ports from different physnets in there right now)","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"7d310e5c96dff1825e561d9e53f57d40fbb752b0","unresolved":true,"context_lines":[{"line_number":322,"context_line":"To the Portgroup object, and ultimately API:"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"- \"class\" - String field - String field - 80 characters"},{"line_number":325,"context_line":"- \"physical_network\" - String field - 64 characters"},{"line_number":326,"context_line":"- \"dynamic_portgroup\" - Boolean value - Read only to API consumers,"},{"line_number":327,"context_line":"  default False but set to True internally so Ironic can know when"},{"line_number":328,"context_line":"  the portgroup must be torn down."}],"source_content_type":"text/x-rst","patch_set":5,"id":"cf017525_1e8dd0f5","line":325,"in_reply_to":"74196fb9_050b5994","updated":"2025-06-18 21:17:22.000000000","message":"We went this route.","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"82ce158d7548bf4789110ab6653e27b3a078fcfd","unresolved":true,"context_lines":[{"line_number":323,"context_line":""},{"line_number":324,"context_line":"- \"class\" - String field - String field - 80 characters"},{"line_number":325,"context_line":"- \"physical_network\" - String field - 64 characters"},{"line_number":326,"context_line":"- \"dynamic_portgroup\" - Boolean value - Read only to API consumers,"},{"line_number":327,"context_line":"  default False but set to True internally so Ironic can know when"},{"line_number":328,"context_line":"  the portgroup must be torn down."},{"line_number":329,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"db7fccb2_bc0d514f","line":326,"updated":"2025-05-13 11:22:57.000000000","message":"As above, maybe defer this right now?","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"5774fc60776a18490a18f90273ea385dc4e3dffa","unresolved":false,"context_lines":[{"line_number":323,"context_line":""},{"line_number":324,"context_line":"- \"class\" - String field - String field - 80 characters"},{"line_number":325,"context_line":"- \"physical_network\" - String field - 64 characters"},{"line_number":326,"context_line":"- \"dynamic_portgroup\" - Boolean value - Read only to API consumers,"},{"line_number":327,"context_line":"  default False but set to True internally so Ironic can know when"},{"line_number":328,"context_line":"  the portgroup must be torn down."},{"line_number":329,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"496ff960_9b838f36","line":326,"in_reply_to":"db7fccb2_bc0d514f","updated":"2025-05-14 20:27:43.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"93affd78956e9dbfdd57d261a1b7261c0899b159","unresolved":true,"context_lines":[{"line_number":342,"context_line":"surfaced on the Port and Portgroup resources within the standard data model"},{"line_number":343,"context_line":"behavior already established by those objects and endpoints."},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"Accordingly, an the REST API microversion will also need to be incremented."},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"Client (CLI) impact"},{"line_number":348,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"fd91903b_d03940dd","line":345,"range":{"start_line":345,"start_character":13,"end_line":345,"end_character":27},"updated":"2025-05-14 12:22:08.000000000","message":"s/an the REST API/the REST API/","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"ef960df8697bed2baed11b188421cdb7316bf546","unresolved":false,"context_lines":[{"line_number":342,"context_line":"surfaced on the Port and Portgroup resources within the standard data model"},{"line_number":343,"context_line":"behavior already established by those objects and endpoints."},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"Accordingly, an the REST API microversion will also need to be incremented."},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"Client (CLI) impact"},{"line_number":348,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"a8703cfe_69f99b4c","line":345,"range":{"start_line":345,"start_character":13,"end_line":345,"end_character":27},"in_reply_to":"fd91903b_d03940dd","updated":"2025-05-16 17:33:06.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"93affd78956e9dbfdd57d261a1b7261c0899b159","unresolved":true,"context_lines":[{"line_number":356,"context_line":"\"openstacksdk\""},{"line_number":357,"context_line":"~~~~~~~~~~~~~~"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"Openstacksdk will require addition of the additional fields for programmatic"},{"line_number":360,"context_line":"interactions."},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"RPC API impact"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9d1d1400_b9369013","line":359,"range":{"start_line":359,"start_character":26,"end_line":359,"end_character":52},"updated":"2025-05-14 12:22:08.000000000","message":"awkward wording","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"ef960df8697bed2baed11b188421cdb7316bf546","unresolved":false,"context_lines":[{"line_number":356,"context_line":"\"openstacksdk\""},{"line_number":357,"context_line":"~~~~~~~~~~~~~~"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"Openstacksdk will require addition of the additional fields for programmatic"},{"line_number":360,"context_line":"interactions."},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"RPC API impact"}],"source_content_type":"text/x-rst","patch_set":5,"id":"8e6e209d_1419e46d","line":359,"range":{"start_line":359,"start_character":26,"end_line":359,"end_character":52},"in_reply_to":"9d1d1400_b9369013","updated":"2025-05-16 17:33:06.000000000","message":"Done","commit_id":"b1e137bf5a3d5ce9ee52b8aefe69580b2200250c"},{"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":"ef960df8697bed2baed11b188421cdb7316bf546","unresolved":true,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"And to that end, Ironic\u0027s modeling of how one links a \"virtual interface\""},{"line_number":14,"context_line":"to physical interfaces is woefully inadequate beyond \"basic\" connectivity."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Problem description"},{"line_number":17,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"374f0a89_d4901a24","line":15,"updated":"2025-05-16 17:33:06.000000000","message":"Add a paragraph here about how basically this is trying to solve how to map virtual interfaces/neutron ports to physical interfaces/ironic ports as a high level description of what\u0027s happening.","commit_id":"a9eaffad36ad24043a453f8638f18c06d1c48877"},{"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":"ce47d1fc330c97542eb49e3331190ea1b009a0dc","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"And to that end, Ironic\u0027s modeling of how one links a \"virtual interface\""},{"line_number":14,"context_line":"to physical interfaces is woefully inadequate beyond \"basic\" connectivity."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Problem description"},{"line_number":17,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a7fb764_f664a04d","line":15,"in_reply_to":"374f0a89_d4901a24","updated":"2025-05-16 18:31:07.000000000","message":"Done","commit_id":"a9eaffad36ad24043a453f8638f18c06d1c48877"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"45006b636af7a38943d5bfaf5efb7a03decd51c8","unresolved":true,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"* Require a matching or undefined physical network"},{"line_number":27,"context_line":"* Prefer ports or port groups with a physical network defined"},{"line_number":28,"context_line":"* Prefer portgroups to ports"},{"line_number":29,"context_line":"* Prefer ports which are PXE Enabled"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Except, this is fundamentally limited in that with this model, we cannot:"}],"source_content_type":"text/x-rst","patch_set":7,"id":"a7296e26_4078c1d2","line":28,"range":{"start_line":28,"start_character":9,"end_line":28,"end_character":19},"updated":"2025-05-19 18:31:03.000000000","message":"nit: We should likely denote this as \"static (preconfigured) portgroups\"","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"b2091a3e8dd6fb54c12cb997bd9223bd3c74724e","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"* Require a matching or undefined physical network"},{"line_number":27,"context_line":"* Prefer ports or port groups with a physical network defined"},{"line_number":28,"context_line":"* Prefer portgroups to ports"},{"line_number":29,"context_line":"* Prefer ports which are PXE Enabled"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Except, this is fundamentally limited in that with this model, we cannot:"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3077a754_6e12f6d7","line":28,"range":{"start_line":28,"start_character":9,"end_line":28,"end_character":19},"in_reply_to":"a7296e26_4078c1d2","updated":"2025-06-09 19:27:52.000000000","message":"Done","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"45006b636af7a38943d5bfaf5efb7a03decd51c8","unresolved":true,"context_lines":[{"line_number":67,"context_line":"perform network mapping. Traits are already used in this way to modify"},{"line_number":68,"context_line":"deployment process at deploy time in ``deploy_templates``."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Ultimately, this requires advances in both data model and scheduling,"},{"line_number":71,"context_line":"but the overall hope is to facilitate a flavor based model to enable"},{"line_number":72,"context_line":"this mapping so a user leveraging Nova can request a baremetal node"},{"line_number":73,"context_line":"and Ironic does the needful. Additionally, direct hinting of a port for"}],"source_content_type":"text/x-rst","patch_set":7,"id":"35ae4059_50a84c6a","line":70,"range":{"start_line":70,"start_character":58,"end_line":70,"end_character":68},"updated":"2025-05-19 18:31:03.000000000","message":"Mental note, and if we\u0027re not in the same page, lets address this:\n\nAIUI, it is possible to define an *optional* trait, which is what we expect with deploy templates. The optional trait is what we would expect. If we want *required* traits, then the node would need to be pre-configured with possible trait permutations to be announced for scheduling.\n\nImprovements in scheduling *shouldn\u0027t* really be needed in that model *beyond* the logical linkage and example documentation to detail the how. \n\nThat being said, if we do still think scheduling enhancement is needed, then the framing text of this overview might need a little more clarity.\n\nNota Bene: There is a constraint limit of 80 traits per node.","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"b2091a3e8dd6fb54c12cb997bd9223bd3c74724e","unresolved":false,"context_lines":[{"line_number":67,"context_line":"perform network mapping. Traits are already used in this way to modify"},{"line_number":68,"context_line":"deployment process at deploy time in ``deploy_templates``."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Ultimately, this requires advances in both data model and scheduling,"},{"line_number":71,"context_line":"but the overall hope is to facilitate a flavor based model to enable"},{"line_number":72,"context_line":"this mapping so a user leveraging Nova can request a baremetal node"},{"line_number":73,"context_line":"and Ironic does the needful. Additionally, direct hinting of a port for"}],"source_content_type":"text/x-rst","patch_set":7,"id":"90d728ec_01818947","line":70,"range":{"start_line":70,"start_character":58,"end_line":70,"end_character":68},"in_reply_to":"35ae4059_50a84c6a","updated":"2025-06-09 19:27:52.000000000","message":"Done","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"23a17deb4f6ca4f8e900fbdbf479eb363f3ebc27","unresolved":true,"context_lines":[{"line_number":95,"context_line":"create portgroups out of single ports as well."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"For example, if I have a flavor named ``double_purple``, which has a trait"},{"line_number":98,"context_line":"``CUSTOM_BOND_TWO_PURPLE``, and operator could configure this trait to"},{"line_number":99,"context_line":"perform an action to attach two existing ports together into a dynamic"},{"line_number":100,"context_line":"portgroup connected to a network tagged purple. Additionally, they could have"},{"line_number":101,"context_line":"a flavor named ``double_green``, which does the same action except for green"}],"source_content_type":"text/x-rst","patch_set":7,"id":"8748c76d_cb8a4e79","line":98,"range":{"start_line":98,"start_character":28,"end_line":98,"end_character":32},"updated":"2025-05-19 11:18:57.000000000","message":"s/and/an/","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"b2091a3e8dd6fb54c12cb997bd9223bd3c74724e","unresolved":false,"context_lines":[{"line_number":95,"context_line":"create portgroups out of single ports as well."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"For example, if I have a flavor named ``double_purple``, which has a trait"},{"line_number":98,"context_line":"``CUSTOM_BOND_TWO_PURPLE``, and operator could configure this trait to"},{"line_number":99,"context_line":"perform an action to attach two existing ports together into a dynamic"},{"line_number":100,"context_line":"portgroup connected to a network tagged purple. Additionally, they could have"},{"line_number":101,"context_line":"a flavor named ``double_green``, which does the same action except for green"}],"source_content_type":"text/x-rst","patch_set":7,"id":"88713a1d_f392355f","line":98,"range":{"start_line":98,"start_character":28,"end_line":98,"end_character":32},"in_reply_to":"8748c76d_cb8a4e79","updated":"2025-06-09 19:27:52.000000000","message":"Done","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"23a17deb4f6ca4f8e900fbdbf479eb363f3ebc27","unresolved":true,"context_lines":[{"line_number":141,"context_line":"4) Nova would then be able to look up the node\u0027s ports and portgroups and"},{"line_number":142,"context_line":"   generate required user metadata which is **required** to be submitted"},{"line_number":143,"context_line":"   upon the deploy command."},{"line_number":144,"context_line":"5) The node would then have be ``deploy`` -ed via the set_provision_state API."},{"line_number":145,"context_line":"6) Network Interfaces would then take action to configure the"},{"line_number":146,"context_line":"   Ports/Portgroups (which were updated to reflect dynamic mappings in #3)."},{"line_number":147,"context_line":"   It is only expected to work with the ``neutron`` interface, but it may be"}],"source_content_type":"text/x-rst","patch_set":7,"id":"abbdd2eb_599ba483","line":144,"range":{"start_line":144,"start_character":18,"end_line":144,"end_character":45},"updated":"2025-05-19 11:18:57.000000000","message":"nit: With the \u0027have\u0027 it sounds like \"would then have been ``deploy`` -ed\". But I guess you mean: \"The node would then be ``deploy`` -ed?\" since deployment shouldn\u0027t have occured yet.","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"620eff8c5fdfc9b6c3a0b9e784b9bcb2a5196282","unresolved":true,"context_lines":[{"line_number":141,"context_line":"4) Nova would then be able to look up the node\u0027s ports and portgroups and"},{"line_number":142,"context_line":"   generate required user metadata which is **required** to be submitted"},{"line_number":143,"context_line":"   upon the deploy command."},{"line_number":144,"context_line":"5) The node would then have be ``deploy`` -ed via the set_provision_state API."},{"line_number":145,"context_line":"6) Network Interfaces would then take action to configure the"},{"line_number":146,"context_line":"   Ports/Portgroups (which were updated to reflect dynamic mappings in #3)."},{"line_number":147,"context_line":"   It is only expected to work with the ``neutron`` interface, but it may be"}],"source_content_type":"text/x-rst","patch_set":7,"id":"c5b33f9c_63d06a6f","line":144,"range":{"start_line":144,"start_character":18,"end_line":144,"end_character":45},"in_reply_to":"abbdd2eb_599ba483","updated":"2025-05-19 14:32:59.000000000","message":"yeah, \"would then be deployed\" is more correct","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"b2091a3e8dd6fb54c12cb997bd9223bd3c74724e","unresolved":false,"context_lines":[{"line_number":141,"context_line":"4) Nova would then be able to look up the node\u0027s ports and portgroups and"},{"line_number":142,"context_line":"   generate required user metadata which is **required** to be submitted"},{"line_number":143,"context_line":"   upon the deploy command."},{"line_number":144,"context_line":"5) The node would then have be ``deploy`` -ed via the set_provision_state API."},{"line_number":145,"context_line":"6) Network Interfaces would then take action to configure the"},{"line_number":146,"context_line":"   Ports/Portgroups (which were updated to reflect dynamic mappings in #3)."},{"line_number":147,"context_line":"   It is only expected to work with the ``neutron`` interface, but it may be"}],"source_content_type":"text/x-rst","patch_set":7,"id":"b27f424f_f83f4ca4","line":144,"range":{"start_line":144,"start_character":18,"end_line":144,"end_character":45},"in_reply_to":"c5b33f9c_63d06a6f","updated":"2025-06-09 19:27:52.000000000","message":"Done","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"45006b636af7a38943d5bfaf5efb7a03decd51c8","unresolved":true,"context_lines":[{"line_number":148,"context_line":"   possible to use other interfaces in the future."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"On a positive note, Nova **already** does this *exact* process we need"},{"line_number":151,"context_line":"to be able to perform logic along these lines."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"A standalone user *can* also follow this exact process, or if so inclined,"},{"line_number":154,"context_line":"directly request specific VIF to portgroup or port mappings they are manually"}],"source_content_type":"text/x-rst","patch_set":7,"id":"ef81985e_5c91145c","line":151,"updated":"2025-05-19 18:31:03.000000000","message":"It might be worth noting there is an open bug regarding metadata generation from nova, where the solution seems to be to regenerate it on ironic\u0027s side. That sort of negates any need regarding item 4, but on a plus side means ironic controls the code to do the error correction and replacement.","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"b2091a3e8dd6fb54c12cb997bd9223bd3c74724e","unresolved":false,"context_lines":[{"line_number":148,"context_line":"   possible to use other interfaces in the future."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"On a positive note, Nova **already** does this *exact* process we need"},{"line_number":151,"context_line":"to be able to perform logic along these lines."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"A standalone user *can* also follow this exact process, or if so inclined,"},{"line_number":154,"context_line":"directly request specific VIF to portgroup or port mappings they are manually"}],"source_content_type":"text/x-rst","patch_set":7,"id":"4d282887_4461b117","line":151,"in_reply_to":"ef81985e_5c91145c","updated":"2025-06-09 19:27:52.000000000","message":"Done","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"23a17deb4f6ca4f8e900fbdbf479eb363f3ebc27","unresolved":true,"context_lines":[{"line_number":167,"context_line":"a static YAML configuration file deployed to the conductor. The location of"},{"line_number":168,"context_line":"this file will be configurable."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"For actions which can work on any number of ports, all ports that match the"},{"line_number":171,"context_line":"expression will be used. For actions which can work only on a single port,"},{"line_number":172,"context_line":"the first port that matches the expression will be used."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"YAML Structure/Grammar"},{"line_number":175,"context_line":"~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7d0d967d_eed5fd62","line":172,"range":{"start_line":170,"start_character":0,"end_line":172,"end_character":56},"updated":"2025-05-19 11:18:57.000000000","message":"Since this is determined by the min/max_count keys, is there really a way to configure \"on any number of ports\"(?).\n\nUpdate:\nOh, I think not having that key, means on any number of ports(?)!","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"b2091a3e8dd6fb54c12cb997bd9223bd3c74724e","unresolved":false,"context_lines":[{"line_number":167,"context_line":"a static YAML configuration file deployed to the conductor. The location of"},{"line_number":168,"context_line":"this file will be configurable."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"For actions which can work on any number of ports, all ports that match the"},{"line_number":171,"context_line":"expression will be used. For actions which can work only on a single port,"},{"line_number":172,"context_line":"the first port that matches the expression will be used."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"YAML Structure/Grammar"},{"line_number":175,"context_line":"~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9f525dd5_bf7a8b39","line":172,"range":{"start_line":170,"start_character":0,"end_line":172,"end_character":56},"in_reply_to":"56389030_d6ff8def","updated":"2025-06-09 19:27:52.000000000","message":"Done","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"620eff8c5fdfc9b6c3a0b9e784b9bcb2a5196282","unresolved":true,"context_lines":[{"line_number":167,"context_line":"a static YAML configuration file deployed to the conductor. The location of"},{"line_number":168,"context_line":"this file will be configurable."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"For actions which can work on any number of ports, all ports that match the"},{"line_number":171,"context_line":"expression will be used. For actions which can work only on a single port,"},{"line_number":172,"context_line":"the first port that matches the expression will be used."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"YAML Structure/Grammar"},{"line_number":175,"context_line":"~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":7,"id":"56389030_d6ff8def","line":172,"range":{"start_line":170,"start_character":0,"end_line":172,"end_character":56},"in_reply_to":"7d0d967d_eed5fd62","updated":"2025-05-19 14:32:59.000000000","message":"++ I can make it explicit.","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"23a17deb4f6ca4f8e900fbdbf479eb363f3ebc27","unresolved":true,"context_lines":[{"line_number":209,"context_line":"ABC order (e.g. deploying with traits ``CUSTOM_NETWORK_X`` and"},{"line_number":210,"context_line":"``CUSTOM_NETWORK_Y`` would lead to ``CUSTOM_NETWORK_X`` action/filter pairs"},{"line_number":211,"context_line":"being evaluated first, then ``CUSTOM_NETWORK_Y`` action/filter pairs would be"},{"line_number":212,"context_line":"applied.) Action/filter/count sets are evaluated in the order listed under"},{"line_number":213,"context_line":"the trait name."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":".. _Actions:"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"d01eeaf1_6f903670","line":213,"range":{"start_line":212,"start_character":10,"end_line":213,"end_character":15},"updated":"2025-05-19 11:18:57.000000000","message":"Silly question, but I don\u0027t know how this manages to confuse me :D. I guess I\u0027m thinking about it like, no matter the ordering, we definitely will always filter first, check the count before action. Isn\u0027t it?","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"45006b636af7a38943d5bfaf5efb7a03decd51c8","unresolved":true,"context_lines":[{"line_number":209,"context_line":"ABC order (e.g. deploying with traits ``CUSTOM_NETWORK_X`` and"},{"line_number":210,"context_line":"``CUSTOM_NETWORK_Y`` would lead to ``CUSTOM_NETWORK_X`` action/filter pairs"},{"line_number":211,"context_line":"being evaluated first, then ``CUSTOM_NETWORK_Y`` action/filter pairs would be"},{"line_number":212,"context_line":"applied.) Action/filter/count sets are evaluated in the order listed under"},{"line_number":213,"context_line":"the trait name."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":".. _Actions:"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"e8f65085_865ed34c","line":213,"range":{"start_line":212,"start_character":10,"end_line":213,"end_character":15},"in_reply_to":"4658685b_19631e71","updated":"2025-05-19 18:31:03.000000000","message":"You\u0027d then likely need to first work to ensure all minimums are met, and then reconcile from there. Sort of easy to do as long as you model it to do it explicitly in the code.","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"620eff8c5fdfc9b6c3a0b9e784b9bcb2a5196282","unresolved":true,"context_lines":[{"line_number":209,"context_line":"ABC order (e.g. deploying with traits ``CUSTOM_NETWORK_X`` and"},{"line_number":210,"context_line":"``CUSTOM_NETWORK_Y`` would lead to ``CUSTOM_NETWORK_X`` action/filter pairs"},{"line_number":211,"context_line":"being evaluated first, then ``CUSTOM_NETWORK_Y`` action/filter pairs would be"},{"line_number":212,"context_line":"applied.) Action/filter/count sets are evaluated in the order listed under"},{"line_number":213,"context_line":"the trait name."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":".. _Actions:"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"4658685b_19631e71","line":213,"range":{"start_line":212,"start_character":10,"end_line":213,"end_character":15},"in_reply_to":"495786a6_62cf6f6d","updated":"2025-05-19 14:32:59.000000000","message":"So think of it as multilayer:\n\na dict (trait:list-of-rules), the list-of-rules is a list-of-dicts, each dict having action, filter, {max_,min_}count. \n\nWe will:\n- Order the outer dictionary in ABC order by name\n- Evaluate the list-of-dicts that is the value in the first trait selected in the other they are listed","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"5e56f114285eb0765e374f62a8331c41aac4f6d2","unresolved":true,"context_lines":[{"line_number":209,"context_line":"ABC order (e.g. deploying with traits ``CUSTOM_NETWORK_X`` and"},{"line_number":210,"context_line":"``CUSTOM_NETWORK_Y`` would lead to ``CUSTOM_NETWORK_X`` action/filter pairs"},{"line_number":211,"context_line":"being evaluated first, then ``CUSTOM_NETWORK_Y`` action/filter pairs would be"},{"line_number":212,"context_line":"applied.) Action/filter/count sets are evaluated in the order listed under"},{"line_number":213,"context_line":"the trait name."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":".. _Actions:"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"495786a6_62cf6f6d","line":213,"range":{"start_line":212,"start_character":10,"end_line":213,"end_character":15},"in_reply_to":"d01eeaf1_6f903670","updated":"2025-05-19 11:29:00.000000000","message":"My question is, will ordering matter?","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"b2091a3e8dd6fb54c12cb997bd9223bd3c74724e","unresolved":false,"context_lines":[{"line_number":209,"context_line":"ABC order (e.g. deploying with traits ``CUSTOM_NETWORK_X`` and"},{"line_number":210,"context_line":"``CUSTOM_NETWORK_Y`` would lead to ``CUSTOM_NETWORK_X`` action/filter pairs"},{"line_number":211,"context_line":"being evaluated first, then ``CUSTOM_NETWORK_Y`` action/filter pairs would be"},{"line_number":212,"context_line":"applied.) Action/filter/count sets are evaluated in the order listed under"},{"line_number":213,"context_line":"the trait name."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":".. _Actions:"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"b3f296c4_c94b8ddf","line":213,"range":{"start_line":212,"start_character":10,"end_line":213,"end_character":15},"in_reply_to":"e8f65085_865ed34c","updated":"2025-06-09 19:27:52.000000000","message":"Done","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"ce47d1fc330c97542eb49e3331190ea1b009a0dc","unresolved":true,"context_lines":[{"line_number":219,"context_line":"At milestone one, we expect to have the following two actions implemented:"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"  - ``attach_port`` (attach the first port that matches)"},{"line_number":222,"context_line":"  - ``attach_portgroup`` (attach the first portgroup that matches)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"At milestone two, we expect to an additional action implemented:"},{"line_number":225,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1c3bba2b_3a7e48e2","line":222,"updated":"2025-05-16 18:31:07.000000000","message":"These need to be updated for min_count/max_count. We will attach *all* ports that match until we reach max_count as long as at least min_count ports match.","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"b2091a3e8dd6fb54c12cb997bd9223bd3c74724e","unresolved":false,"context_lines":[{"line_number":219,"context_line":"At milestone one, we expect to have the following two actions implemented:"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"  - ``attach_port`` (attach the first port that matches)"},{"line_number":222,"context_line":"  - ``attach_portgroup`` (attach the first portgroup that matches)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"At milestone two, we expect to an additional action implemented:"},{"line_number":225,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"b06d2d30_c2eedde1","line":222,"in_reply_to":"1c3bba2b_3a7e48e2","updated":"2025-06-09 19:27:52.000000000","message":"Done","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"23a17deb4f6ca4f8e900fbdbf479eb363f3ebc27","unresolved":true,"context_lines":[{"line_number":221,"context_line":"  - ``attach_port`` (attach the first port that matches)"},{"line_number":222,"context_line":"  - ``attach_portgroup`` (attach the first portgroup that matches)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"At milestone two, we expect to an additional action implemented:"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"  - ``group_and_attach_ports`` (create a dynamic portgroup of matching ports"},{"line_number":227,"context_line":"    and attach them)"}],"source_content_type":"text/x-rst","patch_set":7,"id":"a83c10d7_3d370c4d","line":224,"range":{"start_line":224,"start_character":18,"end_line":224,"end_character":34},"updated":"2025-05-19 11:18:57.000000000","message":"s/we expect to have an","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"b2091a3e8dd6fb54c12cb997bd9223bd3c74724e","unresolved":false,"context_lines":[{"line_number":221,"context_line":"  - ``attach_port`` (attach the first port that matches)"},{"line_number":222,"context_line":"  - ``attach_portgroup`` (attach the first portgroup that matches)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"At milestone two, we expect to an additional action implemented:"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"  - ``group_and_attach_ports`` (create a dynamic portgroup of matching ports"},{"line_number":227,"context_line":"    and attach them)"}],"source_content_type":"text/x-rst","patch_set":7,"id":"129a8ec9_7ab0fe4c","line":224,"range":{"start_line":224,"start_character":18,"end_line":224,"end_character":34},"in_reply_to":"a83c10d7_3d370c4d","updated":"2025-06-09 19:27:52.000000000","message":"Done","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"45006b636af7a38943d5bfaf5efb7a03decd51c8","unresolved":true,"context_lines":[{"line_number":230,"context_line":""},{"line_number":231,"context_line":"TODO(JayF): This spec originally contained specifications for actions that"},{"line_number":232,"context_line":"exclusively work on ports or portgroups (``attach_single_port``);"},{"line_number":233,"context_line":"similarly ``group_ports`` as a separate single step (as opposed to"},{"line_number":234,"context_line":"``group_and_attach_ports`` as a unified step) -- I can\u0027t figure out a use"},{"line_number":235,"context_line":"case for them and they have been removed. Please let me know if you have a"},{"line_number":236,"context_line":"use case."}],"source_content_type":"text/x-rst","patch_set":7,"id":"d123a828_670ad64f","line":233,"range":{"start_line":233,"start_character":12,"end_line":233,"end_character":23},"updated":"2025-05-19 18:31:03.000000000","message":"My original idea was likely short cut in thought, because I was always thinking group_ports would also lead towards a bind.","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"b2091a3e8dd6fb54c12cb997bd9223bd3c74724e","unresolved":false,"context_lines":[{"line_number":230,"context_line":""},{"line_number":231,"context_line":"TODO(JayF): This spec originally contained specifications for actions that"},{"line_number":232,"context_line":"exclusively work on ports or portgroups (``attach_single_port``);"},{"line_number":233,"context_line":"similarly ``group_ports`` as a separate single step (as opposed to"},{"line_number":234,"context_line":"``group_and_attach_ports`` as a unified step) -- I can\u0027t figure out a use"},{"line_number":235,"context_line":"case for them and they have been removed. Please let me know if you have a"},{"line_number":236,"context_line":"use case."}],"source_content_type":"text/x-rst","patch_set":7,"id":"2ef855c8_11a18f50","line":233,"range":{"start_line":233,"start_character":12,"end_line":233,"end_character":23},"in_reply_to":"d123a828_670ad64f","updated":"2025-06-09 19:27:52.000000000","message":"Done","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"45006b636af7a38943d5bfaf5efb7a03decd51c8","unresolved":true,"context_lines":[{"line_number":287,"context_line":"  - tags"},{"line_number":288,"context_line":"  - (more TBD any suggestions?)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"TODO(JayF): Should I provide the vif directly? Is there any useful"},{"line_number":291,"context_line":"information on it to query against? Is there anything else on network to share?"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"Other objects/fields that are available to Ironic may be added at"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1fa5d096_bbfb7144","line":290,"updated":"2025-05-19 18:31:03.000000000","message":"so, I think it sort of makes sense to provide the network, specifically because there are useful fields. BUT, that doesn\u0027t need to be out of the gate:\n\nFor reference: https://docs.openstack.org/api-ref/network/v2/index.html#networks\n\nThe network *IS* super useful if you need to say \"this is for the purple physical network\"","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"b2091a3e8dd6fb54c12cb997bd9223bd3c74724e","unresolved":false,"context_lines":[{"line_number":287,"context_line":"  - tags"},{"line_number":288,"context_line":"  - (more TBD any suggestions?)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"TODO(JayF): Should I provide the vif directly? Is there any useful"},{"line_number":291,"context_line":"information on it to query against? Is there anything else on network to share?"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"Other objects/fields that are available to Ironic may be added at"}],"source_content_type":"text/x-rst","patch_set":7,"id":"0984d25c_9aa7c98f","line":290,"in_reply_to":"1fa5d096_bbfb7144","updated":"2025-06-09 19:27:52.000000000","message":"Done","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"45006b636af7a38943d5bfaf5efb7a03decd51c8","unresolved":true,"context_lines":[{"line_number":307,"context_line":"      min_count: 2"},{"line_number":308,"context_line":"  custom_direct_attach_a_purple_to_storage:"},{"line_number":309,"context_line":"    - action: attach_port"},{"line_number":310,"context_line":"      filter: port.vendor \u003d\u003d \u0027purple\u0027 \u0026\u0026 network.name \u003d\u003d \u0027storage\u0027:"},{"line_number":311,"context_line":"  custom_bond_purple_by_2:"},{"line_number":312,"context_line":"    - action: group_and_attach_ports"},{"line_number":313,"context_line":"      filter: port.vendor \u003d\u003d \u0027purple\u0027"}],"source_content_type":"text/x-rst","patch_set":7,"id":"82dda17f_b16d09c0","line":310,"range":{"start_line":310,"start_character":41,"end_line":310,"end_character":48},"updated":"2025-05-19 18:31:03.000000000","message":"Yeah, here is the idea to provide the network itself.\n\nCode wise, you query the VIF, and use that to lookup the network.","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"b2091a3e8dd6fb54c12cb997bd9223bd3c74724e","unresolved":false,"context_lines":[{"line_number":307,"context_line":"      min_count: 2"},{"line_number":308,"context_line":"  custom_direct_attach_a_purple_to_storage:"},{"line_number":309,"context_line":"    - action: attach_port"},{"line_number":310,"context_line":"      filter: port.vendor \u003d\u003d \u0027purple\u0027 \u0026\u0026 network.name \u003d\u003d \u0027storage\u0027:"},{"line_number":311,"context_line":"  custom_bond_purple_by_2:"},{"line_number":312,"context_line":"    - action: group_and_attach_ports"},{"line_number":313,"context_line":"      filter: port.vendor \u003d\u003d \u0027purple\u0027"}],"source_content_type":"text/x-rst","patch_set":7,"id":"eb01c022_79a7545a","line":310,"range":{"start_line":310,"start_character":41,"end_line":310,"end_character":48},"in_reply_to":"82dda17f_b16d09c0","updated":"2025-06-09 19:27:52.000000000","message":"Done","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"45006b636af7a38943d5bfaf5efb7a03decd51c8","unresolved":true,"context_lines":[{"line_number":319,"context_line":"      min_count: 2"},{"line_number":320,"context_line":"  custom_use_physnet_a_or_b:"},{"line_number":321,"context_line":"    - action: attach_port"},{"line_number":322,"context_line":"      filter: port.physical_network \u003d\u003d \u0027fabric_a\u0027"},{"line_number":323,"context_line":"    - action: attach_port"},{"line_number":324,"context_line":"      filter: port.physical_network \u003d\u003d \u0027fabric_b\u0027"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"Ironic Internal Network Preferences"}],"source_content_type":"text/x-rst","patch_set":7,"id":"abcc60ff_99c265d5","line":324,"range":{"start_line":322,"start_character":0,"end_line":324,"end_character":49},"updated":"2025-05-19 18:31:03.000000000","message":"given these are physical networks, you likely want to reference the fabrics on the other side, i.e. add network.something.","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"b2091a3e8dd6fb54c12cb997bd9223bd3c74724e","unresolved":false,"context_lines":[{"line_number":319,"context_line":"      min_count: 2"},{"line_number":320,"context_line":"  custom_use_physnet_a_or_b:"},{"line_number":321,"context_line":"    - action: attach_port"},{"line_number":322,"context_line":"      filter: port.physical_network \u003d\u003d \u0027fabric_a\u0027"},{"line_number":323,"context_line":"    - action: attach_port"},{"line_number":324,"context_line":"      filter: port.physical_network \u003d\u003d \u0027fabric_b\u0027"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"Ironic Internal Network Preferences"}],"source_content_type":"text/x-rst","patch_set":7,"id":"8d09800e_4229888c","line":324,"range":{"start_line":322,"start_character":0,"end_line":324,"end_character":49},"in_reply_to":"abcc60ff_99c265d5","updated":"2025-06-09 19:27:52.000000000","message":"Done","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"45006b636af7a38943d5bfaf5efb7a03decd51c8","unresolved":true,"context_lines":[{"line_number":327,"context_line":"Ironic Internal Network Preferences"},{"line_number":328,"context_line":"-----------------------------------"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"TODO(JayF): Clarify this. IMO we likely should reorient this to use the exact"},{"line_number":331,"context_line":"same yaml syntax as the normal config, just with the keys being"},{"line_number":332,"context_line":"cleaning (or cleaning_network), provisioning, etc. Also, is this something we"},{"line_number":333,"context_line":"could remove from the MVP?"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"Any change to how Ironic allows mapping of networks will need to consider"},{"line_number":336,"context_line":"networks used provisioning, cleaning, servicing, inspection or any other"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bf1b52eb_95a5a7ce","line":333,"range":{"start_line":330,"start_character":0,"end_line":333,"end_character":26},"updated":"2025-05-19 18:31:03.000000000","message":"It would help to understand why the current model for provisioning/cleaning/servicing/etc would not work today. I would think single direct ports would work just fine, but... yeah. ENEEDCONTEXT","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"7d310e5c96dff1825e561d9e53f57d40fbb752b0","unresolved":true,"context_lines":[{"line_number":327,"context_line":"Ironic Internal Network Preferences"},{"line_number":328,"context_line":"-----------------------------------"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"TODO(JayF): Clarify this. IMO we likely should reorient this to use the exact"},{"line_number":331,"context_line":"same yaml syntax as the normal config, just with the keys being"},{"line_number":332,"context_line":"cleaning (or cleaning_network), provisioning, etc. Also, is this something we"},{"line_number":333,"context_line":"could remove from the MVP?"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"Any change to how Ironic allows mapping of networks will need to consider"},{"line_number":336,"context_line":"networks used provisioning, cleaning, servicing, inspection or any other"}],"source_content_type":"text/x-rst","patch_set":7,"id":"f7ba6f37_4acdd6c6","line":333,"range":{"start_line":330,"start_character":0,"end_line":333,"end_character":26},"in_reply_to":"384ca30d_f05f2cdc","updated":"2025-06-18 21:17:22.000000000","message":"I think we\u0027ve isolated this down to the most salient details and removed the confusing context.","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"152e706d208dca8165cf5c3cc73f039bcc0b73a2","unresolved":true,"context_lines":[{"line_number":327,"context_line":"Ironic Internal Network Preferences"},{"line_number":328,"context_line":"-----------------------------------"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"TODO(JayF): Clarify this. IMO we likely should reorient this to use the exact"},{"line_number":331,"context_line":"same yaml syntax as the normal config, just with the keys being"},{"line_number":332,"context_line":"cleaning (or cleaning_network), provisioning, etc. Also, is this something we"},{"line_number":333,"context_line":"could remove from the MVP?"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"Any change to how Ironic allows mapping of networks will need to consider"},{"line_number":336,"context_line":"networks used provisioning, cleaning, servicing, inspection or any other"}],"source_content_type":"text/x-rst","patch_set":7,"id":"384ca30d_f05f2cdc","line":333,"range":{"start_line":330,"start_character":0,"end_line":333,"end_character":26},"in_reply_to":"bf1b52eb_95a5a7ce","updated":"2025-05-19 19:05:37.000000000","message":"Honestly I\u0027m mainly confused about what that entire \"internal network preferences\" stuff is trying to refer to, this is what I thought it meant. Can you clarify what your original intent was?","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"45006b636af7a38943d5bfaf5efb7a03decd51c8","unresolved":true,"context_lines":[{"line_number":353,"context_line":""},{"line_number":354,"context_line":"As such, in this model to help alignment, and help prevent"},{"line_number":355,"context_line":"Ironic service or port fabric usage from crossing over into"},{"line_number":356,"context_line":"undesirable network fabrics which may have specific purposes,"},{"line_number":357,"context_line":"for example dedicated storage network fabrics, then we will"},{"line_number":358,"context_line":"also add a new option to ironic.conf and filtering behavior"},{"line_number":359,"context_line":"wrapped around the internal network attachments."}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a83f6d4_8025ae0b","line":356,"updated":"2025-05-19 18:31:03.000000000","message":"Regarding my comment above at the beginning of this section, this is the why 😊","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"b2091a3e8dd6fb54c12cb997bd9223bd3c74724e","unresolved":true,"context_lines":[{"line_number":353,"context_line":""},{"line_number":354,"context_line":"As such, in this model to help alignment, and help prevent"},{"line_number":355,"context_line":"Ironic service or port fabric usage from crossing over into"},{"line_number":356,"context_line":"undesirable network fabrics which may have specific purposes,"},{"line_number":357,"context_line":"for example dedicated storage network fabrics, then we will"},{"line_number":358,"context_line":"also add a new option to ironic.conf and filtering behavior"},{"line_number":359,"context_line":"wrapped around the internal network attachments."}],"source_content_type":"text/x-rst","patch_set":7,"id":"6d24eac0_d3dc56ad","line":356,"in_reply_to":"3a83f6d4_8025ae0b","updated":"2025-06-09 19:27:52.000000000","message":"I still completely don\u0027t understand this section. Lets sync up to clean it up (w/Clif if possible) before I\u0027m gone.","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"},{"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":"7d310e5c96dff1825e561d9e53f57d40fbb752b0","unresolved":false,"context_lines":[{"line_number":353,"context_line":""},{"line_number":354,"context_line":"As such, in this model to help alignment, and help prevent"},{"line_number":355,"context_line":"Ironic service or port fabric usage from crossing over into"},{"line_number":356,"context_line":"undesirable network fabrics which may have specific purposes,"},{"line_number":357,"context_line":"for example dedicated storage network fabrics, then we will"},{"line_number":358,"context_line":"also add a new option to ironic.conf and filtering behavior"},{"line_number":359,"context_line":"wrapped around the internal network attachments."}],"source_content_type":"text/x-rst","patch_set":7,"id":"cc385026_f5d229dc","line":356,"in_reply_to":"6d24eac0_d3dc56ad","updated":"2025-06-18 21:17:22.000000000","message":"Done","commit_id":"2699b098ccd6aa8b0609ae5a2c1440b4b5165d65"}]}
