)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f56fc0d419e000468be7b2a12f710e7dc7eb0e28","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1cacdd7c_f33044ef","updated":"2026-03-11 14:40:58.000000000","message":"In concurrence with JayF. Overall, just a little bit needed and should be good to go.","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"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":"c7dd2b14c46fd7188231f1852538e8fe3c62e72e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"e599ff17_c1f16661","updated":"2026-03-11 19:06:48.000000000","message":"This needs a release note, but also the pep8 fix needs to move 😞","commit_id":"e28aaeb33be21e737a0a497f830476a6e8efaea2"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"7bd4e4422232960af2bd9680b18f8a31e5926df6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"04c5c8d1_fbbf9de7","in_reply_to":"e599ff17_c1f16661","updated":"2026-03-11 21:21:21.000000000","message":"Done","commit_id":"e28aaeb33be21e737a0a497f830476a6e8efaea2"},{"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":"3e93bb13d6a906ef0c3c5e04e372a901cb27db93","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"9567290e_f19cf8d4","updated":"2026-03-12 17:04:52.000000000","message":"recheck wget hung for like 20 minutes in metal3 job wtf","commit_id":"4b73a67266e910f319238d8c0e078f9023055f06"}],"ironic/common/trait_based_networking/base.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"e7864bbc444d90ad884218539fc86fc02913a65e","unresolved":true,"context_lines":[{"line_number":148,"context_line":"UNIVERSAL_NETWORK_NAME \u003d \"__UNIVERSAL_NETWORK\""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"def _is_unversal_network(network):"},{"line_number":152,"context_line":"    \"\"\"Check if the network is a special Network that always passes filter\"\"\""},{"line_number":153,"context_line":"    return isinstance(network, Network) \\"},{"line_number":154,"context_line":"        and network.name \u003d\u003d UNIVERSAL_NETWORK_NAME"}],"source_content_type":"text/x-python","patch_set":1,"id":"c4678c93_f841164e","line":151,"updated":"2026-03-11 14:29:39.000000000","message":"unversal?","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"efb73941ebd5306c1c8d31b061ee59cd5ec305ff","unresolved":false,"context_lines":[{"line_number":148,"context_line":"UNIVERSAL_NETWORK_NAME \u003d \"__UNIVERSAL_NETWORK\""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"def _is_unversal_network(network):"},{"line_number":152,"context_line":"    \"\"\"Check if the network is a special Network that always passes filter\"\"\""},{"line_number":153,"context_line":"    return isinstance(network, Network) \\"},{"line_number":154,"context_line":"        and network.name \u003d\u003d UNIVERSAL_NETWORK_NAME"}],"source_content_type":"text/x-python","patch_set":1,"id":"969bf635_c04880ba","line":151,"in_reply_to":"c4678c93_f841164e","updated":"2026-03-11 19:02:16.000000000","message":"Done","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"}],"ironic/common/trait_based_networking/plan.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"e7864bbc444d90ad884218539fc86fc02913a65e","unresolved":true,"context_lines":[{"line_number":109,"context_line":"                            portlikes,"},{"line_number":110,"context_line":"                            new_actions)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"            # TODO(clif): Support bond_ports?"},{"line_number":113,"context_line":"            case _:"},{"line_number":114,"context_line":"                new_actions \u003d [base.NotImplementedAction(trait_action.action)]"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1d8daec7_92afba7b","line":112,"updated":"2026-03-11 14:29:39.000000000","message":"What would bond_ports do?","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"efb73941ebd5306c1c8d31b061ee59cd5ec305ff","unresolved":true,"context_lines":[{"line_number":109,"context_line":"                            portlikes,"},{"line_number":110,"context_line":"                            new_actions)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"            # TODO(clif): Support bond_ports?"},{"line_number":113,"context_line":"            case _:"},{"line_number":114,"context_line":"                new_actions \u003d [base.NotImplementedAction(trait_action.action)]"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ae49a9c9_dc04d606","line":112,"in_reply_to":"1d8daec7_92afba7b","updated":"2026-03-11 19:02:16.000000000","message":"Well, it is mentioned in the spec. I\u0027m not sure what it would do that group_and_attach_ports does not.","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"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":"c7dd2b14c46fd7188231f1852538e8fe3c62e72e","unresolved":true,"context_lines":[{"line_number":109,"context_line":"                            portlikes,"},{"line_number":110,"context_line":"                            new_actions)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"            # TODO(clif): Support bond_ports?"},{"line_number":113,"context_line":"            case _:"},{"line_number":114,"context_line":"                new_actions \u003d [base.NotImplementedAction(trait_action.action)]"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"612b177b_7e95f93d","line":112,"in_reply_to":"ae49a9c9_dc04d606","updated":"2026-03-11 19:06:48.000000000","message":"Fair. I don\u0027t know any cases it would make sense to group-but-not-attach, so I think this is a wise omission.","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"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":"e7864bbc444d90ad884218539fc86fc02913a65e","unresolved":true,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        # TODO(clif): Do we need to sort actions so that GroupAndAttachPort"},{"line_number":117,"context_line":"        # actions come first? Or leave it to the operator to order the actions"},{"line_number":118,"context_line":"        # appropriately?"},{"line_number":119,"context_line":"        rendered_actions.extend(new_actions)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    return rendered_actions"}],"source_content_type":"text/x-python","patch_set":1,"id":"e20a3b4e_b25da079","line":118,"updated":"2026-03-11 14:29:39.000000000","message":"I think using operator order makes sense as long as it leads to a consistent result with the same config file.","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"efb73941ebd5306c1c8d31b061ee59cd5ec305ff","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        # TODO(clif): Do we need to sort actions so that GroupAndAttachPort"},{"line_number":117,"context_line":"        # actions come first? Or leave it to the operator to order the actions"},{"line_number":118,"context_line":"        # appropriately?"},{"line_number":119,"context_line":"        rendered_actions.extend(new_actions)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    return rendered_actions"}],"source_content_type":"text/x-python","patch_set":1,"id":"36ae3aae_2f28c295","line":118,"in_reply_to":"29637fae_2ba20545","updated":"2026-03-11 19:02:16.000000000","message":"Acknowledged","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f56fc0d419e000468be7b2a12f710e7dc7eb0e28","unresolved":true,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        # TODO(clif): Do we need to sort actions so that GroupAndAttachPort"},{"line_number":117,"context_line":"        # actions come first? Or leave it to the operator to order the actions"},{"line_number":118,"context_line":"        # appropriately?"},{"line_number":119,"context_line":"        rendered_actions.extend(new_actions)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    return rendered_actions"}],"source_content_type":"text/x-python","patch_set":1,"id":"29637fae_2ba20545","line":118,"in_reply_to":"e20a3b4e_b25da079","updated":"2026-03-11 14:40:58.000000000","message":"I concur, operators are going to assume line by line ordering inherently. Anything else needs to be a giant blinking neon sign of warning text in a doc.","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"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":"e7864bbc444d90ad884218539fc86fc02913a65e","unresolved":true,"context_lines":[{"line_number":177,"context_line":"    # NOTE(Clif): Only consider ports that allow dynamic_portgrouping."},{"line_number":178,"context_line":"    available_portlikes \u003d ["},{"line_number":179,"context_line":"        portlike for portlike in node_portlikes"},{"line_number":180,"context_line":"        if portlike.available_for_dynamic_portgroup"},{"line_number":181,"context_line":"    ]"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    for portlike in available_portlikes:"}],"source_content_type":"text/x-python","patch_set":1,"id":"873f468c_86c4b53c","line":180,"updated":"2026-03-11 14:29:39.000000000","message":"AFAICT this isn\u0027t on base.PrimordialPort","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"efb73941ebd5306c1c8d31b061ee59cd5ec305ff","unresolved":false,"context_lines":[{"line_number":177,"context_line":"    # NOTE(Clif): Only consider ports that allow dynamic_portgrouping."},{"line_number":178,"context_line":"    available_portlikes \u003d ["},{"line_number":179,"context_line":"        portlike for portlike in node_portlikes"},{"line_number":180,"context_line":"        if portlike.available_for_dynamic_portgroup"},{"line_number":181,"context_line":"    ]"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    for portlike in available_portlikes:"}],"source_content_type":"text/x-python","patch_set":1,"id":"b65b3cec_cde1942f","line":180,"in_reply_to":"873f468c_86c4b53c","updated":"2026-03-11 19:02:16.000000000","message":"Good call. Changed it up so we\u0027re explicitly only considering `base.Port`.","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"}],"ironic/db/sqlalchemy/models.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"c7dd2b14c46fd7188231f1852538e8fe3c62e72e","unresolved":true,"context_lines":[{"line_number":274,"context_line":"    vendor \u003d Column(String(32), nullable\u003dTrue)"},{"line_number":275,"context_line":"    category \u003d Column(String(80), nullable\u003dTrue)"},{"line_number":276,"context_line":"    available_for_dynamic_portgroup \u003d Column(Boolean, server_default\u003dtrue(),"},{"line_number":277,"context_line":"                                             nullable\u003dFalse)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    _node_uuid \u003d orm.relationship("},{"line_number":280,"context_line":"        \"Node\","}],"source_content_type":"text/x-python","patch_set":2,"id":"2927f875_44ae0885","line":277,"updated":"2026-03-11 19:06:48.000000000","message":"this will need to be in the previous commit, this is a Jay screw up. It will fail pep8 😞","commit_id":"e28aaeb33be21e737a0a497f830476a6e8efaea2"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"75b63b5a4519e178a3af4ddcca96d54a152dfb37","unresolved":false,"context_lines":[{"line_number":274,"context_line":"    vendor \u003d Column(String(32), nullable\u003dTrue)"},{"line_number":275,"context_line":"    category \u003d Column(String(80), nullable\u003dTrue)"},{"line_number":276,"context_line":"    available_for_dynamic_portgroup \u003d Column(Boolean, server_default\u003dtrue(),"},{"line_number":277,"context_line":"                                             nullable\u003dFalse)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    _node_uuid \u003d orm.relationship("},{"line_number":280,"context_line":"        \"Node\","}],"source_content_type":"text/x-python","patch_set":2,"id":"945965a3_d332ec20","line":277,"in_reply_to":"2927f875_44ae0885","updated":"2026-03-11 19:35:09.000000000","message":"Done","commit_id":"e28aaeb33be21e737a0a497f830476a6e8efaea2"}],"ironic/drivers/modules/network/common.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"e7864bbc444d90ad884218539fc86fc02913a65e","unresolved":true,"context_lines":[{"line_number":684,"context_line":"                    try:"},{"line_number":685,"context_line":"                        dyn_pg_ports \u003d ["},{"line_number":686,"context_line":"                            # FIXME(clif): Should I use the task to retrieve"},{"line_number":687,"context_line":"                            # ports or is this ok?"},{"line_number":688,"context_line":"                            objects.Port.get_by_uuid(task.context, uuid)"},{"line_number":689,"context_line":"                            for uuid in action.port_uuids"},{"line_number":690,"context_line":"                        ]"}],"source_content_type":"text/x-python","patch_set":1,"id":"0dd29cfc_a6416cc7","line":687,"updated":"2026-03-11 14:29:39.000000000","message":"highlighting this. I think it\u0027s OK because you should only need a task (and a lock) for writes","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f56fc0d419e000468be7b2a12f710e7dc7eb0e28","unresolved":true,"context_lines":[{"line_number":684,"context_line":"                    try:"},{"line_number":685,"context_line":"                        dyn_pg_ports \u003d ["},{"line_number":686,"context_line":"                            # FIXME(clif): Should I use the task to retrieve"},{"line_number":687,"context_line":"                            # ports or is this ok?"},{"line_number":688,"context_line":"                            objects.Port.get_by_uuid(task.context, uuid)"},{"line_number":689,"context_line":"                            for uuid in action.port_uuids"},{"line_number":690,"context_line":"                        ]"}],"source_content_type":"text/x-python","patch_set":1,"id":"e32ae667_1cfca83e","line":687,"in_reply_to":"0dd29cfc_a6416cc7","updated":"2026-03-11 14:40:58.000000000","message":"++ Yeah, as long as an exclusive (non-shared) task is held, your good.","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"efb73941ebd5306c1c8d31b061ee59cd5ec305ff","unresolved":false,"context_lines":[{"line_number":684,"context_line":"                    try:"},{"line_number":685,"context_line":"                        dyn_pg_ports \u003d ["},{"line_number":686,"context_line":"                            # FIXME(clif): Should I use the task to retrieve"},{"line_number":687,"context_line":"                            # ports or is this ok?"},{"line_number":688,"context_line":"                            objects.Port.get_by_uuid(task.context, uuid)"},{"line_number":689,"context_line":"                            for uuid in action.port_uuids"},{"line_number":690,"context_line":"                        ]"}],"source_content_type":"text/x-python","patch_set":1,"id":"5c8555d9_ceac6a62","line":687,"in_reply_to":"e32ae667_1cfca83e","updated":"2026-03-11 19:02:16.000000000","message":"Acknowledged","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"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":"e7864bbc444d90ad884218539fc86fc02913a65e","unresolved":true,"context_lines":[{"line_number":696,"context_line":"                    # FIXME(clif): Probably need to have a stronger guarantee"},{"line_number":697,"context_line":"                    # that the pg\u0027s name is unique."},{"line_number":698,"context_line":"                    random_suffix \u003d \u0027\u0027.join(random.choices("},{"line_number":699,"context_line":"                        string.ascii_letters + string.digits, k\u003d8))"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"                    # FIXME(clif): Is this all the necessary information"},{"line_number":702,"context_line":"                    # for the portgroup?"}],"source_content_type":"text/x-python","patch_set":1,"id":"fefed078_b4bc56ea","line":699,"updated":"2026-03-11 14:29:39.000000000","message":"(I asked claude how likely this was to collide, assuming 4 portgroups generated)\n\n~0.000000000003% (effectively zero).62^8 ≈ 218 trillion possible values. With 4 generated, birthday problem gives ~6/218T chance of any collision. \n\nSo I think it\u0027s OK?","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"efb73941ebd5306c1c8d31b061ee59cd5ec305ff","unresolved":false,"context_lines":[{"line_number":696,"context_line":"                    # FIXME(clif): Probably need to have a stronger guarantee"},{"line_number":697,"context_line":"                    # that the pg\u0027s name is unique."},{"line_number":698,"context_line":"                    random_suffix \u003d \u0027\u0027.join(random.choices("},{"line_number":699,"context_line":"                        string.ascii_letters + string.digits, k\u003d8))"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"                    # FIXME(clif): Is this all the necessary information"},{"line_number":702,"context_line":"                    # for the portgroup?"}],"source_content_type":"text/x-python","patch_set":1,"id":"c56cbd57_cf68984e","line":699,"in_reply_to":"eccddb3e_d2267699","updated":"2026-03-11 19:02:16.000000000","message":"Acknowledged","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f56fc0d419e000468be7b2a12f710e7dc7eb0e28","unresolved":true,"context_lines":[{"line_number":696,"context_line":"                    # FIXME(clif): Probably need to have a stronger guarantee"},{"line_number":697,"context_line":"                    # that the pg\u0027s name is unique."},{"line_number":698,"context_line":"                    random_suffix \u003d \u0027\u0027.join(random.choices("},{"line_number":699,"context_line":"                        string.ascii_letters + string.digits, k\u003d8))"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"                    # FIXME(clif): Is this all the necessary information"},{"line_number":702,"context_line":"                    # for the portgroup?"}],"source_content_type":"text/x-python","patch_set":1,"id":"eccddb3e_d2267699","line":699,"in_reply_to":"fefed078_b4bc56ea","updated":"2026-03-11 14:40:58.000000000","message":"Seems okay to me, assuming a collision will just cause the op to be retried and reschededuled.","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"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":"e7864bbc444d90ad884218539fc86fc02913a65e","unresolved":true,"context_lines":[{"line_number":699,"context_line":"                        string.ascii_letters + string.digits, k\u003d8))"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"                    # FIXME(clif): Is this all the necessary information"},{"line_number":702,"context_line":"                    # for the portgroup?"},{"line_number":703,"context_line":"                    dyn_portgroup \u003d objects.Portgroup("},{"line_number":704,"context_line":"                        context\u003dtask.context,"},{"line_number":705,"context_line":"                        name\u003df\u0027tbn_dyn_portgroup_{random_suffix}\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"4af702b7_606771bd","line":702,"updated":"2026-03-11 14:29:39.000000000","message":"Yeah, I think so. I wonder if we need a check at some point for bad cleanups (e.g. existing portgroups named tbn_dyn_portgroup and/or dynamic_portgroup\u003dTrue) though","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"efb73941ebd5306c1c8d31b061ee59cd5ec305ff","unresolved":false,"context_lines":[{"line_number":699,"context_line":"                        string.ascii_letters + string.digits, k\u003d8))"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"                    # FIXME(clif): Is this all the necessary information"},{"line_number":702,"context_line":"                    # for the portgroup?"},{"line_number":703,"context_line":"                    dyn_portgroup \u003d objects.Portgroup("},{"line_number":704,"context_line":"                        context\u003dtask.context,"},{"line_number":705,"context_line":"                        name\u003df\u0027tbn_dyn_portgroup_{random_suffix}\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ca20395e_0f144c37","line":702,"in_reply_to":"2f1c8a06_580ba1ee","updated":"2026-03-11 19:02:16.000000000","message":"Acknowledged","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f56fc0d419e000468be7b2a12f710e7dc7eb0e28","unresolved":true,"context_lines":[{"line_number":699,"context_line":"                        string.ascii_letters + string.digits, k\u003d8))"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"                    # FIXME(clif): Is this all the necessary information"},{"line_number":702,"context_line":"                    # for the portgroup?"},{"line_number":703,"context_line":"                    dyn_portgroup \u003d objects.Portgroup("},{"line_number":704,"context_line":"                        context\u003dtask.context,"},{"line_number":705,"context_line":"                        name\u003df\u0027tbn_dyn_portgroup_{random_suffix}\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"2f1c8a06_580ba1ee","line":702,"in_reply_to":"4af702b7_606771bd","updated":"2026-03-11 14:40:58.000000000","message":"could also be a separate bugfix.","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f56fc0d419e000468be7b2a12f710e7dc7eb0e28","unresolved":true,"context_lines":[{"line_number":713,"context_line":"                        dyn_portgroup.create(context\u003dtask.context)"},{"line_number":714,"context_line":"                        LOG.info(\u0027Created dynamic portgroup \\\u0027%(name)s\\\u0027\u0027,"},{"line_number":715,"context_line":"                                 {\u0027name\u0027: dyn_portgroup.name})"},{"line_number":716,"context_line":"                    except (exception.PortgroupDuplicateName,"},{"line_number":717,"context_line":"                            exception.MACAlreadyExists,"},{"line_number":718,"context_line":"                            exception.PortgroupAlreadyExists) as e:"},{"line_number":719,"context_line":"                        msg \u003d (_(\u0027Could not create dynamic portgroup. \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa9e1858_433c91b8","line":716,"updated":"2026-03-11 14:40:58.000000000","message":"Wouldn\u0027t be awful to catch the name collission here","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"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":"c7dd2b14c46fd7188231f1852538e8fe3c62e72e","unresolved":true,"context_lines":[{"line_number":713,"context_line":"                        dyn_portgroup.create(context\u003dtask.context)"},{"line_number":714,"context_line":"                        LOG.info(\u0027Created dynamic portgroup \\\u0027%(name)s\\\u0027\u0027,"},{"line_number":715,"context_line":"                                 {\u0027name\u0027: dyn_portgroup.name})"},{"line_number":716,"context_line":"                    except (exception.PortgroupDuplicateName,"},{"line_number":717,"context_line":"                            exception.MACAlreadyExists,"},{"line_number":718,"context_line":"                            exception.PortgroupAlreadyExists) as e:"},{"line_number":719,"context_line":"                        msg \u003d (_(\u0027Could not create dynamic portgroup. \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"ddce1712_bf950bd8","line":716,"in_reply_to":"b1fc0a29_f8a64ffd","updated":"2026-03-11 19:06:48.000000000","message":"++","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"75b63b5a4519e178a3af4ddcca96d54a152dfb37","unresolved":false,"context_lines":[{"line_number":713,"context_line":"                        dyn_portgroup.create(context\u003dtask.context)"},{"line_number":714,"context_line":"                        LOG.info(\u0027Created dynamic portgroup \\\u0027%(name)s\\\u0027\u0027,"},{"line_number":715,"context_line":"                                 {\u0027name\u0027: dyn_portgroup.name})"},{"line_number":716,"context_line":"                    except (exception.PortgroupDuplicateName,"},{"line_number":717,"context_line":"                            exception.MACAlreadyExists,"},{"line_number":718,"context_line":"                            exception.PortgroupAlreadyExists) as e:"},{"line_number":719,"context_line":"                        msg \u003d (_(\u0027Could not create dynamic portgroup. \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"6bf5cf71_53db6d3d","line":716,"in_reply_to":"ddce1712_bf950bd8","updated":"2026-03-11 19:35:09.000000000","message":"Done","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"efb73941ebd5306c1c8d31b061ee59cd5ec305ff","unresolved":true,"context_lines":[{"line_number":713,"context_line":"                        dyn_portgroup.create(context\u003dtask.context)"},{"line_number":714,"context_line":"                        LOG.info(\u0027Created dynamic portgroup \\\u0027%(name)s\\\u0027\u0027,"},{"line_number":715,"context_line":"                                 {\u0027name\u0027: dyn_portgroup.name})"},{"line_number":716,"context_line":"                    except (exception.PortgroupDuplicateName,"},{"line_number":717,"context_line":"                            exception.MACAlreadyExists,"},{"line_number":718,"context_line":"                            exception.PortgroupAlreadyExists) as e:"},{"line_number":719,"context_line":"                        msg \u003d (_(\u0027Could not create dynamic portgroup. \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"b1fc0a29_f8a64ffd","line":716,"in_reply_to":"fa9e1858_433c91b8","updated":"2026-03-11 19:02:16.000000000","message":"I assume you mean: catch it, retry with a different name?","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"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":"e7864bbc444d90ad884218539fc86fc02913a65e","unresolved":true,"context_lines":[{"line_number":726,"context_line":"                        port.portgroup_id \u003d dyn_portgroup.id"},{"line_number":727,"context_line":"                        try:"},{"line_number":728,"context_line":"                            # FIXME(clif): Do we called port_changed here as"},{"line_number":729,"context_line":"                            # well?"},{"line_number":730,"context_line":"                            port.save()"},{"line_number":731,"context_line":"                        except (exception.PortNotFound,"},{"line_number":732,"context_line":"                                exception.MACAlreadyExists) as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"6472bf06_04e48849","line":729,"updated":"2026-03-11 14:29:39.000000000","message":"highlighting this, I\u0027m not sure","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"efb73941ebd5306c1c8d31b061ee59cd5ec305ff","unresolved":false,"context_lines":[{"line_number":726,"context_line":"                        port.portgroup_id \u003d dyn_portgroup.id"},{"line_number":727,"context_line":"                        try:"},{"line_number":728,"context_line":"                            # FIXME(clif): Do we called port_changed here as"},{"line_number":729,"context_line":"                            # well?"},{"line_number":730,"context_line":"                            port.save()"},{"line_number":731,"context_line":"                        except (exception.PortNotFound,"},{"line_number":732,"context_line":"                                exception.MACAlreadyExists) as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"719d028e_6701eb42","line":729,"in_reply_to":"3be97201_eea5319a","updated":"2026-03-11 19:02:16.000000000","message":"Acknowledged","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f56fc0d419e000468be7b2a12f710e7dc7eb0e28","unresolved":true,"context_lines":[{"line_number":726,"context_line":"                        port.portgroup_id \u003d dyn_portgroup.id"},{"line_number":727,"context_line":"                        try:"},{"line_number":728,"context_line":"                            # FIXME(clif): Do we called port_changed here as"},{"line_number":729,"context_line":"                            # well?"},{"line_number":730,"context_line":"                            port.save()"},{"line_number":731,"context_line":"                        except (exception.PortNotFound,"},{"line_number":732,"context_line":"                                exception.MACAlreadyExists) as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3be97201_eea5319a","line":729,"in_reply_to":"6472bf06_04e48849","updated":"2026-03-11 14:40:58.000000000","message":"I don\u0027t believe so, your pre-binding here so there shouldn\u0027t be anything to actually do at this point.... well, aside from saving.","commit_id":"632b2d5b66b8a65259f15cd0f00c5985fc9ad67b"},{"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":"262d8a2edee356e0cbc2ce960a95232ca7278ed3","unresolved":true,"context_lines":[{"line_number":639,"context_line":"                dynamic_portgroup\u003dTrue"},{"line_number":640,"context_line":"            )"},{"line_number":641,"context_line":""},{"line_number":642,"context_line":"            # Create the dynamic portgroup."},{"line_number":643,"context_line":"            try:"},{"line_number":644,"context_line":"                dyn_portgroup.create(context\u003dtask.context)"},{"line_number":645,"context_line":"                LOG.info(\u0027Created dynamic portgroup \\\u0027%(name)s\\\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"cd9c807a_33888100","line":642,"updated":"2026-03-11 21:24:52.000000000","message":"No need to update the change, but convention in openstack would be # NOTE(Clif): Create the dynamic portgroup","commit_id":"4b73a67266e910f319238d8c0e078f9023055f06"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4e94c9c218fc59c71465d08fa5625eeb1b325c8f","unresolved":true,"context_lines":[{"line_number":639,"context_line":"                dynamic_portgroup\u003dTrue"},{"line_number":640,"context_line":"            )"},{"line_number":641,"context_line":""},{"line_number":642,"context_line":"            # Create the dynamic portgroup."},{"line_number":643,"context_line":"            try:"},{"line_number":644,"context_line":"                dyn_portgroup.create(context\u003dtask.context)"},{"line_number":645,"context_line":"                LOG.info(\u0027Created dynamic portgroup \\\u0027%(name)s\\\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"971b86a9_100520ff","line":642,"in_reply_to":"cd9c807a_33888100","updated":"2026-03-11 21:43:15.000000000","message":"Well, more applicable to TODOs ;)","commit_id":"4b73a67266e910f319238d8c0e078f9023055f06"}]}
