)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":25023,"name":"Jonathan Rosser","email":"jonathan.rosser@rd.bbc.co.uk","username":"jrosser"},"change_message_id":"4b002429b5afe79288e822326fba08d182f4d388","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"230560f6_2a88feab","updated":"2021-11-10 10:20:15.000000000","message":"I think in IRC some time ago there was a suggestion from james that this should be extended to handle multiple bonds as it might be quite normal to have multiple physical networks?","commit_id":"c2321164515386d76c604446340b7caeef4286ce"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"fa1a0e910e6e43857d33c6cbb5feabfda9eb7ca5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"d35f046e_96e8b336","updated":"2021-11-10 08:29:49.000000000","message":"looks reasonable to me. hard to judge on the functional side of things. Would rely on jamesdenton opinion","commit_id":"c2321164515386d76c604446340b7caeef4286ce"},{"author":{"_account_id":28752,"name":"Satish Patel","email":"satish.txt@gmail.com","username":"spatel"},"change_message_id":"805ff3f1c8541cfbc5e6d341dbf9b4634f976afb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"01373990_0d0601dc","updated":"2021-10-21 02:41:47.000000000","message":"recheck","commit_id":"c2321164515386d76c604446340b7caeef4286ce"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"5b38bd1640287469d5002a6774c011a44be7cb09","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"8834e273_cad7a1f2","updated":"2021-12-18 05:55:40.000000000","message":"recheck","commit_id":"45864a2143f4feb8d2b358f0b91775563cbd2584"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"c50bc0d8744da705bfc3de86ba8c2194b5162a20","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"2f5eb66e_8a566322","updated":"2021-12-18 13:41:04.000000000","message":"recheck","commit_id":"5a975b8e5f4c7d8d1eaff23c8a3de97b0fb98ceb"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"0a3d42f172bcd9ce99c727ea1684a5f5bac0169f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"9b208a69_2c00df7d","updated":"2021-12-18 09:09:52.000000000","message":"recheck","commit_id":"5a975b8e5f4c7d8d1eaff23c8a3de97b0fb98ceb"}],"defaults/main.yml":[{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"d0167fc3665fd7e8295c0824f8bd35d63f4fea01","unresolved":true,"context_lines":[{"line_number":460,"context_line":"ovs_dpdk_socket_mem: \"1024\""},{"line_number":461,"context_line":"ovs_dpdk_nr_1g_pages: 0"},{"line_number":462,"context_line":"ovs_dpdk_nr_2m_pages: 0"},{"line_number":463,"context_line":"## DPDK bonding "},{"line_number":464,"context_line":"ovs_dpdk_lacp_bond_support: False"},{"line_number":465,"context_line":"ovs_dpdk_lacp_bond: []"},{"line_number":466,"context_line":"# Advance parameters to define multiple bonds"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"737f15a5_a1d6a00b","line":463,"range":{"start_line":463,"start_character":15,"end_line":463,"end_character":16},"updated":"2021-11-10 17:02:59.000000000","message":"trailing whitespace","commit_id":"7797d325775c17ae4329bf5207634aba048fb440"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"d0167fc3665fd7e8295c0824f8bd35d63f4fea01","unresolved":true,"context_lines":[{"line_number":461,"context_line":"ovs_dpdk_nr_1g_pages: 0"},{"line_number":462,"context_line":"ovs_dpdk_nr_2m_pages: 0"},{"line_number":463,"context_line":"## DPDK bonding "},{"line_number":464,"context_line":"ovs_dpdk_lacp_bond_support: False"},{"line_number":465,"context_line":"ovs_dpdk_lacp_bond: []"},{"line_number":466,"context_line":"# Advance parameters to define multiple bonds"},{"line_number":467,"context_line":"#ovs_dpdk_lacp_bond:"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"d980a42b_4d6f8d27","line":464,"range":{"start_line":464,"start_character":0,"end_line":464,"end_character":33},"updated":"2021-11-10 17:02:59.000000000","message":"we don\u0027t need this since if ovs_dpdk_lacp_bond is empty, task won\u0027t be executed anyway (empty loop)","commit_id":"7797d325775c17ae4329bf5207634aba048fb440"},{"author":{"_account_id":16011,"name":"James Denton","email":"james.denton@outlook.com","username":"busterswt"},"change_message_id":"25325831cc3fc0e29cbffe17dee127d80b68c828","unresolved":true,"context_lines":[{"line_number":468,"context_line":"#    lacp: active"},{"line_number":469,"context_line":"#    bond_mode: balance-tcp"},{"line_number":470,"context_line":"#    bridge: br-provider"},{"line_number":471,"context_line":"#    interfaces: \"{{ ovs_dpdk_pci_addresses }}\""},{"line_number":472,"context_line":"#  - name: dpdkbond1"},{"line_number":473,"context_line":"#    lacp: active"},{"line_number":474,"context_line":"#    bond_mode: active-backup"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"60d90163_d834cf31","line":471,"updated":"2021-11-10 17:36:30.000000000","message":"ovs_dpdk_pci_addresses will be problematic here, since it\u0027s a list of all qualified DPDK interfaces. Only a subset would be expected within a given bond.","commit_id":"d6a88cc01cade44b08d33f874fad9c25b5cc9e0a"}],"library/provider_networks":[{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"984331167d0add7229e955ef3d8bdf8f4991bc4b","unresolved":true,"context_lines":[{"line_number":23,"context_line":"DOCUMENTATION \u003d \"\"\""},{"line_number":24,"context_line":"---"},{"line_number":25,"context_line":"module: provider_networks"},{"line_number":26,"context_line":"version_added: \"1.8.7\""},{"line_number":27,"context_line":"short_description:"},{"line_number":28,"context_line":"    - Parse a list of networks and return data that Ansible can use"},{"line_number":29,"context_line":"description:"}],"source_content_type":"application/octet-stream","patch_set":8,"id":"50d2c703_9ad4ea47","line":26,"updated":"2021-12-09 08:45:12.000000000","message":"I think lookup priority is to use local module first and then in $PATH? \nTrying to understand what will be used first this or https://opendev.org/openstack/openstack-ansible-plugins/src/branch/master/library/provider_networks\n\nProbably worth patching plugins as if we consider it to be collection, it make sense to move all modules there and do not contain them locally.\n\nWe moved plugin to role the way before collections were introduced so it made sense these days.","commit_id":"15683003f09b94c5a0be21d9d67c1e69e6cb503f"},{"author":{"_account_id":16011,"name":"James Denton","email":"james.denton@outlook.com","username":"busterswt"},"change_message_id":"2636dc66cba6c715a25259c354674a2436001b81","unresolved":true,"context_lines":[{"line_number":23,"context_line":"DOCUMENTATION \u003d \"\"\""},{"line_number":24,"context_line":"---"},{"line_number":25,"context_line":"module: provider_networks"},{"line_number":26,"context_line":"version_added: \"1.8.7\""},{"line_number":27,"context_line":"short_description:"},{"line_number":28,"context_line":"    - Parse a list of networks and return data that Ansible can use"},{"line_number":29,"context_line":"description:"}],"source_content_type":"application/octet-stream","patch_set":8,"id":"da295d67_6e586a3d","line":26,"in_reply_to":"50d2c703_9ad4ea47","updated":"2021-12-09 14:09:41.000000000","message":"Yes, good point. I planned to have a sister patch to update plugins with whatever changes here ultimately worked.","commit_id":"15683003f09b94c5a0be21d9d67c1e69e6cb503f"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"722d300041bf488234f28f22370494208e149914","unresolved":true,"context_lines":[{"line_number":324,"context_line":"                        # when constructing OVS bonds"},{"line_number":325,"context_line":"                        if \u0027network_bond_interfaces\u0027 in net[\u0027network\u0027]:"},{"line_number":326,"context_line":"                            self.network_bond_interfaces_mappings.append("},{"line_number":327,"context_line":"                                \"{\u0027bridge\u0027: \u0027%s\u0027, \u0027interfaces\u0027: %s, \u0027bond_mode\u0027: \u0027%s\u0027, \u0027lacp\u0027: \u0027%s\u0027, \u0027bond_updelay\u0027: %s, \u0027bond_downdelay\u0027: %s}\" % ("},{"line_number":328,"context_line":"                                    net[\u0027network\u0027][\u0027container_bridge\u0027],"},{"line_number":329,"context_line":"                                    net[\u0027network\u0027][\u0027network_bond_interfaces\u0027],"},{"line_number":330,"context_line":"                                    net[\u0027network\u0027].get(\u0027bond_mode\u0027,\u0027active-backup\u0027),"}],"source_content_type":"application/octet-stream","patch_set":8,"id":"a5752743_aa5cd797","line":327,"range":{"start_line":327,"start_character":32,"end_line":327,"end_character":143},"updated":"2021-12-09 08:56:37.000000000","message":"why we\u0027re appending text instead of the dict? Aren\u0027t we expecting valid list of dictionaries as a module output?","commit_id":"15683003f09b94c5a0be21d9d67c1e69e6cb503f"},{"author":{"_account_id":16011,"name":"James Denton","email":"james.denton@outlook.com","username":"busterswt"},"change_message_id":"2636dc66cba6c715a25259c354674a2436001b81","unresolved":true,"context_lines":[{"line_number":324,"context_line":"                        # when constructing OVS bonds"},{"line_number":325,"context_line":"                        if \u0027network_bond_interfaces\u0027 in net[\u0027network\u0027]:"},{"line_number":326,"context_line":"                            self.network_bond_interfaces_mappings.append("},{"line_number":327,"context_line":"                                \"{\u0027bridge\u0027: \u0027%s\u0027, \u0027interfaces\u0027: %s, \u0027bond_mode\u0027: \u0027%s\u0027, \u0027lacp\u0027: \u0027%s\u0027, \u0027bond_updelay\u0027: %s, \u0027bond_downdelay\u0027: %s}\" % ("},{"line_number":328,"context_line":"                                    net[\u0027network\u0027][\u0027container_bridge\u0027],"},{"line_number":329,"context_line":"                                    net[\u0027network\u0027][\u0027network_bond_interfaces\u0027],"},{"line_number":330,"context_line":"                                    net[\u0027network\u0027].get(\u0027bond_mode\u0027,\u0027active-backup\u0027),"}],"source_content_type":"application/octet-stream","patch_set":8,"id":"4a88d463_d943fe46","line":327,"range":{"start_line":327,"start_character":32,"end_line":327,"end_character":143},"in_reply_to":"a5752743_aa5cd797","updated":"2021-12-09 14:09:41.000000000","message":"Yes, you are absolutely correct.","commit_id":"15683003f09b94c5a0be21d9d67c1e69e6cb503f"},{"author":{"_account_id":16011,"name":"James Denton","email":"james.denton@outlook.com","username":"busterswt"},"change_message_id":"e9b2a0f209747eaa7f37633e0fddcd5876cc93fb","unresolved":true,"context_lines":[{"line_number":322,"context_line":"                        # Builds a list of provider bridge to physical"},{"line_number":323,"context_line":"                        # interface (bond member) mappings and is used"},{"line_number":324,"context_line":"                        # when constructing OVS bonds"},{"line_number":325,"context_line":"                        if \u0027network_bond_interfaces\u0027 in net[\u0027network\u0027]:"},{"line_number":326,"context_line":"                            self.network_bond_interfaces_mappings.append({"},{"line_number":327,"context_line":"                                \u0027bridge\u0027: net[\u0027network\u0027]["},{"line_number":328,"context_line":"                                    \u0027container_bridge\u0027"},{"line_number":329,"context_line":"                                ],"},{"line_number":330,"context_line":"                                \u0027interfaces\u0027: net[\u0027network\u0027]["},{"line_number":331,"context_line":"                                    \u0027network_bond_interfaces\u0027"},{"line_number":332,"context_line":"                                ],"},{"line_number":333,"context_line":"                                \u0027bond_mode\u0027: net[\u0027network\u0027].get("},{"line_number":334,"context_line":"                                    \u0027bond_mode\u0027, \u0027active-backup\u0027"},{"line_number":335,"context_line":"                                ),"},{"line_number":336,"context_line":"                                \u0027lacp\u0027: net[\u0027network\u0027].get(\u0027lacp\u0027, \u0027off\u0027),"},{"line_number":337,"context_line":"                                \u0027bond_updelay\u0027: net[\u0027network\u0027].get("},{"line_number":338,"context_line":"                                    \u0027bond_updelay\u0027, 100"},{"line_number":339,"context_line":"                                ),"},{"line_number":340,"context_line":"                                \u0027bond_downdelay\u0027: net[\u0027network\u0027].get("},{"line_number":341,"context_line":"                                    \u0027bond_downdelay\u0027, 100"},{"line_number":342,"context_line":"                                )"},{"line_number":343,"context_line":"                            })"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"                        # SR-IOV interface mappings"},{"line_number":346,"context_line":"                        if \u0027sriov_host_interfaces\u0027 in net[\u0027network\u0027]:"},{"line_number":347,"context_line":"                            host_interfaces \u003d \\"}],"source_content_type":"application/octet-stream","patch_set":10,"id":"ec4da46c_f150a7fc","line":344,"range":{"start_line":325,"start_character":0,"end_line":344,"end_character":0},"updated":"2021-12-09 20:00:09.000000000","message":"So, it turns out that it\u0027s expecting str not dict here:\n\nThe error was: TypeError: Value of unknown type: \u003cclass \u0027TypeError\u0027\u003e, sequence item 0: expected str instance, dict found\n\nMight be easier to revert this rather than making logic changes to the library itself.","commit_id":"df89e350c9072420ff95c12ea306eca0ba149019"},{"author":{"_account_id":16011,"name":"James Denton","email":"james.denton@outlook.com","username":"busterswt"},"change_message_id":"4f891579cbba1186d5169557f325c61253d3bcd3","unresolved":true,"context_lines":[{"line_number":322,"context_line":"                        # Builds a list of provider bridge to physical"},{"line_number":323,"context_line":"                        # interface (bond member) mappings and is used"},{"line_number":324,"context_line":"                        # when constructing OVS bonds"},{"line_number":325,"context_line":"                        if \u0027network_bond_interfaces\u0027 in net[\u0027network\u0027]:"},{"line_number":326,"context_line":"                            self.network_bond_interfaces_mappings.append({"},{"line_number":327,"context_line":"                                \u0027bridge\u0027: net[\u0027network\u0027]["},{"line_number":328,"context_line":"                                    \u0027container_bridge\u0027"},{"line_number":329,"context_line":"                                ],"},{"line_number":330,"context_line":"                                \u0027interfaces\u0027: net[\u0027network\u0027]["},{"line_number":331,"context_line":"                                    \u0027network_bond_interfaces\u0027"},{"line_number":332,"context_line":"                                ],"},{"line_number":333,"context_line":"                                \u0027bond_mode\u0027: net[\u0027network\u0027].get("},{"line_number":334,"context_line":"                                    \u0027bond_mode\u0027, \u0027active-backup\u0027"},{"line_number":335,"context_line":"                                ),"},{"line_number":336,"context_line":"                                \u0027lacp\u0027: net[\u0027network\u0027].get(\u0027lacp\u0027, \u0027off\u0027),"},{"line_number":337,"context_line":"                                \u0027bond_updelay\u0027: net[\u0027network\u0027].get("},{"line_number":338,"context_line":"                                    \u0027bond_updelay\u0027, 100"},{"line_number":339,"context_line":"                                ),"},{"line_number":340,"context_line":"                                \u0027bond_downdelay\u0027: net[\u0027network\u0027].get("},{"line_number":341,"context_line":"                                    \u0027bond_downdelay\u0027, 100"},{"line_number":342,"context_line":"                                )"},{"line_number":343,"context_line":"                            })"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"                        # SR-IOV interface mappings"},{"line_number":346,"context_line":"                        if \u0027sriov_host_interfaces\u0027 in net[\u0027network\u0027]:"},{"line_number":347,"context_line":"                            host_interfaces \u003d \\"}],"source_content_type":"application/octet-stream","patch_set":10,"id":"490bdec4_3b3ff1fb","line":344,"range":{"start_line":325,"start_character":0,"end_line":344,"end_character":0},"in_reply_to":"5bd8ba6c_ad6bd177","updated":"2021-12-10 22:42:34.000000000","message":"Thanks for the suggestion, i never considered it. Looks promising so far. Patch incoming.","commit_id":"df89e350c9072420ff95c12ea306eca0ba149019"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"b6c32b7f02cb52b6f77336ad46b17f69b916bc98","unresolved":true,"context_lines":[{"line_number":322,"context_line":"                        # Builds a list of provider bridge to physical"},{"line_number":323,"context_line":"                        # interface (bond member) mappings and is used"},{"line_number":324,"context_line":"                        # when constructing OVS bonds"},{"line_number":325,"context_line":"                        if \u0027network_bond_interfaces\u0027 in net[\u0027network\u0027]:"},{"line_number":326,"context_line":"                            self.network_bond_interfaces_mappings.append({"},{"line_number":327,"context_line":"                                \u0027bridge\u0027: net[\u0027network\u0027]["},{"line_number":328,"context_line":"                                    \u0027container_bridge\u0027"},{"line_number":329,"context_line":"                                ],"},{"line_number":330,"context_line":"                                \u0027interfaces\u0027: net[\u0027network\u0027]["},{"line_number":331,"context_line":"                                    \u0027network_bond_interfaces\u0027"},{"line_number":332,"context_line":"                                ],"},{"line_number":333,"context_line":"                                \u0027bond_mode\u0027: net[\u0027network\u0027].get("},{"line_number":334,"context_line":"                                    \u0027bond_mode\u0027, \u0027active-backup\u0027"},{"line_number":335,"context_line":"                                ),"},{"line_number":336,"context_line":"                                \u0027lacp\u0027: net[\u0027network\u0027].get(\u0027lacp\u0027, \u0027off\u0027),"},{"line_number":337,"context_line":"                                \u0027bond_updelay\u0027: net[\u0027network\u0027].get("},{"line_number":338,"context_line":"                                    \u0027bond_updelay\u0027, 100"},{"line_number":339,"context_line":"                                ),"},{"line_number":340,"context_line":"                                \u0027bond_downdelay\u0027: net[\u0027network\u0027].get("},{"line_number":341,"context_line":"                                    \u0027bond_downdelay\u0027, 100"},{"line_number":342,"context_line":"                                )"},{"line_number":343,"context_line":"                            })"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"                        # SR-IOV interface mappings"},{"line_number":346,"context_line":"                        if \u0027sriov_host_interfaces\u0027 in net[\u0027network\u0027]:"},{"line_number":347,"context_line":"                            host_interfaces \u003d \\"}],"source_content_type":"application/octet-stream","patch_set":10,"id":"5bd8ba6c_ad6bd177","line":344,"range":{"start_line":325,"start_character":0,"end_line":344,"end_character":0},"in_reply_to":"b809a28f_0ffcbabf","updated":"2021-12-10 13:02:05.000000000","message":"oh, well, for join, I think we could have used:\n\u0027,\u0027.join(map(str, pnp.network_bond_interfaces_mappings)) \n\nthat\u0027s good catch.","commit_id":"df89e350c9072420ff95c12ea306eca0ba149019"},{"author":{"_account_id":16011,"name":"James Denton","email":"james.denton@outlook.com","username":"busterswt"},"change_message_id":"77e43251c651b739923fe8b0edfc8c1933cd7855","unresolved":true,"context_lines":[{"line_number":322,"context_line":"                        # Builds a list of provider bridge to physical"},{"line_number":323,"context_line":"                        # interface (bond member) mappings and is used"},{"line_number":324,"context_line":"                        # when constructing OVS bonds"},{"line_number":325,"context_line":"                        if \u0027network_bond_interfaces\u0027 in net[\u0027network\u0027]:"},{"line_number":326,"context_line":"                            self.network_bond_interfaces_mappings.append({"},{"line_number":327,"context_line":"                                \u0027bridge\u0027: net[\u0027network\u0027]["},{"line_number":328,"context_line":"                                    \u0027container_bridge\u0027"},{"line_number":329,"context_line":"                                ],"},{"line_number":330,"context_line":"                                \u0027interfaces\u0027: net[\u0027network\u0027]["},{"line_number":331,"context_line":"                                    \u0027network_bond_interfaces\u0027"},{"line_number":332,"context_line":"                                ],"},{"line_number":333,"context_line":"                                \u0027bond_mode\u0027: net[\u0027network\u0027].get("},{"line_number":334,"context_line":"                                    \u0027bond_mode\u0027, \u0027active-backup\u0027"},{"line_number":335,"context_line":"                                ),"},{"line_number":336,"context_line":"                                \u0027lacp\u0027: net[\u0027network\u0027].get(\u0027lacp\u0027, \u0027off\u0027),"},{"line_number":337,"context_line":"                                \u0027bond_updelay\u0027: net[\u0027network\u0027].get("},{"line_number":338,"context_line":"                                    \u0027bond_updelay\u0027, 100"},{"line_number":339,"context_line":"                                ),"},{"line_number":340,"context_line":"                                \u0027bond_downdelay\u0027: net[\u0027network\u0027].get("},{"line_number":341,"context_line":"                                    \u0027bond_downdelay\u0027, 100"},{"line_number":342,"context_line":"                                )"},{"line_number":343,"context_line":"                            })"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"                        # SR-IOV interface mappings"},{"line_number":346,"context_line":"                        if \u0027sriov_host_interfaces\u0027 in net[\u0027network\u0027]:"},{"line_number":347,"context_line":"                            host_interfaces \u003d \\"}],"source_content_type":"application/octet-stream","patch_set":10,"id":"b809a28f_0ffcbabf","line":344,"range":{"start_line":325,"start_character":0,"end_line":344,"end_character":0},"in_reply_to":"ec4da46c_f150a7fc","updated":"2021-12-09 20:33:49.000000000","message":"It\u0027s the join that is causing the issue. Since we don\u0027t really need this in string format, I\u0027ve removed the option altogether.","commit_id":"df89e350c9072420ff95c12ea306eca0ba149019"}],"tasks/providers/setup_ovs_dpdk.yml":[{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"d0167fc3665fd7e8295c0824f8bd35d63f4fea01","unresolved":true,"context_lines":[{"line_number":134,"context_line":"    interfaces: \"{{ item.interfaces }}\""},{"line_number":135,"context_line":"    lacp: \"{{ item.lacp | default(\u0027active\u0027) }}\""},{"line_number":136,"context_line":"    bond_mode: \"{{ item.bond_mode | default(\u0027balance-tcp\u0027) }}\""},{"line_number":137,"context_line":"    set: \"{% for port in item.ports %} interface {{ port }} type\u003ddpdk options:dpdk-devargs\u003d{{ port }} {% if not loop.last %},{% endif %}{% endfor %}\""},{"line_number":138,"context_line":"    state: present"},{"line_number":139,"context_line":"  with_items: \"{{ ovs_dpdk_lacp_bond }}\""},{"line_number":140,"context_line":"  when:"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"1ef4190d_0cf68f6f","line":137,"range":{"start_line":137,"start_character":17,"end_line":137,"end_character":21},"updated":"2021-11-10 17:02:59.000000000","message":"and then let it be `interface`","commit_id":"7797d325775c17ae4329bf5207634aba048fb440"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"d0167fc3665fd7e8295c0824f8bd35d63f4fea01","unresolved":true,"context_lines":[{"line_number":134,"context_line":"    interfaces: \"{{ item.interfaces }}\""},{"line_number":135,"context_line":"    lacp: \"{{ item.lacp | default(\u0027active\u0027) }}\""},{"line_number":136,"context_line":"    bond_mode: \"{{ item.bond_mode | default(\u0027balance-tcp\u0027) }}\""},{"line_number":137,"context_line":"    set: \"{% for port in item.ports %} interface {{ port }} type\u003ddpdk options:dpdk-devargs\u003d{{ port }} {% if not loop.last %},{% endif %}{% endfor %}\""},{"line_number":138,"context_line":"    state: present"},{"line_number":139,"context_line":"  with_items: \"{{ ovs_dpdk_lacp_bond }}\""},{"line_number":140,"context_line":"  when:"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"286e326b_7a846f0a","line":137,"range":{"start_line":137,"start_character":30,"end_line":137,"end_character":35},"updated":"2021-11-10 17:02:59.000000000","message":"interfaces","commit_id":"7797d325775c17ae4329bf5207634aba048fb440"},{"author":{"_account_id":16011,"name":"James Denton","email":"james.denton@outlook.com","username":"busterswt"},"change_message_id":"25325831cc3fc0e29cbffe17dee127d80b68c828","unresolved":true,"context_lines":[{"line_number":136,"context_line":"    bond_mode: \"{{ item.bond_mode | default(\u0027balance-tcp\u0027) }}\""},{"line_number":137,"context_line":"    set: \"{% for interfaces in item.interfaces %} interface {{ interfaces }} type\u003ddpdk options:dpdk-devargs\u003d{{ interfaces }} {% if not loop.last %},{% endif %}{% endfor %}\""},{"line_number":138,"context_line":"    state: present"},{"line_number":139,"context_line":"  with_items: \"{{ ovs_dpdk_lacp_bond }}\""},{"line_number":140,"context_line":"  when:"},{"line_number":141,"context_line":"    - neutron_services[\u0027neutron-openvswitch-agent\u0027][\u0027group\u0027] in group_names"},{"line_number":142,"context_line":"    - neutron_plugin_type in [\u0027ml2.ovs\u0027, \u0027ml2.ovs.dvr\u0027]"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"1df0b264_1036888b","line":139,"range":{"start_line":139,"start_character":18,"end_line":139,"end_character":36},"updated":"2021-11-10 17:36:30.000000000","message":"Rather than define a new list and have it setup as an override, can we consider using something similar to the task above? neutron_provider_networks.network_interface_mappings is a list of bridge-\u003einterface mappings, and it\u0027s only run with the list \u003e 1. For DPDK bonds, a similar mechanism can be used within the provider_network library, allowing the operator to define the bond members in the same place existing network-related config is done: within the provider network configuration. See https://github.com/openstack/openstack-ansible-os_neutron/blob/master/library/provider_networks","commit_id":"d6a88cc01cade44b08d33f874fad9c25b5cc9e0a"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"219640f044ca9686020f266c2a2ad138fd2b3b5e","unresolved":true,"context_lines":[{"line_number":136,"context_line":"    bond_mode: \"{{ item.bond_mode | default(\u0027balance-tcp\u0027) }}\""},{"line_number":137,"context_line":"    set: \"{% for interfaces in item.interfaces %} interface {{ interfaces }} type\u003ddpdk options:dpdk-devargs\u003d{{ interfaces }} {% if not loop.last %},{% endif %}{% endfor %}\""},{"line_number":138,"context_line":"    state: present"},{"line_number":139,"context_line":"  with_items: \"{{ ovs_dpdk_lacp_bond }}\""},{"line_number":140,"context_line":"  when:"},{"line_number":141,"context_line":"    - neutron_services[\u0027neutron-openvswitch-agent\u0027][\u0027group\u0027] in group_names"},{"line_number":142,"context_line":"    - neutron_plugin_type in [\u0027ml2.ovs\u0027, \u0027ml2.ovs.dvr\u0027]"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"4de45675_3d94b778","line":139,"range":{"start_line":139,"start_character":18,"end_line":139,"end_character":36},"in_reply_to":"1df0b264_1036888b","updated":"2021-11-23 14:35:40.000000000","message":"I\u0027m not sure I see how we can use such mapping here? Let\u0027s say we have 4 interfaces, 2 bridges/ports. How mapping will look like as you suggesting?\n\nAs eventually we need to map several interfaces to single bridge and we can\u0027t iterate over 2 things at the same time.\n\nSo if we still iterate over network_interface_mappings, we need to somehow select mathed interfaces from some other mapping. And with structure of mapping we can\u0027t really parse it conveniently.\n\nSo having new strucutre is more readable. Or at least I don\u0027t really see what you mean...","commit_id":"d6a88cc01cade44b08d33f874fad9c25b5cc9e0a"},{"author":{"_account_id":16011,"name":"James Denton","email":"james.denton@outlook.com","username":"busterswt"},"change_message_id":"25325831cc3fc0e29cbffe17dee127d80b68c828","unresolved":true,"context_lines":[{"line_number":141,"context_line":"    - neutron_services[\u0027neutron-openvswitch-agent\u0027][\u0027group\u0027] in group_names"},{"line_number":142,"context_line":"    - neutron_plugin_type in [\u0027ml2.ovs\u0027, \u0027ml2.ovs.dvr\u0027]"},{"line_number":143,"context_line":"    - \u0027\"nova_compute\" in group_names\u0027"},{"line_number":144,"context_line":"    - ovs_dpdk_lacp_bond_support"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"51c1558d_31245f6d","line":144,"range":{"start_line":144,"start_character":6,"end_line":144,"end_character":32},"updated":"2021-11-10 17:36:30.000000000","message":"Probably not necessary if you use the bond member list as criteria for building the bond(s)","commit_id":"d6a88cc01cade44b08d33f874fad9c25b5cc9e0a"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"219640f044ca9686020f266c2a2ad138fd2b3b5e","unresolved":true,"context_lines":[{"line_number":141,"context_line":"    - neutron_services[\u0027neutron-openvswitch-agent\u0027][\u0027group\u0027] in group_names"},{"line_number":142,"context_line":"    - neutron_plugin_type in [\u0027ml2.ovs\u0027, \u0027ml2.ovs.dvr\u0027]"},{"line_number":143,"context_line":"    - \u0027\"nova_compute\" in group_names\u0027"},{"line_number":144,"context_line":"    - ovs_dpdk_lacp_bond_support"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"dfbe6323_d46201fb","line":144,"range":{"start_line":144,"start_character":6,"end_line":144,"end_character":32},"in_reply_to":"51c1558d_31245f6d","updated":"2021-11-23 14:35:40.000000000","message":"+1","commit_id":"d6a88cc01cade44b08d33f874fad9c25b5cc9e0a"}]}
