)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d6a08473b5a087072cab5daa887437f8866087ec","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Lee Yarwood \u003clyarwood@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2021-01-06 14:39:20 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP nova-manage: Add commands for managaing instance machine type"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change adds two new commands under a new libvirt category to"},{"line_number":10,"context_line":"nova-manage to help operators check, initially set and update in the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3b29d999_52d0cbc6","line":7,"range":{"start_line":7,"start_character":34,"end_line":7,"end_character":43},"updated":"2021-01-06 14:56:31.000000000","message":"managing","commit_id":"40a92544f10ef2afb6d0ce4e98cd126bc89440fd"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"91824d7716aee51e9e37d2f094e0c53e79dbaeef","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Lee Yarwood \u003clyarwood@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2021-01-06 14:39:20 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP nova-manage: Add commands for managaing instance machine type"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change adds two new commands under a new libvirt category to"},{"line_number":10,"context_line":"nova-manage to help operators check, initially set and update in the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"24d7c0aa_0d224dd0","line":7,"range":{"start_line":7,"start_character":34,"end_line":7,"end_character":43},"in_reply_to":"3b29d999_52d0cbc6","updated":"2021-02-16 13:49:31.000000000","message":"Done","commit_id":"40a92544f10ef2afb6d0ce4e98cd126bc89440fd"}],"doc/source/cli/nova-manage.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f758de04994576f8de111ba7c122204b68e20725","unresolved":true,"context_lines":[{"line_number":720,"context_line":"machine_type"},{"line_number":721,"context_line":"~~~~~~~~~~~~"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"``nova-manage machine_type get [instance-uuid]``"},{"line_number":724,"context_line":"    Fetch and display the recorded machine type of an instance."},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"    **Return Codes**"}],"source_content_type":"text/x-rst","patch_set":10,"id":"fdeb2ec6_58e48da3","line":723,"updated":"2021-02-15 17:52:46.000000000","message":"This is (libvirt) virt driver specific. Could we instead namespace it under a suitable name, i.e.\n\n  nova-manage libvirt get_machine_type  # or get-machine-type\n\nAlternatively, we could make this more generic. Something like:\n\n  nova-manage instances get-prop hw_machine_type\n\nSimilar to my comments in [1]\n\n[1] https://review.opendev.org/c/openstack/nova/+/769548/10/nova/virt/machine_type_utils.py","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0d3685aa6a8d0b821c82d733cd183fa58547b8f7","unresolved":true,"context_lines":[{"line_number":720,"context_line":"machine_type"},{"line_number":721,"context_line":"~~~~~~~~~~~~"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"``nova-manage machine_type get [instance-uuid]``"},{"line_number":724,"context_line":"    Fetch and display the recorded machine type of an instance."},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"    **Return Codes**"}],"source_content_type":"text/x-rst","patch_set":10,"id":"cb5e6358_a4d41a34","line":723,"in_reply_to":"0f0b932c_06e97225","updated":"2021-02-19 17:49:26.000000000","message":"\u003e I think there\u0027s a potential that HyperV users *could* end up using these commands to move between the current generations of their `machine type` and any future generations if that\u0027s even a supported thing to do in HyperV.\n\nI went and investigated this as part of my write up on UEFI and Secure Boot in nova [1]. In short, it doesn\u0027t sound like this is possible, at least not in a manner that we could support in nova. To summarize, This is in large part because (a) Hyper-V doesn\u0027t support this natively and (b) it would be hard for it to do so as the two generations are very different, akin to PC+BIOS vs. Q35+UEFI in libvirt world, with different disk types (IDE-based VHD or SCSI-based VHDX) thrown in for good measure. There\u0027s lots more info at [2], [3] and [4] plus an old conversion script at [5] to show what\u0027s involved.\n\nAll of this to say, I still don\u0027t like the \u0027machine_type\u0027 category (/o\\) and don\u0027t want it to be a top-level command that users will see. I\u0027d be okay with nesting it under \u0027libvirt\u0027 or \u0027db\u0027 or even some other generic section that I haven\u0027t thought of, though I think you said in another that \u0027db\u0027 isn\u0027t an option due to some weirdness needed. Perhaps this could go under \u0027libvirt\u0027 as a generic \u0027get-image-prop\u0027 command that only supports \u0027hw_machine_type\u0027 for now? I don\u0027t think it would be crazy amount of rework and I\u0027d be willing to chip in if you agreed, as it would let me build upon next cycle with the things I mentioned above.\n\n[1] https://review.opendev.org/c/openstack/nova/+/776684\n[2] https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/plan/should-i-create-a-generation-1-or-2-virtual-machine-in-hyper-v\n[3] https://social.technet.microsoft.com/Forums/windows/en-US/87a15b00-500f-4a31-90f5-02d8d12d45d6/how-to-convert-gen-2-vm-to-gen-1?forum\u003dwinserverhyperv\n[4] https://docs.microsoft.com/en-us/archive/blogs/jhoward/hyper-v-generation-2-virtual-machines-part-10\n[5] https://github.com/JDogHerman/Powershell_Scripts/blob/master/Borrowed%20Code/Convert-VMGeneration.ps1","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"67eaab78a5cf5b9e547038cba014f1fcd4b96963","unresolved":true,"context_lines":[{"line_number":720,"context_line":"machine_type"},{"line_number":721,"context_line":"~~~~~~~~~~~~"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"``nova-manage machine_type get [instance-uuid]``"},{"line_number":724,"context_line":"    Fetch and display the recorded machine type of an instance."},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"    **Return Codes**"}],"source_content_type":"text/x-rst","patch_set":10,"id":"b92cadf0_9739a0d9","line":723,"in_reply_to":"11f7720a_8c9fdaf2","updated":"2021-02-16 09:37:20.000000000","message":"That\u0027s a fair point, but realistically it seems unlikely that Hyper V users would be using this functionality, no? If the generic approach works for you, I think that\u0027s  maybe the way to go? I\u0027d be okay with some libvirt-specific code inside the implementation if needed (varying shades of grey, I know /o\\)","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"99a7c962cb46e31d2578f0cbc571eb3daec33551","unresolved":true,"context_lines":[{"line_number":720,"context_line":"machine_type"},{"line_number":721,"context_line":"~~~~~~~~~~~~"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"``nova-manage machine_type get [instance-uuid]``"},{"line_number":724,"context_line":"    Fetch and display the recorded machine type of an instance."},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"    **Return Codes**"}],"source_content_type":"text/x-rst","patch_set":10,"id":"0f0b932c_06e97225","line":723,"in_reply_to":"b0df488b_a962d727","updated":"2021-02-18 10:46:00.000000000","message":"Hm, you convinced me. The get-prop command would make sense and would be safe but the set-prop command would be a nightmare as we don\u0027t have a generic way to set image properties and deal with the consequences. So the set-prop command would be a lie as it would only support machine_type prop now.","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"41b2c35e434f9c488e05851a8ad1c919528a6e81","unresolved":true,"context_lines":[{"line_number":720,"context_line":"machine_type"},{"line_number":721,"context_line":"~~~~~~~~~~~~"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"``nova-manage machine_type get [instance-uuid]``"},{"line_number":724,"context_line":"    Fetch and display the recorded machine type of an instance."},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"    **Return Codes**"}],"source_content_type":"text/x-rst","patch_set":10,"id":"11f7720a_8c9fdaf2","line":723,"in_reply_to":"b3730dbc_116d0071","updated":"2021-02-15 19:53:01.000000000","message":"I should\u0027ve called this out earlier in the series but it isn\u0027t actually libvirt specific. hw_machine_type is also used by the HyperV driver, something I stumbled upon while writing the docs at the end of the series. As a result I moved the nova-manage commands under a more generic category and moved the util code up to virt. I can make this even more generic if you want but the update code has some specific caveats in it for machine type updates that I\u0027d need to keep somewhere.","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"66ad9201da0defa780c163552d2d4aa5f4ec684c","unresolved":true,"context_lines":[{"line_number":720,"context_line":"machine_type"},{"line_number":721,"context_line":"~~~~~~~~~~~~"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"``nova-manage machine_type get [instance-uuid]``"},{"line_number":724,"context_line":"    Fetch and display the recorded machine type of an instance."},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"    **Return Codes**"}],"source_content_type":"text/x-rst","patch_set":10,"id":"b0df488b_a962d727","line":723,"in_reply_to":"b92cadf0_9739a0d9","updated":"2021-02-16 10:10:50.000000000","message":"I think there\u0027s a potential that HyperV users *could* end up using these commands to move between the current generations of their `machine type` and any future generations if that\u0027s even a supported thing to do in HyperV.\n\nThinking about it some more I\u0027m really on the fence about a generic set of `nova-manage image_meta` commands. It\u0027s possible but a load more work and code refactoring to include the specific hw_machine_type caveats somewhere. In the future I wouldn\u0027t mind following up and introducing such commands that could then replace some of the util code here but I\u0027ve not got the energy to spend on such an endeavour this release.\n\nIt\u0027s also bad UX IMHO, having both get, update and list_unset under a single machine_type category makes it much easier for admins to follow the eventual update workflow IMHO.","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9116a4cdb1e461d638772625f95760b41957221a","unresolved":true,"context_lines":[{"line_number":720,"context_line":"machine_type"},{"line_number":721,"context_line":"~~~~~~~~~~~~"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"``nova-manage machine_type get [instance-uuid]``"},{"line_number":724,"context_line":"    Fetch and display the recorded machine type of an instance."},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"    **Return Codes**"}],"source_content_type":"text/x-rst","patch_set":10,"id":"b3730dbc_116d0071","line":723,"in_reply_to":"fdeb2ec6_58e48da3","updated":"2021-02-15 18:08:43.000000000","message":"\u003e This is (libvirt) virt driver specific. Could we instead namespace it under a suitable name, i.e.\n\u003e \n\u003e   nova-manage libvirt get_machine_type  # or get-machine-type\n\u003e \n\u003e Alternatively, we could make this more generic. Something like:\n\u003e \n\u003e   nova-manage instances get-prop hw_machine_type\n\nhm, that seems useful for other cases too\n\n\u003e \n\u003e Similar to my comments in [1]\n\u003e \n\u003e [1] https://review.opendev.org/c/openstack/nova/+/769548/10/nova/virt/machine_type_utils.py","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"99aaaeff1a6eec3e24ec6c4ebc6ffb137470f0ed","unresolved":true,"context_lines":[{"line_number":711,"context_line":"libvirt"},{"line_number":712,"context_line":"~~~~~~~"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"``nova-manage libvirt get_machine_type [instance-uuid]``"},{"line_number":715,"context_line":"    Fetch and display the recorded machine type of a libvirt instance."},{"line_number":716,"context_line":""},{"line_number":717,"context_line":"    **Return Codes**"}],"source_content_type":"text/x-rst","patch_set":12,"id":"27288a1b_119a5dd0","line":714,"range":{"start_line":714,"start_character":22,"end_line":714,"end_character":38},"updated":"2021-03-03 12:47:15.000000000","message":"this is now not in sync with the implementation","commit_id":"42618111b678250e1a3aa3c7d823385ea0abfcdf"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3315c4a210d101240ffa40d675d6f2fe16ed70cf","unresolved":false,"context_lines":[{"line_number":711,"context_line":"libvirt"},{"line_number":712,"context_line":"~~~~~~~"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"``nova-manage libvirt get_machine_type [instance-uuid]``"},{"line_number":715,"context_line":"    Fetch and display the recorded machine type of a libvirt instance."},{"line_number":716,"context_line":""},{"line_number":717,"context_line":"    **Return Codes**"}],"source_content_type":"text/x-rst","patch_set":12,"id":"d11d8a37_d1bf2ca4","line":714,"range":{"start_line":714,"start_character":22,"end_line":714,"end_character":38},"in_reply_to":"27288a1b_119a5dd0","updated":"2021-03-03 14:06:57.000000000","message":"Ack","commit_id":"42618111b678250e1a3aa3c7d823385ea0abfcdf"}],"mypy-files.txt":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"99a7c962cb46e31d2578f0cbc571eb3daec33551","unresolved":true,"context_lines":[{"line_number":4,"context_line":"nova/scheduler/utils.py"},{"line_number":5,"context_line":"nova/virt/driver.py"},{"line_number":6,"context_line":"nova/virt/hardware.py"},{"line_number":7,"context_line":"nova/virt/machine_type_utils.py"},{"line_number":8,"context_line":"nova/virt/libvirt/__init__.py"},{"line_number":9,"context_line":"nova/virt/libvirt/driver.py"},{"line_number":10,"context_line":"nova/virt/libvirt/host.py"}],"source_content_type":"text/plain","patch_set":11,"id":"c419b7c8_6c070e13","line":7,"updated":"2021-02-18 10:46:00.000000000","message":"if we want to keep this file ordered my name then this should go to after the nova/virt/libvirt files. It can be done in a follow up","commit_id":"211caf454c31a59876b589e16a74247843e67cf6"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"99aaaeff1a6eec3e24ec6c4ebc6ffb137470f0ed","unresolved":false,"context_lines":[{"line_number":4,"context_line":"nova/scheduler/utils.py"},{"line_number":5,"context_line":"nova/virt/driver.py"},{"line_number":6,"context_line":"nova/virt/hardware.py"},{"line_number":7,"context_line":"nova/virt/machine_type_utils.py"},{"line_number":8,"context_line":"nova/virt/libvirt/__init__.py"},{"line_number":9,"context_line":"nova/virt/libvirt/driver.py"},{"line_number":10,"context_line":"nova/virt/libvirt/host.py"}],"source_content_type":"text/plain","patch_set":11,"id":"78c11569_69318be2","line":7,"in_reply_to":"00415397_101a1f16","updated":"2021-03-03 12:47:15.000000000","message":"yeah, my bad.","commit_id":"211caf454c31a59876b589e16a74247843e67cf6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0d3685aa6a8d0b821c82d733cd183fa58547b8f7","unresolved":true,"context_lines":[{"line_number":4,"context_line":"nova/scheduler/utils.py"},{"line_number":5,"context_line":"nova/virt/driver.py"},{"line_number":6,"context_line":"nova/virt/hardware.py"},{"line_number":7,"context_line":"nova/virt/machine_type_utils.py"},{"line_number":8,"context_line":"nova/virt/libvirt/__init__.py"},{"line_number":9,"context_line":"nova/virt/libvirt/driver.py"},{"line_number":10,"context_line":"nova/virt/libvirt/host.py"}],"source_content_type":"text/plain","patch_set":11,"id":"00415397_101a1f16","line":7,"in_reply_to":"c419b7c8_6c070e13","updated":"2021-02-19 17:49:26.000000000","message":"Hmm, this is correct if we\u0027re placing files before folders like e.g. \u0027ls -1 *\u0027 would do","commit_id":"211caf454c31a59876b589e16a74247843e67cf6"}],"nova/cmd/manage.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"31e6d324fc5ada19c0587addf15f69e59c4c29ec","unresolved":true,"context_lines":[{"line_number":2806,"context_line":"        # TODO(lyarwood): Add a --force param to allow this?"},{"line_number":2807,"context_line":"        existing_mtype \u003d instance.system_metadata.get(\u0027hw_machine_type\u0027)"},{"line_number":2808,"context_line":"        if existing_mtype:"},{"line_number":2809,"context_line":"            for mtype in [\u0027pc\u0027, \u0027i440fx\u0027, \u0027q35\u0027]:"},{"line_number":2810,"context_line":"                if mtype in existing_mtype and mtype not in machine_type:"},{"line_number":2811,"context_line":"                    print(_(\"Unable to update instance %(instance_uuid)s from \""},{"line_number":2812,"context_line":"                            \"machine type %(existing_machine_type)s to \""}],"source_content_type":"text/x-python","patch_set":1,"id":"209aa58b_ac9d362f","line":2809,"range":{"start_line":2809,"start_character":26,"end_line":2809,"end_character":30},"updated":"2021-01-06 17:33:36.000000000","message":"I think this will match \"pc\" and \"pc-q35-5.1\" won\u0027t it? Are the machine types in the spec accurate?","commit_id":"40a92544f10ef2afb6d0ce4e98cd126bc89440fd"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2e3ab86d68d827c93dc188f3ab83443858815928","unresolved":true,"context_lines":[{"line_number":2806,"context_line":"        # TODO(lyarwood): Add a --force param to allow this?"},{"line_number":2807,"context_line":"        existing_mtype \u003d instance.system_metadata.get(\u0027hw_machine_type\u0027)"},{"line_number":2808,"context_line":"        if existing_mtype:"},{"line_number":2809,"context_line":"            for mtype in [\u0027pc\u0027, \u0027i440fx\u0027, \u0027q35\u0027]:"},{"line_number":2810,"context_line":"                if mtype in existing_mtype and mtype not in machine_type:"},{"line_number":2811,"context_line":"                    print(_(\"Unable to update instance %(instance_uuid)s from \""},{"line_number":2812,"context_line":"                            \"machine type %(existing_machine_type)s to \""}],"source_content_type":"text/x-python","patch_set":1,"id":"552f1df2_23d206bf","line":2809,"range":{"start_line":2809,"start_character":26,"end_line":2809,"end_character":30},"in_reply_to":"1a316868_6b803519","updated":"2021-01-07 15:05:33.000000000","message":"Okay, re-reading this with the list in front of me, I see that you\u0027re comparing all three prefixes against both existing and new which, validation aside is what I was suggesting in my loop below, so this makes sense. Sorry for the noise.","commit_id":"40a92544f10ef2afb6d0ce4e98cd126bc89440fd"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"da333a03f02a58696b62ad434970ac7a791a1866","unresolved":true,"context_lines":[{"line_number":2806,"context_line":"        # TODO(lyarwood): Add a --force param to allow this?"},{"line_number":2807,"context_line":"        existing_mtype \u003d instance.system_metadata.get(\u0027hw_machine_type\u0027)"},{"line_number":2808,"context_line":"        if existing_mtype:"},{"line_number":2809,"context_line":"            for mtype in [\u0027pc\u0027, \u0027i440fx\u0027, \u0027q35\u0027]:"},{"line_number":2810,"context_line":"                if mtype in existing_mtype and mtype not in machine_type:"},{"line_number":2811,"context_line":"                    print(_(\"Unable to update instance %(instance_uuid)s from \""},{"line_number":2812,"context_line":"                            \"machine type %(existing_machine_type)s to \""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a316868_6b803519","line":2809,"range":{"start_line":2809,"start_character":26,"end_line":2809,"end_character":30},"in_reply_to":"209aa58b_ac9d362f","updated":"2021-01-07 13:07:12.000000000","message":"Yeah they are (directly from QEMU below for x86_64) and yes it will, that\u0027s why I included i440fx and q35 as separate items so we can match both the alias and versioned machine types:\n\n$ qemu-kvm --version\nQEMU emulator version 5.1.0 (qemu-5.1.0-8.fc33)\nCopyright (c) 2003-2020 Fabrice Bellard and the QEMU Project developers\n\n$ qemu-kvm -machine help\nSupported machines are:\nmicrovm              microvm (i386)\nxenfv-4.2            Xen Fully-virtualized PC\nxenfv                Xen Fully-virtualized PC (alias of xenfv-3.1)\nxenfv-3.1            Xen Fully-virtualized PC\npc                   Standard PC (i440FX + PIIX, 1996) (alias of pc-i440fx-5.1)\npc-i440fx-5.1        Standard PC (i440FX + PIIX, 1996) (default)\npc-i440fx-5.0        Standard PC (i440FX + PIIX, 1996)\npc-i440fx-4.2        Standard PC (i440FX + PIIX, 1996)\npc-i440fx-4.1        Standard PC (i440FX + PIIX, 1996)\npc-i440fx-4.0        Standard PC (i440FX + PIIX, 1996)\npc-i440fx-3.1        Standard PC (i440FX + PIIX, 1996)\npc-i440fx-3.0        Standard PC (i440FX + PIIX, 1996)\npc-i440fx-2.9        Standard PC (i440FX + PIIX, 1996)\npc-i440fx-2.8        Standard PC (i440FX + PIIX, 1996)\npc-i440fx-2.7        Standard PC (i440FX + PIIX, 1996)\npc-i440fx-2.6        Standard PC (i440FX + PIIX, 1996)\npc-i440fx-2.5        Standard PC (i440FX + PIIX, 1996)\npc-i440fx-2.4        Standard PC (i440FX + PIIX, 1996)\npc-i440fx-2.3        Standard PC (i440FX + PIIX, 1996)\npc-i440fx-2.2        Standard PC (i440FX + PIIX, 1996)\npc-i440fx-2.12       Standard PC (i440FX + PIIX, 1996)\npc-i440fx-2.11       Standard PC (i440FX + PIIX, 1996)\npc-i440fx-2.10       Standard PC (i440FX + PIIX, 1996)\npc-i440fx-2.1        Standard PC (i440FX + PIIX, 1996)\npc-i440fx-2.0        Standard PC (i440FX + PIIX, 1996)\npc-i440fx-1.7        Standard PC (i440FX + PIIX, 1996)\npc-i440fx-1.6        Standard PC (i440FX + PIIX, 1996)\npc-i440fx-1.5        Standard PC (i440FX + PIIX, 1996)\npc-i440fx-1.4        Standard PC (i440FX + PIIX, 1996)\npc-1.3               Standard PC (i440FX + PIIX, 1996) (deprecated)\npc-1.2               Standard PC (i440FX + PIIX, 1996) (deprecated)\npc-1.1               Standard PC (i440FX + PIIX, 1996) (deprecated)\npc-1.0               Standard PC (i440FX + PIIX, 1996) (deprecated)\nq35                  Standard PC (Q35 + ICH9, 2009) (alias of pc-q35-5.1)\npc-q35-5.1           Standard PC (Q35 + ICH9, 2009)\npc-q35-5.0           Standard PC (Q35 + ICH9, 2009)\npc-q35-4.2           Standard PC (Q35 + ICH9, 2009)\npc-q35-4.1           Standard PC (Q35 + ICH9, 2009)\npc-q35-4.0.1         Standard PC (Q35 + ICH9, 2009)\npc-q35-4.0           Standard PC (Q35 + ICH9, 2009)\npc-q35-3.1           Standard PC (Q35 + ICH9, 2009)\npc-q35-3.0           Standard PC (Q35 + ICH9, 2009)\npc-q35-2.9           Standard PC (Q35 + ICH9, 2009)\npc-q35-2.8           Standard PC (Q35 + ICH9, 2009)\npc-q35-2.7           Standard PC (Q35 + ICH9, 2009)\npc-q35-2.6           Standard PC (Q35 + ICH9, 2009)\npc-q35-2.5           Standard PC (Q35 + ICH9, 2009)\npc-q35-2.4           Standard PC (Q35 + ICH9, 2009)\npc-q35-2.12          Standard PC (Q35 + ICH9, 2009)\npc-q35-2.11          Standard PC (Q35 + ICH9, 2009)\npc-q35-2.10          Standard PC (Q35 + ICH9, 2009)\nisapc                ISA-only PC\nnone                 empty machine\nxenpv                Xen Para-virtualized PC","commit_id":"40a92544f10ef2afb6d0ce4e98cd126bc89440fd"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"91824d7716aee51e9e37d2f094e0c53e79dbaeef","unresolved":false,"context_lines":[{"line_number":2806,"context_line":"        # TODO(lyarwood): Add a --force param to allow this?"},{"line_number":2807,"context_line":"        existing_mtype \u003d instance.system_metadata.get(\u0027hw_machine_type\u0027)"},{"line_number":2808,"context_line":"        if existing_mtype:"},{"line_number":2809,"context_line":"            for mtype in [\u0027pc\u0027, \u0027i440fx\u0027, \u0027q35\u0027]:"},{"line_number":2810,"context_line":"                if mtype in existing_mtype and mtype not in machine_type:"},{"line_number":2811,"context_line":"                    print(_(\"Unable to update instance %(instance_uuid)s from \""},{"line_number":2812,"context_line":"                            \"machine type %(existing_machine_type)s to \""}],"source_content_type":"text/x-python","patch_set":1,"id":"53c3f435_f21a18c5","line":2809,"range":{"start_line":2809,"start_character":26,"end_line":2809,"end_character":30},"in_reply_to":"552f1df2_23d206bf","updated":"2021-02-16 13:49:31.000000000","message":"Done","commit_id":"40a92544f10ef2afb6d0ce4e98cd126bc89440fd"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"31e6d324fc5ada19c0587addf15f69e59c4c29ec","unresolved":true,"context_lines":[{"line_number":2826,"context_line":"            # operators accidently moving to an older version"},{"line_number":2827,"context_line":"            print(_(\u0027Updating instance %s machine type from %s to %s\u0027) % ("},{"line_number":2828,"context_line":"                    instance.uuid, existing_mtype, machine_type))"},{"line_number":2829,"context_line":"        else:"},{"line_number":2830,"context_line":"            print(_(\u0027Setting instance %s machine type to %s\u0027) % ("},{"line_number":2831,"context_line":"                    instance.uuid, machine_type))"},{"line_number":2832,"context_line":"        instance.system_metadata[\u0027hw_machine_type\u0027] \u003d machine_type"}],"source_content_type":"text/x-python","patch_set":1,"id":"facade50_7fc6c87d","line":2829,"updated":"2021-01-06 17:33:36.000000000","message":"You\u0027re really going to let people set this to \"foobar\"? Surely seems like we should validate that these look like what we expect, even if we don\u0027t validate the actual q35 versions.\n\nAlso, it looks to me like if I set this to \"crapcar\" and then realize that broke everything, I\u0027ll have to hack the database to get it back to i440fx or something. So yeah, I think we need a --force. In the case where that\u0027s used, I would just print out a BFW, along with what it used to be and maybe something like \"when this doesn\u0027t work anymore run $cmd to undo the mess you\u0027ve made\".\n\nFor the validation, maybe something like this totally untested code:\n\n allowed \u003d [\u0027^pc$\u0027, \u0027^i440fx\u0027, \u0027^pc-q35-.*\u0027]\n for pattern in allowed:\n     if re.match(pattern, proposed):\n         if not re.match(pattern, existing):\n             print(\u0027No changesies\u0027)\n             # fail\n         # save and return\n print(\u0027Invalid machine_type\u0027)","commit_id":"40a92544f10ef2afb6d0ce4e98cd126bc89440fd"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"91824d7716aee51e9e37d2f094e0c53e79dbaeef","unresolved":false,"context_lines":[{"line_number":2826,"context_line":"            # operators accidently moving to an older version"},{"line_number":2827,"context_line":"            print(_(\u0027Updating instance %s machine type from %s to %s\u0027) % ("},{"line_number":2828,"context_line":"                    instance.uuid, existing_mtype, machine_type))"},{"line_number":2829,"context_line":"        else:"},{"line_number":2830,"context_line":"            print(_(\u0027Setting instance %s machine type to %s\u0027) % ("},{"line_number":2831,"context_line":"                    instance.uuid, machine_type))"},{"line_number":2832,"context_line":"        instance.system_metadata[\u0027hw_machine_type\u0027] \u003d machine_type"}],"source_content_type":"text/x-python","patch_set":1,"id":"80943f2a_02d3203c","line":2829,"in_reply_to":"8d53c94b_8e844334","updated":"2021-02-16 13:49:31.000000000","message":"Done","commit_id":"40a92544f10ef2afb6d0ce4e98cd126bc89440fd"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"da333a03f02a58696b62ad434970ac7a791a1866","unresolved":true,"context_lines":[{"line_number":2826,"context_line":"            # operators accidently moving to an older version"},{"line_number":2827,"context_line":"            print(_(\u0027Updating instance %s machine type from %s to %s\u0027) % ("},{"line_number":2828,"context_line":"                    instance.uuid, existing_mtype, machine_type))"},{"line_number":2829,"context_line":"        else:"},{"line_number":2830,"context_line":"            print(_(\u0027Setting instance %s machine type to %s\u0027) % ("},{"line_number":2831,"context_line":"                    instance.uuid, machine_type))"},{"line_number":2832,"context_line":"        instance.system_metadata[\u0027hw_machine_type\u0027] \u003d machine_type"}],"source_content_type":"text/x-python","patch_set":1,"id":"8d53c94b_8e844334","line":2829,"in_reply_to":"facade50_7fc6c87d","updated":"2021-01-07 13:07:12.000000000","message":"Yup I can add some basic validation here thanks.","commit_id":"40a92544f10ef2afb6d0ce4e98cd126bc89440fd"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"31e6d324fc5ada19c0587addf15f69e59c4c29ec","unresolved":true,"context_lines":[{"line_number":2862,"context_line":"                    cctxt, instance_uuid, expected_attrs\u003d[\u0027system_metadata\u0027])"},{"line_number":2863,"context_line":"                # NOTE(lyarwood): Now that we have the cell targetted context"},{"line_number":2864,"context_line":"                # and instance record go ahead and update the machine type."},{"line_number":2865,"context_line":"                return self._update_machine_type(instance, machine_type)"},{"line_number":2866,"context_line":"        except (exception.InstanceNotFound,"},{"line_number":2867,"context_line":"                exception.InstanceMappingNotFound) as e:"},{"line_number":2868,"context_line":"            print(_(str(e)))"}],"source_content_type":"text/x-python","patch_set":1,"id":"b3323fea_0ca7b275","line":2865,"updated":"2021-01-06 17:33:36.000000000","message":"Things are getting pretty right-squished in the definition of this helper. Especially since I think we should be doing more validation, why not put this in the libvirt module and just raise descriptive exceptions from there so we know what exit code is appropriate? Specifically, as above, I think we want to be more specific with the values allowed here, unless I\u0027m missing some other machine types that are important.","commit_id":"40a92544f10ef2afb6d0ce4e98cd126bc89440fd"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"91824d7716aee51e9e37d2f094e0c53e79dbaeef","unresolved":false,"context_lines":[{"line_number":2862,"context_line":"                    cctxt, instance_uuid, expected_attrs\u003d[\u0027system_metadata\u0027])"},{"line_number":2863,"context_line":"                # NOTE(lyarwood): Now that we have the cell targetted context"},{"line_number":2864,"context_line":"                # and instance record go ahead and update the machine type."},{"line_number":2865,"context_line":"                return self._update_machine_type(instance, machine_type)"},{"line_number":2866,"context_line":"        except (exception.InstanceNotFound,"},{"line_number":2867,"context_line":"                exception.InstanceMappingNotFound) as e:"},{"line_number":2868,"context_line":"            print(_(str(e)))"}],"source_content_type":"text/x-python","patch_set":1,"id":"b2e83964_acc7a9f7","line":2865,"in_reply_to":"788b6fb9_08813473","updated":"2021-02-16 13:49:31.000000000","message":"Done","commit_id":"40a92544f10ef2afb6d0ce4e98cd126bc89440fd"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"da333a03f02a58696b62ad434970ac7a791a1866","unresolved":true,"context_lines":[{"line_number":2862,"context_line":"                    cctxt, instance_uuid, expected_attrs\u003d[\u0027system_metadata\u0027])"},{"line_number":2863,"context_line":"                # NOTE(lyarwood): Now that we have the cell targetted context"},{"line_number":2864,"context_line":"                # and instance record go ahead and update the machine type."},{"line_number":2865,"context_line":"                return self._update_machine_type(instance, machine_type)"},{"line_number":2866,"context_line":"        except (exception.InstanceNotFound,"},{"line_number":2867,"context_line":"                exception.InstanceMappingNotFound) as e:"},{"line_number":2868,"context_line":"            print(_(str(e)))"}],"source_content_type":"text/x-python","patch_set":1,"id":"f363b175_925314a7","line":2865,"in_reply_to":"b3323fea_0ca7b275","updated":"2021-01-07 13:07:12.000000000","message":"I\u0027ll move this into the libvirt module but I really want to avoid importing the world into nova-manage by accident so I\u0027ll keep it outside of nova.virt.libvirt.utils etc into something like nova.virt.libvirt.machine_type_utils.","commit_id":"40a92544f10ef2afb6d0ce4e98cd126bc89440fd"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2e3ab86d68d827c93dc188f3ab83443858815928","unresolved":true,"context_lines":[{"line_number":2862,"context_line":"                    cctxt, instance_uuid, expected_attrs\u003d[\u0027system_metadata\u0027])"},{"line_number":2863,"context_line":"                # NOTE(lyarwood): Now that we have the cell targetted context"},{"line_number":2864,"context_line":"                # and instance record go ahead and update the machine type."},{"line_number":2865,"context_line":"                return self._update_machine_type(instance, machine_type)"},{"line_number":2866,"context_line":"        except (exception.InstanceNotFound,"},{"line_number":2867,"context_line":"                exception.InstanceMappingNotFound) as e:"},{"line_number":2868,"context_line":"            print(_(str(e)))"}],"source_content_type":"text/x-python","patch_set":1,"id":"788b6fb9_08813473","line":2865,"in_reply_to":"f363b175_925314a7","updated":"2021-01-07 15:05:33.000000000","message":"Yeah, importing actual libvirt bits here would potentially prevent this from being easy to run on a not-a-compute-node machine. It just seems like this is worth putting in the libvirt module tree for the sake of organization. Precedent being in several places we import a data migration routine from the object where it\u0027s defined and run it here.","commit_id":"40a92544f10ef2afb6d0ce4e98cd126bc89440fd"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9116a4cdb1e461d638772625f95760b41957221a","unresolved":true,"context_lines":[{"line_number":2751,"context_line":""},{"line_number":2752,"context_line":""},{"line_number":2753,"context_line":"class MachineTypeCommands(object):"},{"line_number":2754,"context_line":"    \"\"\"Commands for managing aspects of libvirt hosted instances\"\"\""},{"line_number":2755,"context_line":""},{"line_number":2756,"context_line":"    @action_description("},{"line_number":2757,"context_line":"        _(\"Fetch the stored machine type of the instance from the database.\"))"}],"source_content_type":"text/x-python","patch_set":10,"id":"2c97b50b_f976532f","line":2754,"updated":"2021-02-15 18:08:43.000000000","message":"The comment suggests a more generic class while the class\u0027 name is very specific","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"41b2c35e434f9c488e05851a8ad1c919528a6e81","unresolved":false,"context_lines":[{"line_number":2751,"context_line":""},{"line_number":2752,"context_line":""},{"line_number":2753,"context_line":"class MachineTypeCommands(object):"},{"line_number":2754,"context_line":"    \"\"\"Commands for managing aspects of libvirt hosted instances\"\"\""},{"line_number":2755,"context_line":""},{"line_number":2756,"context_line":"    @action_description("},{"line_number":2757,"context_line":"        _(\"Fetch the stored machine type of the instance from the database.\"))"}],"source_content_type":"text/x-python","patch_set":10,"id":"aa8f8d4f_aeb03673","line":2754,"in_reply_to":"2c97b50b_f976532f","updated":"2021-02-15 19:53:01.000000000","message":"Gah yeah this is left over from the original commands that I had under a libvirt category. I\u0027ll update it in a respin.","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9116a4cdb1e461d638772625f95760b41957221a","unresolved":true,"context_lines":[{"line_number":2772,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":2773,"context_line":"            mtype \u003d machine_type_utils.get_machine_type(ctxt, instance_uuid)"},{"line_number":2774,"context_line":"            if mtype:"},{"line_number":2775,"context_line":"                print(_(mtype))"},{"line_number":2776,"context_line":"                return 0"},{"line_number":2777,"context_line":"            else:"},{"line_number":2778,"context_line":"                print(_(\u0027No machine type registered for instance %s\u0027 %"}],"source_content_type":"text/x-python","patch_set":10,"id":"d0c889dc_b4a398a7","line":2775,"range":{"start_line":2775,"start_character":22,"end_line":2775,"end_character":30},"updated":"2021-02-15 18:08:43.000000000","message":"Do we translate the machine_type enum values?","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"41b2c35e434f9c488e05851a8ad1c919528a6e81","unresolved":false,"context_lines":[{"line_number":2772,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":2773,"context_line":"            mtype \u003d machine_type_utils.get_machine_type(ctxt, instance_uuid)"},{"line_number":2774,"context_line":"            if mtype:"},{"line_number":2775,"context_line":"                print(_(mtype))"},{"line_number":2776,"context_line":"                return 0"},{"line_number":2777,"context_line":"            else:"},{"line_number":2778,"context_line":"                print(_(\u0027No machine type registered for instance %s\u0027 %"}],"source_content_type":"text/x-python","patch_set":10,"id":"b76d062c_d7d8964b","line":2775,"range":{"start_line":2775,"start_character":22,"end_line":2775,"end_character":30},"in_reply_to":"d0c889dc_b4a398a7","updated":"2021-02-15 19:53:01.000000000","message":"Absolutely not.","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"67eaab78a5cf5b9e547038cba014f1fcd4b96963","unresolved":true,"context_lines":[{"line_number":2780,"context_line":"                return 3"},{"line_number":2781,"context_line":"        except (exception.InstanceNotFound,"},{"line_number":2782,"context_line":"                exception.InstanceMappingNotFound) as e:"},{"line_number":2783,"context_line":"            print(_(str(e)))"},{"line_number":2784,"context_line":"            return 2"},{"line_number":2785,"context_line":"        except Exception:"},{"line_number":2786,"context_line":"            LOG.exception(\u0027Unexpected error\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"dac66ba4_d7cb7fd3","line":2783,"updated":"2021-02-16 09:37:20.000000000","message":"As above, should this be translated? I guess exceptions are wrapped in markers and therefore would have translations...\n\n/me wonders if anyone is still translating nova nowadays or if this is all for nought...","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"66ad9201da0defa780c163552d2d4aa5f4ec684c","unresolved":true,"context_lines":[{"line_number":2780,"context_line":"                return 3"},{"line_number":2781,"context_line":"        except (exception.InstanceNotFound,"},{"line_number":2782,"context_line":"                exception.InstanceMappingNotFound) as e:"},{"line_number":2783,"context_line":"            print(_(str(e)))"},{"line_number":2784,"context_line":"            return 2"},{"line_number":2785,"context_line":"        except Exception:"},{"line_number":2786,"context_line":"            LOG.exception(\u0027Unexpected error\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"67182ddc_044a53a5","line":2783,"in_reply_to":"dac66ba4_d7cb7fd3","updated":"2021-02-16 10:10:50.000000000","message":"Yeah true they should already be wrapped so this isn\u0027t required and no I\u0027ve not seen any translation dumps of late so I guess this isn\u0027t even worth it anymore.","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"99aaaeff1a6eec3e24ec6c4ebc6ffb137470f0ed","unresolved":true,"context_lines":[{"line_number":2628,"context_line":"        _(\"Fetch the stored machine type of the instance from the database.\"))"},{"line_number":2629,"context_line":"    @args(\u0027instance_uuid\u0027, metavar\u003d\u0027\u003cinstance_uuid\u003e\u0027,"},{"line_number":2630,"context_line":"          help\u003d\u0027UUID of instance to fetch the machine type for\u0027)"},{"line_number":2631,"context_line":"    def get(self, instance_uuid\u003dNone):"},{"line_number":2632,"context_line":"        \"\"\"Fetch the stored machine type of the instance from the database."},{"line_number":2633,"context_line":""},{"line_number":2634,"context_line":"        Return codes:"}],"source_content_type":"text/x-python","patch_set":12,"id":"2147d2e7_d9831437","line":2631,"range":{"start_line":2631,"start_character":8,"end_line":2631,"end_character":11},"updated":"2021-03-03 12:47:15.000000000","message":"hm, this means that the command will be \n\n    $ nova-manage libvirt get\n\nbut the doc says\n\n    $ nova-manage libvirt get_machine_type","commit_id":"42618111b678250e1a3aa3c7d823385ea0abfcdf"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3315c4a210d101240ffa40d675d6f2fe16ed70cf","unresolved":false,"context_lines":[{"line_number":2628,"context_line":"        _(\"Fetch the stored machine type of the instance from the database.\"))"},{"line_number":2629,"context_line":"    @args(\u0027instance_uuid\u0027, metavar\u003d\u0027\u003cinstance_uuid\u003e\u0027,"},{"line_number":2630,"context_line":"          help\u003d\u0027UUID of instance to fetch the machine type for\u0027)"},{"line_number":2631,"context_line":"    def get(self, instance_uuid\u003dNone):"},{"line_number":2632,"context_line":"        \"\"\"Fetch the stored machine type of the instance from the database."},{"line_number":2633,"context_line":""},{"line_number":2634,"context_line":"        Return codes:"}],"source_content_type":"text/x-python","patch_set":12,"id":"a7c5700f_5bcf27dd","line":2631,"range":{"start_line":2631,"start_character":8,"end_line":2631,"end_character":11},"in_reply_to":"2147d2e7_d9831437","updated":"2021-03-03 14:06:57.000000000","message":"Ack","commit_id":"42618111b678250e1a3aa3c7d823385ea0abfcdf"}],"nova/tests/functional/libvirt/test_machine_type.py":[{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"f30c0b634db1cc0a85f3223a254ee16c2f06a60f","unresolved":true,"context_lines":[{"line_number":194,"context_line":"        self._start_server(server)"},{"line_number":195,"context_line":"        self._assert_machine_type(server[\u0027id\u0027], \u0027pc-1.2.4\u0027)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def test_machine_type_update_blocked_active(self):"},{"line_number":198,"context_line":"        self.flags(hw_machine_type\u003d\u0027x86_64\u003dpc-1.2.3\u0027, group\u003d\u0027libvirt\u0027)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        server \u003d self._create_server(networks\u003d\u0027none\u0027)"},{"line_number":201,"context_line":"        self._assert_machine_type(server[\u0027id\u0027], \u0027pc-1.2.3\u0027)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        self.assertRaises("},{"line_number":204,"context_line":"            exception.InstanceInvalidState,"},{"line_number":205,"context_line":"            self._update_machine_type,"},{"line_number":206,"context_line":"            server[\u0027id\u0027],"},{"line_number":207,"context_line":"            \u0027pc-1.2.4\u0027"},{"line_number":208,"context_line":"        )"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def test_machine_type_update_blocked_between_alias_and_versioned(self):"},{"line_number":211,"context_line":"        self.flags(hw_machine_type\u003d\u0027x86_64\u003dpc\u0027, group\u003d\u0027libvirt\u0027)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        server \u003d self._create_server(networks\u003d\u0027none\u0027)"},{"line_number":214,"context_line":"        self._assert_machine_type(server[\u0027id\u0027], \u0027pc\u0027)"},{"line_number":215,"context_line":"        self._stop_server(server)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        self.assertRaises("},{"line_number":218,"context_line":"            exception.InvalidMachineTypeUpdate,"},{"line_number":219,"context_line":"            self._update_machine_type,"},{"line_number":220,"context_line":"            server[\u0027id\u0027],"},{"line_number":221,"context_line":"            \u0027pc-1.2.4\u0027"},{"line_number":222,"context_line":"        )"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def test_machine_type_update_blocked_between_versioned_and_alias(self):"},{"line_number":225,"context_line":"        self.flags(hw_machine_type\u003d\u0027x86_64\u003dpc-1.2.3\u0027, group\u003d\u0027libvirt\u0027)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        server \u003d self._create_server(networks\u003d\u0027none\u0027)"},{"line_number":228,"context_line":"        self._assert_machine_type(server[\u0027id\u0027], \u0027pc-1.2.3\u0027)"},{"line_number":229,"context_line":"        self._stop_server(server)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        self.assertRaises("},{"line_number":232,"context_line":"            exception.InvalidMachineTypeUpdate,"},{"line_number":233,"context_line":"            self._update_machine_type,"},{"line_number":234,"context_line":"            server[\u0027id\u0027],"},{"line_number":235,"context_line":"            \u0027pc\u0027"},{"line_number":236,"context_line":"        )"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def test_machine_type_update_blocked_between_types(self):"},{"line_number":239,"context_line":"        self.flags(hw_machine_type\u003d\u0027x86_64\u003dpc\u0027, group\u003d\u0027libvirt\u0027)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        server \u003d self._create_server(networks\u003d\u0027none\u0027)"},{"line_number":242,"context_line":"        self._assert_machine_type(server[\u0027id\u0027], \u0027pc\u0027)"},{"line_number":243,"context_line":"        self._stop_server(server)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        self.assertRaises("},{"line_number":246,"context_line":"            exception.InvalidMachineTypeUpdate,"},{"line_number":247,"context_line":"            self._update_machine_type,"},{"line_number":248,"context_line":"            server[\u0027id\u0027],"},{"line_number":249,"context_line":"            \u0027q35\u0027"},{"line_number":250,"context_line":"        )"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def test_machine_type_update_force(self):"},{"line_number":253,"context_line":"        self.flags(hw_machine_type\u003d\u0027x86_64\u003dpc\u0027, group\u003d\u0027libvirt\u0027)"},{"line_number":254,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"cd48413b_bc2a8d08","line":251,"range":{"start_line":197,"start_character":4,"end_line":251,"end_character":0},"updated":"2021-02-08 16:05:26.000000000","message":"This duplicates unit tests so I\u0027m not entirely sure if we want to keep them tbh.","commit_id":"6e62b4f95f8ac0ece7fde229a05d672a4da6843e"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"91824d7716aee51e9e37d2f094e0c53e79dbaeef","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        self._start_server(server)"},{"line_number":195,"context_line":"        self._assert_machine_type(server[\u0027id\u0027], \u0027pc-1.2.4\u0027)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def test_machine_type_update_blocked_active(self):"},{"line_number":198,"context_line":"        self.flags(hw_machine_type\u003d\u0027x86_64\u003dpc-1.2.3\u0027, group\u003d\u0027libvirt\u0027)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        server \u003d self._create_server(networks\u003d\u0027none\u0027)"},{"line_number":201,"context_line":"        self._assert_machine_type(server[\u0027id\u0027], \u0027pc-1.2.3\u0027)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        self.assertRaises("},{"line_number":204,"context_line":"            exception.InstanceInvalidState,"},{"line_number":205,"context_line":"            self._update_machine_type,"},{"line_number":206,"context_line":"            server[\u0027id\u0027],"},{"line_number":207,"context_line":"            \u0027pc-1.2.4\u0027"},{"line_number":208,"context_line":"        )"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def test_machine_type_update_blocked_between_alias_and_versioned(self):"},{"line_number":211,"context_line":"        self.flags(hw_machine_type\u003d\u0027x86_64\u003dpc\u0027, group\u003d\u0027libvirt\u0027)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        server \u003d self._create_server(networks\u003d\u0027none\u0027)"},{"line_number":214,"context_line":"        self._assert_machine_type(server[\u0027id\u0027], \u0027pc\u0027)"},{"line_number":215,"context_line":"        self._stop_server(server)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        self.assertRaises("},{"line_number":218,"context_line":"            exception.InvalidMachineTypeUpdate,"},{"line_number":219,"context_line":"            self._update_machine_type,"},{"line_number":220,"context_line":"            server[\u0027id\u0027],"},{"line_number":221,"context_line":"            \u0027pc-1.2.4\u0027"},{"line_number":222,"context_line":"        )"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def test_machine_type_update_blocked_between_versioned_and_alias(self):"},{"line_number":225,"context_line":"        self.flags(hw_machine_type\u003d\u0027x86_64\u003dpc-1.2.3\u0027, group\u003d\u0027libvirt\u0027)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        server \u003d self._create_server(networks\u003d\u0027none\u0027)"},{"line_number":228,"context_line":"        self._assert_machine_type(server[\u0027id\u0027], \u0027pc-1.2.3\u0027)"},{"line_number":229,"context_line":"        self._stop_server(server)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        self.assertRaises("},{"line_number":232,"context_line":"            exception.InvalidMachineTypeUpdate,"},{"line_number":233,"context_line":"            self._update_machine_type,"},{"line_number":234,"context_line":"            server[\u0027id\u0027],"},{"line_number":235,"context_line":"            \u0027pc\u0027"},{"line_number":236,"context_line":"        )"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def test_machine_type_update_blocked_between_types(self):"},{"line_number":239,"context_line":"        self.flags(hw_machine_type\u003d\u0027x86_64\u003dpc\u0027, group\u003d\u0027libvirt\u0027)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        server \u003d self._create_server(networks\u003d\u0027none\u0027)"},{"line_number":242,"context_line":"        self._assert_machine_type(server[\u0027id\u0027], \u0027pc\u0027)"},{"line_number":243,"context_line":"        self._stop_server(server)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        self.assertRaises("},{"line_number":246,"context_line":"            exception.InvalidMachineTypeUpdate,"},{"line_number":247,"context_line":"            self._update_machine_type,"},{"line_number":248,"context_line":"            server[\u0027id\u0027],"},{"line_number":249,"context_line":"            \u0027q35\u0027"},{"line_number":250,"context_line":"        )"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def test_machine_type_update_force(self):"},{"line_number":253,"context_line":"        self.flags(hw_machine_type\u003d\u0027x86_64\u003dpc\u0027, group\u003d\u0027libvirt\u0027)"},{"line_number":254,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"c388df9f_4784e5f3","line":251,"range":{"start_line":197,"start_character":4,"end_line":251,"end_character":0},"in_reply_to":"cd48413b_bc2a8d08","updated":"2021-02-16 13:49:31.000000000","message":"Done","commit_id":"6e62b4f95f8ac0ece7fde229a05d672a4da6843e"}],"nova/tests/unit/virt/test_machine_type_utils.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f758de04994576f8de111ba7c122204b68e20725","unresolved":true,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import mock"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from oslo_utils.fixture import uuidsentinel"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from nova.compute import vm_states"}],"source_content_type":"text/x-python","patch_set":10,"id":"3de6e655_881fc7bd","line":14,"updated":"2021-02-15 17:52:46.000000000","message":"drop (mock is third-party)","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"41b2c35e434f9c488e05851a8ad1c919528a6e81","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import mock"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from oslo_utils.fixture import uuidsentinel"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from nova.compute import vm_states"}],"source_content_type":"text/x-python","patch_set":10,"id":"f291ef1e_61cf7030","line":14,"in_reply_to":"3de6e655_881fc7bd","updated":"2021-02-15 19:53:01.000000000","message":"Whops yeah my bad, I\u0027ll update.","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"}],"nova/virt/machine_type_utils.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f758de04994576f8de111ba7c122204b68e20725","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":10,"id":"6572c844_89075bed","updated":"2021-02-15 17:52:46.000000000","message":"As with the nova-manage command, this feel virt-driver specific and should probably go into the libvirt module. Alternatively, we could generalize this method and make it an attribute of the Instance object. Other properties that would probably make sense to preserve in the future would be \u0027img_config_drive\u0027 (if we ever decide to change our default config drive behavior) and the various \u0027hw_*_bus\u0027 and \u0027hw_*_model\u0027 options (again, if we change behavior) and we could use a generic \u0027get_image_derived_property\u0027 method to do this for us?","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"67eaab78a5cf5b9e547038cba014f1fcd4b96963","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"10ad510e_77365cdd","in_reply_to":"0a38088c_b1c8baee","updated":"2021-02-16 09:37:20.000000000","message":"I\u0027m thinking the generic image metadata approach might be the way to go, per [1]. Let\u0027s keep discussing it there.\n\n[1] https://review.opendev.org/c/openstack/nova/+/769548/10/doc/source/cli/nova-manage.rst@723","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"41b2c35e434f9c488e05851a8ad1c919528a6e81","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":10,"id":"0a38088c_b1c8baee","in_reply_to":"6572c844_89075bed","updated":"2021-02-15 19:53:01.000000000","message":"As I said elsewhere and suggested later in the series the hw_machine_type image property is actually used by the HyperV virt driver as well. With that in mind would it still make sense?","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"67eaab78a5cf5b9e547038cba014f1fcd4b96963","unresolved":true,"context_lines":[{"line_number":17,"context_line":"def get_machine_type("},{"line_number":18,"context_line":"    context: \u0027nova_context.RequestContext\u0027,"},{"line_number":19,"context_line":"    instance_uuid: str,"},{"line_number":20,"context_line":") -\u003e str:"},{"line_number":21,"context_line":"    \"\"\"Get the registered machine type of an instance"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    :param context: Request context."}],"source_content_type":"text/x-python","patch_set":10,"id":"5cbbdd14_06690dd1","line":20,"range":{"start_line":20,"start_character":5,"end_line":20,"end_character":8},"updated":"2021-02-16 09:37:20.000000000","message":"Based on docstring, this should actually be:\n\n  ty.Optional[str]\n\n(the reason mypy isn\u0027t picking this up itself is that none of the objects are typed yet, so it assumes \u0027get_by_uuid\u0027 returns typing.ANY unless you provide a more specific type as you\u0027ve done here, in which case it\u0027ll accept that without question)","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"66ad9201da0defa780c163552d2d4aa5f4ec684c","unresolved":false,"context_lines":[{"line_number":17,"context_line":"def get_machine_type("},{"line_number":18,"context_line":"    context: \u0027nova_context.RequestContext\u0027,"},{"line_number":19,"context_line":"    instance_uuid: str,"},{"line_number":20,"context_line":") -\u003e str:"},{"line_number":21,"context_line":"    \"\"\"Get the registered machine type of an instance"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    :param context: Request context."}],"source_content_type":"text/x-python","patch_set":10,"id":"370cce8c_1c3263aa","line":20,"range":{"start_line":20,"start_character":5,"end_line":20,"end_character":8},"in_reply_to":"5cbbdd14_06690dd1","updated":"2021-02-16 10:10:50.000000000","message":"Ack","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"67eaab78a5cf5b9e547038cba014f1fcd4b96963","unresolved":true,"context_lines":[{"line_number":26,"context_line":"    :raises: exception.InstanceNotFound, exception.InstanceMappingNotFound"},{"line_number":27,"context_line":"    \"\"\""},{"line_number":28,"context_line":"    im \u003d objects.InstanceMapping.get_by_instance_uuid("},{"line_number":29,"context_line":"        context, instance_uuid)"},{"line_number":30,"context_line":"    with nova_context.target_cell(context, im.cell_mapping) as cctxt:"},{"line_number":31,"context_line":"        instance \u003d objects.instance.Instance.get_by_uuid("},{"line_number":32,"context_line":"            cctxt, instance_uuid, expected_attrs\u003d[\u0027system_metadata\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"88d0e862_d8173f88","line":29,"updated":"2021-02-16 09:37:20.000000000","message":"nit: one line?","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"66ad9201da0defa780c163552d2d4aa5f4ec684c","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    :raises: exception.InstanceNotFound, exception.InstanceMappingNotFound"},{"line_number":27,"context_line":"    \"\"\""},{"line_number":28,"context_line":"    im \u003d objects.InstanceMapping.get_by_instance_uuid("},{"line_number":29,"context_line":"        context, instance_uuid)"},{"line_number":30,"context_line":"    with nova_context.target_cell(context, im.cell_mapping) as cctxt:"},{"line_number":31,"context_line":"        instance \u003d objects.instance.Instance.get_by_uuid("},{"line_number":32,"context_line":"            cctxt, instance_uuid, expected_attrs\u003d[\u0027system_metadata\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"dfe3034f_9ad8a1a5","line":29,"in_reply_to":"88d0e862_d8173f88","updated":"2021-02-16 10:10:50.000000000","message":"Ack","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f758de04994576f8de111ba7c122204b68e20725","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        context, instance_uuid)"},{"line_number":30,"context_line":"    with nova_context.target_cell(context, im.cell_mapping) as cctxt:"},{"line_number":31,"context_line":"        instance \u003d objects.instance.Instance.get_by_uuid("},{"line_number":32,"context_line":"            cctxt, instance_uuid, expected_attrs\u003d[\u0027system_metadata\u0027])"},{"line_number":33,"context_line":"        return instance.image_meta.properties.get(\u0027hw_machine_type\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5fa36bab_d9efa844","line":32,"range":{"start_line":32,"start_character":32,"end_line":32,"end_character":68},"updated":"2021-02-15 17:52:46.000000000","message":"Potentially dumb question but why?\n\nLater: Ah, because we\u0027re using \u0027instance.image_meta\u0027 below instead of \u0027object.ImageMeta.from_image_ref\u0027, which means we\u0027re build our \u0027ImageMetaProps\u0027 object from the \u0027system_metadata\u0027 data rather than glance","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"41b2c35e434f9c488e05851a8ad1c919528a6e81","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        context, instance_uuid)"},{"line_number":30,"context_line":"    with nova_context.target_cell(context, im.cell_mapping) as cctxt:"},{"line_number":31,"context_line":"        instance \u003d objects.instance.Instance.get_by_uuid("},{"line_number":32,"context_line":"            cctxt, instance_uuid, expected_attrs\u003d[\u0027system_metadata\u0027])"},{"line_number":33,"context_line":"        return instance.image_meta.properties.get(\u0027hw_machine_type\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"6ae3c3dd_40c41e2e","line":32,"range":{"start_line":32,"start_character":32,"end_line":32,"end_character":68},"in_reply_to":"5fa36bab_d9efa844","updated":"2021-02-15 19:53:01.000000000","message":"Yeah super weird and something I should call out in a code comment.","commit_id":"33f90b9a49f0c97b158bb59da8bf93914bc82192"}],"releasenotes/notes/libvirt-store-and-change-default-machine-type-bf86b4973c4dee4c.yaml":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"99aaaeff1a6eec3e24ec6c4ebc6ffb137470f0ed","unresolved":true,"context_lines":[{"line_number":12,"context_line":"    The following new ``nova-manage`` commands have been introduced to help"},{"line_number":13,"context_line":"    operators manage the ``hw_machine_type`` image property:"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    ``nova-manage libvirt get_machine_type``"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    This command will print the current machine type if set in the image"},{"line_number":18,"context_line":"    metadata of the instance."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"eeb1eaa7_b1644577","line":15,"range":{"start_line":15,"start_character":26,"end_line":15,"end_character":42},"updated":"2021-03-03 12:47:15.000000000","message":"this is now not in sync with the implementation","commit_id":"42618111b678250e1a3aa3c7d823385ea0abfcdf"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3315c4a210d101240ffa40d675d6f2fe16ed70cf","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    The following new ``nova-manage`` commands have been introduced to help"},{"line_number":13,"context_line":"    operators manage the ``hw_machine_type`` image property:"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    ``nova-manage libvirt get_machine_type``"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    This command will print the current machine type if set in the image"},{"line_number":18,"context_line":"    metadata of the instance."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"54bc382a_cc21c3d5","line":15,"range":{"start_line":15,"start_character":26,"end_line":15,"end_character":42},"in_reply_to":"eeb1eaa7_b1644577","updated":"2021-03-03 14:06:57.000000000","message":"Done","commit_id":"42618111b678250e1a3aa3c7d823385ea0abfcdf"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3315c4a210d101240ffa40d675d6f2fe16ed70cf","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    The following new ``nova-manage`` commands have been introduced to help"},{"line_number":13,"context_line":"    operators manage the ``hw_machine_type`` image property:"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    ``nova-manage libvirt get_machine_type``"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    This command will print the current machine type if set in the image"},{"line_number":18,"context_line":"    metadata of the instance."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"ac808093_de607c36","line":15,"range":{"start_line":15,"start_character":26,"end_line":15,"end_character":42},"in_reply_to":"eeb1eaa7_b1644577","updated":"2021-03-03 14:06:57.000000000","message":"Done","commit_id":"42618111b678250e1a3aa3c7d823385ea0abfcdf"}]}
