)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"ee780e84a8c4bc1d4af72a02981f5fb34a5ecdfc","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Preserve UEFI NVRAM variable store"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Preserve NVRAM variable store during stop/start, hard reboot, and live"},{"line_number":10,"context_line":"migration."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This does not affect cold migration or shelve."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"cbf62358_a6806391","line":10,"range":{"start_line":9,"start_character":37,"end_line":10,"end_character":10},"updated":"2025-11-18 08:55:01.000000000","message":"and swap volume(volume retype)","commit_id":"ac1e20f71d6f85e62810b6108b2afe3dc301e0bd"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"64578bf9355a1cd8d7e2af3c2d6410620b590f5b","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Preserve UEFI NVRAM variable store"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Preserve NVRAM variable store during stop/start, hard reboot, and live"},{"line_number":10,"context_line":"migration."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This does not affect cold migration or shelve."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"ed149711_bfb1a3e5","line":10,"range":{"start_line":9,"start_character":37,"end_line":10,"end_character":10},"in_reply_to":"cbf62358_a6806391","updated":"2025-11-18 09:18:49.000000000","message":"I didn\u0027t test that yet but I\u0027ll to that.","commit_id":"ac1e20f71d6f85e62810b6108b2afe3dc301e0bd"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"efc8e78f55d452c5e3ed5deabbacc95555f70d4b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Preserve UEFI NVRAM variable store"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Preserve NVRAM variable store during stop/start, hard reboot, and live"},{"line_number":10,"context_line":"migration."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This does not affect cold migration or shelve."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"856c22f4_df8c5211","line":10,"range":{"start_line":9,"start_character":37,"end_line":10,"end_character":10},"in_reply_to":"ed149711_bfb1a3e5","updated":"2025-12-10 16:35:25.000000000","message":"Acknowledged","commit_id":"ac1e20f71d6f85e62810b6108b2afe3dc301e0bd"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b707478871a74e9f2c8d73d6360f15a2f836b5d5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"82262dd8_95b33bf2","updated":"2025-11-12 08:32:31.000000000","message":"let also add a release note to this patch to detail what aspect fo nvram preservation si now supproted.\n\ni.e. hard reboot/power on/off\n\nif we have more work to do for move operations then we can build on that in new bugs and or pathces.\n\n\nfor example there is no preservation fo the nvram file for shelve or evacuate and you mnetion cold migration is broken\n\nthat is all out of scope of the orgianl bug and may technilly be a mini feature to implement so we shoudl keep this patch focused on the first usecase and then loop back to the other lifecycle event seperatly.","commit_id":"cdf8b011d3433d9d57893177b554d40c5cbb23ed"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b70c49539098fef29e14ede0c10cd1290e651af2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"fd55bbec_d4392799","updated":"2025-11-13 17:45:49.000000000","message":"ill try and test this tomrrow or  early next week but this looks good to me over all +1 for now as it look like my previous requests have been adressed.","commit_id":"c14e7bcd17578120951806ec41c767a63caa0fd5"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"ee780e84a8c4bc1d4af72a02981f5fb34a5ecdfc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"7e7d4d35_917a0af3","updated":"2025-11-18 08:55:01.000000000","message":"I think the patch also fixed this bug: #2131730, If so, could you add more Closes-Bug in the commit msg","commit_id":"ac1e20f71d6f85e62810b6108b2afe3dc301e0bd"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"fde795c139253af730ef5043c3de7b8df71cf692","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"51f9e7fd_91e5e1ba","in_reply_to":"3e4cab8b_e2b96e9f","updated":"2025-11-28 09:40:30.000000000","message":"Yes, I\u0027ve tested that. This patch fixed the issue indeed.","commit_id":"ac1e20f71d6f85e62810b6108b2afe3dc301e0bd"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"64578bf9355a1cd8d7e2af3c2d6410620b590f5b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"3e4cab8b_e2b96e9f","in_reply_to":"7e7d4d35_917a0af3","updated":"2025-11-18 09:18:49.000000000","message":"Did you test that yet? I will try to confirm that too.","commit_id":"ac1e20f71d6f85e62810b6108b2afe3dc301e0bd"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"269d71e5b9b4ec6c69b9e670c1d7611a0a247399","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"ae045d85_9e58a5a5","updated":"2025-12-10 02:13:12.000000000","message":"There is one point we have to additionally consider.\n\nWe should expect the case that NVRAM template SHOULD be reset during hard-reboot or cold migration. One example scenario is caused by an instance os_secure_boot\u003doptional. If this instance is migrated from a host with secure boot support to the other without secure boot support, a different firmware is selected after migration. In this scenario we should reset the nvram file.\n\nAt this moment I\u0027m not too sure how we can implement this in cold migration due to the current mechanism generating an xml file at destination from scratch. One option is to keep the original nvram template somewhere in filesystem but I\u0027m not aware of such mechanism in current nova.","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b10ce048b85269670be96fb9dd45678555017a5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"55916259_7e4a745c","updated":"2025-12-12 17:25:21.000000000","message":"we should ideally kep this patch limited to just the orginal scope\n\n\"Preserve NVRAM variable store during stop/start, hard reboot, and live\nmigration.\"\n\nnote that if this depend on tasksiwe work to refactor how we calulate the firware it will make it harder to backprot this and ideally we would keep this backportable.\n\nideally we woudl adress cold migration and resize in a seperte patch and then do the new way of doign formware iwth libvirt slection after that.","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"fde60a47e4e83a199c187abf24788dae644c0cb7","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"3a5d41d7_e159213c","in_reply_to":"00f9cb34_822fc766","updated":"2026-01-26 19:00:42.000000000","message":"Thank you.","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"9500debbe16654f6268bf390282a0f0ae216912f","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"8867fc37_dde24bf2","in_reply_to":"113fadb6_6c03bc2a","updated":"2026-01-19 16:53:36.000000000","message":"\u003e Does this affect this patch, i.e., would it introduce a bug to not reset the NVRAM in the cases covered by my changes?\n\nYes. For example one example scenario where the instance grains secure boot feature after its initial creation is\n \n1. An instance with os_firmware_secure\u003doptional is launched at compute node without secure boot\n2. It is live migrated to a node with secure boot\n3. It is stopped\n4. It is started\n\nand in this case we should reset its NVRAM at 4 to enable secure boot.\n\nAnother example would be some changes in host adds/removes secure boot support and then an instance with os_secure_boot\u003d\u0027optional\u0027 get different secure boot support after it is hard-rebooted.\n\nI\u0027m also unsure what would happen in case nova somehow selects a different set of hardware during hard-reboot. In that case we may get inconsistent set of VAR file and CODE file.\n\nI think what we have to understand here is the effect of not resetting NVRAM in case CODE file or secure boot flag is changed. If the instance is supposed to run in that inconsistent combination then we can probably leave that inconsistency now and consider \"fixing\" it later.","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":34034,"name":"Franciszek Przewoźny","display_name":"Franciszek Przewozny","email":"przewozny.franciszek@gmail.com","username":"fprzewozn","status":"OpenStack Engineer / SRE @ Opera Software"},"change_message_id":"343afdc1ec2529822756e6303bb9c5c52b774f73","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"dda0cc0e_304c4476","in_reply_to":"1af0754d_3a333c58","updated":"2025-12-29 10:06:50.000000000","message":"Hey, I would like to be able to preserve NVRAM file during instance life (power operations/migrations), but it should be removed together with instance (and disk). \n\nCurrent state doesn\u0027t make much sense as NVRAM file itself is writeable in order to preserve user data (and it\u0027s removed f.e. on cold reboot).","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"dea52d317530068332f93d82e777c6187fd4dc5a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"1af0754d_3a333c58","in_reply_to":"221277bb_bb4affde","updated":"2025-12-29 01:35:09.000000000","message":"\u003e That would mean that this patch will also introduce a new bug, right?\n\nI don\u0027t think so. In some cases, some users maybe have different requirements. just like this issue: https://bugs.launchpad.net/nova/+bug/2136993. IMPO, this reporter maybe expect the nvram file could be remained after hard reboot.\n\nIMO, we need to introduce some API params to resolve the conflicting requirements. But this is beyond the scope of this patch.","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"b99b2d90f4d9e4935b47a7904a3ad979a77dfd26","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"8b3d5824_947071ad","in_reply_to":"3a5d41d7_e159213c","updated":"2026-02-13 22:19:35.000000000","message":"Done","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"cff963b5e1d1b595a6dfcb09017e1e5343bf6a55","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"ae58e4c6_1b281044","in_reply_to":"55916259_7e4a745c","updated":"2025-12-19 07:44:03.000000000","message":"I reverted my changes where I started to work on the cold migration so now the patch is limited to the scope you suggested.","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"efc8e78f55d452c5e3ed5deabbacc95555f70d4b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"ae293f61_7ed16cac","in_reply_to":"690f69d3_197b6fa9","updated":"2025-12-10 16:35:25.000000000","message":"Does that mean that in my current patch the NVRAM will be copied over but overwritten because the XML gets regenerated? That would explain why it seems like the copying is successful but I still lose the NVRAM in my manual testing.\n\nWould this also happen during Nova updates? I understood that this could update the firmware as well but I would expect that the NVRAM should be kept in this case.\n\nI guess the best approach would be to always copy the NVRAM and then check on the destination whether we have to reset it.","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"31529cc9ffca8829fe4ce80c157c81b701f35ad9","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"bf293d57_f9980514","in_reply_to":"7005db64_00417b4c","updated":"2026-01-12 16:58:59.000000000","message":"Current version of my patchset is based on the fact that nova always resets NVRAM.\n However we can extend https://review.opendev.org/c/openstack/nova/+/969132/11/nova/virt/libvirt/driver.py#7067 to catch the change in secure boot flag during hard-reboot (or stop/start) so that we can later trigger reset of NVRAM.\n\nThe problem still remains in cold migration or resize, though, because we do not pass the xml in source host. XML is generated at destination, and nova-compute at the dest does not know the previous secure boot status before migration.\n\nOne possible option I can think of is to prohibit migration of a vm with os_secure_boot\u003d\u0027optional\u0027 between two compute nodes with different secure boot support status, but that introduces different limit on operation.","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"2c61516c4d2eb881ae3c7db155c9d0f139d72198","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"7005db64_00417b4c","in_reply_to":"7c776164_c0f2eea9","updated":"2026-01-12 16:49:24.000000000","message":"There were some open discussion points that were brought up during the Nova meeting on 2026-01-12, so I unresolved this.","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"02dd80a8213c4537f98220252fe83f8467172ddf","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"a7d22b7f_a5414aa8","in_reply_to":"8867fc37_dde24bf2","updated":"2026-01-19 16:58:33.000000000","message":"Just to make my stance clear, I\u0027m ok to leave these now to fix more annoying problem caused by hard-reboot. My main point is that it introduces a new problem and we should be aware of that downside.","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"66e599030e3a3f80e33db8649a2d622dcac0b9a6","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"ef4e7f2e_686413f7","in_reply_to":"8bec48a1_bf318774","updated":"2025-12-10 17:32:54.000000000","message":"I remember that we talked about libvirt not being able to do that. That\u0027s why I tried to change the permissions with privsep and copy it manually in the driver (https://review.opendev.org/c/openstack/nova/+/959682/comment/2c08400d_baac062c/). Unfortunately, the NVRAM still gets lost during cold migrations but I haven\u0027t been able to figure out why.\n\nIt\u0027s becoming clearer to me why you suggested to have two separate patches but now I\u0027m a bit worried about Takashi Kajinami\u0027s remark that this may already cause problems during a hard reboot. That would mean that this patch will also introduce a new bug, right?","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cbb45c4f76ad62ba1609743968e753587a0859e6","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"8bec48a1_bf318774","in_reply_to":"8e5ed1e3_24b962bd","updated":"2025-12-10 16:59:18.000000000","message":"libvirt does not copy the file as part of cold migrate because libvirt does not copy any files in the cold migrate flow since that is not a functionlaty provided by libvirt.\n\n\nfor cold migrate nova need to copy all files that should be moved.\n\nnova does cold migrate by defeinign a new domain on the destiation host and deleting the current domain on ths currenot host after you confirm the resize/migrate\n\n\nthis is very diffent then live migration where libvirt actully doe move the data.\n\nwith that said that should be adresse din a follwo up commit.\n\nsorry for not geting tim eto review and test this in the last week or two,\nill see if i can do it before i go on pto for the end of the year.","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a7196adeb48f121024abb906ae31c5f17dd4a5e4","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"00f9cb34_822fc766","in_reply_to":"a7d22b7f_a5414aa8","updated":"2026-01-26 15:52:24.000000000","message":"Based on the discussion in the last irc meeting I created https://bugs.launchpad.net/nova/+bug/2139077 .","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"f2bff6f70a4364f9d036cf5d1306b4b5d94c377e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"e9eddda5_a0cf7932","in_reply_to":"ae045d85_9e58a5a5","updated":"2025-12-10 09:12:32.000000000","message":"What would be the conditions to reset the NVRAM during a hard reboot?\n\nHow bad would it be to not reset the NVRAM during a cold migration?","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"79634ad438a162c8e55785e484fad2ecc8b1835a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"8e5ed1e3_24b962bd","in_reply_to":"ae293f61_7ed16cac","updated":"2025-12-10 16:51:08.000000000","message":"\u003e Does that mean that in my current patch the NVRAM will be copied over but overwritten because the XML gets regenerated? That would explain why it seems like the copying is successful but I still lose the NVRAM in my manual testing.\nHm. In my understanding libvirt does not reset the firmware if the nvram file is already present. If the file is copied to the path which the xml generated at the destination refers to then libvirt should not reset it.\n\n\u003e Would this also happen during Nova updates? I understood that this could update the firmware as well but I would expect that the NVRAM should be kept in this case.\nIn most cases, not, but the on-going work to use libvirt\u0027s selection mechanism may cause this change.\nhttps://review.opendev.org/c/openstack/nova/+/969132/9/nova/virt/libvirt/driver.py#7084\n\nAnother (more possible) trigger is update of OVMF package which removes/adds some firmware files.","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"46db075dff67be2ae6d139bee3199bb44e1c0c95","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"facc0fd6_52daf13f","in_reply_to":"bf293d57_f9980514","updated":"2026-01-12 17:56:12.000000000","message":"right so nova always resetting the nvram is a bug \n\nhttps://bugs.launchpad.net/nova/+bug/1633447\n\nthat is not the correct behvior.\n\nfor cold migration and resize we will have copied the nvram before the dmain is defiend on the destiation (when we fix it)\nso the destion hos shoudl resue the nvram file if it exists and only generate it if ti does not.\n\nprohibiting migration with  os_secure_boot\u003d\u0027optional\u0027 is an option. per haps its a suffience one for the short term\n\nlong term it would be better to record what the vm was first booted with in instance system metadata and then use that to fix the behaviour for its lifetime.","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"2bde2d74c544e5170362f313530b48b17cbbd8a3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"7c776164_c0f2eea9","in_reply_to":"dda0cc0e_304c4476","updated":"2026-01-06 14:51:52.000000000","message":"Then I\u0027d consider this as resolved. I added the bug ID to the commit message.","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"b805f6c267cd56eb334ada5ed48607af8277bb68","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"690f69d3_197b6fa9","in_reply_to":"e9eddda5_a0cf7932","updated":"2025-12-10 15:41:15.000000000","message":"Reference https://libvirt.org/kbase/secureboot.html#changing-an-existing-vm .\n\nThe correct trigger to reset the NVRAM file is when updating the loader (OVMF code). This means that we have to know the firmware file which was used before migration.\n\nOne example problem is that in case an instance with secure_boot: optional is started in a node without secure boot and then cold-migrated to a node with secure boot, then it never gets secure boot enabled without resetting the NVRAM, when the instance is started after migration.","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"73a3146738b7bafb2e0c0300dd6b4c86d27c86ba","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"221277bb_bb4affde","in_reply_to":"ef4e7f2e_686413f7","updated":"2025-12-12 17:19:37.000000000","message":"@kajinamit@oss.nttdata.com: Is this what you are working on in your patch already? I saw that there is a todo to reset the NVRAM in your patch but I\u0027m not sure if that would eventually cover all cases and be part of that patch.","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"395b36c451425303f003be88c7cddc87d448c708","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"113fadb6_6c03bc2a","in_reply_to":"facc0fd6_52daf13f","updated":"2026-01-13 23:22:11.000000000","message":"Does this affect this patch, i.e., would it introduce a bug to not reset the NVRAM in the cases covered by my changes? I understand that this might be important for cold migration and resize but we explicitly excluded those from this patch. Maybe we should move the discussion somewhere else so we can merge this first and then figure out what to do to also implement a patch for cold migration and resize.","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"c0a83b6e4b728c406b97af7bf8da81358e0c7559","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"6ff8bdf0_ae8a0748","updated":"2025-12-29 01:01:33.000000000","message":"Could this patch resolve this bug: https://bugs.launchpad.net/nova/+bug/2136993","commit_id":"960adb73f18bff676b3522affaac6b0704a76a6f"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"a6eef9615c5213e5fccd00eadc77953992d2f701","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"8ec453c9_3ee92462","updated":"2026-01-07 07:15:36.000000000","message":"recheck test failed due to timeout that is not related to this change","commit_id":"b06d37d7c75df07cefca2a20926f0474a3e457d6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5f8c56da606fb8dc62fbceb51c7709e2f8e5e377","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"87325552_7e8fe9bf","updated":"2026-02-13 15:36:19.000000000","message":"-1 is for all the unrelated damage to existing code. The comment about unifying the two flags is not critical, but might be worth considering for a follow-up refactor.","commit_id":"3cbf75e0883f8350053a082394b883d1602f97cf"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"8fb4fc75d80085af421124b129e3f0813d0ba87c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"671c5208_e8ca03b5","updated":"2026-02-12 17:16:15.000000000","message":"recheck because of CI problems with pkg_build","commit_id":"3cbf75e0883f8350053a082394b883d1602f97cf"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"085e799c7b90909086a60656c42e3fa478f2dc95","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"da609fe7_2dd2fec2","updated":"2026-02-13 20:33:23.000000000","message":"Thanks. I\u0027m proxying Sean\u0027s previous +2 as this is just trivial formatting un-damage-ing since then.","commit_id":"8d3d7e7563c49d31ff5de61b46e00f0a464f7788"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"216308407443ea749686cb30dcd7c8c3bafeb946","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"62c4ceba_03fcdbf0","in_reply_to":"da609fe7_2dd2fec2","updated":"2026-02-13 22:20:02.000000000","message":"Thank you. :)","commit_id":"8d3d7e7563c49d31ff5de61b46e00f0a464f7788"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"32d06f3cf6793730d0bda88bad88687b5761c1fc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"69377932_d6cf3e39","updated":"2026-02-16 14:33:03.000000000","message":"Just fixed a PEP8 error since the last approved patchset, so fast-approving.","commit_id":"35b1945522eea195e9795914739e3cfd6e14214b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"45f005dd04ace56001353e3c83eb746828f064af","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"f5ba228c_c67391ea","updated":"2026-02-16 14:36:49.000000000","message":"im still ok with the minor refinement since v29\n\nthanks for working on this","commit_id":"35b1945522eea195e9795914739e3cfd6e14214b"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"6b59fe2124b3e0e1080263530c50b32845d4d29a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"02cdc39a_1bb7a0ff","updated":"2026-02-14 09:25:49.000000000","message":"recheck - unrelated Neutron error","commit_id":"35b1945522eea195e9795914739e3cfd6e14214b"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d01e83aeefae401feeb588e7c8467d123046c8dc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"19321b23_cc09b217","updated":"2026-02-18 01:46:01.000000000","message":"recheck https://review.opendev.org/c/openstack/nova/+/977150 has merged","commit_id":"35b1945522eea195e9795914739e3cfd6e14214b"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"693af9dac1a81273865f87f09db2293309718f9d","unresolved":true,"context_lines":[{"line_number":1781,"context_line":"            return True"},{"line_number":1782,"context_line":"        mock_version.side_effect \u003d version_check"},{"line_number":1783,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":1784,"context_line":"        drvr.init_host(\u0027dummyhost\u0027)"},{"line_number":1785,"context_line":""},{"line_number":1786,"context_line":"    def test__check_multipath_misconfiguration(self):"},{"line_number":1787,"context_line":"        self.flags(volume_use_multipath\u003dFalse, volume_enforce_multipath\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":15,"id":"483165b9_cac06b47","line":1784,"updated":"2025-11-13 17:47:27.000000000","message":"we do not need these tests\n\nbecause it will alwasy be supported with out min libvirt version and you remvoed the condtional lotic in the production cdoe.","commit_id":"c14e7bcd17578120951806ec41c767a63caa0fd5"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bc0d8528e0715dd139c2c2ee4ca8d9e0a216a266","unresolved":false,"context_lines":[{"line_number":1781,"context_line":"            return True"},{"line_number":1782,"context_line":"        mock_version.side_effect \u003d version_check"},{"line_number":1783,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":1784,"context_line":"        drvr.init_host(\u0027dummyhost\u0027)"},{"line_number":1785,"context_line":""},{"line_number":1786,"context_line":"    def test__check_multipath_misconfiguration(self):"},{"line_number":1787,"context_line":"        self.flags(volume_use_multipath\u003dFalse, volume_enforce_multipath\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":15,"id":"ad728545_50c497cf","line":1784,"in_reply_to":"483165b9_cac06b47","updated":"2025-11-13 17:47:50.000000000","message":"Done","commit_id":"c14e7bcd17578120951806ec41c767a63caa0fd5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5f8c56da606fb8dc62fbceb51c7709e2f8e5e377","unresolved":true,"context_lines":[{"line_number":6084,"context_line":"            CONF.libvirt.virt_type, instance_ref, image_meta)"},{"line_number":6085,"context_line":"        cfg \u003d drvr._get_guest_config("},{"line_number":6086,"context_line":"            instance_ref, [], image_meta, disk_info)"},{"line_number":6087,"context_line":"        # these paths are derived from the LibvirtFixture"},{"line_number":6088,"context_line":"        self.assertEqual(\u0027/usr/share/OVMF/OVMF_CODE.fd\u0027, cfg.os_loader)"},{"line_number":6089,"context_line":"        self.assertEqual(\u0027/usr/share/OVMF/OVMF_VARS.fd\u0027, cfg.os_nvram_template)"},{"line_number":6090,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"2a1b67fd_0ea8d6c0","line":6087,"updated":"2026-02-13 15:36:19.000000000","message":"They\u0027re actually derived from the module that LibvirtFixture is defined in. Even if yours is closer to correct, this seems like unrelated damage (or gardening, depending on your point of view).","commit_id":"3cbf75e0883f8350053a082394b883d1602f97cf"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"b99b2d90f4d9e4935b47a7904a3ad979a77dfd26","unresolved":false,"context_lines":[{"line_number":6084,"context_line":"            CONF.libvirt.virt_type, instance_ref, image_meta)"},{"line_number":6085,"context_line":"        cfg \u003d drvr._get_guest_config("},{"line_number":6086,"context_line":"            instance_ref, [], image_meta, disk_info)"},{"line_number":6087,"context_line":"        # these paths are derived from the LibvirtFixture"},{"line_number":6088,"context_line":"        self.assertEqual(\u0027/usr/share/OVMF/OVMF_CODE.fd\u0027, cfg.os_loader)"},{"line_number":6089,"context_line":"        self.assertEqual(\u0027/usr/share/OVMF/OVMF_VARS.fd\u0027, cfg.os_nvram_template)"},{"line_number":6090,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"e84fc2ad_cc6f1127","line":6087,"in_reply_to":"2a1b67fd_0ea8d6c0","updated":"2026-02-13 22:19:35.000000000","message":"Acknowledged","commit_id":"3cbf75e0883f8350053a082394b883d1602f97cf"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5f8c56da606fb8dc62fbceb51c7709e2f8e5e377","unresolved":true,"context_lines":[{"line_number":19875,"context_line":"        disk_actual_size \u003d 3687091200"},{"line_number":19876,"context_line":"        disk_actual_size_blocks \u003d disk_actual_size / 512"},{"line_number":19877,"context_line":"        expected_over_committed_disk_size \u003d disk_virtual_size - \\"},{"line_number":19878,"context_line":"                disk_actual_size"},{"line_number":19879,"context_line":""},{"line_number":19880,"context_line":"        mock_getsize.return_value \u003d disk_virtual_size"},{"line_number":19881,"context_line":"        mock_stat.return_value \u003d mock.Mock(st_blocks\u003ddisk_actual_size_blocks)"}],"source_content_type":"text/x-python","patch_set":29,"id":"3d2bb6da_6a43f4ab","line":19878,"updated":"2026-02-13 15:36:19.000000000","message":"This is unrelated whitespace damage?","commit_id":"3cbf75e0883f8350053a082394b883d1602f97cf"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"b99b2d90f4d9e4935b47a7904a3ad979a77dfd26","unresolved":false,"context_lines":[{"line_number":19875,"context_line":"        disk_actual_size \u003d 3687091200"},{"line_number":19876,"context_line":"        disk_actual_size_blocks \u003d disk_actual_size / 512"},{"line_number":19877,"context_line":"        expected_over_committed_disk_size \u003d disk_virtual_size - \\"},{"line_number":19878,"context_line":"                disk_actual_size"},{"line_number":19879,"context_line":""},{"line_number":19880,"context_line":"        mock_getsize.return_value \u003d disk_virtual_size"},{"line_number":19881,"context_line":"        mock_stat.return_value \u003d mock.Mock(st_blocks\u003ddisk_actual_size_blocks)"}],"source_content_type":"text/x-python","patch_set":29,"id":"30e5e8ae_77138a5b","line":19878,"in_reply_to":"3d2bb6da_6a43f4ab","updated":"2026-02-13 22:19:35.000000000","message":"Acknowledged","commit_id":"3cbf75e0883f8350053a082394b883d1602f97cf"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5f8c56da606fb8dc62fbceb51c7709e2f8e5e377","unresolved":true,"context_lines":[{"line_number":22811,"context_line":"        with mock.patch.object(driver._conn, \u0027getVersion\u0027) as mock_getver:"},{"line_number":22812,"context_line":"            mock_getver.return_value \u003d \\"},{"line_number":22813,"context_line":"                versionutils.convert_version_to_int("},{"line_number":22814,"context_line":"                        libvirt_driver.MIN_VIRTUOZZO_VERSION) - 1"},{"line_number":22815,"context_line":""},{"line_number":22816,"context_line":"            self.assertRaises(exception.NovaException,"},{"line_number":22817,"context_line":"                              driver.init_host, \u0027wibble\u0027)"}],"source_content_type":"text/x-python","patch_set":29,"id":"7c2f2f6b_e03f1ee4","line":22814,"updated":"2026-02-13 15:36:19.000000000","message":"Unrelated?","commit_id":"3cbf75e0883f8350053a082394b883d1602f97cf"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"b99b2d90f4d9e4935b47a7904a3ad979a77dfd26","unresolved":false,"context_lines":[{"line_number":22811,"context_line":"        with mock.patch.object(driver._conn, \u0027getVersion\u0027) as mock_getver:"},{"line_number":22812,"context_line":"            mock_getver.return_value \u003d \\"},{"line_number":22813,"context_line":"                versionutils.convert_version_to_int("},{"line_number":22814,"context_line":"                        libvirt_driver.MIN_VIRTUOZZO_VERSION) - 1"},{"line_number":22815,"context_line":""},{"line_number":22816,"context_line":"            self.assertRaises(exception.NovaException,"},{"line_number":22817,"context_line":"                              driver.init_host, \u0027wibble\u0027)"}],"source_content_type":"text/x-python","patch_set":29,"id":"ef658d81_d8c961f7","line":22814,"in_reply_to":"7c2f2f6b_e03f1ee4","updated":"2026-02-13 22:19:35.000000000","message":"Acknowledged","commit_id":"3cbf75e0883f8350053a082394b883d1602f97cf"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5f8c56da606fb8dc62fbceb51c7709e2f8e5e377","unresolved":true,"context_lines":[{"line_number":29225,"context_line":"                                                     [\u0027nvidia-11\u0027])"},{"line_number":29226,"context_line":""},{"line_number":29227,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver,"},{"line_number":29228,"context_line":"                        \u0027_get_vgpu_type_per_pgpu\u0027)"},{"line_number":29229,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver, \u0027_get_mediated_devices\u0027)"},{"line_number":29230,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver,"},{"line_number":29231,"context_line":"                       \u0027_get_all_assigned_mediated_devices\u0027)"}],"source_content_type":"text/x-python","patch_set":29,"id":"563e45bd_23181259","line":29228,"updated":"2026-02-13 15:36:19.000000000","message":"Unrelated?","commit_id":"3cbf75e0883f8350053a082394b883d1602f97cf"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"b99b2d90f4d9e4935b47a7904a3ad979a77dfd26","unresolved":false,"context_lines":[{"line_number":29225,"context_line":"                                                     [\u0027nvidia-11\u0027])"},{"line_number":29226,"context_line":""},{"line_number":29227,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver,"},{"line_number":29228,"context_line":"                        \u0027_get_vgpu_type_per_pgpu\u0027)"},{"line_number":29229,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver, \u0027_get_mediated_devices\u0027)"},{"line_number":29230,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver,"},{"line_number":29231,"context_line":"                       \u0027_get_all_assigned_mediated_devices\u0027)"}],"source_content_type":"text/x-python","patch_set":29,"id":"0534c38e_a20312c4","line":29228,"in_reply_to":"563e45bd_23181259","updated":"2026-02-13 22:19:35.000000000","message":"Acknowledged","commit_id":"3cbf75e0883f8350053a082394b883d1602f97cf"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5f8c56da606fb8dc62fbceb51c7709e2f8e5e377","unresolved":true,"context_lines":[{"line_number":31365,"context_line":"        self.assertEqual(snapshot[\u0027name\u0027], \u0027test-snap\u0027)"},{"line_number":31366,"context_line":""},{"line_number":31367,"context_line":"        if expected_properties:"},{"line_number":31368,"context_line":"            for expected_key, expected_value in expected_properties.items():"},{"line_number":31369,"context_line":"                self.assertEqual(expected_value, props[expected_key])"},{"line_number":31370,"context_line":""},{"line_number":31371,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.utils.create_image\u0027,"}],"source_content_type":"text/x-python","patch_set":29,"id":"a74da51e_0803759a","line":31368,"updated":"2026-02-13 15:36:19.000000000","message":"Unrelated?","commit_id":"3cbf75e0883f8350053a082394b883d1602f97cf"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"b99b2d90f4d9e4935b47a7904a3ad979a77dfd26","unresolved":false,"context_lines":[{"line_number":31365,"context_line":"        self.assertEqual(snapshot[\u0027name\u0027], \u0027test-snap\u0027)"},{"line_number":31366,"context_line":""},{"line_number":31367,"context_line":"        if expected_properties:"},{"line_number":31368,"context_line":"            for expected_key, expected_value in expected_properties.items():"},{"line_number":31369,"context_line":"                self.assertEqual(expected_value, props[expected_key])"},{"line_number":31370,"context_line":""},{"line_number":31371,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.utils.create_image\u0027,"}],"source_content_type":"text/x-python","patch_set":29,"id":"d62ba62f_82062c18","line":31368,"in_reply_to":"a74da51e_0803759a","updated":"2026-02-13 22:19:35.000000000","message":"Acknowledged","commit_id":"3cbf75e0883f8350053a082394b883d1602f97cf"}],"nova/virt/driver.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0c3c6c80d6203405ad92958255cfa586c3bfd3e4","unresolved":true,"context_lines":[{"line_number":573,"context_line":"        raise NotImplementedError()"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"    def destroy(self, context, instance, network_info, block_device_info\u003dNone,"},{"line_number":576,"context_line":"                destroy_disks\u003dTrue, destroy_secrets\u003dTrue, keep_nvram\u003dFalse):"},{"line_number":577,"context_line":"        \"\"\"Destroy the specified instance from the Hypervisor."},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        If the instance is not found (for example if networking failed), this"}],"source_content_type":"text/x-python","patch_set":3,"id":"a9e31fe2_7af528b6","line":576,"updated":"2025-10-14 17:05:46.000000000","message":"you also do not need to and should not modify the virt dirver interface to pass this new flag again see https://review.opendev.org/c/openstack/nova/+/955657\n\nthe logic shoudl be almost identical to that patch just with a diffent bit flag.","commit_id":"1088ea30951af058498747993652a72fa9d234a5"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"ae17b0b8b75dabd5aee80e61caece7623c6ef001","unresolved":false,"context_lines":[{"line_number":573,"context_line":"        raise NotImplementedError()"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"    def destroy(self, context, instance, network_info, block_device_info\u003dNone,"},{"line_number":576,"context_line":"                destroy_disks\u003dTrue, destroy_secrets\u003dTrue, keep_nvram\u003dFalse):"},{"line_number":577,"context_line":"        \"\"\"Destroy the specified instance from the Hypervisor."},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        If the instance is not found (for example if networking failed), this"}],"source_content_type":"text/x-python","patch_set":3,"id":"4025d76f_41e21b43","line":576,"in_reply_to":"a9e31fe2_7af528b6","updated":"2025-11-12 07:36:39.000000000","message":"Done","commit_id":"1088ea30951af058498747993652a72fa9d234a5"}],"nova/virt/libvirt/config.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d3352c908509dbd54b8ca3de390fc3afb0cdee71","unresolved":true,"context_lines":[{"line_number":3179,"context_line":"            nvram \u003d self._text_node(\"nvram\", self.os_nvram)"},{"line_number":3180,"context_line":"            if self.os_nvram_template:"},{"line_number":3181,"context_line":"                nvram.set(\"template\", self.os_nvram_template)"},{"line_number":3182,"context_line":"            os.append(nvram)"},{"line_number":3183,"context_line":""},{"line_number":3184,"context_line":"        if self.os_initrd is not None:"},{"line_number":3185,"context_line":"            os.append(self._text_node(\"initrd\", self.os_initrd))"}],"source_content_type":"text/x-python","patch_set":8,"id":"9202a99d_57a0cf4d","line":3182,"updated":"2025-11-03 16:23:00.000000000","message":"im not sure these changes are needed or correct.","commit_id":"b93fb1a3ca2e976d71aa49272b220dbb0823e601"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"ae17b0b8b75dabd5aee80e61caece7623c6ef001","unresolved":false,"context_lines":[{"line_number":3179,"context_line":"            nvram \u003d self._text_node(\"nvram\", self.os_nvram)"},{"line_number":3180,"context_line":"            if self.os_nvram_template:"},{"line_number":3181,"context_line":"                nvram.set(\"template\", self.os_nvram_template)"},{"line_number":3182,"context_line":"            os.append(nvram)"},{"line_number":3183,"context_line":""},{"line_number":3184,"context_line":"        if self.os_initrd is not None:"},{"line_number":3185,"context_line":"            os.append(self._text_node(\"initrd\", self.os_initrd))"}],"source_content_type":"text/x-python","patch_set":8,"id":"e65dc436_6fcfd4ef","line":3182,"in_reply_to":"9202a99d_57a0cf4d","updated":"2025-11-12 07:36:39.000000000","message":"Done","commit_id":"b93fb1a3ca2e976d71aa49272b220dbb0823e601"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"adaafd2819c46dbce49f960ba906c62b76f3ac35","unresolved":true,"context_lines":[{"line_number":3181,"context_line":"        ):"},{"line_number":3182,"context_line":"            nvram \u003d self._text_node(\"nvram\", self.os_nvram)"},{"line_number":3183,"context_line":"            nvram.set(\"template\", self.os_nvram_template)"},{"line_number":3184,"context_line":"            os.append(nvram)"},{"line_number":3185,"context_line":""},{"line_number":3186,"context_line":"        if self.os_initrd is not None:"},{"line_number":3187,"context_line":"            os.append(self._text_node(\"initrd\", self.os_initrd))"}],"source_content_type":"text/x-python","patch_set":13,"id":"2c3038c2_6316200b","side":"PARENT","line":3184,"updated":"2025-11-12 08:09:33.000000000","message":"this seams incorrect to me.\n\nwhere are we removing this?\n\nthe sie effect is this entirly disables the nvram configuration that thsi block is doing a as we are nologner addign teh nvram element.","commit_id":"b7d50570c7a79a38b0db6476ccb3c662b237f69b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b707478871a74e9f2c8d73d6360f15a2f836b5d5","unresolved":true,"context_lines":[{"line_number":3181,"context_line":"        ):"},{"line_number":3182,"context_line":"            nvram \u003d self._text_node(\"nvram\", self.os_nvram)"},{"line_number":3183,"context_line":"            nvram.set(\"template\", self.os_nvram_template)"},{"line_number":3184,"context_line":"            os.append(nvram)"},{"line_number":3185,"context_line":""},{"line_number":3186,"context_line":"        if self.os_initrd is not None:"},{"line_number":3187,"context_line":"            os.append(self._text_node(\"initrd\", self.os_initrd))"}],"source_content_type":"text/x-python","patch_set":13,"id":"5696a06c_065b68e8","side":"PARENT","line":3184,"in_reply_to":"2c3038c2_6316200b","updated":"2025-11-12 08:32:31.000000000","message":"this is the main reason for the -1 currently\n\n\nim incliend to think that we shoudl perhaps proceed with this patch once this is adresssed and if we need to do more for cold migration we shoudl do that in a seperate patch.","commit_id":"b7d50570c7a79a38b0db6476ccb3c662b237f69b"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"af525d20fde44b531932ca92af0d9b813b17e648","unresolved":false,"context_lines":[{"line_number":3181,"context_line":"        ):"},{"line_number":3182,"context_line":"            nvram \u003d self._text_node(\"nvram\", self.os_nvram)"},{"line_number":3183,"context_line":"            nvram.set(\"template\", self.os_nvram_template)"},{"line_number":3184,"context_line":"            os.append(nvram)"},{"line_number":3185,"context_line":""},{"line_number":3186,"context_line":"        if self.os_initrd is not None:"},{"line_number":3187,"context_line":"            os.append(self._text_node(\"initrd\", self.os_initrd))"}],"source_content_type":"text/x-python","patch_set":13,"id":"9e065921_96d81d3a","side":"PARENT","line":3184,"in_reply_to":"5696a06c_065b68e8","updated":"2025-11-12 08:42:49.000000000","message":"Thanks, I removed that by accident. When I put it back the cold migration doesn\u0027t throw an error anymore (of course, the NVRAM is still lost in that case). Hence, I agree that we should postpone that to a separate issue.","commit_id":"b7d50570c7a79a38b0db6476ccb3c662b237f69b"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d791949619fbd89dd1f8baff04628a7a8da41b83","unresolved":true,"context_lines":[{"line_number":10916,"context_line":"                    libvirt.VIR_MIGRATE_TUNNELLED \u003d\u003d 0):"},{"line_number":10917,"context_line":"                    migrate_uri \u003d self._migrate_uri(dest)"},{"line_number":10918,"context_line":""},{"line_number":10919,"context_line":"            # Migrate UEFI variable store file"},{"line_number":10920,"context_line":"            inst_base \u003d libvirt_utils.get_instance_path(instance)"},{"line_number":10921,"context_line":"            nvram_file \u003d self._get_nvram_path(inst_base, instance.name)"},{"line_number":10922,"context_line":"            on_execute \u003d lambda process: \\"}],"source_content_type":"text/x-python","patch_set":3,"id":"757d580b_a9be176a","line":10919,"updated":"2025-10-14 17:03:55.000000000","message":"as noted on irc instead of copying the nvram we just need to pass\nlibvirt.VIR_DOMAIN_UNDEFINE_KEEP_NVRAM as part of the glage we pass wehn undeining the domain.\n\nhttps://github.com/libvirt/libvirt/blob/b42a12174c787b99cd6fcb29b44e4b13bd64ee58/include/libvirt/libvirt-domain.h#L2373\n\nand VIR_DOMAIN_UNDEFINE_NVRAM if an only if we want to delete teh nvram.\n\nyou should follow the same pattern as\n\nhttps://review.opendev.org/c/openstack/nova/+/955657","commit_id":"1088ea30951af058498747993652a72fa9d234a5"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"ae17b0b8b75dabd5aee80e61caece7623c6ef001","unresolved":false,"context_lines":[{"line_number":10916,"context_line":"                    libvirt.VIR_MIGRATE_TUNNELLED \u003d\u003d 0):"},{"line_number":10917,"context_line":"                    migrate_uri \u003d self._migrate_uri(dest)"},{"line_number":10918,"context_line":""},{"line_number":10919,"context_line":"            # Migrate UEFI variable store file"},{"line_number":10920,"context_line":"            inst_base \u003d libvirt_utils.get_instance_path(instance)"},{"line_number":10921,"context_line":"            nvram_file \u003d self._get_nvram_path(inst_base, instance.name)"},{"line_number":10922,"context_line":"            on_execute \u003d lambda process: \\"}],"source_content_type":"text/x-python","patch_set":3,"id":"c673034b_b5286280","line":10919,"in_reply_to":"757d580b_a9be176a","updated":"2025-11-12 07:36:39.000000000","message":"Done","commit_id":"1088ea30951af058498747993652a72fa9d234a5"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d3352c908509dbd54b8ca3de390fc3afb0cdee71","unresolved":true,"context_lines":[{"line_number":7072,"context_line":""},{"line_number":7073,"context_line":"    def _get_nvram_path(self, inst_base, inst_name):"},{"line_number":7074,"context_line":"        return f\"{inst_base}/{inst_name}_VARS.fd\""},{"line_number":7075,"context_line":""},{"line_number":7076,"context_line":"    def _configure_guest_by_virt_type("},{"line_number":7077,"context_line":"        self,"},{"line_number":7078,"context_line":"        guest: vconfig.LibvirtConfigGuest,"}],"source_content_type":"text/x-python","patch_set":8,"id":"971fcc06_6a1972ab","line":7075,"updated":"2025-11-03 16:23:00.000000000","message":"this is incorect i blieve as we shoudl not be moving this form libvirt default location\n\n\nthis is left over form when you were copying the data.","commit_id":"b93fb1a3ca2e976d71aa49272b220dbb0823e601"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"ae17b0b8b75dabd5aee80e61caece7623c6ef001","unresolved":false,"context_lines":[{"line_number":7072,"context_line":""},{"line_number":7073,"context_line":"    def _get_nvram_path(self, inst_base, inst_name):"},{"line_number":7074,"context_line":"        return f\"{inst_base}/{inst_name}_VARS.fd\""},{"line_number":7075,"context_line":""},{"line_number":7076,"context_line":"    def _configure_guest_by_virt_type("},{"line_number":7077,"context_line":"        self,"},{"line_number":7078,"context_line":"        guest: vconfig.LibvirtConfigGuest,"}],"source_content_type":"text/x-python","patch_set":8,"id":"411bc1ff_46e1a6cb","line":7075,"in_reply_to":"971fcc06_6a1972ab","updated":"2025-11-12 07:36:39.000000000","message":"Done","commit_id":"b93fb1a3ca2e976d71aa49272b220dbb0823e601"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d3352c908509dbd54b8ca3de390fc3afb0cdee71","unresolved":true,"context_lines":[{"line_number":7160,"context_line":"                guest.os_loader_type \u003d \u0027pflash\u0027"},{"line_number":7161,"context_line":"                guest.os_nvram \u003d self._get_nvram_path("},{"line_number":7162,"context_line":"                        libvirt_utils.get_instance_path(instance),"},{"line_number":7163,"context_line":"                        instance.name)"},{"line_number":7164,"context_line":"                if hw_firmware_stateless:"},{"line_number":7165,"context_line":"                    guest.os_loader_stateless \u003d True"},{"line_number":7166,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"ac3b3d12_45b848ac","line":7163,"updated":"2025-11-03 16:23:00.000000000","message":"i dont think we need to change this either.","commit_id":"b93fb1a3ca2e976d71aa49272b220dbb0823e601"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"cd02b041734661a165909f5f59219959d7dde5c6","unresolved":true,"context_lines":[{"line_number":7160,"context_line":"                guest.os_loader_type \u003d \u0027pflash\u0027"},{"line_number":7161,"context_line":"                guest.os_nvram \u003d self._get_nvram_path("},{"line_number":7162,"context_line":"                        libvirt_utils.get_instance_path(instance),"},{"line_number":7163,"context_line":"                        instance.name)"},{"line_number":7164,"context_line":"                if hw_firmware_stateless:"},{"line_number":7165,"context_line":"                    guest.os_loader_stateless \u003d True"},{"line_number":7166,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa12b791_e3091dfa","line":7163,"in_reply_to":"24f2af62_16b1cc29","updated":"2025-11-12 08:05:22.000000000","message":"Cold migration doesn\u0027t work. I thought libvirt should handle copying the file with the correct permissions. Did I misunderstand that?","commit_id":"b93fb1a3ca2e976d71aa49272b220dbb0823e601"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d7e113bf20f413a4f84be5e964f4272fcfae23f6","unresolved":true,"context_lines":[{"line_number":7160,"context_line":"                guest.os_loader_type \u003d \u0027pflash\u0027"},{"line_number":7161,"context_line":"                guest.os_nvram \u003d self._get_nvram_path("},{"line_number":7162,"context_line":"                        libvirt_utils.get_instance_path(instance),"},{"line_number":7163,"context_line":"                        instance.name)"},{"line_number":7164,"context_line":"                if hw_firmware_stateless:"},{"line_number":7165,"context_line":"                    guest.os_loader_stateless \u003d True"},{"line_number":7166,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"24f2af62_16b1cc29","line":7163,"in_reply_to":"782b5693_1ddca56d","updated":"2025-11-12 07:59:51.000000000","message":"cold or live?\n\nnova shoudl not be trying to move the file for live migration qemu should handel it\n\nfor cold migration nova would need to copy the file with 600 permission but the file shoudl not be owned by nova or readbale by nova without usihng sudo to elevate access.","commit_id":"b93fb1a3ca2e976d71aa49272b220dbb0823e601"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"ae17b0b8b75dabd5aee80e61caece7623c6ef001","unresolved":false,"context_lines":[{"line_number":7160,"context_line":"                guest.os_loader_type \u003d \u0027pflash\u0027"},{"line_number":7161,"context_line":"                guest.os_nvram \u003d self._get_nvram_path("},{"line_number":7162,"context_line":"                        libvirt_utils.get_instance_path(instance),"},{"line_number":7163,"context_line":"                        instance.name)"},{"line_number":7164,"context_line":"                if hw_firmware_stateless:"},{"line_number":7165,"context_line":"                    guest.os_loader_stateless \u003d True"},{"line_number":7166,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"782b5693_1ddca56d","line":7163,"in_reply_to":"a16b5dba_c822c151","updated":"2025-11-12 07:36:39.000000000","message":"You were right, that messed things up. After removing this (and the other unnecessary code), the NVRAM is preserved after stopping/starting, reboots, and live migration. However, for a migration the permission problem still persists.","commit_id":"b93fb1a3ca2e976d71aa49272b220dbb0823e601"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b0aa69f27516e8f79488f6882de0d6279494c6b1","unresolved":true,"context_lines":[{"line_number":7160,"context_line":"                guest.os_loader_type \u003d \u0027pflash\u0027"},{"line_number":7161,"context_line":"                guest.os_nvram \u003d self._get_nvram_path("},{"line_number":7162,"context_line":"                        libvirt_utils.get_instance_path(instance),"},{"line_number":7163,"context_line":"                        instance.name)"},{"line_number":7164,"context_line":"                if hw_firmware_stateless:"},{"line_number":7165,"context_line":"                    guest.os_loader_stateless \u003d True"},{"line_number":7166,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"a16b5dba_c822c151","line":7163,"in_reply_to":"ac3b3d12_45b848ac","updated":"2025-11-03 16:32:33.000000000","message":"ya this is resulting in the nvram file chanign location when an existing instnace is rebooted after this change is applied\n\n \u003cos firmware\u003d\u0027efi\u0027\u003e\n    \u003ctype arch\u003d\u0027x86_64\u0027 machine\u003d\u0027pc-q35-8.2\u0027\u003ehvm\u003c/type\u003e\n    \u003cfirmware\u003e\n      \u003cfeature enabled\u003d\u0027no\u0027 name\u003d\u0027enrolled-keys\u0027/\u003e\n      \u003cfeature enabled\u003d\u0027no\u0027 name\u003d\u0027secure-boot\u0027/\u003e\n    \u003c/firmware\u003e\n    \u003cloader readonly\u003d\u0027yes\u0027 secure\u003d\u0027no\u0027 type\u003d\u0027pflash\u0027\u003e/usr/share/OVMF/OVMF_CODE_4M.fd\u003c/loader\u003e\n    \u003cnvram template\u003d\u0027/usr/share/OVMF/OVMF_VARS_4M.fd\u0027\u003e/opt/stack/data/nova/instances/8dd27614-422c-4fcd-8b1c-68f7cec5ee09/instance-00000001_VARS.fd\u003c/nvram\u003e\n    \u003cboot dev\u003d\u0027hd\u0027/\u003e\n    \u003csmbios mode\u003d\u0027sysinfo\u0027/\u003e\n  \u003c/os\u003e\n  \n\nso this is incorrect i can confirm that if i can hard reboot the isntance\n\n(venv) ubuntu@devstack-nvram:~/repos/nova$ sudo ls -lc /opt/stack/data/nova/instances/8dd27614-422c-4fcd-8b1c-68f7cec5ee09/instance-00000001_VARS.fd\n-rw------- 1 libvirt-qemu kvm 540672 Nov  3 16:27 /opt/stack/data/nova/instances/8dd27614-422c-4fcd-8b1c-68f7cec5ee09/instance-00000001_VARS.fd\n\n\nbut it also recreating the file \n\n(venv) ubuntu@devstack-nvram:~/repos/nova$ sudo ls -lc /opt/stack/data/nova/instances/8dd27614-422c-4fcd-8b1c-68f7cec5ee09/instance-00000001_VARS.fd\n-rw------- 1 libvirt-qemu kvm 540672 Nov  3 16:30 /opt/stack/data/nova/instances/8dd27614-422c-4fcd-8b1c-68f7cec5ee09/instance-00000001_VARS.fd\n\nso this is not a fucntional fix.\n\nset remove the settign of the path an dleave it to libvirt ot manage the nvram file entrily\n\ni we see it continue to change teh creation date after that we need to audit nova\u0027s code to make sure we are not modifying it by copythin the template or similar","commit_id":"b93fb1a3ca2e976d71aa49272b220dbb0823e601"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"af525d20fde44b531932ca92af0d9b813b17e648","unresolved":false,"context_lines":[{"line_number":7160,"context_line":"                guest.os_loader_type \u003d \u0027pflash\u0027"},{"line_number":7161,"context_line":"                guest.os_nvram \u003d self._get_nvram_path("},{"line_number":7162,"context_line":"                        libvirt_utils.get_instance_path(instance),"},{"line_number":7163,"context_line":"                        instance.name)"},{"line_number":7164,"context_line":"                if hw_firmware_stateless:"},{"line_number":7165,"context_line":"                    guest.os_loader_stateless \u003d True"},{"line_number":7166,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"72116585_efc5ff3a","line":7163,"in_reply_to":"ac5bed66_f00a62ea","updated":"2025-11-12 08:42:49.000000000","message":"Acknowledged","commit_id":"b93fb1a3ca2e976d71aa49272b220dbb0823e601"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d3d6c3306004aee9be75626577d980a6848bed1b","unresolved":true,"context_lines":[{"line_number":7160,"context_line":"                guest.os_loader_type \u003d \u0027pflash\u0027"},{"line_number":7161,"context_line":"                guest.os_nvram \u003d self._get_nvram_path("},{"line_number":7162,"context_line":"                        libvirt_utils.get_instance_path(instance),"},{"line_number":7163,"context_line":"                        instance.name)"},{"line_number":7164,"context_line":"                if hw_firmware_stateless:"},{"line_number":7165,"context_line":"                    guest.os_loader_stateless \u003d True"},{"line_number":7166,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"ac5bed66_f00a62ea","line":7163,"in_reply_to":"fa12b791_e3091dfa","updated":"2025-11-12 08:27:02.000000000","message":"libvirt will only do that for live migration because its actully done by qemu\n\nfor cold migration it would have to be done by nova explicit.\n\nwe would have to read the path form the current instance and then copy the file with the existing permission and ownership to the destination.\n\ncold migration is not something that is natively supproted by libvirt the way we use libvirt. we effectivly mvoe all the data ourselves and then define a new domain on the destioan and form a libvir tpoint of view its just a new vm on the new host.","commit_id":"b93fb1a3ca2e976d71aa49272b220dbb0823e601"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ab6b492c5c16224c1ac1dfde193907bc3638c469","unresolved":true,"context_lines":[{"line_number":265,"context_line":"# Minimum version of Qemu that supports multifd migration with post-copy"},{"line_number":266,"context_line":"MIN_MULTIFD_WITH_POSTCOPY_QEMU_VERSION \u003d (10, 1, 0)"},{"line_number":267,"context_line":"# Minimum version to preserve NVRAM"},{"line_number":268,"context_line":"MIN_VERSION_INT_FOR_KEEP_NVRAM \u003d (2, 3, 0)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"REGISTER_IMAGE_PROPERTY_DEFAULTS \u003d ["},{"line_number":271,"context_line":"    \u0027hw_machine_type\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"073c9959_a9d81481","line":268,"updated":"2025-11-12 09:41:03.000000000","message":"if this was added in 2.3.0 then we do not need a check as our min supproted version of libvirt is 8.0.0  so we only ever need to have a min version if and only if it below our current min version.\n\nlooking at the release notes for libvirt it was indeed added in v2.3.0: Oct 04 2016\n\nthat means we can simplfy this logice remvoign the  _may_keep_nvram variable and the assocated condtional logic.\n\nfor vtpm this may be needed but not for nvram","commit_id":"641341dfde86d7c2ef27c388fc65581ccfc5b571"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b70c49539098fef29e14ede0c10cd1290e651af2","unresolved":false,"context_lines":[{"line_number":265,"context_line":"# Minimum version of Qemu that supports multifd migration with post-copy"},{"line_number":266,"context_line":"MIN_MULTIFD_WITH_POSTCOPY_QEMU_VERSION \u003d (10, 1, 0)"},{"line_number":267,"context_line":"# Minimum version to preserve NVRAM"},{"line_number":268,"context_line":"MIN_VERSION_INT_FOR_KEEP_NVRAM \u003d (2, 3, 0)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"REGISTER_IMAGE_PROPERTY_DEFAULTS \u003d ["},{"line_number":271,"context_line":"    \u0027hw_machine_type\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"b7bea1c5_e743ca0c","line":268,"in_reply_to":"073c9959_a9d81481","updated":"2025-11-13 17:45:49.000000000","message":"Done","commit_id":"641341dfde86d7c2ef27c388fc65581ccfc5b571"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"64578bf9355a1cd8d7e2af3c2d6410620b590f5b","unresolved":false,"context_lines":[{"line_number":265,"context_line":"# Minimum version of Qemu that supports multifd migration with post-copy"},{"line_number":266,"context_line":"MIN_MULTIFD_WITH_POSTCOPY_QEMU_VERSION \u003d (10, 1, 0)"},{"line_number":267,"context_line":"# Minimum version to preserve NVRAM"},{"line_number":268,"context_line":"MIN_VERSION_INT_FOR_KEEP_NVRAM \u003d (2, 3, 0)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"REGISTER_IMAGE_PROPERTY_DEFAULTS \u003d ["},{"line_number":271,"context_line":"    \u0027hw_machine_type\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"ab37ef30_cb1f48eb","line":268,"in_reply_to":"073c9959_a9d81481","updated":"2025-11-18 09:18:49.000000000","message":"I agree.","commit_id":"641341dfde86d7c2ef27c388fc65581ccfc5b571"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"34609a388d0778f269437c140e07e1646718d279","unresolved":true,"context_lines":[{"line_number":12544,"context_line":"                                         host\u003ddest, on_execute\u003don_execute,"},{"line_number":12545,"context_line":"                                         on_completion\u003don_completion)"},{"line_number":12546,"context_line":""},{"line_number":12547,"context_line":"            # Copy NVRAM file if present"},{"line_number":12548,"context_line":"            src_nvram_path \u003d self._get_nvram_path("},{"line_number":12549,"context_line":"                    libvirt_utils.get_instance_path(instance),"},{"line_number":12550,"context_line":"                    instance.name)"}],"source_content_type":"text/x-python","patch_set":17,"id":"2c08400d_baac062c","line":12547,"updated":"2025-12-09 18:56:34.000000000","message":"This is my current attempt to preserve the NVRAM during a cold migration. I\u0027m not sure if changing the permissions is the best approach or if there\u0027s a function to copy it despite the permissions.","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"cff963b5e1d1b595a6dfcb09017e1e5343bf6a55","unresolved":false,"context_lines":[{"line_number":12544,"context_line":"                                         host\u003ddest, on_execute\u003don_execute,"},{"line_number":12545,"context_line":"                                         on_completion\u003don_completion)"},{"line_number":12546,"context_line":""},{"line_number":12547,"context_line":"            # Copy NVRAM file if present"},{"line_number":12548,"context_line":"            src_nvram_path \u003d self._get_nvram_path("},{"line_number":12549,"context_line":"                    libvirt_utils.get_instance_path(instance),"},{"line_number":12550,"context_line":"                    instance.name)"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a84db72_dfb53c22","line":12547,"in_reply_to":"2c08400d_baac062c","updated":"2025-12-19 07:44:03.000000000","message":"I\u0027ll remove this for now and create a separate patch for it.","commit_id":"90c9a52cce03efba9264b1792b184f0782021bab"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5f8c56da606fb8dc62fbceb51c7709e2f8e5e377","unresolved":true,"context_lines":[{"line_number":1652,"context_line":"        self.cleanup(context, instance, network_info, block_device_info,"},{"line_number":1653,"context_line":"                     destroy_disks, destroy_secrets\u003ddestroy_secrets)"},{"line_number":1654,"context_line":""},{"line_number":1655,"context_line":"    def _delete_guest_configuration(self, guest, keep_vtpm, keep_nvram):"},{"line_number":1656,"context_line":"        \"\"\"Wrapper around guest.delete_configuration which incorporates version"},{"line_number":1657,"context_line":"        checks for the additional arguments."},{"line_number":1658,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"5ee56483_3ab75fc4","line":1655,"updated":"2026-02-13 15:36:19.000000000","message":"I\u0027m not seeing where the keep flags for nvmram and vtpu are ever different. For the guest interface, it feels appropriate to keep both knobs, but for simplicity it seems like maybe a \"keep guest firmware state\" flag might make sense which drives both. Meaning, nvram and vtpu state are both considered \"bios information\" (of yesteryear) and their fates are managed together.","commit_id":"3cbf75e0883f8350053a082394b883d1602f97cf"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"b99b2d90f4d9e4935b47a7904a3ad979a77dfd26","unresolved":true,"context_lines":[{"line_number":1652,"context_line":"        self.cleanup(context, instance, network_info, block_device_info,"},{"line_number":1653,"context_line":"                     destroy_disks, destroy_secrets\u003ddestroy_secrets)"},{"line_number":1654,"context_line":""},{"line_number":1655,"context_line":"    def _delete_guest_configuration(self, guest, keep_vtpm, keep_nvram):"},{"line_number":1656,"context_line":"        \"\"\"Wrapper around guest.delete_configuration which incorporates version"},{"line_number":1657,"context_line":"        checks for the additional arguments."},{"line_number":1658,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"2f4c183a_e1916db2","line":1655,"in_reply_to":"5ee56483_3ab75fc4","updated":"2026-02-13 22:19:35.000000000","message":"I\u0027m not sure if they can actually be different since I mainly looked into the NVRAM. I\u0027d be fine with merging them into one flag here if there are no objections from anyone.","commit_id":"3cbf75e0883f8350053a082394b883d1602f97cf"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5f8c56da606fb8dc62fbceb51c7709e2f8e5e377","unresolved":true,"context_lines":[{"line_number":1766,"context_line":"        :param cleanup_instance_dir: If the instance dir should be removed"},{"line_number":1767,"context_line":"        :param cleanup_instance_disks: If the instance disks should be removed."},{"line_number":1768,"context_line":"            Also removes ephemeral encryption secrets, if present, as well as"},{"line_number":1769,"context_line":"            NVRAM data."},{"line_number":1770,"context_line":"        :param destroy_secrets: If the cinder volume encryption secrets should"},{"line_number":1771,"context_line":"            be deleted."},{"line_number":1772,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":29,"id":"0f278ba1_77179d31","line":1769,"updated":"2026-02-13 15:36:19.000000000","message":"...and vTPU it looks like.","commit_id":"3cbf75e0883f8350053a082394b883d1602f97cf"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"b99b2d90f4d9e4935b47a7904a3ad979a77dfd26","unresolved":false,"context_lines":[{"line_number":1766,"context_line":"        :param cleanup_instance_dir: If the instance dir should be removed"},{"line_number":1767,"context_line":"        :param cleanup_instance_disks: If the instance disks should be removed."},{"line_number":1768,"context_line":"            Also removes ephemeral encryption secrets, if present, as well as"},{"line_number":1769,"context_line":"            NVRAM data."},{"line_number":1770,"context_line":"        :param destroy_secrets: If the cinder volume encryption secrets should"},{"line_number":1771,"context_line":"            be deleted."},{"line_number":1772,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":29,"id":"ba623014_24459111","line":1769,"in_reply_to":"0f278ba1_77179d31","updated":"2026-02-13 22:19:35.000000000","message":"Acknowledged","commit_id":"3cbf75e0883f8350053a082394b883d1602f97cf"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"085e799c7b90909086a60656c42e3fa478f2dc95","unresolved":true,"context_lines":[{"line_number":1766,"context_line":"        :param cleanup_instance_dir: If the instance dir should be removed"},{"line_number":1767,"context_line":"        :param cleanup_instance_disks: If the instance disks should be removed."},{"line_number":1768,"context_line":"            Also removes ephemeral encryption secrets, if present, as well as"},{"line_number":1769,"context_line":"            vTPM and NVRAM data."},{"line_number":1770,"context_line":"        :param destroy_secrets: If the cinder volume encryption secrets should"},{"line_number":1771,"context_line":"            be deleted."},{"line_number":1772,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":31,"id":"10af8646_c3bc1efd","line":1769,"updated":"2026-02-13 20:33:23.000000000","message":"LOL, I had 3D printing on the brain with TPU.. TPM, yes thanks :)","commit_id":"8d3d7e7563c49d31ff5de61b46e00f0a464f7788"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"b99b2d90f4d9e4935b47a7904a3ad979a77dfd26","unresolved":false,"context_lines":[{"line_number":1766,"context_line":"        :param cleanup_instance_dir: If the instance dir should be removed"},{"line_number":1767,"context_line":"        :param cleanup_instance_disks: If the instance disks should be removed."},{"line_number":1768,"context_line":"            Also removes ephemeral encryption secrets, if present, as well as"},{"line_number":1769,"context_line":"            vTPM and NVRAM data."},{"line_number":1770,"context_line":"        :param destroy_secrets: If the cinder volume encryption secrets should"},{"line_number":1771,"context_line":"            be deleted."},{"line_number":1772,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":31,"id":"999a0107_655e74fe","line":1769,"in_reply_to":"10af8646_c3bc1efd","updated":"2026-02-13 22:19:35.000000000","message":"I was a bit confused at first but then figured that it can only mean TPM. :D","commit_id":"8d3d7e7563c49d31ff5de61b46e00f0a464f7788"}],"releasenotes/notes/preserve-nvram-ab6d3d2fe923301f.yaml":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ab6b492c5c16224c1ac1dfde193907bc3638c469","unresolved":true,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    NVRAM variable store is preserved during stop/start, hard reboot, and live"},{"line_number":5,"context_line":"    migration by passing the corresponding flag to libvirt."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"8e6dc3e5_91500a68","line":5,"updated":"2025-11-12 09:41:03.000000000","message":"nit: this shoudl also refence the bugs ideally \n\nadd someithng like\n\nsee: \u003curl\u003e for more details","commit_id":"641341dfde86d7c2ef27c388fc65581ccfc5b571"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b70c49539098fef29e14ede0c10cd1290e651af2","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    NVRAM variable store is preserved during stop/start, hard reboot, and live"},{"line_number":5,"context_line":"    migration by passing the corresponding flag to libvirt."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"4efc1fac_7487aa84","line":5,"in_reply_to":"8e6dc3e5_91500a68","updated":"2025-11-13 17:45:49.000000000","message":"Done","commit_id":"641341dfde86d7c2ef27c388fc65581ccfc5b571"},{"author":{"_account_id":38350,"name":"Nicolai Ruckel","display_name":"Nicolai Ruckel","email":"nicolai.ruckel@cloudandheat.com","username":"nicolai.ruckel"},"change_message_id":"64578bf9355a1cd8d7e2af3c2d6410620b590f5b","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    NVRAM variable store is preserved during stop/start, hard reboot, and live"},{"line_number":5,"context_line":"    migration by passing the corresponding flag to libvirt."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"2d1539a6_e12ced99","line":5,"in_reply_to":"8e6dc3e5_91500a68","updated":"2025-11-18 09:18:49.000000000","message":"I added the link to the bug.","commit_id":"641341dfde86d7c2ef27c388fc65581ccfc5b571"}]}
