)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d09d4c3b50444fd75b7f9c080796ab443154adeb","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"922bf394_21902bd0","updated":"2025-12-19 09:03:50.000000000","message":"We have similar hacks in our libvirt fixture https://github.com/openstack/nova/blob/4b71dab239b4f82d50297ec5bd887c207b43b7ea/nova/tests/fixtures/libvirt.py#L2536-L2540\n\nDo we need to adapt that too?","commit_id":"bed85cea9add1d8e40d52b71532c6929744efa4c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4ba51a4db8a1e4756c9c921dce30d5a81685c1ac","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"b9419c7d_5a290dd6","in_reply_to":"922bf394_21902bd0","updated":"2025-12-19 18:18:37.000000000","message":"I believe those are different. Those are monkeypatching the libvirt module to use all the methods from the libvirt fixture. We want to keep that since we obviously don\u0027t want to actually talk to libvirt (or depend on it)","commit_id":"bed85cea9add1d8e40d52b71532c6929744efa4c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d074b057da7eb4a10b9099d396adda2156c4d9ee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"84dab556_334768cd","in_reply_to":"b9419c7d_5a290dd6","updated":"2026-01-09 17:52:32.000000000","message":"Done","commit_id":"bed85cea9add1d8e40d52b71532c6929744efa4c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6d282c90ce10cfcb7ee14a09472d5a20e0093c0a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"bc0013bc_57066284","updated":"2026-01-19 08:43:16.000000000","message":"Thanks. Looks good now","commit_id":"19f1119b6de042ab5d338dff39b716445f914421"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"314984e6f4a260d5bd811ea9b9d115a194befe98","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"c9beef49_095dcd99","updated":"2026-01-19 08:40:26.000000000","message":"couple of unnneeded changes and will also create a merge conflict for firmware autodetection but given the other series is still on review, let\u0027s merge it now.","commit_id":"19f1119b6de042ab5d338dff39b716445f914421"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"314984e6f4a260d5bd811ea9b9d115a194befe98","unresolved":false,"context_lines":[{"line_number":30504,"context_line":"                                      mock_xml, mock_rebase, mock_commit):"},{"line_number":30505,"context_line":"        \"\"\"Deleting newest snapshot -- blockRebase.\"\"\""},{"line_number":30506,"context_line":""},{"line_number":30507,"context_line":"        self.stub_out(\u0027nova.virt.libvirt.driver.libvirt\u0027, fakelibvirt)"},{"line_number":30508,"context_line":""},{"line_number":30509,"context_line":"        instance \u003d objects.Instance(**self.inst)"},{"line_number":30510,"context_line":"        snapshot_id \u003d \u0027snapshot-1234\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"645242d3_c7c694a5","line":30507,"updated":"2026-01-19 08:40:26.000000000","message":"just checked the stubouts, will continu to work","commit_id":"19f1119b6de042ab5d338dff39b716445f914421"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d09d4c3b50444fd75b7f9c080796ab443154adeb","unresolved":true,"context_lines":[{"line_number":452,"context_line":"        global libvirt"},{"line_number":453,"context_line":"        if libvirt is None:"},{"line_number":454,"context_line":"            libvirt \u003d importutils.import_module(\u0027libvirt\u0027)"},{"line_number":455,"context_line":"            libvirt_migrate.libvirt \u003d libvirt"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        self._host \u003d host.Host(self._uri(), read_only,"},{"line_number":458,"context_line":"                               lifecycle_event_handler\u003dself.emit_event,"}],"source_content_type":"text/x-python","patch_set":1,"id":"704658b9_adb361f4","side":"PARENT","line":455,"updated":"2025-12-19 09:03:50.000000000","message":"how this works now if libvirt is None and we don\u0027t import it here?","commit_id":"aec74c1f23c1ca00ec72ffddb716932dbb0ac839"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"488d365d9f23399af7d0ff051d9e62a1b49f621f","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        global libvirt"},{"line_number":453,"context_line":"        if libvirt is None:"},{"line_number":454,"context_line":"            libvirt \u003d importutils.import_module(\u0027libvirt\u0027)"},{"line_number":455,"context_line":"            libvirt_migrate.libvirt \u003d libvirt"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        self._host \u003d host.Host(self._uri(), read_only,"},{"line_number":458,"context_line":"                               lifecycle_event_handler\u003dself.emit_event,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dd21c735_10267f87","side":"PARENT","line":455,"in_reply_to":"6e07810c_9f323225","updated":"2025-12-22 16:44:05.000000000","message":"Done","commit_id":"aec74c1f23c1ca00ec72ffddb716932dbb0ac839"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4ba51a4db8a1e4756c9c921dce30d5a81685c1ac","unresolved":true,"context_lines":[{"line_number":452,"context_line":"        global libvirt"},{"line_number":453,"context_line":"        if libvirt is None:"},{"line_number":454,"context_line":"            libvirt \u003d importutils.import_module(\u0027libvirt\u0027)"},{"line_number":455,"context_line":"            libvirt_migrate.libvirt \u003d libvirt"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        self._host \u003d host.Host(self._uri(), read_only,"},{"line_number":458,"context_line":"                               lifecycle_event_handler\u003dself.emit_event,"}],"source_content_type":"text/x-python","patch_set":1,"id":"6e07810c_9f323225","side":"PARENT","line":455,"in_reply_to":"704658b9_adb361f4","updated":"2025-12-19 18:18:37.000000000","message":"Hmm, good point. We probably want an `assert libvirt is not None` or at least raise an internal error if not.\n\nWe do need the conditional since otherwise our unit tests fail on hosts without the the python-libvirt package installed since they source from here.","commit_id":"aec74c1f23c1ca00ec72ffddb716932dbb0ac839"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"314984e6f4a260d5bd811ea9b9d115a194befe98","unresolved":false,"context_lines":[{"line_number":139,"context_line":"uefi_logged \u003d False"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"CONF \u003d nova.conf.CONF"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"MAX_CONSOLE_BYTES \u003d 100 * units.Ki"}],"source_content_type":"text/x-python","patch_set":2,"id":"cfa25d51_4441efa4","side":"PARENT","line":142,"updated":"2026-01-19 08:40:26.000000000","message":"nit: unneeded change","commit_id":"aec74c1f23c1ca00ec72ffddb716932dbb0ac839"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b1aedbc5d428355157010cb841314c195a42201e","unresolved":true,"context_lines":[{"line_number":404,"context_line":"            # the libvirt driver is \"customer 0\" of the libvirt API: if we"},{"line_number":405,"context_line":"            # haven\u0027t been able to import it, fail early by attempting to"},{"line_number":406,"context_line":"            # import again"},{"line_number":407,"context_line":"            __import__(\u0027libvirt\u0027)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        # NOTE(aspiers) Some of these are dynamic, so putting"},{"line_number":410,"context_line":"        # capabilities on the instance rather than on the class."}],"source_content_type":"text/x-python","patch_set":2,"id":"1012bbdd_51f6c31c","line":407,"updated":"2026-01-09 14:36:29.000000000","message":"i assume we are are not useing import here to avoid the lint errors that will create\n\ni conisderd asing you to rais a config error here instead.\n\nbasically if you have configured the livbirt driver and libvirt is not imporable then that is a config errror and we coudl say that explcity but if other are fine with the generic import error then im ok with this.","commit_id":"19f1119b6de042ab5d338dff39b716445f914421"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"164fb6222da7df9de36d21f526488659a8e931d0","unresolved":false,"context_lines":[{"line_number":404,"context_line":"            # the libvirt driver is \"customer 0\" of the libvirt API: if we"},{"line_number":405,"context_line":"            # haven\u0027t been able to import it, fail early by attempting to"},{"line_number":406,"context_line":"            # import again"},{"line_number":407,"context_line":"            __import__(\u0027libvirt\u0027)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        # NOTE(aspiers) Some of these are dynamic, so putting"},{"line_number":410,"context_line":"        # capabilities on the instance rather than on the class."}],"source_content_type":"text/x-python","patch_set":2,"id":"ba182bca_46594183","line":407,"in_reply_to":"1012bbdd_51f6c31c","updated":"2026-01-09 17:52:27.000000000","message":"We discussed this offline but...\n\n\u003e i assume we are are not useing import here to avoid the lint errors that will create\n\nYes, exactly.\n\n\u003e i conisderd asing you to rais a config error here instead.\n\nI intentionally try re-importing so users will see a typical ImportError traceback if this fails at runtime.","commit_id":"19f1119b6de042ab5d338dff39b716445f914421"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"314984e6f4a260d5bd811ea9b9d115a194befe98","unresolved":false,"context_lines":[{"line_number":404,"context_line":"            # the libvirt driver is \"customer 0\" of the libvirt API: if we"},{"line_number":405,"context_line":"            # haven\u0027t been able to import it, fail early by attempting to"},{"line_number":406,"context_line":"            # import again"},{"line_number":407,"context_line":"            __import__(\u0027libvirt\u0027)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        # NOTE(aspiers) Some of these are dynamic, so putting"},{"line_number":410,"context_line":"        # capabilities on the instance rather than on the class."}],"source_content_type":"text/x-python","patch_set":2,"id":"fba5eed3_94f03a81","line":407,"in_reply_to":"ba182bca_46594183","updated":"2026-01-19 08:40:26.000000000","message":"agreed with Stephen, we are monkeypatching by using the FakeLibvirt fixture, not the libvirt module so we\u0027re cool.","commit_id":"19f1119b6de042ab5d338dff39b716445f914421"}],"nova/virt/libvirt/guest.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d09d4c3b50444fd75b7f9c080796ab443154adeb","unresolved":true,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        global libvirt"},{"line_number":111,"context_line":"        if libvirt is None:"},{"line_number":112,"context_line":"            libvirt \u003d importutils.import_module(\u0027libvirt\u0027)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        self._domain \u003d domain"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"cff63bd8_f33acfc1","side":"PARENT","line":112,"updated":"2025-12-19 09:03:50.000000000","message":"ditto","commit_id":"aec74c1f23c1ca00ec72ffddb716932dbb0ac839"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4ba51a4db8a1e4756c9c921dce30d5a81685c1ac","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        global libvirt"},{"line_number":111,"context_line":"        if libvirt is None:"},{"line_number":112,"context_line":"            libvirt \u003d importutils.import_module(\u0027libvirt\u0027)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        self._domain \u003d domain"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"e26d2474_cac9cc49","side":"PARENT","line":112,"in_reply_to":"cff63bd8_f33acfc1","updated":"2025-12-19 18:18:37.000000000","message":"I don\u0027t think we need to add a check here as nothing outside of the libvirt driver and related modules should be using this. Once we add the check to that, this is safe. We can add a comment to that effect though.","commit_id":"aec74c1f23c1ca00ec72ffddb716932dbb0ac839"}],"nova/virt/libvirt/host.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"314984e6f4a260d5bd811ea9b9d115a194befe98","unresolved":false,"context_lines":[{"line_number":40,"context_line":"from eventlet import greenio"},{"line_number":41,"context_line":"from eventlet import greenthread"},{"line_number":42,"context_line":"from eventlet import patcher"},{"line_number":43,"context_line":"from lxml import etree"},{"line_number":44,"context_line":"from oslo_log import log as logging"},{"line_number":45,"context_line":"from oslo_serialization import jsonutils"},{"line_number":46,"context_line":"from oslo_utils import excutils"}],"source_content_type":"text/x-python","patch_set":2,"id":"b7cd1e7f_6c175225","line":43,"updated":"2026-01-19 08:40:26.000000000","message":"nit :unnnecessary move","commit_id":"19f1119b6de042ab5d338dff39b716445f914421"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9d9c9b5df0ac0873ce2d8d36f00ed7df64980fd7","unresolved":false,"context_lines":[{"line_number":40,"context_line":"from eventlet import greenio"},{"line_number":41,"context_line":"from eventlet import greenthread"},{"line_number":42,"context_line":"from eventlet import patcher"},{"line_number":43,"context_line":"from lxml import etree"},{"line_number":44,"context_line":"from oslo_log import log as logging"},{"line_number":45,"context_line":"from oslo_serialization import jsonutils"},{"line_number":46,"context_line":"from oslo_utils import excutils"}],"source_content_type":"text/x-python","patch_set":2,"id":"2a957281_2fef5a37","line":43,"in_reply_to":"b7cd1e7f_6c175225","updated":"2026-01-19 09:02:25.000000000","message":"unnecessary but correct 😉 lxml is not stdlib","commit_id":"19f1119b6de042ab5d338dff39b716445f914421"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"314984e6f4a260d5bd811ea9b9d115a194befe98","unresolved":false,"context_lines":[{"line_number":73,"context_line":"except ImportError:"},{"line_number":74,"context_line":"    libvirt \u003d None"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"CONF \u003d nova.conf.CONF"},{"line_number":77,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"native_socket \u003d patcher.original(\u0027socket\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"e1707511_0357c25c","line":76,"updated":"2026-01-19 08:40:26.000000000","message":"nit: unnecessary move","commit_id":"19f1119b6de042ab5d338dff39b716445f914421"}],"nova/virt/libvirt/migration.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"314984e6f4a260d5bd811ea9b9d115a194befe98","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from nova.virt.libvirt import config as vconfig"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"CONF \u003d nova.conf.CONF"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"# TODO(berrange): hack to avoid a \"import libvirt\" in this file."}],"source_content_type":"text/x-python","patch_set":2,"id":"b66f3e6b_04def89c","side":"PARENT","line":32,"updated":"2026-01-19 08:40:26.000000000","message":"unnecessary remove","commit_id":"aec74c1f23c1ca00ec72ffddb716932dbb0ac839"}]}
