)]}'
{".zuul.yaml":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8021f1a168f39a361cb12ba87315108ed3eac7ad","unresolved":true,"context_lines":[{"line_number":165,"context_line":"        cyborg-api: true"},{"line_number":166,"context_line":"        cyborg-cond: true"},{"line_number":167,"context_line":"        cyborg-agent: true"},{"line_number":168,"context_line":"      tox_extra_args: \"-- accelerator\""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"- job:"},{"line_number":171,"context_line":"    name: osc-build-image"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"b4c72eec_278d2020","line":168,"updated":"2026-09-11 12:13:36.000000000","message":"I think this will result in us running:\n\n```\ntox -e functional -- accelerator\n```\n\nwhich will translate to \n\n```\nstestr run accelerator\n```\n\nBecause we set `OS_TEST_PATH\u003d./openstackclient/tests/functional` in `tox.ini`, this will only run tests in that path. However, it\u0027ll run *any* test with accelerator in the name. In addition, by setting this we lose the default opts set in `zuul-jobs`. I suspect you want:\n\n```suggestion\n      tox_extra_args: \"-vv --skip-missing-interpreters\u003dfalse -- openstackclient.tests.functional.accelerator\"\n```\n\nAlternatively, we could just merge this configuration into `osc-functional-devstack` and have one uber job? Maybe we could get a follow-up to see what the additional runtime cost is. If it\u0027s minimal, I\u0027d be in favour of keeping everything in one test for now.","commit_id":"fb86b6f3892ce1d530062f7f76409c83cf47928c"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"0466ac26dfc90ebb9467889c1cf09565c435c445","unresolved":true,"context_lines":[{"line_number":165,"context_line":"        cyborg-api: true"},{"line_number":166,"context_line":"        cyborg-cond: true"},{"line_number":167,"context_line":"        cyborg-agent: true"},{"line_number":168,"context_line":"      tox_extra_args: \"-- accelerator\""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"- job:"},{"line_number":171,"context_line":"    name: osc-build-image"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"7888b812_bfbc2ffc","line":168,"in_reply_to":"7fc0b00e_564ed13e","updated":"2026-09-22 02:54:32.000000000","message":"OK so now I\u0027m not as sure about this given Cyborg\u0027s requirement of a whole other nodeset (Debian Trixie). Are we OK with requiring that more niche nodeset for the general `osc-functional-devstack` job? Job currently takes around 1 hr 15 min whereas the Cyborg job takes 20 min. Niche nodeset held for a longer amount of time vs shorter amount of time ... although admittedly I don\u0027t know how \"rare\" the nodeset actually is.\n\nI thought about using `irrelevant-files` to make the Cyborg job run only on accelerator/ changes but then we lose continuous coverage of OSC common code changes or SDK changes that could affect Cyborg commands.\n\nOn the other hand, it\u0027s true the Cyborg job is only running 4 tests in its own standalone job so ... yeah I\u0027m not sure what\u0027s the best answer.","commit_id":"fb86b6f3892ce1d530062f7f76409c83cf47928c"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3493fd12ef1c9b75964be0b6c3b96d8544eb1350","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        cyborg-api: true"},{"line_number":166,"context_line":"        cyborg-cond: true"},{"line_number":167,"context_line":"        cyborg-agent: true"},{"line_number":168,"context_line":"      tox_extra_args: \"-- accelerator\""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"- job:"},{"line_number":171,"context_line":"    name: osc-build-image"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"7fc0b00e_564ed13e","line":168,"in_reply_to":"b4c72eec_278d2020","updated":"2026-09-19 00:33:18.000000000","message":"Done. Will try consolidating into one job in the follow up.","commit_id":"fb86b6f3892ce1d530062f7f76409c83cf47928c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8021f1a168f39a361cb12ba87315108ed3eac7ad","unresolved":true,"context_lines":[{"line_number":213,"context_line":"            # The functional-tips job only tests the latest and shouldn\u0027t be run"},{"line_number":214,"context_line":"            # on the stable branches"},{"line_number":215,"context_line":"            branches: ^master$"},{"line_number":216,"context_line":"        - osc-functional-devstack-cyborg:"},{"line_number":217,"context_line":"            voting: false"},{"line_number":218,"context_line":"    gate:"},{"line_number":219,"context_line":"      jobs:"},{"line_number":220,"context_line":"        - osc-functional-devstack"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"05593443_afbe3c0d","line":217,"range":{"start_line":216,"start_character":2,"end_line":217,"end_character":25},"updated":"2026-09-11 12:13:36.000000000","message":"Let\u0027s not add non-voting jobs at the outset. If it\u0027s not passing then we shouldn\u0027t be merging this.\n\n\n\n```suggestion\n        - osc-functional-devstack-cyborg\n```","commit_id":"fb86b6f3892ce1d530062f7f76409c83cf47928c"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3493fd12ef1c9b75964be0b6c3b96d8544eb1350","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            # The functional-tips job only tests the latest and shouldn\u0027t be run"},{"line_number":214,"context_line":"            # on the stable branches"},{"line_number":215,"context_line":"            branches: ^master$"},{"line_number":216,"context_line":"        - osc-functional-devstack-cyborg:"},{"line_number":217,"context_line":"            voting: false"},{"line_number":218,"context_line":"    gate:"},{"line_number":219,"context_line":"      jobs:"},{"line_number":220,"context_line":"        - osc-functional-devstack"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"0841c2a5_f81116ca","line":217,"range":{"start_line":216,"start_character":2,"end_line":217,"end_character":25},"in_reply_to":"05593443_afbe3c0d","updated":"2026-09-19 00:33:18.000000000","message":"Done","commit_id":"fb86b6f3892ce1d530062f7f76409c83cf47928c"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f17e9369d7d49a8d4f5c4a94abea223d5dae2bc9","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"89018102_519e86b8","updated":"2026-07-10 17:55:58.000000000","message":"Note to reviewers: there are a few options here ... this is a minimal step to add test coverage for Cyborg commands while they remain in the plugin, with the longterm goal of moving the commands into OSC proper and deprecating the plugin.\n\nAlternatively, we could move/convert the commands _now_ and deprecate the plugin right away, instead of doing this.\n\nPlease share your thoughts if you prefer a different approach.","commit_id":"68b92046a80422c90e2da61b0e19b9501c43bd11"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a2233d766333a44b3e2411010fd31ca6d5883232","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"9ff80989_4c96c293","in_reply_to":"89018102_519e86b8","updated":"2026-08-24 21:55:05.000000000","message":"I\u0027m sorry I missed this before now. Personally, I would rather move the commands now and deprecate the plugin. We have the machinery in-tree to ignore select plugins once migration in-tree has happened (search for neutronclient). Aside from reformatting and minimal type hints (which we can temporary ignore if they prove too onerous), it should be a pretty easy migration. This patch could then be rebased on top of that one, I would assume?","commit_id":"68b92046a80422c90e2da61b0e19b9501c43bd11"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8021f1a168f39a361cb12ba87315108ed3eac7ad","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"f52b134d_f4fef0cb","in_reply_to":"9ff80989_4c96c293","updated":"2026-09-11 12:13:36.000000000","message":"Done","commit_id":"68b92046a80422c90e2da61b0e19b9501c43bd11"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4ed6c9b5c34dbf9602c8d218d05956bfd11a55f2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"ee5a82c1_e6f6b2e7","updated":"2026-09-21 14:59:50.000000000","message":"recheck https://meetings.opendev.org/irclogs/%23openstack-infra/%23openstack-infra.2026-09-19.log.html#openstack-infra.2026-09-19.log.html#t2026-09-19T17:05:59","commit_id":"29f1b9b5e0ba3063f126b58981d5bb7c24862ef0"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"a6eab1e09fcf1b5236777e288b54943a8caa7ab0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"585ec4c9_bcc706d7","updated":"2026-09-23 15:27:05.000000000","message":"recheck dep unrelated failure","commit_id":"1bf206908ef97938035057abaf7920e74e81cdf0"}],"openstackclient/tests/functional/accelerator/v2/test_accelerator_request.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8021f1a168f39a361cb12ba87315108ed3eac7ad","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self.addCleanup("},{"line_number":60,"context_line":"            self.openstack,"},{"line_number":61,"context_line":"            \u0027accelerator arq delete \u0027 + arq_uuid,"},{"line_number":62,"context_line":"            fail_ok\u003dTrue,"},{"line_number":63,"context_line":"        )"},{"line_number":64,"context_line":"        self.assertEqual(self.DP_NAME, cmd_output[\u0027device_profile_name\u0027])"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"20aae6bc_2bbc3068","line":62,"updated":"2026-09-11 12:13:36.000000000","message":"In SDK we opt for `_delete_*` helpers that will do the deletion and any assetions we need, but that\u0027s not the pattern here yet and I actually like this idea","commit_id":"fb86b6f3892ce1d530062f7f76409c83cf47928c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8021f1a168f39a361cb12ba87315108ed3eac7ad","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":9,"id":"50e0d6cc_bf518bf4","line":101,"range":{"start_line":54,"start_character":0,"end_line":101,"end_character":1},"updated":"2026-09-11 12:13:36.000000000","message":"Can we combine these two tests?\n\n\n\n```suggestion\n    def test_arq(self):\n        # create\n        cmd_output \u003d self.openstack(\n            \u0027accelerator arq create \u0027 + self.DP_NAME, parse_output\u003dTrue\n        )\n        arq_uuid \u003d cmd_output[\u0027uuid\u0027]\n        self.addCleanup(\n            self.openstack,\n            \u0027accelerator arq delete \u0027 + arq_uuid,\n            fail_ok\u003dTrue,\n        )\n        self.assertEqual(self.DP_NAME, cmd_output[\u0027device_profile_name\u0027])\n\n        # show\n        cmd_output \u003d self.openstack(\n            \u0027accelerator arq show \u0027 + arq_uuid, parse_output\u003dTrue\n        )\n        self.assertEqual(arq_uuid, cmd_output[\u0027uuid\u0027])\n        self.assertEqual(self.DP_NAME, cmd_output[\u0027device_profile_name\u0027])\n\n        # list\n        cmd_output \u003d self.openstack(\u0027accelerator arq list\u0027, parse_output\u003dTrue)\n        uuids \u003d [arq[\u0027uuid\u0027] for arq in cmd_output]\n        self.assertIn(arq_uuid, uuids)\n\n        # list (long)\n        cmd_output \u003d self.openstack(\n            \u0027accelerator arq list --long\u0027, parse_output\u003dTrue\n        )\n        uuids \u003d [arq[\u0027uuid\u0027] for arq in cmd_output]\n        self.assertIn(arq_uuid, uuids)\n        arq \u003d next(a for a in cmd_output if a[\u0027uuid\u0027] \u003d\u003d arq_uuid)\n        self.assertIn(\u0027device_rp_uuid\u0027, arq)\n        self.assertIn(\u0027hostname\u0027, arq)\n\n        self.openstack(\u0027accelerator arq delete \u0027 + arq_uuid)\n\n        cmd_output \u003d self.openstack(\u0027accelerator arq list\u0027, parse_output\u003dTrue)\n        uuids \u003d [arq[\u0027uuid\u0027] for arq in cmd_output]\n        self.assertNotIn(arq_uuid, uuids)\n\n```\n\nIt avoids the redundant create-delete operations, which are slow. It also allows you to move the device profile creation/deletion into `setUp` and `tearDown` instead (we actually ban `setUpClass`/`tearDownClass` in SDK because it behaves confusingly when using a multi-process runner like stestr)","commit_id":"fb86b6f3892ce1d530062f7f76409c83cf47928c"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3493fd12ef1c9b75964be0b6c3b96d8544eb1350","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"d6790042_b10cf095","line":101,"range":{"start_line":54,"start_character":0,"end_line":101,"end_character":1},"in_reply_to":"50e0d6cc_bf518bf4","updated":"2026-09-19 00:33:18.000000000","message":"Done","commit_id":"fb86b6f3892ce1d530062f7f76409c83cf47928c"}],"openstackclient/tests/functional/accelerator/v2/test_device.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8021f1a168f39a361cb12ba87315108ed3eac7ad","unresolved":true,"context_lines":[{"line_number":16,"context_line":"class TestDevice(common.AcceleratorTests):"},{"line_number":17,"context_line":"    \"\"\"Functional tests for accelerator device commands.\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    def test_device_list(self):"},{"line_number":20,"context_line":"        cmd_output \u003d self.openstack("},{"line_number":21,"context_line":"            \u0027accelerator device list\u0027, parse_output\u003dTrue"},{"line_number":22,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":9,"id":"7384efde_475bbd21","line":19,"updated":"2026-09-11 12:13:36.000000000","message":"Can we combine these also and call this `test_device`?","commit_id":"fb86b6f3892ce1d530062f7f76409c83cf47928c"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3493fd12ef1c9b75964be0b6c3b96d8544eb1350","unresolved":false,"context_lines":[{"line_number":16,"context_line":"class TestDevice(common.AcceleratorTests):"},{"line_number":17,"context_line":"    \"\"\"Functional tests for accelerator device commands.\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    def test_device_list(self):"},{"line_number":20,"context_line":"        cmd_output \u003d self.openstack("},{"line_number":21,"context_line":"            \u0027accelerator device list\u0027, parse_output\u003dTrue"},{"line_number":22,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":9,"id":"38f44384_2bcae064","line":19,"in_reply_to":"7384efde_475bbd21","updated":"2026-09-19 00:33:18.000000000","message":"Done","commit_id":"fb86b6f3892ce1d530062f7f76409c83cf47928c"}],"openstackclient/tests/functional/accelerator/v2/test_device_profile.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8021f1a168f39a361cb12ba87315108ed3eac7ad","unresolved":true,"context_lines":[{"line_number":19,"context_line":"class TestDeviceProfile(common.AcceleratorTests):"},{"line_number":20,"context_line":"    \"\"\"Functional tests for accelerator device profile commands.\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def test_device_profile_create_show_list_delete(self):"},{"line_number":23,"context_line":"        name \u003d uuid.uuid4().hex"},{"line_number":24,"context_line":"        groups \u003d ["},{"line_number":25,"context_line":"            {"}],"source_content_type":"text/x-python","patch_set":9,"id":"61792985_d1969413","line":22,"updated":"2026-09-11 12:13:36.000000000","message":"Same comment around renaming this","commit_id":"fb86b6f3892ce1d530062f7f76409c83cf47928c"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3493fd12ef1c9b75964be0b6c3b96d8544eb1350","unresolved":false,"context_lines":[{"line_number":19,"context_line":"class TestDeviceProfile(common.AcceleratorTests):"},{"line_number":20,"context_line":"    \"\"\"Functional tests for accelerator device profile commands.\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def test_device_profile_create_show_list_delete(self):"},{"line_number":23,"context_line":"        name \u003d uuid.uuid4().hex"},{"line_number":24,"context_line":"        groups \u003d ["},{"line_number":25,"context_line":"            {"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf6892f3_a6e385f7","line":22,"in_reply_to":"61792985_d1969413","updated":"2026-09-19 00:33:18.000000000","message":"Done","commit_id":"fb86b6f3892ce1d530062f7f76409c83cf47928c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8021f1a168f39a361cb12ba87315108ed3eac7ad","unresolved":true,"context_lines":[{"line_number":39,"context_line":"        )"},{"line_number":40,"context_line":"        self.addCleanup("},{"line_number":41,"context_line":"            self.openstack,"},{"line_number":42,"context_line":"            \u0027accelerator device profile delete \u0027 + cmd_output[\u0027uuid\u0027],"},{"line_number":43,"context_line":"        )"},{"line_number":44,"context_line":"        self.assertEqual(name, cmd_output[\u0027name\u0027])"},{"line_number":45,"context_line":"        self.assertEqual(groups, cmd_output[\u0027groups\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"e9627083_cc4e43d9","line":42,"updated":"2026-09-11 12:13:36.000000000","message":"You\u0027ll want to add `fail_ok` here (like the previous files) when combining these","commit_id":"fb86b6f3892ce1d530062f7f76409c83cf47928c"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3493fd12ef1c9b75964be0b6c3b96d8544eb1350","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        )"},{"line_number":40,"context_line":"        self.addCleanup("},{"line_number":41,"context_line":"            self.openstack,"},{"line_number":42,"context_line":"            \u0027accelerator device profile delete \u0027 + cmd_output[\u0027uuid\u0027],"},{"line_number":43,"context_line":"        )"},{"line_number":44,"context_line":"        self.assertEqual(name, cmd_output[\u0027name\u0027])"},{"line_number":45,"context_line":"        self.assertEqual(groups, cmd_output[\u0027groups\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"5aba1146_a61507e6","line":42,"in_reply_to":"e9627083_cc4e43d9","updated":"2026-09-19 00:33:18.000000000","message":"Done","commit_id":"fb86b6f3892ce1d530062f7f76409c83cf47928c"}],"openstackclient/tests/functional/accelerator/v2/test_help.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8021f1a168f39a361cb12ba87315108ed3eac7ad","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":9,"id":"0b398177_8bdba466","line":1,"updated":"2026-09-11 12:13:36.000000000","message":"Can we drop this? This is testing functionality of cliff (and argparse under that) that we should be able to rely on. Additionally, as it\u0027s written, it\u0027s pretty much a [Change-Detector test](https://testing.googleblog.com/2015/01/testing-on-toilet-change-detector-tests.html) (which nova is unfortunately full of 😅)","commit_id":"fb86b6f3892ce1d530062f7f76409c83cf47928c"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3493fd12ef1c9b75964be0b6c3b96d8544eb1350","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":9,"id":"dc856d0c_1db957bd","line":1,"in_reply_to":"0b398177_8bdba466","updated":"2026-09-19 00:33:18.000000000","message":"Done","commit_id":"fb86b6f3892ce1d530062f7f76409c83cf47928c"}]}
