)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a4f57ca82517a3ede5532a7ffe6d52c12259cdc1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"7d196c7c_a08a6fe5","updated":"2023-12-19 15:14:38.000000000","message":"seems to be doing what we want:\n```\n2023-12-19 14:26:10.745 100911 DEBUG whitebox_tempest_plugin.services.clients [-] command\u003dcat /opt/stack/data/nova/compute_id execute /opt/stack/tempest/.tox/tempest/lib/python3.10/site-packages/whitebox_tempest_plugin/services/clients.py:54\n```","commit_id":"284828d5e1145712fcf4dcdfa7e66f3bbc1d0f6b"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0ddfbce8f7d4c6e96fbc160fb332ac906d98ea9b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"fdb3f92e_b1a975e0","updated":"2023-12-19 17:14:39.000000000","message":"There\u0027s a bit of a problem with setting a default state_path 😞 See inline","commit_id":"576bc8a12602455bc3e062ece7215bb7d63eff30"}],"whitebox_tempest_plugin/api/compute/test_compute_id.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0ddfbce8f7d4c6e96fbc160fb332ac906d98ea9b","unresolved":true,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @classmethod"},{"line_number":30,"context_line":"    def skip_checks(cls):"},{"line_number":31,"context_line":"        super(TestStableCpuId, cls).skip_checks()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def test_compute_id_file_match_db_state(self):"},{"line_number":34,"context_line":"        compute_id_path \u003d os.path.join("}],"source_content_type":"text/x-python","patch_set":5,"id":"2dff45b7_f18f3f79","line":31,"updated":"2023-12-19 17:14:39.000000000","message":"We need this to skip intelligently even in deployments that don\u0027t have the stable node UUID feature, so this should skip if state_path is not set.","commit_id":"576bc8a12602455bc3e062ece7215bb7d63eff30"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b7670c1f4103d8cbb2d3d961a6c2547d11aab4d6","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @classmethod"},{"line_number":30,"context_line":"    def skip_checks(cls):"},{"line_number":31,"context_line":"        super(TestStableCpuId, cls).skip_checks()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def test_compute_id_file_match_db_state(self):"},{"line_number":34,"context_line":"        compute_id_path \u003d os.path.join("}],"source_content_type":"text/x-python","patch_set":5,"id":"0eba3a00_7aaa4e1d","line":31,"in_reply_to":"2dff45b7_f18f3f79","updated":"2023-12-20 10:49:35.000000000","message":"Done. But added a separate feature flag instead and kept the state_path defaulted to nova\u0027s default.","commit_id":"576bc8a12602455bc3e062ece7215bb7d63eff30"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0ddfbce8f7d4c6e96fbc160fb332ac906d98ea9b","unresolved":true,"context_lines":[{"line_number":35,"context_line":"            CONF.whitebox_nova_compute.state_path, \"compute_id\")"},{"line_number":36,"context_line":"        hypervisors \u003d self.os_admin.hypervisor_client.list_hypervisors("},{"line_number":37,"context_line":"        )[\"hypervisors\"]"},{"line_number":38,"context_line":"        for hypervisor in hypervisors:"},{"line_number":39,"context_line":"            name \u003d hypervisor[\u0027hypervisor_hostname\u0027]"},{"line_number":40,"context_line":"            ssh_client \u003d clients.SSHClient(name)"},{"line_number":41,"context_line":"            uuid_on_disk \u003d ssh_client.execute(f\u0027cat {compute_id_path}\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"56def66b_6a1d3fd6","line":38,"updated":"2023-12-19 17:14:39.000000000","message":"nit: you can replace this with our list_compute_hosts() helper, so it would look like:\n\n    for compute in self.list_all_computes():\n      ssh_client \u003d clients.SSHClient(compute)\n      etc...\n      \nYou\u0027d be getting hosts instead of hypervisors/nodes, but for libvirt they\u0027re 1:1","commit_id":"576bc8a12602455bc3e062ece7215bb7d63eff30"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b7670c1f4103d8cbb2d3d961a6c2547d11aab4d6","unresolved":true,"context_lines":[{"line_number":35,"context_line":"            CONF.whitebox_nova_compute.state_path, \"compute_id\")"},{"line_number":36,"context_line":"        hypervisors \u003d self.os_admin.hypervisor_client.list_hypervisors("},{"line_number":37,"context_line":"        )[\"hypervisors\"]"},{"line_number":38,"context_line":"        for hypervisor in hypervisors:"},{"line_number":39,"context_line":"            name \u003d hypervisor[\u0027hypervisor_hostname\u0027]"},{"line_number":40,"context_line":"            ssh_client \u003d clients.SSHClient(name)"},{"line_number":41,"context_line":"            uuid_on_disk \u003d ssh_client.execute(f\u0027cat {compute_id_path}\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"a803cb1c_e5afbecf","line":38,"in_reply_to":"56def66b_6a1d3fd6","updated":"2023-12-20 10:49:35.000000000","message":"list_compute_hosts uses the list_services API which returns compute service UUID not compute node UUID. So I anyhow need to use the hypervisor API to get the node UUID to match","commit_id":"576bc8a12602455bc3e062ece7215bb7d63eff30"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"fc7251d877f0c6adf8d1f79a66d9cbc79b7c3f55","unresolved":true,"context_lines":[{"line_number":35,"context_line":"            CONF.whitebox_nova_compute.state_path, \"compute_id\")"},{"line_number":36,"context_line":"        hypervisors \u003d self.os_admin.hypervisor_client.list_hypervisors("},{"line_number":37,"context_line":"        )[\"hypervisors\"]"},{"line_number":38,"context_line":"        for hypervisor in hypervisors:"},{"line_number":39,"context_line":"            name \u003d hypervisor[\u0027hypervisor_hostname\u0027]"},{"line_number":40,"context_line":"            ssh_client \u003d clients.SSHClient(name)"},{"line_number":41,"context_line":"            uuid_on_disk \u003d ssh_client.execute(f\u0027cat {compute_id_path}\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"30594dbe_c1d7953f","line":38,"in_reply_to":"a803cb1c_e5afbecf","updated":"2023-12-22 01:21:47.000000000","message":"Doh, of course.","commit_id":"576bc8a12602455bc3e062ece7215bb7d63eff30"}],"whitebox_tempest_plugin/config.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0ddfbce8f7d4c6e96fbc160fb332ac906d98ea9b","unresolved":true,"context_lines":[{"line_number":145,"context_line":"             \"for devstack and \u0027zgrep\u0027 for TripleO\"),"},{"line_number":146,"context_line":"    cfg.StrOpt("},{"line_number":147,"context_line":"        \u0027state_path\u0027,"},{"line_number":148,"context_line":"        default\u003d\"/var/lib/nova\","},{"line_number":149,"context_line":"        help\u003d\u0027The [DEFAULT]state_path passed to nova-compute. Default to the \u0027"},{"line_number":150,"context_line":"             \u0027same value as in the nova.conf.\u0027),"},{"line_number":151,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":5,"id":"417f0d32_b8b70aca","line":148,"updated":"2023-12-19 17:14:39.000000000","message":"Ah, you\u0027re setting the default here for non-devstack envs to avoid having to configure this in the jobs themselves...\n\nIt\u0027s great for simplicity, but it does mean that having this default will cause the test to run and fail in, for example, our downstream 17.1 CI.","commit_id":"576bc8a12602455bc3e062ece7215bb7d63eff30"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b7670c1f4103d8cbb2d3d961a6c2547d11aab4d6","unresolved":false,"context_lines":[{"line_number":145,"context_line":"             \"for devstack and \u0027zgrep\u0027 for TripleO\"),"},{"line_number":146,"context_line":"    cfg.StrOpt("},{"line_number":147,"context_line":"        \u0027state_path\u0027,"},{"line_number":148,"context_line":"        default\u003d\"/var/lib/nova\","},{"line_number":149,"context_line":"        help\u003d\u0027The [DEFAULT]state_path passed to nova-compute. Default to the \u0027"},{"line_number":150,"context_line":"             \u0027same value as in the nova.conf.\u0027),"},{"line_number":151,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a5daa7c_a6366386","line":148,"in_reply_to":"417f0d32_b8b70aca","updated":"2023-12-20 10:49:35.000000000","message":"added a feature flag.","commit_id":"576bc8a12602455bc3e062ece7215bb7d63eff30"}]}
