)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ab0cf20f3dcd1a1d22995acc457c2ae2bbb0184a","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Apply configuration to all links present in"},{"line_number":10,"context_line":"local_link_information dictionary and not only to the first one."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This change will add the possibility to do LACP with Ironic"},{"line_number":13,"context_line":"portgroup feature for example."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ic3e10d19315b776662188f41c552fe0676a12782"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"bf659307_9f0ff735","line":12,"range":{"start_line":12,"start_character":43,"end_line":12,"end_character":47},"updated":"2018-04-12 23:10:04.000000000","message":"nit: s/LACP/Link Aggregates/","commit_id":"88031f624dbd46c08fcec3dd181016ecd6039dcf"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ab0cf20f3dcd1a1d22995acc457c2ae2bbb0184a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"portgroup feature for example."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ic3e10d19315b776662188f41c552fe0676a12782"},{"line_number":16,"context_line":"Closes-Bug: #1759000"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"bf659307_ca384fd4","line":16,"updated":"2018-04-12 23:10:04.000000000","message":"Please change this to Story/Task syntax as represented in Storyboard  for story #1759000","commit_id":"88031f624dbd46c08fcec3dd181016ecd6039dcf"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"34e97db8df7b9d1293978a72dd0749eb66abecbe","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Apply configuration to all links present in"},{"line_number":10,"context_line":"local_link_information dictionary and not only to the first one."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This change will add the possibility to do LACP with Ironic"},{"line_number":13,"context_line":"portgroup feature for example."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ic3e10d19315b776662188f41c552fe0676a12782"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"bf51134e_5bacda8b","line":12,"range":{"start_line":12,"start_character":43,"end_line":12,"end_character":47},"updated":"2020-06-16 08:38:16.000000000","message":"I expect this won\u0027t support LACP, only modes 5 \u0026 6 which do not require configuration on the switch.","commit_id":"5909a48d78e1c87c84421182059b69d5525991e4"},{"author":{"_account_id":16011,"name":"James Denton","email":"james.denton@outlook.com","username":"busterswt"},"change_message_id":"d58a18de17e392f741c8c7e6a94e1adc9c88af0d","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Apply configuration to all links present in"},{"line_number":10,"context_line":"local_link_information dictionary and not only to the first one."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This change will add the possibility to do LACP with Ironic"},{"line_number":13,"context_line":"portgroup feature for example."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ic3e10d19315b776662188f41c552fe0676a12782"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"bf51134e_cf365ab5","line":12,"range":{"start_line":12,"start_character":43,"end_line":12,"end_character":47},"in_reply_to":"bf51134e_5bacda8b","updated":"2020-06-16 20:01:41.000000000","message":"Updated the commit to reflect this.","commit_id":"5909a48d78e1c87c84421182059b69d5525991e4"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":16011,"name":"James Denton","email":"james.denton@outlook.com","username":"busterswt"},"change_message_id":"3f1586866494ca7e1745ca149d27d56692268e39","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"7a3f0905_53c1036a","updated":"2022-01-05 21:19:40.000000000","message":"This latest patchset should address most of the concerns brought up in previous comments, the main one being if *at least* one link contains an invalid switch, the condition is logged and the entire port fails to bind. This means none of the respective links (switch ports) are configured.\n\nThe bond mode set in the port group is ignored for the purposes of this patch. The original intention was to process *all* port group members and configured\u003d the respective switch ports versus the existing behavior of only configuring the first one. ","commit_id":"06be743a94dbf563b3c9dd1f1b2d2cadc8fbcf97"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"889af2d01f5d59fe7c27466e9b07800349f714e5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"023a6126_12dcfc3f","updated":"2022-02-14 22:23:16.000000000","message":"LGTM","commit_id":"a6d14ab12d217ecdc210a29d9ab50f9946882907"}],"networking_generic_switch/generic_switch_mech.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ab0cf20f3dcd1a1d22995acc457c2ae2bbb0184a","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                \u0027local_link_information\u0027)"},{"line_number":347,"context_line":"            if not local_link_information:"},{"line_number":348,"context_line":"                return"},{"line_number":349,"context_line":"            for link in local_link_information:"},{"line_number":350,"context_line":"                switch_info \u003d link.get(\u0027switch_info\u0027)"},{"line_number":351,"context_line":"                switch_id \u003d link.get(\u0027switch_id\u0027)"},{"line_number":352,"context_line":"                switch \u003d device_utils.get_switch_device("}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_7fa4634b","line":349,"updated":"2018-04-12 23:10:04.000000000","message":"Seems strait forward, but it seems like this will need unit test additions and updates for the entire portgroup scenario.","commit_id":"88031f624dbd46c08fcec3dd181016ecd6039dcf"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ab0cf20f3dcd1a1d22995acc457c2ae2bbb0184a","unresolved":false,"context_lines":[{"line_number":439,"context_line":"        binding_profile \u003d port[\u0027binding:profile\u0027]"},{"line_number":440,"context_line":"        local_link_information \u003d binding_profile.get(\u0027local_link_information\u0027)"},{"line_number":441,"context_line":"        if self._is_port_supported(port) and local_link_information:"},{"line_number":442,"context_line":"            for link in local_link_information:"},{"line_number":443,"context_line":"                switch_info \u003d link.get(\u0027switch_info\u0027)"},{"line_number":444,"context_line":"                switch_id \u003d link.get(\u0027switch_id\u0027)"},{"line_number":445,"context_line":"                switch \u003d device_utils.get_switch_device("}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_5f571f27","line":442,"updated":"2018-04-12 23:10:04.000000000","message":"Ditto, Seems like we need to add unit tests.","commit_id":"88031f624dbd46c08fcec3dd181016ecd6039dcf"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ab0cf20f3dcd1a1d22995acc457c2ae2bbb0184a","unresolved":false,"context_lines":[{"line_number":518,"context_line":"        local_link_information \u003d binding_profile.get(\u0027local_link_information\u0027)"},{"line_number":519,"context_line":"        if not local_link_information:"},{"line_number":520,"context_line":"            return"},{"line_number":521,"context_line":"        for link in local_link_information:"},{"line_number":522,"context_line":"            switch_info \u003d link.get(\u0027switch_info\u0027)"},{"line_number":523,"context_line":"            switch_id \u003d link.get(\u0027switch_id\u0027)"},{"line_number":524,"context_line":"            switch \u003d device_utils.get_switch_device("}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_1f33e715","line":521,"updated":"2018-04-12 23:10:04.000000000","message":"Same comment as above.","commit_id":"88031f624dbd46c08fcec3dd181016ecd6039dcf"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"3fc471fc1f5600450bf69e571296cdf8bea97743","unresolved":false,"context_lines":[{"line_number":349,"context_line":"                    self.switches, switch_info\u003dswitch_info,"},{"line_number":350,"context_line":"                    ngs_mac_address\u003dswitch_id)"},{"line_number":351,"context_line":"                if not switch:"},{"line_number":352,"context_line":"                    return"},{"line_number":353,"context_line":"                provisioning_blocks.provisioning_complete("},{"line_number":354,"context_line":"                    context._plugin_context, port[\u0027id\u0027], resources.PORT,"},{"line_number":355,"context_line":"                    GENERIC_SWITCH_ENTITY)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_fb7f30dd","line":352,"range":{"start_line":352,"start_character":20,"end_line":352,"end_character":26},"updated":"2020-08-04 11:10:31.000000000","message":"Should this be continue?","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"3e38262810918ce7e0bf3ecb21f3d7b915df8192","unresolved":false,"context_lines":[{"line_number":349,"context_line":"                    self.switches, switch_info\u003dswitch_info,"},{"line_number":350,"context_line":"                    ngs_mac_address\u003dswitch_id)"},{"line_number":351,"context_line":"                if not switch:"},{"line_number":352,"context_line":"                    return"},{"line_number":353,"context_line":"                provisioning_blocks.provisioning_complete("},{"line_number":354,"context_line":"                    context._plugin_context, port[\u0027id\u0027], resources.PORT,"},{"line_number":355,"context_line":"                    GENERIC_SWITCH_ENTITY)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1f621f24_7efaf3bc","line":352,"range":{"start_line":352,"start_character":20,"end_line":352,"end_character":26},"in_reply_to":"9f560f44_1e15963d","updated":"2020-11-09 13:28:48.000000000","message":"It should probably be all or nothing. But currently it\u0027s inconsistent if the first switch exists but the second does not, vs. the opposite.","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":16011,"name":"James Denton","email":"james.denton@outlook.com","username":"busterswt"},"change_message_id":"261794a206298fafcd15394f76daae93f3929af8","unresolved":false,"context_lines":[{"line_number":349,"context_line":"                    self.switches, switch_info\u003dswitch_info,"},{"line_number":350,"context_line":"                    ngs_mac_address\u003dswitch_id)"},{"line_number":351,"context_line":"                if not switch:"},{"line_number":352,"context_line":"                    return"},{"line_number":353,"context_line":"                provisioning_blocks.provisioning_complete("},{"line_number":354,"context_line":"                    context._plugin_context, port[\u0027id\u0027], resources.PORT,"},{"line_number":355,"context_line":"                    GENERIC_SWITCH_ENTITY)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_1e15963d","line":352,"range":{"start_line":352,"start_character":20,"end_line":352,"end_character":26},"in_reply_to":"9f560f44_a451e638","updated":"2020-09-09 14:53:38.000000000","message":"Forgive my ignorance here, but return kicks us out of the for loop while continue kicks us out of this iteration of the for loop, correct? What is the desired behavior here? Process (at least) links that match a known switch (for which continue would be the better choice?)","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"97b82b463bcd13e79fcc5dd0138839f32eb97a13","unresolved":false,"context_lines":[{"line_number":349,"context_line":"                    self.switches, switch_info\u003dswitch_info,"},{"line_number":350,"context_line":"                    ngs_mac_address\u003dswitch_id)"},{"line_number":351,"context_line":"                if not switch:"},{"line_number":352,"context_line":"                    return"},{"line_number":353,"context_line":"                provisioning_blocks.provisioning_complete("},{"line_number":354,"context_line":"                    context._plugin_context, port[\u0027id\u0027], resources.PORT,"},{"line_number":355,"context_line":"                    GENERIC_SWITCH_ENTITY)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_a451e638","line":352,"range":{"start_line":352,"start_character":20,"end_line":352,"end_character":26},"in_reply_to":"9f560f44_fb7f30dd","updated":"2020-08-06 22:13:14.000000000","message":"Good point, if we don\u0027t know about the switch then we would just exit isntead of check the other ports. Makes sense to cover.","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"3fc471fc1f5600450bf69e571296cdf8bea97743","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                    ngs_mac_address\u003dswitch_id)"},{"line_number":351,"context_line":"                if not switch:"},{"line_number":352,"context_line":"                    return"},{"line_number":353,"context_line":"                provisioning_blocks.provisioning_complete("},{"line_number":354,"context_line":"                    context._plugin_context, port[\u0027id\u0027], resources.PORT,"},{"line_number":355,"context_line":"                    GENERIC_SWITCH_ENTITY)"},{"line_number":356,"context_line":"        elif self._is_port_bound(context.original):"},{"line_number":357,"context_line":"            # The port has been unbound. This will cause the local link"},{"line_number":358,"context_line":"            # information to be lost, so remove the port from the network on"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_9b571459","line":355,"range":{"start_line":353,"start_character":0,"end_line":355,"end_character":42},"updated":"2020-08-04 11:10:31.000000000","message":"Does it make sense to do this multiple times?","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":16011,"name":"James Denton","email":"james.denton@outlook.com","username":"busterswt"},"change_message_id":"261794a206298fafcd15394f76daae93f3929af8","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                    ngs_mac_address\u003dswitch_id)"},{"line_number":351,"context_line":"                if not switch:"},{"line_number":352,"context_line":"                    return"},{"line_number":353,"context_line":"                provisioning_blocks.provisioning_complete("},{"line_number":354,"context_line":"                    context._plugin_context, port[\u0027id\u0027], resources.PORT,"},{"line_number":355,"context_line":"                    GENERIC_SWITCH_ENTITY)"},{"line_number":356,"context_line":"        elif self._is_port_bound(context.original):"},{"line_number":357,"context_line":"            # The port has been unbound. This will cause the local link"},{"line_number":358,"context_line":"            # information to be lost, so remove the port from the network on"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_5e2c2e98","line":355,"range":{"start_line":353,"start_character":0,"end_line":355,"end_character":42},"in_reply_to":"9f560f44_9b571459","updated":"2020-09-09 14:53:38.000000000","message":"Probably not, since it\u0027s the same port w/ multiple defined links","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"3fc471fc1f5600450bf69e571296cdf8bea97743","unresolved":false,"context_lines":[{"line_number":442,"context_line":"                    self.switches, switch_info\u003dswitch_info,"},{"line_number":443,"context_line":"                    ngs_mac_address\u003dswitch_id)"},{"line_number":444,"context_line":"                if not switch:"},{"line_number":445,"context_line":"                    return"},{"line_number":446,"context_line":"                network \u003d context.network.current"},{"line_number":447,"context_line":"                physnet \u003d network[\u0027provider:physical_network\u0027]"},{"line_number":448,"context_line":"                switch_physnets \u003d switch._get_physical_networks()"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_9b6ef42c","line":445,"range":{"start_line":445,"start_character":20,"end_line":445,"end_character":26},"updated":"2020-08-04 11:10:31.000000000","message":"again, continue?","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":16011,"name":"James Denton","email":"james.denton@outlook.com","username":"busterswt"},"change_message_id":"261794a206298fafcd15394f76daae93f3929af8","unresolved":false,"context_lines":[{"line_number":442,"context_line":"                    self.switches, switch_info\u003dswitch_info,"},{"line_number":443,"context_line":"                    ngs_mac_address\u003dswitch_id)"},{"line_number":444,"context_line":"                if not switch:"},{"line_number":445,"context_line":"                    return"},{"line_number":446,"context_line":"                network \u003d context.network.current"},{"line_number":447,"context_line":"                physnet \u003d network[\u0027provider:physical_network\u0027]"},{"line_number":448,"context_line":"                switch_physnets \u003d switch._get_physical_networks()"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_7e4c9275","line":445,"range":{"start_line":445,"start_character":20,"end_line":445,"end_character":26},"in_reply_to":"9f560f44_9b6ef42c","updated":"2020-09-09 14:53:38.000000000","message":"Same as above.","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"3fc471fc1f5600450bf69e571296cdf8bea97743","unresolved":false,"context_lines":[{"line_number":451,"context_line":"                              \"is not on physical network %(physnet)\","},{"line_number":452,"context_line":"                              {\u0027port_id\u0027: port[\u0027id\u0027], \u0027device\u0027: switch_info,"},{"line_number":453,"context_line":"                               \u0027physnet\u0027: physnet})"},{"line_number":454,"context_line":"                    return"},{"line_number":455,"context_line":"                port_id \u003d link.get(\u0027port_id\u0027)"},{"line_number":456,"context_line":"                segments \u003d context.segments_to_bind"},{"line_number":457,"context_line":"                # If segmentation ID is None, set vlan 1"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_bb71380f","line":454,"range":{"start_line":454,"start_character":20,"end_line":454,"end_character":26},"updated":"2020-08-04 11:10:31.000000000","message":"Not sure about this one. I suppose ideally we would validate all switches before configuring any of them.","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":16011,"name":"James Denton","email":"james.denton@outlook.com","username":"busterswt"},"change_message_id":"f99b1c2425c3c0d29a242902e5ed94ef5502907c","unresolved":false,"context_lines":[{"line_number":451,"context_line":"                              \"is not on physical network %(physnet)\","},{"line_number":452,"context_line":"                              {\u0027port_id\u0027: port[\u0027id\u0027], \u0027device\u0027: switch_info,"},{"line_number":453,"context_line":"                               \u0027physnet\u0027: physnet})"},{"line_number":454,"context_line":"                    return"},{"line_number":455,"context_line":"                port_id \u003d link.get(\u0027port_id\u0027)"},{"line_number":456,"context_line":"                segments \u003d context.segments_to_bind"},{"line_number":457,"context_line":"                # If segmentation ID is None, set vlan 1"}],"source_content_type":"text/x-python","patch_set":12,"id":"52febb59_099488da","line":454,"range":{"start_line":454,"start_character":20,"end_line":454,"end_character":26},"in_reply_to":"0fb354c2_0f1fd9db","updated":"2020-11-25 17:15:05.000000000","message":"According to IRC and this spec, https://specs.openstack.org/openstack/ironic-specs/specs/not-implemented/synchronize-events-with-neutron.html, I think the best I could do would be to log the configuration issue as it seems the VM can go ACTIVE despite port binding failure. This would be a little bit more than what exists today. Thoughts?","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a4bb6bde556cf49ce351e303d11b2e5f2b9039a1","unresolved":false,"context_lines":[{"line_number":451,"context_line":"                              \"is not on physical network %(physnet)\","},{"line_number":452,"context_line":"                              {\u0027port_id\u0027: port[\u0027id\u0027], \u0027device\u0027: switch_info,"},{"line_number":453,"context_line":"                               \u0027physnet\u0027: physnet})"},{"line_number":454,"context_line":"                    return"},{"line_number":455,"context_line":"                port_id \u003d link.get(\u0027port_id\u0027)"},{"line_number":456,"context_line":"                segments \u003d context.segments_to_bind"},{"line_number":457,"context_line":"                # If segmentation ID is None, set vlan 1"}],"source_content_type":"text/x-python","patch_set":12,"id":"d8058c47_55071e5b","line":454,"range":{"start_line":454,"start_character":20,"end_line":454,"end_character":26},"in_reply_to":"52febb59_099488da","updated":"2020-11-25 17:22:15.000000000","message":"You are right there. Not configuring the switch would hopefully trigger an investigation however. A half-configured bond is harder to spot.","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"b4ce1bc2877f60050154bcb9fe02ed56aa262630","unresolved":false,"context_lines":[{"line_number":451,"context_line":"                              \"is not on physical network %(physnet)\","},{"line_number":452,"context_line":"                              {\u0027port_id\u0027: port[\u0027id\u0027], \u0027device\u0027: switch_info,"},{"line_number":453,"context_line":"                               \u0027physnet\u0027: physnet})"},{"line_number":454,"context_line":"                    return"},{"line_number":455,"context_line":"                port_id \u003d link.get(\u0027port_id\u0027)"},{"line_number":456,"context_line":"                segments \u003d context.segments_to_bind"},{"line_number":457,"context_line":"                # If segmentation ID is None, set vlan 1"}],"source_content_type":"text/x-python","patch_set":12,"id":"0fb354c2_0f1fd9db","line":454,"range":{"start_line":454,"start_character":20,"end_line":454,"end_character":26},"in_reply_to":"806ea180_02ef52e2","updated":"2020-11-25 09:29:57.000000000","message":"IMO, it should fail. It seems more likely to be a configuration error than a use case to have one half of a bond managed and one unmanaged. If we do need to support something like that, it should be explicit.","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":16011,"name":"James Denton","email":"james.denton@outlook.com","username":"busterswt"},"change_message_id":"261794a206298fafcd15394f76daae93f3929af8","unresolved":false,"context_lines":[{"line_number":451,"context_line":"                              \"is not on physical network %(physnet)\","},{"line_number":452,"context_line":"                              {\u0027port_id\u0027: port[\u0027id\u0027], \u0027device\u0027: switch_info,"},{"line_number":453,"context_line":"                               \u0027physnet\u0027: physnet})"},{"line_number":454,"context_line":"                    return"},{"line_number":455,"context_line":"                port_id \u003d link.get(\u0027port_id\u0027)"},{"line_number":456,"context_line":"                segments \u003d context.segments_to_bind"},{"line_number":457,"context_line":"                # If segmentation ID is None, set vlan 1"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_be52aa10","line":454,"range":{"start_line":454,"start_character":20,"end_line":454,"end_character":26},"in_reply_to":"9f560f44_bb71380f","updated":"2020-09-09 14:53:38.000000000","message":"How do you see this validation working, and is it outside the scope of this patch?","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":16011,"name":"James Denton","email":"james.denton@outlook.com","username":"busterswt"},"change_message_id":"a375a3b9cc44de3981a0c3fb66f6c02f8b21cccd","unresolved":false,"context_lines":[{"line_number":451,"context_line":"                              \"is not on physical network %(physnet)\","},{"line_number":452,"context_line":"                              {\u0027port_id\u0027: port[\u0027id\u0027], \u0027device\u0027: switch_info,"},{"line_number":453,"context_line":"                               \u0027physnet\u0027: physnet})"},{"line_number":454,"context_line":"                    return"},{"line_number":455,"context_line":"                port_id \u003d link.get(\u0027port_id\u0027)"},{"line_number":456,"context_line":"                segments \u003d context.segments_to_bind"},{"line_number":457,"context_line":"                # If segmentation ID is None, set vlan 1"}],"source_content_type":"text/x-python","patch_set":12,"id":"fffc6b78_d5556e1f","line":454,"range":{"start_line":454,"start_character":20,"end_line":454,"end_character":26},"in_reply_to":"9f560f44_bb71380f","updated":"2020-11-18 21:28:15.000000000","message":"When this is continue, processing continues after the error and triggers a traceback at 458 (UnboundLocalError: local variable \u0027segments\u0027 referenced before assignment).","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"3e38262810918ce7e0bf3ecb21f3d7b915df8192","unresolved":false,"context_lines":[{"line_number":451,"context_line":"                              \"is not on physical network %(physnet)\","},{"line_number":452,"context_line":"                              {\u0027port_id\u0027: port[\u0027id\u0027], \u0027device\u0027: switch_info,"},{"line_number":453,"context_line":"                               \u0027physnet\u0027: physnet})"},{"line_number":454,"context_line":"                    return"},{"line_number":455,"context_line":"                port_id \u003d link.get(\u0027port_id\u0027)"},{"line_number":456,"context_line":"                segments \u003d context.segments_to_bind"},{"line_number":457,"context_line":"                # If segmentation ID is None, set vlan 1"}],"source_content_type":"text/x-python","patch_set":12,"id":"1f621f24_dec22759","line":454,"range":{"start_line":454,"start_character":20,"end_line":454,"end_character":26},"in_reply_to":"9f560f44_be52aa10","updated":"2020-11-09 13:28:48.000000000","message":"The validation could be limited to the check on whether the switch is in NGS config, and the physnet check on L449. We should check all switches before configuring any of them.","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":16011,"name":"James Denton","email":"james.denton@outlook.com","username":"busterswt"},"change_message_id":"61595fb654ad0ca9e0a4db5fdb2447863640b1c8","unresolved":false,"context_lines":[{"line_number":451,"context_line":"                              \"is not on physical network %(physnet)\","},{"line_number":452,"context_line":"                              {\u0027port_id\u0027: port[\u0027id\u0027], \u0027device\u0027: switch_info,"},{"line_number":453,"context_line":"                               \u0027physnet\u0027: physnet})"},{"line_number":454,"context_line":"                    return"},{"line_number":455,"context_line":"                port_id \u003d link.get(\u0027port_id\u0027)"},{"line_number":456,"context_line":"                segments \u003d context.segments_to_bind"},{"line_number":457,"context_line":"                # If segmentation ID is None, set vlan 1"}],"source_content_type":"text/x-python","patch_set":12,"id":"806ea180_02ef52e2","line":454,"range":{"start_line":454,"start_character":20,"end_line":454,"end_character":26},"in_reply_to":"fffc6b78_99aafc82","updated":"2020-11-24 23:06:09.000000000","message":"Yes, it makes sense. The question I have is, if the port contains an invalid link (i.e. 1 of the 2 links reference a switch or physnet that isn\u0027t configured) what should the action be? Do not configure either link and fail to bind the port? Based on observation, during provisioning, the ports are treated as individuals (w/ a single link). The portgroup (w/ multiple links) is processed post-provision once the OS has been deployed. When should the failure occur?","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"c971bd5f7176ee06138cc4bd984289ff2c0ae0eb","unresolved":false,"context_lines":[{"line_number":451,"context_line":"                              \"is not on physical network %(physnet)\","},{"line_number":452,"context_line":"                              {\u0027port_id\u0027: port[\u0027id\u0027], \u0027device\u0027: switch_info,"},{"line_number":453,"context_line":"                               \u0027physnet\u0027: physnet})"},{"line_number":454,"context_line":"                    return"},{"line_number":455,"context_line":"                port_id \u003d link.get(\u0027port_id\u0027)"},{"line_number":456,"context_line":"                segments \u003d context.segments_to_bind"},{"line_number":457,"context_line":"                # If segmentation ID is None, set vlan 1"}],"source_content_type":"text/x-python","patch_set":12,"id":"fffc6b78_99aafc82","line":454,"range":{"start_line":454,"start_character":20,"end_line":454,"end_character":26},"in_reply_to":"fffc6b78_d5556e1f","updated":"2020-11-19 09:46:34.000000000","message":"I\u0027m not sure why segments would be unbound - it doesn\u0027t depend on any per-switch info.\n\nHere\u0027s some pseudocode for how I see it working:\n\nswitches \u003d []\nfor link in local_link_connection:\n    switch \u003d get_switch_device()\n    verify_physnets(switch)\n    switches.append(switch)\n\nfor switch in switches:\n    switch.plug_port_to_network()\n\nprovisioning_blocks.add_provisioning_component()\ncontext.set_binding()\n\n...\n\nDoes that make sense?","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"3fc471fc1f5600450bf69e571296cdf8bea97743","unresolved":false,"context_lines":[{"line_number":456,"context_line":"                segments \u003d context.segments_to_bind"},{"line_number":457,"context_line":"                # If segmentation ID is None, set vlan 1"},{"line_number":458,"context_line":"                segmentation_id \u003d segments[0].get(\u0027segmentation_id\u0027) or 1"},{"line_number":459,"context_line":"                provisioning_blocks.add_provisioning_component("},{"line_number":460,"context_line":"                    context._plugin_context, port[\u0027id\u0027], resources.PORT,"},{"line_number":461,"context_line":"                    GENERIC_SWITCH_ENTITY)"},{"line_number":462,"context_line":"                LOG.debug(\"Putting port {port} on {switch_info} to vlan: \""},{"line_number":463,"context_line":"                          \"{segmentation_id}\".format("},{"line_number":464,"context_line":"                              port\u003dport_id,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_db4d0cc5","line":461,"range":{"start_line":459,"start_character":0,"end_line":461,"end_character":42},"updated":"2020-08-04 11:10:31.000000000","message":"Does it make sense to do this multiple times?","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"3e38262810918ce7e0bf3ecb21f3d7b915df8192","unresolved":false,"context_lines":[{"line_number":456,"context_line":"                segments \u003d context.segments_to_bind"},{"line_number":457,"context_line":"                # If segmentation ID is None, set vlan 1"},{"line_number":458,"context_line":"                segmentation_id \u003d segments[0].get(\u0027segmentation_id\u0027) or 1"},{"line_number":459,"context_line":"                provisioning_blocks.add_provisioning_component("},{"line_number":460,"context_line":"                    context._plugin_context, port[\u0027id\u0027], resources.PORT,"},{"line_number":461,"context_line":"                    GENERIC_SWITCH_ENTITY)"},{"line_number":462,"context_line":"                LOG.debug(\"Putting port {port} on {switch_info} to vlan: \""},{"line_number":463,"context_line":"                          \"{segmentation_id}\".format("},{"line_number":464,"context_line":"                              port\u003dport_id,"}],"source_content_type":"text/x-python","patch_set":12,"id":"1f621f24_dea7c7bc","line":461,"range":{"start_line":459,"start_character":0,"end_line":461,"end_character":42},"in_reply_to":"9f560f44_1e43d640","updated":"2020-11-09 13:28:48.000000000","message":"I don\u0027t see why not.","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":16011,"name":"James Denton","email":"james.denton@outlook.com","username":"busterswt"},"change_message_id":"261794a206298fafcd15394f76daae93f3929af8","unresolved":false,"context_lines":[{"line_number":456,"context_line":"                segments \u003d context.segments_to_bind"},{"line_number":457,"context_line":"                # If segmentation ID is None, set vlan 1"},{"line_number":458,"context_line":"                segmentation_id \u003d segments[0].get(\u0027segmentation_id\u0027) or 1"},{"line_number":459,"context_line":"                provisioning_blocks.add_provisioning_component("},{"line_number":460,"context_line":"                    context._plugin_context, port[\u0027id\u0027], resources.PORT,"},{"line_number":461,"context_line":"                    GENERIC_SWITCH_ENTITY)"},{"line_number":462,"context_line":"                LOG.debug(\"Putting port {port} on {switch_info} to vlan: \""},{"line_number":463,"context_line":"                          \"{segmentation_id}\".format("},{"line_number":464,"context_line":"                              port\u003dport_id,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_1e43d640","line":461,"range":{"start_line":459,"start_character":0,"end_line":461,"end_character":42},"in_reply_to":"9f560f44_db4d0cc5","updated":"2020-09-09 14:53:38.000000000","message":"Probably not, but can be it moved further down outside of the loop?","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"3fc471fc1f5600450bf69e571296cdf8bea97743","unresolved":false,"context_lines":[{"line_number":470,"context_line":"                         \"%(segment_id)s on device %(device)s\","},{"line_number":471,"context_line":"                         {\u0027port_id\u0027: port[\u0027id\u0027], \u0027device\u0027: switch_info,"},{"line_number":472,"context_line":"                          \u0027segment_id\u0027: segmentation_id})"},{"line_number":473,"context_line":"                context.set_binding(segments[0][api.ID],"},{"line_number":474,"context_line":"                                    portbindings.VIF_TYPE_OTHER, {})"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"    @staticmethod"},{"line_number":477,"context_line":"    def _is_port_supported(port):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_5bcf3c28","line":474,"range":{"start_line":473,"start_character":0,"end_line":474,"end_character":68},"updated":"2020-08-04 11:10:31.000000000","message":"Does it make sense to do this multiple times?","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"3fc471fc1f5600450bf69e571296cdf8bea97743","unresolved":false,"context_lines":[{"line_number":521,"context_line":"                self.switches, switch_info\u003dswitch_info,"},{"line_number":522,"context_line":"                ngs_mac_address\u003dswitch_id)"},{"line_number":523,"context_line":"            if not switch:"},{"line_number":524,"context_line":"                return"},{"line_number":525,"context_line":"            port_id \u003d link.get(\u0027port_id\u0027)"},{"line_number":526,"context_line":"            # If segmentation ID is None, set vlan 1"},{"line_number":527,"context_line":"            segmentation_id \u003d network.get(\u0027provider:segmentation_id\u0027) or 1"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_1bf2e470","line":524,"range":{"start_line":524,"start_character":16,"end_line":524,"end_character":22},"updated":"2020-08-04 11:10:31.000000000","message":"continue","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"97b82b463bcd13e79fcc5dd0138839f32eb97a13","unresolved":false,"context_lines":[{"line_number":521,"context_line":"                self.switches, switch_info\u003dswitch_info,"},{"line_number":522,"context_line":"                ngs_mac_address\u003dswitch_id)"},{"line_number":523,"context_line":"            if not switch:"},{"line_number":524,"context_line":"                return"},{"line_number":525,"context_line":"            port_id \u003d link.get(\u0027port_id\u0027)"},{"line_number":526,"context_line":"            # If segmentation ID is None, set vlan 1"},{"line_number":527,"context_line":"            segmentation_id \u003d network.get(\u0027provider:segmentation_id\u0027) or 1"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_a4360602","line":524,"range":{"start_line":524,"start_character":16,"end_line":524,"end_character":22},"in_reply_to":"9f560f44_1bf2e470","updated":"2020-08-06 22:13:14.000000000","message":"++ We already know operators have a tendency to have mixed network fabrics sometimes with switches not known to the openstack infrastucture, so continue is far safer.","commit_id":"62f5edba96884e7de43e044c11b20c5207037f40"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"889af2d01f5d59fe7c27466e9b07800349f714e5","unresolved":true,"context_lines":[{"line_number":466,"context_line":"                              \u0027segment_id\u0027: segmentation_id})"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"            context.set_binding(segments[0][api.ID],"},{"line_number":469,"context_line":"                                portbindings.VIF_TYPE_OTHER, {})"},{"line_number":470,"context_line":"            provisioning_blocks.add_provisioning_component("},{"line_number":471,"context_line":"                context._plugin_context, port[\u0027id\u0027], resources.PORT,"},{"line_number":472,"context_line":"                GENERIC_SWITCH_ENTITY)"}],"source_content_type":"text/x-python","patch_set":19,"id":"87e97a64_3fc05d2b","line":469,"range":{"start_line":469,"start_character":45,"end_line":469,"end_character":59},"updated":"2022-02-14 22:23:16.000000000","message":"Oo\n\nI guess I don\u0027t quite understand why vnic type other.... it is still a baremetal port?\n\nOkay, I see it elsewhere prior to this change so I guess it is okay.","commit_id":"a6d14ab12d217ecdc210a29d9ab50f9946882907"}],"networking_generic_switch/tests/unit/test_generic_switch_mech.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"76e8edc15868438eb0f57f711e669b3747c5fb20","unresolved":false,"context_lines":[{"line_number":639,"context_line":"            }"},{"line_number":640,"context_line":"        ]"},{"line_number":641,"context_line":""},{"line_number":642,"context_line":"        for link in mock_context.current[\u0027binding:profile\u0027][\u0027local_link_information\u0027]:"},{"line_number":643,"context_line":"            self.switch_mock.plug_port_to_network.assert_any_call("},{"line_number":644,"context_line":"                link[\u0027port_id\u0027], \u00271\u0027)"},{"line_number":645,"context_line":"            mock_context.set_binding.assert_called_with(123, \u0027other\u0027, {})"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf51134e_bfd089cb","line":642,"updated":"2020-06-15 20:53:13.000000000","message":"pep8: E501 line too long (86 \u003e 79 characters)","commit_id":"4b6e09633bb5d0485afa18ec167e9ebfb815a21f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"76e8edc15868438eb0f57f711e669b3747c5fb20","unresolved":false,"context_lines":[{"line_number":644,"context_line":"                link[\u0027port_id\u0027], \u00271\u0027)"},{"line_number":645,"context_line":"            mock_context.set_binding.assert_called_with(123, \u0027other\u0027, {})"},{"line_number":646,"context_line":"            m_apc.assert_any_call(mock_context._plugin_context,"},{"line_number":647,"context_line":"                                          mock_context.current[\u0027id\u0027],"},{"line_number":648,"context_line":"                                          resources.PORT,"},{"line_number":649,"context_line":"                                          \u0027GENERICSWITCH\u0027)"},{"line_number":650,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"bf51134e_9fd5c5bc","line":647,"updated":"2020-06-15 20:53:13.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"4b6e09633bb5d0485afa18ec167e9ebfb815a21f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"76e8edc15868438eb0f57f711e669b3747c5fb20","unresolved":false,"context_lines":[{"line_number":645,"context_line":"            mock_context.set_binding.assert_called_with(123, \u0027other\u0027, {})"},{"line_number":646,"context_line":"            m_apc.assert_any_call(mock_context._plugin_context,"},{"line_number":647,"context_line":"                                          mock_context.current[\u0027id\u0027],"},{"line_number":648,"context_line":"                                          resources.PORT,"},{"line_number":649,"context_line":"                                          \u0027GENERICSWITCH\u0027)"},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"    @mock.patch.object(provisioning_blocks, \u0027add_provisioning_component\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf51134e_ffd961f4","line":648,"updated":"2020-06-15 20:53:13.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"4b6e09633bb5d0485afa18ec167e9ebfb815a21f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"76e8edc15868438eb0f57f711e669b3747c5fb20","unresolved":false,"context_lines":[{"line_number":646,"context_line":"            m_apc.assert_any_call(mock_context._plugin_context,"},{"line_number":647,"context_line":"                                          mock_context.current[\u0027id\u0027],"},{"line_number":648,"context_line":"                                          resources.PORT,"},{"line_number":649,"context_line":"                                          \u0027GENERICSWITCH\u0027)"},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"    @mock.patch.object(provisioning_blocks, \u0027add_provisioning_component\u0027)"},{"line_number":652,"context_line":"    def test_bind_port_with_physnet(self, m_apc, m_list):"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf51134e_dfd61dc4","line":649,"updated":"2020-06-15 20:53:13.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"4b6e09633bb5d0485afa18ec167e9ebfb815a21f"}]}
