)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"6daae682ea02b441f40c3e6a0431e0b079615ff2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"99a4d42c_b360c937","updated":"2026-01-16 15:07:17.000000000","message":"Error for Software factory is related to pip installation of packages, seems like manila-tempest-plugin is trying to be installed but there\u0027s no compatible python version. I\u0027m currently checking if there\u0027s anything related to this already filed.\n\nRequirement already satisfied: barbican-tempest-plugin\u003e\u003d1.6.0 in /usr/local/lib/python3.9/site-packages (from manila-tempest-plugin\u003d\u003d2.9.1.dev24) (4.4.0)\nERROR: Package \u0027manila-tempest-plugin\u0027 requires a different Python: 3.9.25 not in \u0027\u003e\u003d3.10\u0027","commit_id":"58cbe1e0102b137e9d14b09c121d02495eac24f0"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"4d55678ce891de1fdc021b804eb4f55c1cf944e9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"b3790766_d138861d","updated":"2026-01-19 11:27:18.000000000","message":"Cool, thanks.\nYou have to add the extension to https://opendev.org/openstack/neutron-tempest-plugin/src/branch/master/zuul.d/master_jobs.yaml#L1655 (at least somewhere around it)\nAnd make sure that older branch jobs do not have that extension","commit_id":"d934e487ac56b07fd673aac6097cdab50de008a0"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"d85d666b4a1e9dabc82959dafc9ed8ff6a9e3947","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"5c263098_52230074","updated":"2026-01-21 21:21:57.000000000","message":"jsut some questions. I also think that the `test_tap_mirror_connectivity` test is getting quite big. But that can be done in another review.","commit_id":"e11c3946ba7cc05fd9faf56345c6ac9c43f058f3"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"90cfc66096de228924ea389ab267092d0f29d4a1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"f1427dc9_09183e55","updated":"2026-01-23 16:37:53.000000000","message":"Thanks","commit_id":"97b26f27f10127874c8c414580865808e1aa4a95"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"85918ac820976eeac7ebcd271a4b52f45e633567","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"1b033025_a7ac7907","updated":"2026-01-26 09:34:22.000000000","message":"I\u0027m fast approving it as there was only one very minor change comparing to the previous PS so I assumed that Rodolfo\u0027s +2 from that PS is still valid now.","commit_id":"648a601c768be775c030011fdad0d847fb5eebab"}],"neutron_tempest_plugin/tap_as_a_service/scenario/test_tap_mirror.py":[{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"d85d666b4a1e9dabc82959dafc9ed8ff6a9e3947","unresolved":true,"context_lines":[{"line_number":124,"context_line":"        tap_mirror \u003d self.tap_mirrors_client.create_tap_mirror("},{"line_number":125,"context_line":"            name\u003ddata_utils.rand_name(\"tap_mirror\"),"},{"line_number":126,"context_line":"            port_id\u003dvm1_port[\u0027id\u0027],"},{"line_number":127,"context_line":"            directions\u003ddirections,"},{"line_number":128,"context_line":"            remote_ip\u003dr_ip,"},{"line_number":129,"context_line":"            mirror_type\u003d\u0027gre\u0027,"},{"line_number":130,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":11,"id":"5745e069_9f57c9fe","line":127,"updated":"2026-01-21 21:21:57.000000000","message":"Is this going to create 3 mirrors in OVN for each IN, OUT and BOTH?","commit_id":"e11c3946ba7cc05fd9faf56345c6ac9c43f058f3"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"95f085fec343adbb028bf7c18f95b7536509ecc9","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        tap_mirror \u003d self.tap_mirrors_client.create_tap_mirror("},{"line_number":125,"context_line":"            name\u003ddata_utils.rand_name(\"tap_mirror\"),"},{"line_number":126,"context_line":"            port_id\u003dvm1_port[\u0027id\u0027],"},{"line_number":127,"context_line":"            directions\u003ddirections,"},{"line_number":128,"context_line":"            remote_ip\u003dr_ip,"},{"line_number":129,"context_line":"            mirror_type\u003d\u0027gre\u0027,"},{"line_number":130,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f841792_a9855d13","line":127,"in_reply_to":"26c04938_69251917","updated":"2026-01-22 20:51:14.000000000","message":"Actually I just discovered that you can set multiple directions with OSC CLI by just specifying `--directions` multiple times. e.g. `openstack tap mirror create --direction IN:101 --directions OUT:102\" ...`","commit_id":"e11c3946ba7cc05fd9faf56345c6ac9c43f058f3"},{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"2e28a36e0b3b13a2163f9d7620b99f4c917e65e9","unresolved":true,"context_lines":[{"line_number":124,"context_line":"        tap_mirror \u003d self.tap_mirrors_client.create_tap_mirror("},{"line_number":125,"context_line":"            name\u003ddata_utils.rand_name(\"tap_mirror\"),"},{"line_number":126,"context_line":"            port_id\u003dvm1_port[\u0027id\u0027],"},{"line_number":127,"context_line":"            directions\u003ddirections,"},{"line_number":128,"context_line":"            remote_ip\u003dr_ip,"},{"line_number":129,"context_line":"            mirror_type\u003d\u0027gre\u0027,"},{"line_number":130,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":11,"id":"58b7b252_9efba3c5","line":127,"in_reply_to":"5745e069_9f57c9fe","updated":"2026-01-22 14:38:40.000000000","message":"No. It should create 1 mirror with three directions: in, out and both. And each of the directions will be redirected through a different tunnel id (101, 102, 103). Before it would also not create 2 different tap_mirrors but one with both in and out directions sent thought different tunnels.","commit_id":"e11c3946ba7cc05fd9faf56345c6ac9c43f058f3"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"26b5761a1bd1f6fcc0c3366422708f22cabfb7bc","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        tap_mirror \u003d self.tap_mirrors_client.create_tap_mirror("},{"line_number":125,"context_line":"            name\u003ddata_utils.rand_name(\"tap_mirror\"),"},{"line_number":126,"context_line":"            port_id\u003dvm1_port[\u0027id\u0027],"},{"line_number":127,"context_line":"            directions\u003ddirections,"},{"line_number":128,"context_line":"            remote_ip\u003dr_ip,"},{"line_number":129,"context_line":"            mirror_type\u003d\u0027gre\u0027,"},{"line_number":130,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":11,"id":"26c04938_69251917","line":127,"in_reply_to":"58b7b252_9efba3c5","updated":"2026-01-22 20:14:32.000000000","message":"I looked into it and now I understand why this confused me...\nIf you are try to create a mirror using openstack CLI e.g. `openstack tap mirror create --direction \"IN:101,OUT:102\" ...` that will error out as CLI will not parse \"IN:101,OUT:102\" correctly. But I that is purely limitation in OSC cli. (maybe something we can address in the future)\n\nBut here in tempest, the test creates a PUT request which contains `{\"IN\": \"100\", \"OUT\": \"102\", \"BOTH\":\"103\"} in the post data. When that data reaches the server, and the server will create one OVN mirror for each direction. [1]\n\n[1] https://opendev.org/openstack/tap-as-a-service/src/branch/master/neutron_taas/services/taas/service_drivers/ovn/taas_ovn.py#L80-L92\n\nFor example, if I do this on my enviroment\n```$ curl -g -i -X POST https://neutron-public-openstack.apps.ocp.openstack.lab/v2.0/taas/tap_mirrors -H \"Content-Type: application/json\" -H \"User-Agent: openstacksdk/1.0.2 keystoneauth1/5.1.3 python-requests/2.25.1 CPython/3.9.18\" -H \"X-Auth-Token: $TOKEN\" -d \u0027{\"tap_mirror\": {\"name\": \"multi_direction\", \"directions\": {\"IN\": \"200\", \"OUT\": \"201\"}, \"remote_ip\": \"1.2.3.5\", \"port_id\": \"7dace7b5-06ed-45d8-a883-bab75e2cddb8\", \"mirror_type\": \"gre\"}}\u0027```\n\nIt produces, two entries in OVN Mirror table\n```\n$ ovn-nbctl list Mirror\n_uuid               : e3b1c429-1026-4c5d-a081-9d952d9a43d4\nexternal_ids        : {}\nfilter              : from-lport\nindex               : 201\nname                : tm_out_1c4522\nsink                : \"1.2.3.5\"\ntype                : gre\n\n_uuid               : df1cc09e-c252-41a6-b5ac-a6143166473b\nexternal_ids        : {}\nfilter              : to-lport\nindex               : 200\nname                : tm_in_1c4522\nsink                : \"1.2.3.5\"\ntype                : gre\n```\nI wonder if that is good behavior by tap-as-a-service plugin, since OVN calls out that `name` \"must be unique within the table\" [2]\n[2] https://man7.org/linux/man-pages/man5/ovn-nb.5.html#Mirror_TABLE\n\nBut this is outside of the scope for this patch and not an issue. It just this line of code made me think if creating mirrors this way is OK.","commit_id":"e11c3946ba7cc05fd9faf56345c6ac9c43f058f3"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"d85d666b4a1e9dabc82959dafc9ed8ff6a9e3947","unresolved":true,"context_lines":[{"line_number":192,"context_line":"            # Make sure we have found at least one coincidence of the target"},{"line_number":193,"context_line":"            # string for this direction."},{"line_number":194,"context_line":"            self.assertTrue(found_log)"},{"line_number":195,"context_line":"            LOG.debug(\"Found correct ICMP log for direction %s and key %s\","},{"line_number":196,"context_line":"                      direction, key)"}],"source_content_type":"text/x-python","patch_set":11,"id":"64396c8e_59ac301f","line":196,"range":{"start_line":195,"start_character":12,"end_line":196,"end_character":37},"updated":"2026-01-21 21:21:57.000000000","message":"What is the purpose of `LOG`. assert methods takes optional `msg` parameter which can be used to add more information.\nAlso, when it comes to testing. A passing test indicates that everything was correct. I think it is better to log a message when thing fails. E.g.\n```\nself.assertTrue(found_log, msg\u003df\"ICMP log not found in {icmp_log} for direction {direction} with {key}\")","commit_id":"e11c3946ba7cc05fd9faf56345c6ac9c43f058f3"},{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"e56cc32466b7810d441730f193d1cb9a0e23e588","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            # Make sure we have found at least one coincidence of the target"},{"line_number":193,"context_line":"            # string for this direction."},{"line_number":194,"context_line":"            self.assertTrue(found_log)"},{"line_number":195,"context_line":"            LOG.debug(\"Found correct ICMP log for direction %s and key %s\","},{"line_number":196,"context_line":"                      direction, key)"}],"source_content_type":"text/x-python","patch_set":11,"id":"fd163605_b5d026e4","line":196,"range":{"start_line":195,"start_character":12,"end_line":196,"end_character":37},"in_reply_to":"5e0ae2cd_ce9efeb2","updated":"2026-01-23 17:15:20.000000000","message":".","commit_id":"e11c3946ba7cc05fd9faf56345c6ac9c43f058f3"},{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"2e28a36e0b3b13a2163f9d7620b99f4c917e65e9","unresolved":true,"context_lines":[{"line_number":192,"context_line":"            # Make sure we have found at least one coincidence of the target"},{"line_number":193,"context_line":"            # string for this direction."},{"line_number":194,"context_line":"            self.assertTrue(found_log)"},{"line_number":195,"context_line":"            LOG.debug(\"Found correct ICMP log for direction %s and key %s\","},{"line_number":196,"context_line":"                      direction, key)"}],"source_content_type":"text/x-python","patch_set":11,"id":"cb44abfc_be2a2143","line":196,"range":{"start_line":195,"start_character":12,"end_line":196,"end_character":37},"in_reply_to":"64396c8e_59ac301f","updated":"2026-01-22 14:38:40.000000000","message":"I mostly thought this would be useful to keep since I used it while debugging. When the test fails assertion, it stops the execution immediately therefore it was useful to me to understand which combinations were successful and to make sure I was testing every combination. I can for sure change it to a log-if-fails logic now :)","commit_id":"e11c3946ba7cc05fd9faf56345c6ac9c43f058f3"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"26b5761a1bd1f6fcc0c3366422708f22cabfb7bc","unresolved":true,"context_lines":[{"line_number":192,"context_line":"            # Make sure we have found at least one coincidence of the target"},{"line_number":193,"context_line":"            # string for this direction."},{"line_number":194,"context_line":"            self.assertTrue(found_log)"},{"line_number":195,"context_line":"            LOG.debug(\"Found correct ICMP log for direction %s and key %s\","},{"line_number":196,"context_line":"                      direction, key)"}],"source_content_type":"text/x-python","patch_set":11,"id":"e3ce7abb_aa4dc746","line":196,"range":{"start_line":195,"start_character":12,"end_line":196,"end_character":37},"in_reply_to":"cb44abfc_be2a2143","updated":"2026-01-22 20:14:32.000000000","message":"I think that `LOG` is reduntant since the `icmp_log` will contain the whole output and you can check all directions there. But feel free to keep it.\n\nBut I think that adding `msg` into the assert statement like I showed in my first comment would be useful for debugging a failed test.","commit_id":"e11c3946ba7cc05fd9faf56345c6ac9c43f058f3"},{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"6142d8df5e73985e0fb44da53389b4764d61258d","unresolved":true,"context_lines":[{"line_number":192,"context_line":"            # Make sure we have found at least one coincidence of the target"},{"line_number":193,"context_line":"            # string for this direction."},{"line_number":194,"context_line":"            self.assertTrue(found_log)"},{"line_number":195,"context_line":"            LOG.debug(\"Found correct ICMP log for direction %s and key %s\","},{"line_number":196,"context_line":"                      direction, key)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5e0ae2cd_ce9efeb2","line":196,"range":{"start_line":195,"start_character":12,"end_line":196,"end_character":37},"in_reply_to":"e3ce7abb_aa4dc746","updated":"2026-01-23 10:49:13.000000000","message":"Done!","commit_id":"e11c3946ba7cc05fd9faf56345c6ac9c43f058f3"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"38d2d0f42db811ef98b0e48291e70c704e288736","unresolved":true,"context_lines":[{"line_number":192,"context_line":"            # Make sure we have found at least one coincidence of the target"},{"line_number":193,"context_line":"            # string for this direction."},{"line_number":194,"context_line":"            self.assertTrue(found_log, msg\u003df\"Did not find direction \""},{"line_number":195,"context_line":"                f\"{direction} and key {key} in the tcpdump log\")"}],"source_content_type":"text/x-python","patch_set":12,"id":"a2216741_88d2879a","line":195,"updated":"2026-01-23 14:04:21.000000000","message":"Can you add the `icmp_log` into this message. I feel like this is the most important part if I were to debug this test in the future.","commit_id":"57561d2ea40f84e0d0c7fab1a653b951605674de"},{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"e56cc32466b7810d441730f193d1cb9a0e23e588","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            # Make sure we have found at least one coincidence of the target"},{"line_number":193,"context_line":"            # string for this direction."},{"line_number":194,"context_line":"            self.assertTrue(found_log, msg\u003df\"Did not find direction \""},{"line_number":195,"context_line":"                f\"{direction} and key {key} in the tcpdump log\")"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ebcf70a_098dfdb4","line":195,"in_reply_to":"a2216741_88d2879a","updated":"2026-01-23 17:15:20.000000000","message":"Done","commit_id":"57561d2ea40f84e0d0c7fab1a653b951605674de"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"01f96115670cb1875978bc0186d9b18c96e9404b","unresolved":true,"context_lines":[{"line_number":18,"context_line":"from tempest.lib import decorators"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from neutron_tempest_plugin.tap_as_a_service.scenario import manager"},{"line_number":21,"context_line":"from oslo_log import log as logging"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"CONF \u003d config.CONF"},{"line_number":24,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":15,"id":"bc167b59_663b4a59","line":21,"updated":"2026-01-26 09:26:59.000000000","message":"nit: please move this import to the section above","commit_id":"79819c77bf47829af06e47738a340e95f4763bc8"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"85918ac820976eeac7ebcd271a4b52f45e633567","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from tempest.lib import decorators"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from neutron_tempest_plugin.tap_as_a_service.scenario import manager"},{"line_number":21,"context_line":"from oslo_log import log as logging"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"CONF \u003d config.CONF"},{"line_number":24,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":15,"id":"14586f75_ae06f259","line":21,"in_reply_to":"35a2d7e3_8af4b20e","updated":"2026-01-26 09:34:22.000000000","message":"Thx","commit_id":"79819c77bf47829af06e47738a340e95f4763bc8"},{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"05cbe9be6fda7822899df645444fd6028c9c6c52","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from tempest.lib import decorators"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from neutron_tempest_plugin.tap_as_a_service.scenario import manager"},{"line_number":21,"context_line":"from oslo_log import log as logging"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"CONF \u003d config.CONF"},{"line_number":24,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":15,"id":"35a2d7e3_8af4b20e","line":21,"in_reply_to":"bc167b59_663b4a59","updated":"2026-01-26 09:32:20.000000000","message":"Done","commit_id":"79819c77bf47829af06e47738a340e95f4763bc8"}],"zuul.d/master_jobs.yaml":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"63866bc8710689012b488e8f4976775e8a43ce81","unresolved":true,"context_lines":[{"line_number":1651,"context_line":"      tempest_test_regex: ^neutron_tempest_plugin\\.tap_as_a_service"},{"line_number":1652,"context_line":"      tox_envlist: all"},{"line_number":1653,"context_line":"      network_api_extensions_tempest:"},{"line_number":1654,"context_line":"        - taas"},{"line_number":1655,"context_line":"        - tap-mirror"},{"line_number":1656,"context_line":"      devstack_localrc:"},{"line_number":1657,"context_line":"        Q_AGENT: ovn"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"f8a25e7e_72704085","side":"PARENT","line":1654,"range":{"start_line":1654,"start_character":10,"end_line":1654,"end_character":14},"updated":"2026-01-20 16:05:06.000000000","message":"Why this? We are removing `TestTaaSTrafficScenarios` tests.","commit_id":"a664f75019c5ab751fde36fe30ca2a9856400f86"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0f0ab6cde9c7a19f1d8464cb0297e6fe34a7e0f4","unresolved":false,"context_lines":[{"line_number":1651,"context_line":"      tempest_test_regex: ^neutron_tempest_plugin\\.tap_as_a_service"},{"line_number":1652,"context_line":"      tox_envlist: all"},{"line_number":1653,"context_line":"      network_api_extensions_tempest:"},{"line_number":1654,"context_line":"        - taas"},{"line_number":1655,"context_line":"        - tap-mirror"},{"line_number":1656,"context_line":"      devstack_localrc:"},{"line_number":1657,"context_line":"        Q_AGENT: ovn"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"e185314b_af994da5","side":"PARENT","line":1654,"range":{"start_line":1654,"start_character":10,"end_line":1654,"end_character":14},"in_reply_to":"4d50a972_6397af7a","updated":"2026-01-21 10:18:50.000000000","message":"Ok,that needs to have at least a note here, to be aware next time","commit_id":"a664f75019c5ab751fde36fe30ca2a9856400f86"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"0fcf281149e87e845d022294de19b9de0b486c22","unresolved":true,"context_lines":[{"line_number":1651,"context_line":"      tempest_test_regex: ^neutron_tempest_plugin\\.tap_as_a_service"},{"line_number":1652,"context_line":"      tox_envlist: all"},{"line_number":1653,"context_line":"      network_api_extensions_tempest:"},{"line_number":1654,"context_line":"        - taas"},{"line_number":1655,"context_line":"        - tap-mirror"},{"line_number":1656,"context_line":"      devstack_localrc:"},{"line_number":1657,"context_line":"        Q_AGENT: ovn"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"4d50a972_6397af7a","side":"PARENT","line":1654,"range":{"start_line":1654,"start_character":10,"end_line":1654,"end_character":14},"in_reply_to":"f8a25e7e_72704085","updated":"2026-01-21 08:26:08.000000000","message":"for OVN that should not run only for OVS","commit_id":"a664f75019c5ab751fde36fe30ca2a9856400f86"}]}
