)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"53651a4d376d60667c1d2b6133fffa489a79c389","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1a5247d5_c5420d83","updated":"2026-06-24 16:01:18.000000000","message":"OK this looks sane to me. I only have question inline to see if I understand it properly.","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5b3295c1113b00faa41f9f2638fa06d600f808ea","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"b88143f8_9cd2d2e4","updated":"2026-06-26 09:12:15.000000000","message":"Looks good","commit_id":"0cc39a2104615175513c1d5e3c62d8ad58b5a802"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"fadc6b0f4279646963e4f42ee3b5c9129cff2e02","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"ecee0f26_704a3d09","updated":"2026-06-26 14:58:10.000000000","message":"I found a few more test cases I should update according to the new RP and included changes for these in this commit.","commit_id":"eb455009ac797bfa36caae4e72ae81c1bceb72a4"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"1e849757b953b04d60e35b7651ebbb7c261799e3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5ac0753f_f0f1abe9","updated":"2026-06-26 17:37:00.000000000","message":"recheck","commit_id":"eb455009ac797bfa36caae4e72ae81c1bceb72a4"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a234b514d3a4fd4cf123b9df95c9fd554e399c92","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"3e42b4e3_e931b95b","updated":"2026-07-05 14:49:28.000000000","message":"recheck \"Service is unavailable at this time.\" is not seen in the chain. Probably a transient problem caused by slow infra ?","commit_id":"7f2cd2d5e802488e28246fba7b396fdff81b55dc"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"5bea36f41881af44538bafffcef3600cf237aa33","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"6ce2b600_cbc35d8e","updated":"2026-07-17 14:10:39.000000000","message":"recheck","commit_id":"79a964c833d9fc7a62383512c2bddca3a553589a"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"d2dd32655d89faf4fea7b3f0adae5c9e11d80f1d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"93231a6e_09333ff7","updated":"2026-07-17 00:34:37.000000000","message":"recheck","commit_id":"79a964c833d9fc7a62383512c2bddca3a553589a"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"8f534073c8137d4b3d5ecf3bfb1311488ecc6735","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"e5bcc3f7_4892a4f3","updated":"2026-07-17 09:27:40.000000000","message":"recheck doc job was fixed.","commit_id":"79a964c833d9fc7a62383512c2bddca3a553589a"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"0166caa899af0e9ea8ab07fe75d5d39ed774661c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"0fc3fe5a_021918e9","updated":"2026-07-16 13:44:30.000000000","message":"recheck ssh authentication failed likely due to slow test env","commit_id":"79a964c833d9fc7a62383512c2bddca3a553589a"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"5ca5fe7cb2f19086370abeeb8744a57718feac00","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"3c722262_5d27f3d6","updated":"2026-07-16 15:35:54.000000000","message":"recheck ssh connection attempt timed out","commit_id":"79a964c833d9fc7a62383512c2bddca3a553589a"}],"nova/objects/fields.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3f9a34a54b0229dad5b107f65df6ee421eb31feb","unresolved":true,"context_lines":[{"line_number":566,"context_line":"    AMD_SEV_ES \u003d \"amd-sev-es\""},{"line_number":567,"context_line":"    AMD_SEV_SNP \u003d \"amd-sev-snp\""},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"    ALL \u003d (AMD_SEV, AMD_SEV_ES, AMD_SEV_SNP)"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"class MaxPhyAddrMode(BaseNovaEnum):"}],"source_content_type":"text/x-python","patch_set":1,"id":"09e6f633_b8c6d157","line":569,"updated":"2026-06-24 16:29:29.000000000","message":"hm, should it trigger an ovo version bump on the image properties? The intel TDX patch changing this does trigger one","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"22e063b71fdd5f71c04d114710e9e4af2915dc61","unresolved":false,"context_lines":[{"line_number":566,"context_line":"    AMD_SEV_ES \u003d \"amd-sev-es\""},{"line_number":567,"context_line":"    AMD_SEV_SNP \u003d \"amd-sev-snp\""},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"    ALL \u003d (AMD_SEV, AMD_SEV_ES, AMD_SEV_SNP)"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"class MaxPhyAddrMode(BaseNovaEnum):"}],"source_content_type":"text/x-python","patch_set":1,"id":"22035086_6214a99a","line":569,"in_reply_to":"09e6f633_b8c6d157","updated":"2026-06-25 14:11:34.000000000","message":"Oh, yes. We need to bump the version.","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"}],"nova/tests/functional/libvirt/test_report_cpu_traits.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"53651a4d376d60667c1d2b6133fffa489a79c389","unresolved":true,"context_lines":[{"line_number":371,"context_line":"        # Now simulate the host gaining SEV-SNP functionality.  Here we"},{"line_number":372,"context_line":"        # simulate a kernel update or reconfiguration which causes the"},{"line_number":373,"context_line":"        # kvm-amd kernel module\u0027s \"sev-es\" parameter to become available"},{"line_number":374,"context_line":"        # and set to 1 . We also similate the sev_snp cpu feature, which"},{"line_number":375,"context_line":"        # is the mark to disable SEV-ES functionality."},{"line_number":376,"context_line":"        sev_features \u003d (fakelibvirt.virConnect."},{"line_number":377,"context_line":"                        _domain_capability_features_with_SEV_max_guests)"}],"source_content_type":"text/x-python","patch_set":1,"id":"af7c5941_ab1a990f","line":374,"range":{"start_line":374,"start_character":33,"end_line":374,"end_character":41},"updated":"2026-06-24 16:01:18.000000000","message":"nit:simulate","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"22e063b71fdd5f71c04d114710e9e4af2915dc61","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        # Now simulate the host gaining SEV-SNP functionality.  Here we"},{"line_number":372,"context_line":"        # simulate a kernel update or reconfiguration which causes the"},{"line_number":373,"context_line":"        # kvm-amd kernel module\u0027s \"sev-es\" parameter to become available"},{"line_number":374,"context_line":"        # and set to 1 . We also similate the sev_snp cpu feature, which"},{"line_number":375,"context_line":"        # is the mark to disable SEV-ES functionality."},{"line_number":376,"context_line":"        sev_features \u003d (fakelibvirt.virConnect."},{"line_number":377,"context_line":"                        _domain_capability_features_with_SEV_max_guests)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff27b128_14ea05bb","line":374,"range":{"start_line":374,"start_character":33,"end_line":374,"end_character":41},"in_reply_to":"af7c5941_ab1a990f","updated":"2026-06-25 14:11:34.000000000","message":"Done","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"53651a4d376d60667c1d2b6133fffa489a79c389","unresolved":true,"context_lines":[{"line_number":420,"context_line":"            ])"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"            # However it won\u0027t disappear in the provider tree and get synced"},{"line_number":423,"context_line":"            # back to placement until we force a reinventory:"},{"line_number":424,"context_line":"            self.compute.manager.reset()"},{"line_number":425,"context_line":"            # reset cached traits so they are recalculated."},{"line_number":426,"context_line":"            self.compute.driver._static_traits \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"0e08388e_019bb2ee","line":423,"range":{"start_line":423,"start_character":49,"end_line":423,"end_character":60},"updated":"2026-06-24 16:01:18.000000000","message":"hm, is it a compute service restart in reality, isn\u0027t it?","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"22e063b71fdd5f71c04d114710e9e4af2915dc61","unresolved":true,"context_lines":[{"line_number":420,"context_line":"            ])"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"            # However it won\u0027t disappear in the provider tree and get synced"},{"line_number":423,"context_line":"            # back to placement until we force a reinventory:"},{"line_number":424,"context_line":"            self.compute.manager.reset()"},{"line_number":425,"context_line":"            # reset cached traits so they are recalculated."},{"line_number":426,"context_line":"            self.compute.driver._static_traits \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"83c9df12_6e2fbbe2","line":423,"range":{"start_line":423,"start_character":49,"end_line":423,"end_character":60},"in_reply_to":"0e08388e_019bb2ee","updated":"2026-06-25 14:11:34.000000000","message":"I think that this is the problem with the old SEV test code and I copied it to multiple places. Let me check if I can replace this by restart.","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"b3af4ee5d17cdae063852eeadb6bbb1775a90d45","unresolved":true,"context_lines":[{"line_number":420,"context_line":"            ])"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"            # However it won\u0027t disappear in the provider tree and get synced"},{"line_number":423,"context_line":"            # back to placement until we force a reinventory:"},{"line_number":424,"context_line":"            self.compute.manager.reset()"},{"line_number":425,"context_line":"            # reset cached traits so they are recalculated."},{"line_number":426,"context_line":"            self.compute.driver._static_traits \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"e25f1a3f_0b08eb63","line":423,"range":{"start_line":423,"start_character":49,"end_line":423,"end_character":60},"in_reply_to":"7dff3161_df75e907","updated":"2026-07-16 19:17:13.000000000","message":"It eventually turned out that we can just use restart (I remember I followed the existing SEV test code when I extended it to cover SEV-SNP but I didn\u0027t fully understand why we needed this hack when SEV support was added).\n\nI\u0027ll address it in https://review.opendev.org/c/openstack/nova/+/997635 .","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"cee5195fd799e786d3d638b697a47d8b2687a428","unresolved":true,"context_lines":[{"line_number":420,"context_line":"            ])"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"            # However it won\u0027t disappear in the provider tree and get synced"},{"line_number":423,"context_line":"            # back to placement until we force a reinventory:"},{"line_number":424,"context_line":"            self.compute.manager.reset()"},{"line_number":425,"context_line":"            # reset cached traits so they are recalculated."},{"line_number":426,"context_line":"            self.compute.driver._static_traits \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"7dff3161_df75e907","line":423,"range":{"start_line":423,"start_character":49,"end_line":423,"end_character":60},"in_reply_to":"83c9df12_6e2fbbe2","updated":"2026-06-26 09:11:47.000000000","message":"I\u0027m fine to keep the hackish way. Just hang up on the odd terminology of \"reinventory\" if in a real deployment it is a compute service restart then I\u0027m OK to just note that here that we simulate it with the reset.","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"53651a4d376d60667c1d2b6133fffa489a79c389","unresolved":true,"context_lines":[{"line_number":454,"context_line":"            sev_snp_rp_uuid \u003d sev_rps[\u0027sev-snp\u0027][0][\u0027uuid\u0027]"},{"line_number":455,"context_line":"            sev_snp_rp_traits \u003d self._get_provider_traits(sev_snp_rp_uuid)"},{"line_number":456,"context_line":"            self.assertIn(ost.HW_CPU_X86_AMD_SEV_SNP, sev_snp_rp_traits)"},{"line_number":457,"context_line":"            self.assertMemEncryptionSlotsEqual(sev_snp_rp_uuid, 15)"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"class LibvirtReportSevTraitsTests(LibvirtReportTraitsTestBase):"}],"source_content_type":"text/x-python","patch_set":1,"id":"abc052f4_07f8b122","line":457,"updated":"2026-06-24 16:01:18.000000000","message":"OK so basically the memory encryption contexts reported to ES now usable for SEV-SNP instead. Am I correct?","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"cee5195fd799e786d3d638b697a47d8b2687a428","unresolved":false,"context_lines":[{"line_number":454,"context_line":"            sev_snp_rp_uuid \u003d sev_rps[\u0027sev-snp\u0027][0][\u0027uuid\u0027]"},{"line_number":455,"context_line":"            sev_snp_rp_traits \u003d self._get_provider_traits(sev_snp_rp_uuid)"},{"line_number":456,"context_line":"            self.assertIn(ost.HW_CPU_X86_AMD_SEV_SNP, sev_snp_rp_traits)"},{"line_number":457,"context_line":"            self.assertMemEncryptionSlotsEqual(sev_snp_rp_uuid, 15)"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"class LibvirtReportSevTraitsTests(LibvirtReportTraitsTestBase):"}],"source_content_type":"text/x-python","patch_set":1,"id":"501ff11c_12166795","line":457,"in_reply_to":"4c84473d_0fc46647","updated":"2026-06-26 09:11:47.000000000","message":"Thanks for the explanation.","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"22e063b71fdd5f71c04d114710e9e4af2915dc61","unresolved":true,"context_lines":[{"line_number":454,"context_line":"            sev_snp_rp_uuid \u003d sev_rps[\u0027sev-snp\u0027][0][\u0027uuid\u0027]"},{"line_number":455,"context_line":"            sev_snp_rp_traits \u003d self._get_provider_traits(sev_snp_rp_uuid)"},{"line_number":456,"context_line":"            self.assertIn(ost.HW_CPU_X86_AMD_SEV_SNP, sev_snp_rp_traits)"},{"line_number":457,"context_line":"            self.assertMemEncryptionSlotsEqual(sev_snp_rp_uuid, 15)"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"class LibvirtReportSevTraitsTests(LibvirtReportTraitsTestBase):"}],"source_content_type":"text/x-python","patch_set":1,"id":"4c84473d_0fc46647","line":457,"in_reply_to":"abc052f4_07f8b122","updated":"2026-06-25 14:11:34.000000000","message":"Yes. It\u0027s confusing that libvirt reports the pool limit as maximum SEV-ES guests, but SEV-ES and SEV-SNP uses the same ASID slots. Now SEV-ES is disabled when SEV-SNP is enabled, so SEV-SNP takes over all of these SEV-ES ASID slots.","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eb777a0f1991ca23e3acfbe43d04c427c83c3f8d","unresolved":true,"context_lines":[{"line_number":61,"context_line":"            \u0027sev-es\u0027: [rp for rp in rps"},{"line_number":62,"context_line":"                       if rp[\u0027name\u0027] \u003d\u003d \u0027%s_amd_sev_es\u0027 % root_rp[\u0027name\u0027]],"},{"line_number":63,"context_line":"            \u0027sev-snp\u0027: [rp for rp in rps"},{"line_number":64,"context_line":"                        if rp[\u0027name\u0027] \u003d\u003d \u0027%s_amd_sev_snp\u0027 % root_rp[\u0027name\u0027]]"},{"line_number":65,"context_line":"        }"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @contextlib.contextmanager"}],"source_content_type":"text/x-python","patch_set":5,"id":"aa962d1f_0199ae4d","line":64,"updated":"2026-07-03 13:20:10.000000000","message":"supernit: add a comma at the end of the line, so when we add the next sev-xxx feature the diff will be cleaner :)","commit_id":"7563be054127999339a9adbaf1bd826e928bbd68"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"0ec50ba54d016fc7bf1201bcac51b956e02bb869","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            \u0027sev-es\u0027: [rp for rp in rps"},{"line_number":62,"context_line":"                       if rp[\u0027name\u0027] \u003d\u003d \u0027%s_amd_sev_es\u0027 % root_rp[\u0027name\u0027]],"},{"line_number":63,"context_line":"            \u0027sev-snp\u0027: [rp for rp in rps"},{"line_number":64,"context_line":"                        if rp[\u0027name\u0027] \u003d\u003d \u0027%s_amd_sev_snp\u0027 % root_rp[\u0027name\u0027]]"},{"line_number":65,"context_line":"        }"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @contextlib.contextmanager"}],"source_content_type":"text/x-python","patch_set":5,"id":"c8c5421c_eea252af","line":64,"in_reply_to":"aa962d1f_0199ae4d","updated":"2026-07-03 16:17:28.000000000","message":"+1 and done.","commit_id":"7563be054127999339a9adbaf1bd826e928bbd68"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7fd90c32de6b9087d8a5f5c92079d158cbbfbc20","unresolved":false,"context_lines":[{"line_number":902,"context_line":"            self.assertEqual(0, len(sev_rps[\u0027sev\u0027]))"},{"line_number":903,"context_line":"            self.assertEqual(0, len(sev_rps[\u0027sev-es\u0027]))"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"    def test_sev_snp_trait_off_on(self):"},{"line_number":906,"context_line":"        \"\"\"Test that the compute service reports the SEV-ES trait in"},{"line_number":907,"context_line":"        the list of global traits, and immediately registers it on the compute"},{"line_number":908,"context_line":"        host resource provider in the placement API, due to the SEV-ES"}],"source_content_type":"text/x-python","patch_set":7,"id":"8b97abd5_70ab6230","line":905,"updated":"2026-07-06 09:17:46.000000000","message":"thanks!","commit_id":"7f2cd2d5e802488e28246fba7b396fdff81b55dc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5fb5857297756e4ef03254245a4cc6116bc0db33","unresolved":true,"context_lines":[{"line_number":181,"context_line":"            super(LibvirtReportNoSevTraitsTests, self).setUp()"},{"line_number":182,"context_line":"            self.start_compute()"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def test_sev_trait_off_on(self):"},{"line_number":185,"context_line":"        \"\"\"Test that the compute service reports the SEV/SEV-ES/SEV-SNP trait"},{"line_number":186,"context_line":"        in the list of global traits, but doesn\u0027t immediately register it on"},{"line_number":187,"context_line":"        the compute host resource provider in the placement API, due to"}],"source_content_type":"text/x-python","patch_set":15,"id":"02c85edf_c57a9e4e","line":184,"range":{"start_line":184,"start_character":8,"end_line":184,"end_character":29},"updated":"2026-07-16 10:35:05.000000000","message":"i feel like this test shoudl be broken down in to many separate tests\n\n```\n        global_traits \u003d self._get_all_traits()\n        self.assertIn(ost.HW_CPU_X86_AMD_SEV, global_traits)\n        self.assertIn(ost.HW_CPU_X86_AMD_SEV_ES, global_traits)\n        self.assertIn(ost.HW_CPU_X86_AMD_SEV_SNP, global_traits)\n```\n\nis just testing if the relevent skills are hooked into the test harnicce and in os-traits\n\nthat should be its own test. but you then do this multipel time in this test so it should also be factor out into a helper funciton\n\n\nthere is a lot of repetion in thsses test that i thinkshoudl be factored out.\n\nim ok for that clean up to  be doen in a follow up patch but i probaly would have done before extending these tests personally.\n\n\nwhile funcitonal test do test more then unit test each test shoudl logiclly test one thing so you shoudl not be testing sev, sev-es and sev-snp in onle monolitch functional test.\n\nthere was existing tech debt here because we allowed sev and sev es in this singel test before but wen adding snp that should be the signal that we shoudl pay down that tech debt.","commit_id":"79a964c833d9fc7a62383512c2bddca3a553589a"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"b3af4ee5d17cdae063852eeadb6bbb1775a90d45","unresolved":true,"context_lines":[{"line_number":181,"context_line":"            super(LibvirtReportNoSevTraitsTests, self).setUp()"},{"line_number":182,"context_line":"            self.start_compute()"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def test_sev_trait_off_on(self):"},{"line_number":185,"context_line":"        \"\"\"Test that the compute service reports the SEV/SEV-ES/SEV-SNP trait"},{"line_number":186,"context_line":"        in the list of global traits, but doesn\u0027t immediately register it on"},{"line_number":187,"context_line":"        the compute host resource provider in the placement API, due to"}],"source_content_type":"text/x-python","patch_set":15,"id":"4359726c_b36a6a3b","line":184,"range":{"start_line":184,"start_character":8,"end_line":184,"end_character":29},"in_reply_to":"02c85edf_c57a9e4e","updated":"2026-07-16 19:17:13.000000000","message":"I\u0027ll split this into the following sub test cases in https://review.opendev.org/c/openstack/nova/+/997635 .\n\n - No sev -\u003e sev only\n - sev only -\u003e sev + sev-es\n - sev + sev-es -\u003e sev + sev-es + sev-snp","commit_id":"79a964c833d9fc7a62383512c2bddca3a553589a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5fb5857297756e4ef03254245a4cc6116bc0db33","unresolved":true,"context_lines":[{"line_number":362,"context_line":"            self.assertIn(ost.HW_CPU_X86_AMD_SEV_ES, sev_es_rp_traits)"},{"line_number":363,"context_line":"            self.assertMemEncryptionSlotsEqual(sev_es_rp_uuid, 15)"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"        # Now simulate the host gaining SEV-SNP functionality.  Here we"},{"line_number":366,"context_line":"        # simulate a kernel update or reconfiguration which causes the"},{"line_number":367,"context_line":"        # kvm-amd kernel module\u0027s \"sev-snp\" parameter to become available"},{"line_number":368,"context_line":"        # and set to 1 ."}],"source_content_type":"text/x-python","patch_set":15,"id":"83b6c553_2b263e96","line":365,"updated":"2026-07-16 10:35:05.000000000","message":"can you add a follow up to spelit this this into 3 or 4 test cases\n\neach typ of seve shoudl be its own test","commit_id":"79a964c833d9fc7a62383512c2bddca3a553589a"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"b3af4ee5d17cdae063852eeadb6bbb1775a90d45","unresolved":true,"context_lines":[{"line_number":362,"context_line":"            self.assertIn(ost.HW_CPU_X86_AMD_SEV_ES, sev_es_rp_traits)"},{"line_number":363,"context_line":"            self.assertMemEncryptionSlotsEqual(sev_es_rp_uuid, 15)"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"        # Now simulate the host gaining SEV-SNP functionality.  Here we"},{"line_number":366,"context_line":"        # simulate a kernel update or reconfiguration which causes the"},{"line_number":367,"context_line":"        # kvm-amd kernel module\u0027s \"sev-snp\" parameter to become available"},{"line_number":368,"context_line":"        # and set to 1 ."}],"source_content_type":"text/x-python","patch_set":15,"id":"1f3dedbc_03ffb618","line":365,"in_reply_to":"83b6c553_2b263e96","updated":"2026-07-16 19:17:13.000000000","message":"See https://review.opendev.org/c/openstack/nova/+/997635","commit_id":"79a964c833d9fc7a62383512c2bddca3a553589a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5fb5857297756e4ef03254245a4cc6116bc0db33","unresolved":true,"context_lines":[{"line_number":664,"context_line":"            self.assertEqual(0, len(sev_rps[\u0027sev-es\u0027]))"},{"line_number":665,"context_line":"            self.assertEqual(0, len(sev_rps[\u0027sev-snp\u0027]))"},{"line_number":666,"context_line":""},{"line_number":667,"context_line":"    def test_sev_snp_trait_on_off(self):"},{"line_number":668,"context_line":"        \"\"\"Test that the compute service reports the SEV-SNP trait in"},{"line_number":669,"context_line":"        the list of global traits, and immediately registers it on the compute"},{"line_number":670,"context_line":"        host resource provider in the placement API, due to the SEV-SNP"}],"source_content_type":"text/x-python","patch_set":15,"id":"53c257e4_2cda65dd","line":667,"updated":"2026-07-16 10:35:05.000000000","message":"here you propersly sperated out snp","commit_id":"79a964c833d9fc7a62383512c2bddca3a553589a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5fb5857297756e4ef03254245a4cc6116bc0db33","unresolved":true,"context_lines":[{"line_number":880,"context_line":"            self.assertEqual(0, len(sev_rps[\u0027sev\u0027]))"},{"line_number":881,"context_line":"            self.assertEqual(0, len(sev_rps[\u0027sev-es\u0027]))"},{"line_number":882,"context_line":""},{"line_number":883,"context_line":"    def test_sev_snp_trait_off_on(self):"},{"line_number":884,"context_line":"        \"\"\"Test that the compute service reports the SEV-ES trait in"},{"line_number":885,"context_line":"        the list of global traits, and immediately registers it on the compute"},{"line_number":886,"context_line":"        host resource provider in the placement API, due to the SEV-ES"}],"source_content_type":"text/x-python","patch_set":15,"id":"9989d0f0_041a2d40","line":883,"updated":"2026-07-16 10:35:05.000000000","message":"and here all though this is still plenthy of re resue that we coudl factour out into helper frunction to sare the assert between these tests","commit_id":"79a964c833d9fc7a62383512c2bddca3a553589a"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eb777a0f1991ca23e3acfbe43d04c427c83c3f8d","unresolved":true,"context_lines":[{"line_number":24371,"context_line":"        }, sev_snp_provider_data.inventory)"},{"line_number":24372,"context_line":"        self.assertEqual({ot.HW_CPU_X86_AMD_SEV_SNP},"},{"line_number":24373,"context_line":"                          sev_snp_provider_data.traits)"},{"line_number":24374,"context_line":""},{"line_number":24375,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.driver.LibvirtDriver._get_local_gb_info\u0027,"},{"line_number":24376,"context_line":"                new\u003dmock.Mock(return_value\u003d{\u0027total\u0027: disk_gb}))"},{"line_number":24377,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.host.Host.get_memory_mb_total\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"08fd5a66_4f566cda","line":24374,"updated":"2026-07-03 13:20:10.000000000","message":"I guess there is logic in the driver to delete the sev-es RP when sev-snp RP is created after a restart. Can we have a test case to prove it?","commit_id":"7563be054127999339a9adbaf1bd826e928bbd68"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"0ec50ba54d016fc7bf1201bcac51b956e02bb869","unresolved":false,"context_lines":[{"line_number":24371,"context_line":"        }, sev_snp_provider_data.inventory)"},{"line_number":24372,"context_line":"        self.assertEqual({ot.HW_CPU_X86_AMD_SEV_SNP},"},{"line_number":24373,"context_line":"                          sev_snp_provider_data.traits)"},{"line_number":24374,"context_line":""},{"line_number":24375,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.driver.LibvirtDriver._get_local_gb_info\u0027,"},{"line_number":24376,"context_line":"                new\u003dmock.Mock(return_value\u003d{\u0027total\u0027: disk_gb}))"},{"line_number":24377,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.host.Host.get_memory_mb_total\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7e6c481f_3ca0ed5e","line":24374,"in_reply_to":"08fd5a66_4f566cda","updated":"2026-07-03 16:17:28.000000000","message":"I\u0027ve added a functional test scenario to verify that behavior.","commit_id":"7563be054127999339a9adbaf1bd826e928bbd68"}],"nova/tests/unit/virt/libvirt/test_host.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"d616e0a0110e6b2cf75c0c3d9a97fb12cb2f7896","unresolved":true,"context_lines":[{"line_number":2517,"context_line":"    def test_slots(self, get_version, get_lib_version):"},{"line_number":2518,"context_line":"        self.assertEqual(0, self.host._get_mem_encryption_slots_amd_sev_snp())"},{"line_number":2519,"context_line":""},{"line_number":2520,"context_line":"    @mock.patch.object(fakelibvirt.Connection, \u0027getLibVersion\u0027,"},{"line_number":2521,"context_line":"                       return_value\u003dversionutils.convert_version_to_int("},{"line_number":2522,"context_line":"                            host.MIN_LIBVIRT_SEV_SNP_VERSION))"},{"line_number":2523,"context_line":"    @mock.patch.object(fakelibvirt.Connection, \u0027getVersion\u0027,"},{"line_number":2524,"context_line":"                       return_value\u003dversionutils.convert_version_to_int("},{"line_number":2525,"context_line":"                            host.MIN_QEMU_SEV_SNP_VERSION))"},{"line_number":2526,"context_line":"    def test_inventory_traits(self, get_version, get_lib_version):"},{"line_number":2527,"context_line":"        self.assertEqual([\u0027HW_CPU_X86_AMD_SEV_SNP\u0027],"},{"line_number":2528,"context_line":"                         self.host._get_mem_encryption_traits_amd_sev_snp())"}],"source_content_type":"text/x-python","patch_set":11,"id":"4634bb03_c58e805f","line":2525,"range":{"start_line":2520,"start_character":0,"end_line":2525,"end_character":59},"updated":"2026-07-07 18:02:47.000000000","message":"These patches are not necessary because it\u0027s enough if we test one case to simulate no SEV-ES support.","commit_id":"0f49ab9026ed68748e5bfdc3f4b33f04fff15e6f"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"2a85d3ac4a63e5abd772256d29bad1411aaaa4a2","unresolved":false,"context_lines":[{"line_number":2517,"context_line":"    def test_slots(self, get_version, get_lib_version):"},{"line_number":2518,"context_line":"        self.assertEqual(0, self.host._get_mem_encryption_slots_amd_sev_snp())"},{"line_number":2519,"context_line":""},{"line_number":2520,"context_line":"    @mock.patch.object(fakelibvirt.Connection, \u0027getLibVersion\u0027,"},{"line_number":2521,"context_line":"                       return_value\u003dversionutils.convert_version_to_int("},{"line_number":2522,"context_line":"                            host.MIN_LIBVIRT_SEV_SNP_VERSION))"},{"line_number":2523,"context_line":"    @mock.patch.object(fakelibvirt.Connection, \u0027getVersion\u0027,"},{"line_number":2524,"context_line":"                       return_value\u003dversionutils.convert_version_to_int("},{"line_number":2525,"context_line":"                            host.MIN_QEMU_SEV_SNP_VERSION))"},{"line_number":2526,"context_line":"    def test_inventory_traits(self, get_version, get_lib_version):"},{"line_number":2527,"context_line":"        self.assertEqual([\u0027HW_CPU_X86_AMD_SEV_SNP\u0027],"},{"line_number":2528,"context_line":"                         self.host._get_mem_encryption_traits_amd_sev_snp())"}],"source_content_type":"text/x-python","patch_set":11,"id":"e4b5de9d_beb8bb49","line":2525,"range":{"start_line":2520,"start_character":0,"end_line":2525,"end_character":59},"in_reply_to":"4634bb03_c58e805f","updated":"2026-07-07 18:05:45.000000000","message":"Done","commit_id":"0f49ab9026ed68748e5bfdc3f4b33f04fff15e6f"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"d616e0a0110e6b2cf75c0c3d9a97fb12cb2f7896","unresolved":true,"context_lines":[{"line_number":2527,"context_line":"        self.assertEqual([\u0027HW_CPU_X86_AMD_SEV_SNP\u0027],"},{"line_number":2528,"context_line":"                         self.host._get_mem_encryption_traits_amd_sev_snp())"},{"line_number":2529,"context_line":""},{"line_number":2530,"context_line":"    @mock.patch.object(fakelibvirt.Connection, \u0027getLibVersion\u0027,"},{"line_number":2531,"context_line":"                       return_value\u003dversionutils.convert_version_to_int("},{"line_number":2532,"context_line":"                            host.MIN_LIBVIRT_SEV_SNP_VERSION))"},{"line_number":2533,"context_line":"    @mock.patch.object(fakelibvirt.Connection, \u0027getVersion\u0027,"},{"line_number":2534,"context_line":"                       return_value\u003dversionutils.convert_version_to_int("},{"line_number":2535,"context_line":"                            host.MIN_QEMU_SEV_SNP_VERSION))"},{"line_number":2536,"context_line":"    def test_inventory(self, get_version, get_lib_version):"},{"line_number":2537,"context_line":"        inventories \u003d self.host.get_mem_encryption_inventories()"},{"line_number":2538,"context_line":"        self.assertIn(\u0027amd_sev_snp\u0027, inventories)"}],"source_content_type":"text/x-python","patch_set":11,"id":"27fe5abf_d142cc7a","line":2535,"range":{"start_line":2530,"start_character":0,"end_line":2535,"end_character":59},"updated":"2026-07-07 18:02:47.000000000","message":"These patches are not necessary because it\u0027s enough if we test one case to simulate no SEV-ES support.","commit_id":"0f49ab9026ed68748e5bfdc3f4b33f04fff15e6f"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"2a85d3ac4a63e5abd772256d29bad1411aaaa4a2","unresolved":false,"context_lines":[{"line_number":2527,"context_line":"        self.assertEqual([\u0027HW_CPU_X86_AMD_SEV_SNP\u0027],"},{"line_number":2528,"context_line":"                         self.host._get_mem_encryption_traits_amd_sev_snp())"},{"line_number":2529,"context_line":""},{"line_number":2530,"context_line":"    @mock.patch.object(fakelibvirt.Connection, \u0027getLibVersion\u0027,"},{"line_number":2531,"context_line":"                       return_value\u003dversionutils.convert_version_to_int("},{"line_number":2532,"context_line":"                            host.MIN_LIBVIRT_SEV_SNP_VERSION))"},{"line_number":2533,"context_line":"    @mock.patch.object(fakelibvirt.Connection, \u0027getVersion\u0027,"},{"line_number":2534,"context_line":"                       return_value\u003dversionutils.convert_version_to_int("},{"line_number":2535,"context_line":"                            host.MIN_QEMU_SEV_SNP_VERSION))"},{"line_number":2536,"context_line":"    def test_inventory(self, get_version, get_lib_version):"},{"line_number":2537,"context_line":"        inventories \u003d self.host.get_mem_encryption_inventories()"},{"line_number":2538,"context_line":"        self.assertIn(\u0027amd_sev_snp\u0027, inventories)"}],"source_content_type":"text/x-python","patch_set":11,"id":"cfcc3196_55aa7e5b","line":2535,"range":{"start_line":2530,"start_character":0,"end_line":2535,"end_character":59},"in_reply_to":"27fe5abf_d142cc7a","updated":"2026-07-07 18:05:45.000000000","message":"Done","commit_id":"0f49ab9026ed68748e5bfdc3f4b33f04fff15e6f"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"20a4944a1832068e3d40af3a306a6da859d74b62","unresolved":true,"context_lines":[{"line_number":13532,"context_line":"        if me_model \u003d\u003d fields.MemEncryptionModel.AMD_SEV:"},{"line_number":13533,"context_line":"            return self._host.supports_amd_sev"},{"line_number":13534,"context_line":"        if me_model \u003d\u003d fields.MemEncryptionModel.AMD_SEV_ES:"},{"line_number":13535,"context_line":"            return self._host.supports_amd_sev_es"},{"line_number":13536,"context_line":"        raise exception.Invalid(\u0027Invalid memory encryption model: %r\u0027,"},{"line_number":13537,"context_line":"                                me_model)"},{"line_number":13538,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ea19cf69_49d76a62","line":13535,"updated":"2026-07-03 09:35:46.000000000","message":"You missed extending this to allow AMD_SEV_SNP this means at least that n-cpu fails to restart if the host has VMs with SNP enabled. I\u0027m not sure which patch in the series should have this though so feel free to fix it where you feel appropriate.","commit_id":"7563be054127999339a9adbaf1bd826e928bbd68"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7fd90c32de6b9087d8a5f5c92079d158cbbfbc20","unresolved":false,"context_lines":[{"line_number":13532,"context_line":"        if me_model \u003d\u003d fields.MemEncryptionModel.AMD_SEV:"},{"line_number":13533,"context_line":"            return self._host.supports_amd_sev"},{"line_number":13534,"context_line":"        if me_model \u003d\u003d fields.MemEncryptionModel.AMD_SEV_ES:"},{"line_number":13535,"context_line":"            return self._host.supports_amd_sev_es"},{"line_number":13536,"context_line":"        raise exception.Invalid(\u0027Invalid memory encryption model: %r\u0027,"},{"line_number":13537,"context_line":"                                me_model)"},{"line_number":13538,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"61b0bad2_125b60ae","line":13535,"in_reply_to":"962f30e4_af1ec19b","updated":"2026-07-06 09:17:46.000000000","message":"thanks","commit_id":"7563be054127999339a9adbaf1bd826e928bbd68"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"92b6c7b5a5e4715c5b766ba857e1b000eee00975","unresolved":false,"context_lines":[{"line_number":13532,"context_line":"        if me_model \u003d\u003d fields.MemEncryptionModel.AMD_SEV:"},{"line_number":13533,"context_line":"            return self._host.supports_amd_sev"},{"line_number":13534,"context_line":"        if me_model \u003d\u003d fields.MemEncryptionModel.AMD_SEV_ES:"},{"line_number":13535,"context_line":"            return self._host.supports_amd_sev_es"},{"line_number":13536,"context_line":"        raise exception.Invalid(\u0027Invalid memory encryption model: %r\u0027,"},{"line_number":13537,"context_line":"                                me_model)"},{"line_number":13538,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"962f30e4_af1ec19b","line":13535,"in_reply_to":"df5ae029_ee3f1a1d","updated":"2026-07-03 16:40:44.000000000","message":"I\u0027ve fixed this in https://review.opendev.org/c/openstack/nova/+/994930 .","commit_id":"7563be054127999339a9adbaf1bd826e928bbd68"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"0ec50ba54d016fc7bf1201bcac51b956e02bb869","unresolved":true,"context_lines":[{"line_number":13532,"context_line":"        if me_model \u003d\u003d fields.MemEncryptionModel.AMD_SEV:"},{"line_number":13533,"context_line":"            return self._host.supports_amd_sev"},{"line_number":13534,"context_line":"        if me_model \u003d\u003d fields.MemEncryptionModel.AMD_SEV_ES:"},{"line_number":13535,"context_line":"            return self._host.supports_amd_sev_es"},{"line_number":13536,"context_line":"        raise exception.Invalid(\u0027Invalid memory encryption model: %r\u0027,"},{"line_number":13537,"context_line":"                                me_model)"},{"line_number":13538,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"df5ae029_ee3f1a1d","line":13535,"in_reply_to":"ea19cf69_49d76a62","updated":"2026-07-03 16:17:28.000000000","message":"At this stage it\u0027s not accepted to create an instance with sev-snp model. I\u0027ll cover it in that change.","commit_id":"7563be054127999339a9adbaf1bd826e928bbd68"}],"nova/virt/libvirt/host.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"53651a4d376d60667c1d2b6133fffa489a79c389","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"MIN_QEMU_SEV_ES_VERSION \u003d (8, 0, 0)"},{"line_number":86,"context_line":"MIN_QEMU_SEV_SNP_VERSION \u003d (9, 1, 0)"},{"line_number":87,"context_line":"MIN_LIBVIRT_SEV_SNP_VERSION \u003d (10, 5, 0)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"class LibvirtEventHandler:"}],"source_content_type":"text/x-python","patch_set":1,"id":"b665fed1_065428b3","line":87,"updated":"2026-06-24 16:01:18.000000000","message":"OK this is aligned with the spec.","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"9d9faecd6cbcdabc56b6b0aec694e756e34147b9","unresolved":true,"context_lines":[{"line_number":2138,"context_line":"            LOG.info(\"kernel doesn\u0027t support AMD SEV-SNP\")"},{"line_number":2139,"context_line":"            return self._supports_amd_sev_snp"},{"line_number":2140,"context_line":""},{"line_number":2141,"context_line":"        if not self.has_min_version(lv_ver\u003dMIN_LIBVIRT_SEV_SNP_VERSION,"},{"line_number":2142,"context_line":"                                    hv_ver\u003dMIN_QEMU_SEV_SNP_VERSION):"},{"line_number":2143,"context_line":"            LOG.info(\"QEMU or libvirt doesn\u0027t support AMD SEV-SNP\")"},{"line_number":2144,"context_line":"            return self._supports_amd_sev_snp"},{"line_number":2145,"context_line":""},{"line_number":2146,"context_line":"        LOG.info(\"AMD SEV-SNP support detected\")"},{"line_number":2147,"context_line":"        self._supports_amd_sev_snp \u003d True"}],"source_content_type":"text/x-python","patch_set":9,"id":"cec75c86_67ac1dbd","line":2144,"range":{"start_line":2141,"start_character":0,"end_line":2144,"end_character":45},"updated":"2026-07-07 16:08:46.000000000","message":"Technically this can be replaced by the logic to check domain capabilities. I\u0027ll try that later.","commit_id":"b218d50919436a2e262ca5972ea0b091640f6621"}],"requirements.txt":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"53651a4d376d60667c1d2b6133fffa489a79c389","unresolved":false,"context_lines":[{"line_number":50,"context_line":"oslo.versionedobjects\u003e\u003d1.35.0 # Apache-2.0"},{"line_number":51,"context_line":"os-brick\u003e\u003d6.10.0 # Apache-2.0"},{"line_number":52,"context_line":"os-resource-classes\u003e\u003d1.1.0 # Apache-2.0"},{"line_number":53,"context_line":"os-traits\u003e\u003d3.7.0 # Apache-2.0"},{"line_number":54,"context_line":"os-vif\u003e\u003d3.1.0 # Apache-2.0"},{"line_number":55,"context_line":"castellan\u003e\u003d0.16.0 # Apache-2.0"},{"line_number":56,"context_line":"microversion-parse\u003e\u003d0.2.1 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":1,"id":"63505dde_775c1eb8","line":53,"updated":"2026-06-24 16:01:18.000000000","message":"yepp that is the version added the new trait","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"}]}
