)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"9dd2a046dfbc7d9acee03dcfc4d3ef05f8c5e837","unresolved":false,"context_lines":[{"line_number":13,"context_line":"leave the instance unmanageable."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch introduces QGA state detecting and makes error caused"},{"line_number":16,"context_line":"by issue above a QemuGuestAgentNotRunning exception, and optimize"},{"line_number":17,"context_line":"handling jobs on failures(API/CLI users can yield exact failure"},{"line_number":18,"context_line":"reason and instance will not be reverted to error for such nits)."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"bfb3d3c7_de3833ef","line":16,"range":{"start_line":16,"start_character":57,"end_line":16,"end_character":65},"updated":"2019-05-26 01:30:52.000000000","message":"optimizes","commit_id":"132ae94a43fc4572a7d866e46c3ed94b5d9c4f31"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"9dd2a046dfbc7d9acee03dcfc4d3ef05f8c5e837","unresolved":false,"context_lines":[{"line_number":13,"context_line":"leave the instance unmanageable."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch introduces QGA state detecting and makes error caused"},{"line_number":16,"context_line":"by issue above a QemuGuestAgentNotRunning exception, and optimize"},{"line_number":17,"context_line":"handling jobs on failures(API/CLI users can yield exact failure"},{"line_number":18,"context_line":"reason and instance will not be reverted to error for such nits)."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"bfb3d3c7_3e386fed","line":16,"range":{"start_line":16,"start_character":2,"end_line":16,"end_character":8},"updated":"2019-05-26 01:30:52.000000000","message":"the issue","commit_id":"132ae94a43fc4572a7d866e46c3ed94b5d9c4f31"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"9dd2a046dfbc7d9acee03dcfc4d3ef05f8c5e837","unresolved":false,"context_lines":[{"line_number":20,"context_line":"Note:"},{"line_number":21,"context_line":"* guest OS not fully started or QGA not installed inside instance"},{"line_number":22,"context_line":"  are main reasons that cause QGA to be unavailable."},{"line_number":23,"context_line":"* QGA state can be dected by inspecting target state of Channel"},{"line_number":24,"context_line":"  device. See comments in [1] for details."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"[1] https://bugs.launchpad.net/nova/+bug/1829828"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"bfb3d3c7_fe3df7dc","line":23,"range":{"start_line":23,"start_character":19,"end_line":23,"end_character":25},"updated":"2019-05-26 01:30:52.000000000","message":"detected","commit_id":"132ae94a43fc4572a7d866e46c3ed94b5d9c4f31"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"b1156bd75044401a68f079c812130ba55ff6b1ae","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  device. See comments in releated issue [1] for details."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"[1] https://bugs.launchpad.net/nova/+bug/1829828"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I2115e08f6978561e5b22adb0f2d11a6d4be628fe"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"bfb3d3c7_fe7402d1","line":20,"updated":"2019-05-28 09:34:28.000000000","message":"nit: this can add the bug flag:\nCloses-Bug: #1829828\n\nYou can review https://wiki.openstack.org/wiki/GitCommitMessages.","commit_id":"3dee9afc8e33a766efedc40199e629e97ac431b7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"250bcf5af4dd514ce5b34df48290aff3c36add89","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Define and catch QemuGuestAgentNotRunning for set-password failure"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces and implements QGA state detecting and makes error"},{"line_number":10,"context_line":"caused by unresponsive QGA a QemuGuestAgentNotRunning exception. Remove"},{"line_number":11,"context_line":"the raise/try-except NotImplementedError codes and releated test cases."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Note:"},{"line_number":14,"context_line":"* guest OS not fully started or QGA not installed inside instance"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"9fb8cfa7_8a8e5576","line":11,"range":{"start_line":10,"start_character":65,"end_line":11,"end_character":71},"updated":"2019-06-04 20:43:22.000000000","message":"I don\u0027t understand why you want to do this. There are drivers that do not implement the set_admin_password method and these should continue to raise NotImplementedError. In my view, QemuGuestAgentNotRunning is a helpful enhancement for the libvirt driver but it has nothing to do with whether or not other drivers implement set_admin_password at all, right?","commit_id":"99b1b097bffb6061df974e9e678253e11fa13c7a"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"14aa896c2be398c84b4b3dae41329149f02b8672","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Define and catch QemuGuestAgentNotRunning for set-password failure"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces and implements QGA state detecting and makes error"},{"line_number":10,"context_line":"caused by unresponsive QGA a QemuGuestAgentNotRunning exception. Remove"},{"line_number":11,"context_line":"the raise/try-except NotImplementedError codes and releated test cases."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Note:"},{"line_number":14,"context_line":"* guest OS not fully started or QGA not installed inside instance"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"9fb8cfa7_573561d9","line":11,"range":{"start_line":10,"start_character":65,"end_line":11,"end_character":71},"in_reply_to":"9fb8cfa7_8a8e5576","updated":"2019-06-05 01:04:55.000000000","message":"Thanks for your review. I\u0027ll think it twice.","commit_id":"99b1b097bffb6061df974e9e678253e11fa13c7a"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"f9cc2a8a198890ff2311d41eafdb5fd36e2825ec","unresolved":false,"context_lines":[{"line_number":15,"context_line":"  are main reasons that cause QGA to be unavailable."},{"line_number":16,"context_line":"* QGA state can be detected by inspecting target state of Channel"},{"line_number":17,"context_line":"  device."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I2115e08f6978561e5b22adb0f2d11a6d4be628fe"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3fa7e38b_6c3edd8a","line":18,"updated":"2019-12-13 10:07:48.000000000","message":"It\u0027s good to add the tag of \"Related-Bug:#1829828\", after all  this improvement based on this bug.","commit_id":"0ed87417a661359a5be7e67656ef2132ebb1cc84"}],"nova/compute/manager.py":[{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"9dd2a046dfbc7d9acee03dcfc4d3ef05f8c5e837","unresolved":false,"context_lines":[{"line_number":3750,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":3751,"context_line":"                LOG.debug(\u0027Guest agent is not running in the instance.\u0027,"},{"line_number":3752,"context_line":"                          instance\u003dinstance)"},{"line_number":3753,"context_line":"                instance.task_state \u003d None"},{"line_number":3754,"context_line":"                instance.save("},{"line_number":3755,"context_line":"                    expected_task_state\u003dtask_states.UPDATING_PASSWORD)"},{"line_number":3756,"context_line":"        except exception.SetAdminPasswdNotSupported:"},{"line_number":3757,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":3758,"context_line":"                LOG.info(\u0027set_admin_password is not supported \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_99141546","line":3755,"range":{"start_line":3753,"start_character":15,"end_line":3755,"end_character":70},"updated":"2019-05-26 01:30:52.000000000","message":"It\u0027s good to revert instance task_state to None wihen such nits occurs.","commit_id":"132ae94a43fc4572a7d866e46c3ed94b5d9c4f31"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"92bcddf64fe1de8fcd71ef2c8a16eeaac8f1662b","unresolved":false,"context_lines":[{"line_number":3739,"context_line":"            instance.task_state \u003d None"},{"line_number":3740,"context_line":"            instance.save("},{"line_number":3741,"context_line":"                expected_task_state\u003dtask_states.UPDATING_PASSWORD)"},{"line_number":3742,"context_line":"        except exception.InstanceAgentNotEnabled:"},{"line_number":3743,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":3744,"context_line":"                LOG.debug(\u0027Guest agent is not enabled for the instance.\u0027,"},{"line_number":3745,"context_line":"                          instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_dc7d74b2","line":3742,"range":{"start_line":3742,"start_character":15,"end_line":3742,"end_character":49},"updated":"2019-05-29 07:22:28.000000000","message":"I found no any other code using this exception. But I\u0027m thinking we may add another check to ensure whether the agent device is enabled.","commit_id":"ed4c313a6ca2beb8986d48a571f5a03265c85d14"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"ca411b42478cb0835e00d6fa08cea99df2eb7d39","unresolved":false,"context_lines":[{"line_number":3739,"context_line":"            instance.task_state \u003d None"},{"line_number":3740,"context_line":"            instance.save("},{"line_number":3741,"context_line":"                expected_task_state\u003dtask_states.UPDATING_PASSWORD)"},{"line_number":3742,"context_line":"        except exception.InstanceAgentNotEnabled:"},{"line_number":3743,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":3744,"context_line":"                LOG.debug(\u0027Guest agent is not enabled for the instance.\u0027,"},{"line_number":3745,"context_line":"                          instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_3754e952","line":3742,"range":{"start_line":3742,"start_character":15,"end_line":3742,"end_character":49},"in_reply_to":"bfb3d3c7_dc7d74b2","updated":"2019-05-30 01:19:09.000000000","message":"As i see, this work is already done in libvirt driver as below :\n\n...\ndef set_admin_password(self, instance, new_pass):\n        self._can_set_admin_password(instance.image_meta)\n        ...","commit_id":"ed4c313a6ca2beb8986d48a571f5a03265c85d14"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"92bcddf64fe1de8fcd71ef2c8a16eeaac8f1662b","unresolved":false,"context_lines":[{"line_number":3746,"context_line":"                instance.task_state \u003d None"},{"line_number":3747,"context_line":"                instance.save("},{"line_number":3748,"context_line":"                    expected_task_state\u003dtask_states.UPDATING_PASSWORD)"},{"line_number":3749,"context_line":"        except exception.QemuGuestAgentNotRunning:"},{"line_number":3750,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":3751,"context_line":"                LOG.debug(\u0027Guest agent is not running in the instance.\u0027,"},{"line_number":3752,"context_line":"                          instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_9cf13c6e","line":3749,"range":{"start_line":3749,"start_character":25,"end_line":3749,"end_character":34},"updated":"2019-05-29 07:22:28.000000000","message":"What type of hypervisor is hinding by the virt driver. So this exception expose the hypervisor detail. so we can just name it as InstanceAgentNotRunning.","commit_id":"ed4c313a6ca2beb8986d48a571f5a03265c85d14"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"250bcf5af4dd514ce5b34df48290aff3c36add89","unresolved":false,"context_lines":[{"line_number":3779,"context_line":"                expected_task_state\u003dtask_states.UPDATING_PASSWORD)"},{"line_number":3780,"context_line":"            raise NotImplementedError(_(\u0027set_admin_password is not \u0027"},{"line_number":3781,"context_line":"                                        \u0027implemented by this driver or guest \u0027"},{"line_number":3782,"context_line":"                                        \u0027instance.\u0027))"},{"line_number":3783,"context_line":"        except exception.UnexpectedTaskStateError:"},{"line_number":3784,"context_line":"            # interrupted by another (most likely delete) task"},{"line_number":3785,"context_line":"            # do not retry"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_aadc7974","side":"PARENT","line":3782,"updated":"2019-06-04 20:43:22.000000000","message":"I don\u0027t think this should be removed. Drivers that do not implement set_admin_password will continue to raise NotImplementedError and should reflect that in the error handling.","commit_id":"1459e8edb9681537b263bd6fccfb7b9cbe12d923"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d4be970ed3783a1a5558405cc14d9a8ca59e41bb","unresolved":false,"context_lines":[{"line_number":4084,"context_line":"                expected_task_state\u003dtask_states.UPDATING_PASSWORD)"},{"line_number":4085,"context_line":"            raise NotImplementedError(_(\u0027set_admin_password is not \u0027"},{"line_number":4086,"context_line":"                                        \u0027implemented by this driver or guest \u0027"},{"line_number":4087,"context_line":"                                        \u0027instance.\u0027))"},{"line_number":4088,"context_line":"        except exception.UnexpectedTaskStateError:"},{"line_number":4089,"context_line":"            # interrupted by another (most likely delete) task"},{"line_number":4090,"context_line":"            # do not retry"}],"source_content_type":"text/x-python","patch_set":17,"id":"3fa7e38b_3b825da6","line":4087,"updated":"2019-12-13 06:37:27.000000000","message":"This is the error I got in both my reproduce attempts (described on the launchpad bug comments). The error seems appropriate as \"set_admin_password is not implemented by this guest instance\". The cirros image doesn\u0027t contain the QGA. And the instance did not go into ERROR state, it stayed ACTIVE.","commit_id":"fe000fba2cdaeb7a5d0da625dbb5ade8e7fe52f0"}],"nova/exception.py":[{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"2d97442a839dc4c84177270ac5cdde7839704540","unresolved":false,"context_lines":[{"line_number":2032,"context_line":"    msg_fmt \u003d _(\u0027QEMU guest agent is not enabled\u0027)"},{"line_number":2033,"context_line":""},{"line_number":2034,"context_line":""},{"line_number":2035,"context_line":"class QemuGuestAgentNotRunning(InstanceAgentNotEnabled):"},{"line_number":2036,"context_line":"    msg_fmt \u003d _(\u0027QEMU guest agent is not running\u0027)"},{"line_number":2037,"context_line":""},{"line_number":2038,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bfb3d3c7_79f46cf1","line":2035,"range":{"start_line":2035,"start_character":31,"end_line":2035,"end_character":54},"updated":"2019-05-31 01:47:16.000000000","message":"Is this a proper execption? How about use Invalid here?","commit_id":"2a9ccc03d7056e0b3c53c66009794deba88e3052"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"7130bec800ce48908d96fc8f5cd6272883648947","unresolved":false,"context_lines":[{"line_number":2032,"context_line":"    msg_fmt \u003d _(\u0027QEMU guest agent is not enabled\u0027)"},{"line_number":2033,"context_line":""},{"line_number":2034,"context_line":""},{"line_number":2035,"context_line":"class QemuGuestAgentNotRunning(InstanceAgentNotEnabled):"},{"line_number":2036,"context_line":"    msg_fmt \u003d _(\u0027QEMU guest agent is not running\u0027)"},{"line_number":2037,"context_line":""},{"line_number":2038,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bfb3d3c7_59b408f2","line":2035,"range":{"start_line":2035,"start_character":31,"end_line":2035,"end_character":54},"in_reply_to":"bfb3d3c7_79f46cf1","updated":"2019-05-31 05:48:38.000000000","message":"Thanks, I think you\u0027re right.","commit_id":"2a9ccc03d7056e0b3c53c66009794deba88e3052"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"b134215d90b44716be6295b50ea563564491789c","unresolved":false,"context_lines":[{"line_number":1960,"context_line":""},{"line_number":1961,"context_line":""},{"line_number":1962,"context_line":"class InstanceAgentNotRunning(Invalid):"},{"line_number":1963,"context_line":"    msg_fmt \u003d _(\u0027Guest agent is not running\u0027)"},{"line_number":1964,"context_line":"    safe \u003d True"},{"line_number":1965,"context_line":""},{"line_number":1966,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_7218ef82","line":1963,"updated":"2019-12-13 16:20:08.000000000","message":"Did you want to write a more detailed message here, based on your comment in the launchpad bug [1]?\n\n[1] https://bugs.launchpad.net/nova/+bug/1829828/comments/12","commit_id":"0ed87417a661359a5be7e67656ef2132ebb1cc84"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"9ef85d7ea6b62162b1a2d2bf0bf377f926ac4bd8","unresolved":false,"context_lines":[{"line_number":1960,"context_line":""},{"line_number":1961,"context_line":""},{"line_number":1962,"context_line":"class InstanceAgentNotRunning(Invalid):"},{"line_number":1963,"context_line":"    msg_fmt \u003d _(\u0027Guest agent is not running\u0027)"},{"line_number":1964,"context_line":"    safe \u003d True"},{"line_number":1965,"context_line":""},{"line_number":1966,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_984265ac","line":1963,"in_reply_to":"3fa7e38b_7218ef82","updated":"2019-12-14 03:54:31.000000000","message":"Yes. I think some detailed explanations or documents to help to solve this exception will be good.\n\nI will give more help info in msg_fmt.\n\nThanks for your review.","commit_id":"0ed87417a661359a5be7e67656ef2132ebb1cc84"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"250bcf5af4dd514ce5b34df48290aff3c36add89","unresolved":false,"context_lines":[{"line_number":3775,"context_line":"        expected_exception \u003d NotImplementedError"},{"line_number":3776,"context_line":"        self._do_test_set_admin_password_driver_error("},{"line_number":3777,"context_line":"            exc, vm_states.ACTIVE, None, expected_exception)"},{"line_number":3778,"context_line":""},{"line_number":3779,"context_line":"    def test_set_admin_password_driver_not_supported(self):"},{"line_number":3780,"context_line":"        exc \u003d exception.SetAdminPasswdNotSupported()"},{"line_number":3781,"context_line":"        expected_exception \u003d exception.SetAdminPasswdNotSupported"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_4ad7fd4c","side":"PARENT","line":3778,"updated":"2019-06-04 20:43:22.000000000","message":"Same, I think this should stay.","commit_id":"1459e8edb9681537b263bd6fccfb7b9cbe12d923"}],"nova/tests/unit/virt/libvirt/test_config.py":[{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"1ff84f51afdd6041b3c9deabd79546ada994366a","unresolved":false,"context_lines":[{"line_number":2631,"context_line":"        self.assertEqual(\u0027mount\u0027, obj.devices[1].source_type)"},{"line_number":2632,"context_line":""},{"line_number":2633,"context_line":"    def test_ConfigGuest_parse_devices_with_qga(self):"},{"line_number":2634,"context_line":"        xmldoc \u003d \"\u003cdomain type\u003d\u0027kvm\u0027\u003e\u003cdevices\u003e\"\\"},{"line_number":2635,"context_line":"                 \"\u003chostdev mode\u003d\u0027subsystem\u0027 type\u003d\u0027pci\u0027 managed\u003d\u0027no\u0027\u003e\"\\"},{"line_number":2636,"context_line":"                 \"\u003c/hostdev\u003e\u003cchannel type\u003d\u0027unix\u0027\u003e\u003csource mode\u003d\u0027bind\u0027 \"\\"},{"line_number":2637,"context_line":"                 \"path\u003d\u0027/var/lib/libvirt/qemu/org.qemu.guest_agent\"\\"},{"line_number":2638,"context_line":"                 \".0.instance-00000084.sock\u0027/\u003e\u003ctarget type\u003d\u0027virtio\u0027 \"\\"},{"line_number":2639,"context_line":"                 \"name\u003d\u0027org.qemu.guest_agent.0\u0027 state\u003d\u0027disconnected\u0027/\u003e\"\\"},{"line_number":2640,"context_line":"                 \"\u003calias name\u003d\u0027channel0\u0027/\u003e\u003caddress type\u003d\u0027virtio-serial\u0027 \"\\"},{"line_number":2641,"context_line":"                 \"controller\u003d\u00270\u0027 bus\u003d\u00270\u0027 port\u003d\u00271\u0027/\u003e\u003c/channel\u003e\u003c/devices\u003e\"\\"},{"line_number":2642,"context_line":"                 \"\u003c/domain\u003e\""},{"line_number":2643,"context_line":"        obj \u003d config.LibvirtConfigGuest()"},{"line_number":2644,"context_line":"        obj.parse_str(xmldoc)"},{"line_number":2645,"context_line":"        self.assertEqual(\u0027kvm\u0027, obj.virt_type)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_fe016239","line":2642,"range":{"start_line":2634,"start_character":17,"end_line":2642,"end_character":28},"updated":"2019-05-28 09:27:53.000000000","message":"If possible, it is best to serialize here.","commit_id":"3dee9afc8e33a766efedc40199e629e97ac431b7"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"1ff84f51afdd6041b3c9deabd79546ada994366a","unresolved":false,"context_lines":[{"line_number":3327,"context_line":""},{"line_number":3328,"context_line":"class LibvirtConfigGuestQGATest(LibvirtConfigBaseTest):"},{"line_number":3329,"context_line":"    def test_parse_dom(self):"},{"line_number":3330,"context_line":"        xml \u003d \"\u003cchannel type\u003d\u0027unix\u0027\u003e\u003csource mode\u003d\u0027bind\u0027 \"\\"},{"line_number":3331,"context_line":"              \"path\u003d\u0027/var/lib/libvirt/qemu/org.qemu.guest_agent\"\\"},{"line_number":3332,"context_line":"              \".0.instance-00000084.sock\u0027/\u003e\u003ctarget type\u003d\u0027virtio\u0027 \"\\"},{"line_number":3333,"context_line":"              \"name\u003d\u0027org.qemu.guest_agent.0\u0027 state\u003d\u0027disconnected\u0027/\u003e\"\\"},{"line_number":3334,"context_line":"              \"\u003calias name\u003d\u0027channel0\u0027/\u003e\u003caddress type\u003d\u0027virtio-serial\u0027 \"\\"},{"line_number":3335,"context_line":"              \"controller\u003d\u00270\u0027 bus\u003d\u00270\u0027 port\u003d\u00271\u0027/\u003e\u003c/channel\u003e\""},{"line_number":3336,"context_line":"        xmldoc \u003d etree.fromstring(xml)"},{"line_number":3337,"context_line":"        obj \u003d config.LibvirtConfigGuestQGA()"},{"line_number":3338,"context_line":"        obj.parse_dom(xmldoc)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_9efaa640","line":3335,"range":{"start_line":3330,"start_character":14,"end_line":3335,"end_character":59},"updated":"2019-05-28 09:27:53.000000000","message":"ditto.","commit_id":"3dee9afc8e33a766efedc40199e629e97ac431b7"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"1ff84f51afdd6041b3c9deabd79546ada994366a","unresolved":false,"context_lines":[{"line_number":1414,"context_line":""},{"line_number":1415,"context_line":"    @mock.patch.object(libvirt_guest.Guest, \u0027get_all_devices\u0027,"},{"line_number":1416,"context_line":"                       return_value\u003d[fake_health_qga_obj])"},{"line_number":1417,"context_line":"    def test__ensure_qga_connected_with_qga_connected(self):"},{"line_number":1418,"context_line":"        mock_guest \u003d mock.Mock(spec\u003dlibvirt_guest.Guest)"},{"line_number":1419,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":1420,"context_line":"        self.assertEqual(None, drvr._ensure_qga_connected, mock_guest)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_3ee93ab6","line":1417,"range":{"start_line":1417,"start_character":58,"end_line":1417,"end_character":59},"updated":"2019-05-28 09:27:53.000000000","message":"Missing the parameter e.g. mock_get_all_devtices\n    def test__ensure_qga_connected_with_qga_connected(self, mock_get_all_devtices):\n        ... ...","commit_id":"3dee9afc8e33a766efedc40199e629e97ac431b7"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"1ff84f51afdd6041b3c9deabd79546ada994366a","unresolved":false,"context_lines":[{"line_number":1421,"context_line":""},{"line_number":1422,"context_line":"    @mock.patch.object(libvirt_guest.Guest, \u0027get_all_devices\u0027,"},{"line_number":1423,"context_line":"                       return_value\u003d[fake_broken_qga_obj])"},{"line_number":1424,"context_line":"    def test__ensure_qga_connected_with_qga_disconnected(self):"},{"line_number":1425,"context_line":"        mock_guest \u003d mock.Mock(spec\u003dlibvirt_guest.Guest)"},{"line_number":1426,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":1427,"context_line":"        self.assertRaise(exception.QemuGuestAgentNotRunning,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_fece4258","line":1424,"range":{"start_line":1424,"start_character":61,"end_line":1424,"end_character":62},"updated":"2019-05-28 09:27:53.000000000","message":"ditto.","commit_id":"3dee9afc8e33a766efedc40199e629e97ac431b7"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"1ff84f51afdd6041b3c9deabd79546ada994366a","unresolved":false,"context_lines":[{"line_number":1434,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver,"},{"line_number":1435,"context_line":"                       \u0027_ensure_qga_connected\u0027,"},{"line_number":1436,"context_line":"                       side_effect\u003dexception.QemuGuestAgentNotRunning())"},{"line_number":1437,"context_line":"    def test_set_admin_password_with_qga_disconnected(self, mock_get_guest,"},{"line_number":1438,"context_line":"                                                      ver, mock_image):"},{"line_number":1439,"context_line":"        self.flags(virt_type\u003d\u0027kvm\u0027, group\u003d\u0027libvirt\u0027)"},{"line_number":1440,"context_line":"        instance \u003d objects.Instance(**self.test_instance)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_3e85bacf","line":1437,"range":{"start_line":1437,"start_character":58,"end_line":1437,"end_character":60},"updated":"2019-05-28 09:27:53.000000000","message":"ditto.\nOne \u0027@mock.patch...\u0027 corresponds to one mock_parameter, the parameters in the function interface are from left--\u003eright order, corresponding to \u0027@mock...\u0027 from below--\u003eup.","commit_id":"3dee9afc8e33a766efedc40199e629e97ac431b7"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"1ff84f51afdd6041b3c9deabd79546ada994366a","unresolved":false,"context_lines":[{"line_number":1453,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.host.Host.get_guest\u0027)"},{"line_number":1454,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver,"},{"line_number":1455,"context_line":"                       \u0027_ensure_qga_connected\u0027, return_value\u003dNone)"},{"line_number":1456,"context_line":"    def test_set_admin_password(self, mock_get_guest, ver, mock_image):"},{"line_number":1457,"context_line":"        self.flags(virt_type\u003d\u0027kvm\u0027, group\u003d\u0027libvirt\u0027)"},{"line_number":1458,"context_line":"        instance \u003d objects.Instance(**self.test_instance)"},{"line_number":1459,"context_line":"        mock_image.return_value \u003d {\"properties\": {"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_fe6ac217","line":1456,"range":{"start_line":1456,"start_character":36,"end_line":1456,"end_character":38},"updated":"2019-05-28 09:27:53.000000000","message":"ditto.","commit_id":"3dee9afc8e33a766efedc40199e629e97ac431b7"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"1ff84f51afdd6041b3c9deabd79546ada994366a","unresolved":false,"context_lines":[{"line_number":1476,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.host.Host.get_guest\u0027)"},{"line_number":1477,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver,"},{"line_number":1478,"context_line":"                       \u0027_ensure_qga_connected\u0027, return_value\u003dNone)"},{"line_number":1479,"context_line":"    def test_set_admin_password_saves_sysmeta(self, mock_get_guest,"},{"line_number":1480,"context_line":"                                              ver, mock_image, mock_encrypt,"},{"line_number":1481,"context_line":"                                              mock_convert, mock_encode,"},{"line_number":1482,"context_line":"                                              mock_save):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_9e738616","line":1479,"range":{"start_line":1479,"start_character":50,"end_line":1479,"end_character":52},"updated":"2019-05-28 09:27:53.000000000","message":"ditto.","commit_id":"3dee9afc8e33a766efedc40199e629e97ac431b7"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"1ff84f51afdd6041b3c9deabd79546ada994366a","unresolved":false,"context_lines":[{"line_number":1504,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.host.Host.get_guest\u0027)"},{"line_number":1505,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver,"},{"line_number":1506,"context_line":"                       \u0027_ensure_qga_connected\u0027, return_value\u003dNone)"},{"line_number":1507,"context_line":"    def test_set_admin_password_parallels(self, mock_get_guest):"},{"line_number":1508,"context_line":"        self.flags(virt_type\u003d\u0027parallels\u0027, group\u003d\u0027libvirt\u0027)"},{"line_number":1509,"context_line":"        instance \u003d objects.Instance(**self.test_instance)"},{"line_number":1510,"context_line":"        mock_guest \u003d mock.Mock(spec\u003dlibvirt_guest.Guest)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_7e68121c","line":1507,"range":{"start_line":1507,"start_character":47,"end_line":1507,"end_character":48},"updated":"2019-05-28 09:27:53.000000000","message":"ditto.","commit_id":"3dee9afc8e33a766efedc40199e629e97ac431b7"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"1ff84f51afdd6041b3c9deabd79546ada994366a","unresolved":false,"context_lines":[{"line_number":1521,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.host.Host.get_guest\u0027)"},{"line_number":1522,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver,"},{"line_number":1523,"context_line":"                       \u0027_ensure_qga_connected\u0027, return_value\u003dNone)"},{"line_number":1524,"context_line":"    def test_set_admin_password_windows(self, mock_get_guest, ver, mock_image):"},{"line_number":1525,"context_line":"        self.flags(virt_type\u003d\u0027kvm\u0027, group\u003d\u0027libvirt\u0027)"},{"line_number":1526,"context_line":"        instance \u003d objects.Instance(**self.test_instance)"},{"line_number":1527,"context_line":"        instance.os_type \u003d \"windows\""}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_de56de5c","line":1524,"range":{"start_line":1524,"start_character":44,"end_line":1524,"end_character":45},"updated":"2019-05-28 09:27:53.000000000","message":"ditto.","commit_id":"3dee9afc8e33a766efedc40199e629e97ac431b7"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"1ff84f51afdd6041b3c9deabd79546ada994366a","unresolved":false,"context_lines":[{"line_number":1542,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.host.Host.get_guest\u0027)"},{"line_number":1543,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver,"},{"line_number":1544,"context_line":"                       \u0027_ensure_qga_connected\u0027, return_value\u003dNone)"},{"line_number":1545,"context_line":"    def test_set_admin_password_image(self, mock_get_guest, ver, mock_image):"},{"line_number":1546,"context_line":"        self.flags(virt_type\u003d\u0027kvm\u0027, group\u003d\u0027libvirt\u0027)"},{"line_number":1547,"context_line":"        instance \u003d objects.Instance(**self.test_instance)"},{"line_number":1548,"context_line":"        mock_image.return_value \u003d {\"properties\": {"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_be49aab7","line":1545,"range":{"start_line":1545,"start_character":42,"end_line":1545,"end_character":43},"updated":"2019-05-28 09:27:53.000000000","message":"ditto.","commit_id":"3dee9afc8e33a766efedc40199e629e97ac431b7"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"1ff84f51afdd6041b3c9deabd79546ada994366a","unresolved":false,"context_lines":[{"line_number":1584,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.host.Host.get_guest\u0027)"},{"line_number":1585,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver,"},{"line_number":1586,"context_line":"                       \u0027_ensure_qga_connected\u0027, return_value\u003dNone)"},{"line_number":1587,"context_line":"    def test_set_admin_password_error(self, mock_get_guest, ver, mock_image):"},{"line_number":1588,"context_line":"        self.flags(virt_type\u003d\u0027kvm\u0027, group\u003d\u0027libvirt\u0027)"},{"line_number":1589,"context_line":"        instance \u003d objects.Instance(**self.test_instance)"},{"line_number":1590,"context_line":"        mock_image.return_value \u003d {\"properties\": {"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_7ecd722f","line":1587,"range":{"start_line":1587,"start_character":42,"end_line":1587,"end_character":44},"updated":"2019-05-28 09:27:53.000000000","message":"ditto.","commit_id":"3dee9afc8e33a766efedc40199e629e97ac431b7"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"1ff84f51afdd6041b3c9deabd79546ada994366a","unresolved":false,"context_lines":[{"line_number":1608,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver,"},{"line_number":1609,"context_line":"                       \u0027_ensure_qga_connected\u0027, return_value\u003dNone)"},{"line_number":1610,"context_line":"    def test_set_admin_password_error_with_unicode("},{"line_number":1611,"context_line":"            self, mock_get_guest, ver, mock_image):"},{"line_number":1612,"context_line":"        self.flags(virt_type\u003d\u0027kvm\u0027, group\u003d\u0027libvirt\u0027)"},{"line_number":1613,"context_line":"        instance \u003d objects.Instance(**self.test_instance)"},{"line_number":1614,"context_line":"        mock_image.return_value \u003d {\"properties\": {"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_3ed37ad7","line":1611,"range":{"start_line":1611,"start_character":16,"end_line":1611,"end_character":17},"updated":"2019-05-28 09:27:53.000000000","message":"ditto.","commit_id":"3dee9afc8e33a766efedc40199e629e97ac431b7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"250bcf5af4dd514ce5b34df48290aff3c36add89","unresolved":false,"context_lines":[{"line_number":1573,"context_line":"        mock_get_guest.return_value \u003d mock_guest"},{"line_number":1574,"context_line":""},{"line_number":1575,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":1576,"context_line":"        self.assertRaises(NotImplementedError,"},{"line_number":1577,"context_line":"                          drvr.set_admin_password, instance, \"123\")"},{"line_number":1578,"context_line":""},{"line_number":1579,"context_line":"    @mock.patch.object(objects.Service, \u0027save\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_8abc1506","side":"PARENT","line":1576,"updated":"2019-06-04 20:43:22.000000000","message":"Here, you are removing this because with the new QemuGuestAgentNotRunning behavior, the libvirt driver will raise QemuGuestAgentNotRunning instead of NotImplementedError in the same scenario?","commit_id":"1459e8edb9681537b263bd6fccfb7b9cbe12d923"}],"nova/tests/unit/virt/test_virt_drivers.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"250bcf5af4dd514ce5b34df48290aff3c36add89","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        instance, network_info \u003d self._get_running_instance(obj\u003dTrue)"},{"line_number":281,"context_line":"        self.connection.set_admin_password(instance, \u0027p4ssw0rd\u0027)"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    @catch_notimplementederror"},{"line_number":284,"context_line":"    def test_inject_file(self):"},{"line_number":285,"context_line":"        instance_ref, network_info \u003d self._get_running_instance()"},{"line_number":286,"context_line":"        self.connection.inject_file(instance_ref,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_4a65bdb4","side":"PARENT","line":283,"updated":"2019-06-04 20:43:22.000000000","message":"Same, don\u0027t think this should be removed.","commit_id":"1459e8edb9681537b263bd6fccfb7b9cbe12d923"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"250bcf5af4dd514ce5b34df48290aff3c36add89","unresolved":false,"context_lines":[{"line_number":994,"context_line":"        mock_image.return_value \u003d {\"properties\": {"},{"line_number":995,"context_line":"            \"hw_qemu_guest_agent\": \"yes\"}}"},{"line_number":996,"context_line":"        instance, network_info \u003d self._get_running_instance(obj\u003dTrue)"},{"line_number":997,"context_line":"        self.connection.set_admin_password(instance, \u0027p4ssw0rd\u0027)"},{"line_number":998,"context_line":""},{"line_number":999,"context_line":"    def test_get_volume_connector(self):"},{"line_number":1000,"context_line":"        for multipath in (True, False):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_6ac5213c","side":"PARENT","line":997,"updated":"2019-06-04 20:43:22.000000000","message":"Same, don\u0027t think this should be removed. From what I can tell, these tests don\u0027t have anything to do with NotImplementedError, even though they use the decorator.","commit_id":"1459e8edb9681537b263bd6fccfb7b9cbe12d923"}],"nova/virt/libvirt/config.py":[{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"9dd2a046dfbc7d9acee03dcfc4d3ef05f8c5e837","unresolved":false,"context_lines":[{"line_number":2025,"context_line":"        return dev"},{"line_number":2026,"context_line":""},{"line_number":2027,"context_line":""},{"line_number":2028,"context_line":"class LibvirtConfigGuestQGA(LibvirtConfigGuestChannel):"},{"line_number":2029,"context_line":""},{"line_number":2030,"context_line":"    def __init__(self, **kwargs):"},{"line_number":2031,"context_line":"        super(LibvirtConfigGuestQGA, self).__init__(**kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_7917e146","line":2028,"range":{"start_line":2028,"start_character":6,"end_line":2028,"end_character":27},"updated":"2019-05-26 01:30:52.000000000","message":"Unit tests required","commit_id":"132ae94a43fc4572a7d866e46c3ed94b5d9c4f31"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"9dd2a046dfbc7d9acee03dcfc4d3ef05f8c5e837","unresolved":false,"context_lines":[{"line_number":2619,"context_line":"                        # Channel with permanent target name \u0027org.qemu.guest_"},{"line_number":2620,"context_line":"                        # agent.0\u0027. See https://libvirt.org/formatdomain.html"},{"line_number":2621,"context_line":"                        if d.get(\u0027type\u0027) \u003d\u003d \u0027unix\u0027:"},{"line_number":2622,"context_line":"                            target \u003d [e for e in d.getchildren()"},{"line_number":2623,"context_line":"                                      if e.tag \u003d\u003d \u0027target\u0027][0]"},{"line_number":2624,"context_line":"                            if target.get(\u0027name\u0027) \u003d\u003d \u0027org.qemu.guest_agent.0\u0027:"},{"line_number":2625,"context_line":"                                obj \u003d LibvirtConfigGuestQGA()"},{"line_number":2626,"context_line":"                                obj.parse_dom(d)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_7e02670d","line":2623,"range":{"start_line":2622,"start_character":28,"end_line":2623,"end_character":62},"updated":"2019-05-26 01:30:52.000000000","message":"Target element is required for all Channel devices, and not a unique element for Unix type Channel. See https://libvirt.org/formatdomain.html#elementCharChannel. So I need to move this code to outer to avoid possible redundant job.","commit_id":"132ae94a43fc4572a7d866e46c3ed94b5d9c4f31"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"9dd2a046dfbc7d9acee03dcfc4d3ef05f8c5e837","unresolved":false,"context_lines":[{"line_number":2621,"context_line":"                        if d.get(\u0027type\u0027) \u003d\u003d \u0027unix\u0027:"},{"line_number":2622,"context_line":"                            target \u003d [e for e in d.getchildren()"},{"line_number":2623,"context_line":"                                      if e.tag \u003d\u003d \u0027target\u0027][0]"},{"line_number":2624,"context_line":"                            if target.get(\u0027name\u0027) \u003d\u003d \u0027org.qemu.guest_agent.0\u0027:"},{"line_number":2625,"context_line":"                                obj \u003d LibvirtConfigGuestQGA()"},{"line_number":2626,"context_line":"                                obj.parse_dom(d)"},{"line_number":2627,"context_line":"                                self.devices.append(obj)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_19010506","line":2624,"range":{"start_line":2624,"start_character":54,"end_line":2624,"end_character":76},"updated":"2019-05-26 01:30:52.000000000","message":"We can define a new constant with it.","commit_id":"132ae94a43fc4572a7d866e46c3ed94b5d9c4f31"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"9dd2a046dfbc7d9acee03dcfc4d3ef05f8c5e837","unresolved":false,"context_lines":[{"line_number":2177,"context_line":"                password.convert_password(None, base64.encode_as_text(enc)))"},{"line_number":2178,"context_line":"            instance.save()"},{"line_number":2179,"context_line":""},{"line_number":2180,"context_line":"    def _ensure_qga_connected(self, guest):"},{"line_number":2181,"context_line":"        # NOTE(pandatt): this\u0027s called after `_can_set_admin_password`, so"},{"line_number":2182,"context_line":"        # here we can assume there must be at least one QGA device."},{"line_number":2183,"context_line":"        devices \u003d guest.get_all_devices(vconfig.LibvirtConfigGuestQGA)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_192a657e","line":2180,"range":{"start_line":2180,"start_character":8,"end_line":2180,"end_character":29},"updated":"2019-05-26 01:30:52.000000000","message":"Unit tests required","commit_id":"132ae94a43fc4572a7d866e46c3ed94b5d9c4f31"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"9dd2a046dfbc7d9acee03dcfc4d3ef05f8c5e837","unresolved":false,"context_lines":[{"line_number":2180,"context_line":"    def _ensure_qga_connected(self, guest):"},{"line_number":2181,"context_line":"        # NOTE(pandatt): this\u0027s called after `_can_set_admin_password`, so"},{"line_number":2182,"context_line":"        # here we can assume there must be at least one QGA device."},{"line_number":2183,"context_line":"        devices \u003d guest.get_all_devices(vconfig.LibvirtConfigGuestQGA)"},{"line_number":2184,"context_line":"        qga_state \u003d devices[0].target_state"},{"line_number":2185,"context_line":"        if qga_state !\u003d \"connected\":"},{"line_number":2186,"context_line":"            raise exception.QemuGuestAgentNotRunning()"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_591a1d6f","line":2183,"range":{"start_line":2183,"start_character":8,"end_line":2183,"end_character":15},"updated":"2019-05-26 01:30:52.000000000","message":"I\u0027m pretty sure that `devices` is a list.","commit_id":"132ae94a43fc4572a7d866e46c3ed94b5d9c4f31"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"b7c267624fd71032ae14391bccdb756142609593","unresolved":false,"context_lines":[{"line_number":2183,"context_line":"        devices \u003d guest.get_all_devices(vconfig.LibvirtConfigGuestQGA)"},{"line_number":2184,"context_line":"        qga_state \u003d devices[0].target_state"},{"line_number":2185,"context_line":"        if qga_state !\u003d \"connected\":"},{"line_number":2186,"context_line":"            raise exception.QemuGuestAgentNotRunning()"},{"line_number":2187,"context_line":""},{"line_number":2188,"context_line":"    def set_admin_password(self, instance, new_pass):"},{"line_number":2189,"context_line":"        self._can_set_admin_password(instance.image_meta)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_5e4d23c2","line":2186,"updated":"2019-05-25 22:57:52.000000000","message":"good catch","commit_id":"132ae94a43fc4572a7d866e46c3ed94b5d9c4f31"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"9dd2a046dfbc7d9acee03dcfc4d3ef05f8c5e837","unresolved":false,"context_lines":[{"line_number":2185,"context_line":"        if qga_state !\u003d \"connected\":"},{"line_number":2186,"context_line":"            raise exception.QemuGuestAgentNotRunning()"},{"line_number":2187,"context_line":""},{"line_number":2188,"context_line":"    def set_admin_password(self, instance, new_pass):"},{"line_number":2189,"context_line":"        self._can_set_admin_password(instance.image_meta)"},{"line_number":2190,"context_line":""},{"line_number":2191,"context_line":"        guest \u003d self._host.get_guest(instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_392f298f","line":2188,"range":{"start_line":2188,"start_character":8,"end_line":2188,"end_character":26},"updated":"2019-05-26 01:30:52.000000000","message":"New test cases needed","commit_id":"132ae94a43fc4572a7d866e46c3ed94b5d9c4f31"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"92bcddf64fe1de8fcd71ef2c8a16eeaac8f1662b","unresolved":false,"context_lines":[{"line_number":2181,"context_line":"        # NOTE(pandatt): this\u0027s called after `_can_set_admin_password`, so"},{"line_number":2182,"context_line":"        # here we can assume there must be at least one QGA device."},{"line_number":2183,"context_line":"        devices \u003d guest.get_all_devices(vconfig.LibvirtConfigGuestQGA)"},{"line_number":2184,"context_line":"        qga_state \u003d devices[0].target_state"},{"line_number":2185,"context_line":"        if qga_state !\u003d \"connected\":"},{"line_number":2186,"context_line":"            raise exception.QemuGuestAgentNotRunning()"},{"line_number":2187,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_bc69a0f9","line":2184,"range":{"start_line":2184,"start_character":20,"end_line":2184,"end_character":30},"updated":"2019-05-29 07:22:28.000000000","message":"we may get an empty list when no such device.","commit_id":"ed4c313a6ca2beb8986d48a571f5a03265c85d14"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"14aa896c2be398c84b4b3dae41329149f02b8672","unresolved":false,"context_lines":[{"line_number":2181,"context_line":"        # NOTE(pandatt): this\u0027s called after `_can_set_admin_password`, so"},{"line_number":2182,"context_line":"        # here we can assume there must be at least one QGA device."},{"line_number":2183,"context_line":"        devices \u003d guest.get_all_devices(vconfig.LibvirtConfigGuestQGA)"},{"line_number":2184,"context_line":"        qga_state \u003d devices[0].target_state"},{"line_number":2185,"context_line":"        if qga_state !\u003d \"connected\":"},{"line_number":2186,"context_line":"            raise exception.QemuGuestAgentNotRunning()"},{"line_number":2187,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_5a2cd446","line":2184,"range":{"start_line":2184,"start_character":20,"end_line":2184,"end_character":30},"in_reply_to":"9fb8cfa7_bf586256","updated":"2019-06-05 01:04:55.000000000","message":"Alex, Wait. I\u0027m doing some investgation on Parallels virtualization. The \u0027nova set-passwotrd\u0027 works properly relying on three items:\n\n(1) QemuGuestAgent installed/staretd in guest OS(as I know Linux/Windows are supported .Just Ignore the `qemu` word in it\u0027s name).\n\n(2) Serial device(simulated with Channel device in hypervisor virtualization layer) in guest OS.\n\n(3) Channel device or something like that in hypervisor layer to simulate a serial device in guest.\n\nItems (1)(2)  have nothing to do with our question.And as to item(3), I guess there must be some implement provided by Parallels virtualization: simulating a serial device for guest OS is such a common requirement. I\u0027m doing some investgation to confirm this.\n\nIf you know any thing about this, please let me know. Thanks.","commit_id":"ed4c313a6ca2beb8986d48a571f5a03265c85d14"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6541a48b67e9ed15bc63d115acecfa2a088e55ea","unresolved":false,"context_lines":[{"line_number":2181,"context_line":"        # NOTE(pandatt): this\u0027s called after `_can_set_admin_password`, so"},{"line_number":2182,"context_line":"        # here we can assume there must be at least one QGA device."},{"line_number":2183,"context_line":"        devices \u003d guest.get_all_devices(vconfig.LibvirtConfigGuestQGA)"},{"line_number":2184,"context_line":"        qga_state \u003d devices[0].target_state"},{"line_number":2185,"context_line":"        if qga_state !\u003d \"connected\":"},{"line_number":2186,"context_line":"            raise exception.QemuGuestAgentNotRunning()"},{"line_number":2187,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_bf586256","line":2184,"range":{"start_line":2184,"start_character":20,"end_line":2184,"end_character":30},"in_reply_to":"bfb3d3c7_37262917","updated":"2019-06-02 23:45:18.000000000","message":"Thanks, I missed that. But can we put this check into the _can_set_admin_password, and in the virt_type is kvm and qemu branch. Ensure this is only check for kvm and qemu?","commit_id":"ed4c313a6ca2beb8986d48a571f5a03265c85d14"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"ca411b42478cb0835e00d6fa08cea99df2eb7d39","unresolved":false,"context_lines":[{"line_number":2181,"context_line":"        # NOTE(pandatt): this\u0027s called after `_can_set_admin_password`, so"},{"line_number":2182,"context_line":"        # here we can assume there must be at least one QGA device."},{"line_number":2183,"context_line":"        devices \u003d guest.get_all_devices(vconfig.LibvirtConfigGuestQGA)"},{"line_number":2184,"context_line":"        qga_state \u003d devices[0].target_state"},{"line_number":2185,"context_line":"        if qga_state !\u003d \"connected\":"},{"line_number":2186,"context_line":"            raise exception.QemuGuestAgentNotRunning()"},{"line_number":2187,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_37262917","line":2184,"range":{"start_line":2184,"start_character":20,"end_line":2184,"end_character":30},"in_reply_to":"bfb3d3c7_bc69a0f9","updated":"2019-05-30 01:19:09.000000000","message":"Hi Alex, I noticed the problem.\n\nAs I note: \"this\u0027s called after `_can_set_admin_password`, so here we can assume there must be at least one QGA device\".\nAnd in function `_can_set_admin_password`, it forces a flag `hw_qemu_guest_agent\u003dTrue`.\n\nInstances booted with `hw_qemu_guest_agent\u003dTrue` will be defined with Channel device (i.e LibvirtConfigGuestQGA).\n\nSo, I\u0027m quite sure no `out of index` errors will happen.\n\nEven though， thanks for your review.","commit_id":"ed4c313a6ca2beb8986d48a571f5a03265c85d14"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"2d97442a839dc4c84177270ac5cdde7839704540","unresolved":false,"context_lines":[{"line_number":2178,"context_line":"            instance.save()"},{"line_number":2179,"context_line":""},{"line_number":2180,"context_line":"    def _ensure_qga_connected(self, guest):"},{"line_number":2181,"context_line":"        # NOTE(pandatt): this\u0027s called after `_can_set_admin_password`, so"},{"line_number":2182,"context_line":"        # here we can assume there must be at least one QGA device."},{"line_number":2183,"context_line":"        devices \u003d guest.get_all_devices(vconfig.LibvirtConfigGuestQGA)"},{"line_number":2184,"context_line":"        qga_state \u003d devices[0].target_state"}],"source_content_type":"text/x-python","patch_set":7,"id":"bfb3d3c7_46018737","line":2181,"range":{"start_line":2181,"start_character":25,"end_line":2181,"end_character":31},"updated":"2019-05-31 01:47:16.000000000","message":"nit: this is","commit_id":"2a9ccc03d7056e0b3c53c66009794deba88e3052"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"7130bec800ce48908d96fc8f5cd6272883648947","unresolved":false,"context_lines":[{"line_number":2178,"context_line":"            instance.save()"},{"line_number":2179,"context_line":""},{"line_number":2180,"context_line":"    def _ensure_qga_connected(self, guest):"},{"line_number":2181,"context_line":"        # NOTE(pandatt): this\u0027s called after `_can_set_admin_password`, so"},{"line_number":2182,"context_line":"        # here we can assume there must be at least one QGA device."},{"line_number":2183,"context_line":"        devices \u003d guest.get_all_devices(vconfig.LibvirtConfigGuestQGA)"},{"line_number":2184,"context_line":"        qga_state \u003d devices[0].target_state"}],"source_content_type":"text/x-python","patch_set":7,"id":"bfb3d3c7_d99c786b","line":2181,"range":{"start_line":2181,"start_character":25,"end_line":2181,"end_character":31},"in_reply_to":"bfb3d3c7_46018737","updated":"2019-05-31 05:48:38.000000000","message":"You are right. \u0027this is\u0027 can avoid confusion","commit_id":"2a9ccc03d7056e0b3c53c66009794deba88e3052"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"2d97442a839dc4c84177270ac5cdde7839704540","unresolved":false,"context_lines":[{"line_number":2200,"context_line":"        try:"},{"line_number":2201,"context_line":"            guest.set_user_password(user, new_pass)"},{"line_number":2202,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":2203,"context_line":"            # NOTE(pandatt): in `_ensure_qga_connected`, we already do"},{"line_number":2204,"context_line":"            # pre-check on QGA state. let\u0027s remove AGENT_UNRESPONSIVE"},{"line_number":2205,"context_line":"            # case."},{"line_number":2206,"context_line":"            error_code \u003d ex.get_error_code()"},{"line_number":2207,"context_line":"            err_msg \u003d encodeutils.exception_to_unicode(ex)"},{"line_number":2208,"context_line":"            msg \u003d (_(\u0027Error from libvirt while set password for username \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"bfb3d3c7_86ebff75","line":2205,"range":{"start_line":2203,"start_character":12,"end_line":2205,"end_character":19},"updated":"2019-05-31 01:47:16.000000000","message":"IMO, this is unnecessary after you removes that code.","commit_id":"2a9ccc03d7056e0b3c53c66009794deba88e3052"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"33154efa398d6a27f7e25ff308a5e1fdd400cd22","unresolved":false,"context_lines":[{"line_number":2200,"context_line":"        try:"},{"line_number":2201,"context_line":"            guest.set_user_password(user, new_pass)"},{"line_number":2202,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":2203,"context_line":"            # NOTE(pandatt): in `_ensure_qga_connected`, we already do"},{"line_number":2204,"context_line":"            # pre-check on QGA state. let\u0027s remove AGENT_UNRESPONSIVE"},{"line_number":2205,"context_line":"            # case."},{"line_number":2206,"context_line":"            error_code \u003d ex.get_error_code()"},{"line_number":2207,"context_line":"            err_msg \u003d encodeutils.exception_to_unicode(ex)"},{"line_number":2208,"context_line":"            msg \u003d (_(\u0027Error from libvirt while set password for username \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"bfb3d3c7_bc517238","line":2205,"range":{"start_line":2203,"start_character":12,"end_line":2205,"end_character":19},"in_reply_to":"bfb3d3c7_86ebff75","updated":"2019-05-31 03:44:00.000000000","message":"+1, agree","commit_id":"2a9ccc03d7056e0b3c53c66009794deba88e3052"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"57141e57e6dc8d7ab2d4e7d2a02a52653b1ba348","unresolved":false,"context_lines":[{"line_number":2179,"context_line":"            if len(devices):"},{"line_number":2180,"context_line":"                qga_state \u003d devices[0].target_state"},{"line_number":2181,"context_line":"                if qga_state !\u003d \u0027connected\u0027:"},{"line_number":2182,"context_line":"                    raise exception.InstanceAgentNotRunning()"},{"line_number":2183,"context_line":""},{"line_number":2184,"context_line":"    # TODO(melwitt): Combine this with the similar xenapi code at some point."},{"line_number":2185,"context_line":"    def _save_instance_password_if_sshkey_present(self, instance, new_pass):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_ea2a868f","line":2182,"range":{"start_line":2182,"start_character":36,"end_line":2182,"end_character":59},"updated":"2019-08-23 14:52:54.000000000","message":"How about define a new exception QemuGuestAgentNotRunning inherit from InstanceAgentNotRunning, and then using QemuGuestAgentNotRunning here?","commit_id":"673553b1c722684c0af4349aab68614c401d185a"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"57141e57e6dc8d7ab2d4e7d2a02a52653b1ba348","unresolved":false,"context_lines":[{"line_number":2173,"context_line":"        elif not CONF.libvirt.virt_type \u003d\u003d \u0027parallels\u0027:"},{"line_number":2174,"context_line":"            raise exception.SetAdminPasswdNotSupported()"},{"line_number":2175,"context_line":""},{"line_number":2176,"context_line":"    def _raise_if_guest_agent_not_connected(self, guest):"},{"line_number":2177,"context_line":"        if CONF.libvirt.virt_type in (\u0027kvm\u0027, \u0027qemu\u0027):"},{"line_number":2178,"context_line":"            devices \u003d guest.get_all_devices(vconfig.LibvirtConfigGuestQGA)"},{"line_number":2179,"context_line":"            if len(devices):"},{"line_number":2180,"context_line":"                qga_state \u003d devices[0].target_state"},{"line_number":2181,"context_line":"                if qga_state !\u003d \u0027connected\u0027:"},{"line_number":2182,"context_line":"                    raise exception.InstanceAgentNotRunning()"},{"line_number":2183,"context_line":""},{"line_number":2184,"context_line":"    # TODO(melwitt): Combine this with the similar xenapi code at some point."},{"line_number":2185,"context_line":"    def _save_instance_password_if_sshkey_present(self, instance, new_pass):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_0a012207","line":2182,"range":{"start_line":2176,"start_character":4,"end_line":2182,"end_character":61},"updated":"2019-08-23 14:52:54.000000000","message":"IMO, this function can move to _can_set_admin_password.","commit_id":"673553b1c722684c0af4349aab68614c401d185a"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d4be970ed3783a1a5558405cc14d9a8ca59e41bb","unresolved":false,"context_lines":[{"line_number":2447,"context_line":"            if error_code \u003d\u003d libvirt.VIR_ERR_AGENT_UNRESPONSIVE:"},{"line_number":2448,"context_line":"                LOG.debug(\u0027Failed to set password: QEMU agent unresponsive\u0027,"},{"line_number":2449,"context_line":"                          instance_uuid\u003dinstance.uuid)"},{"line_number":2450,"context_line":"                raise NotImplementedError()"},{"line_number":2451,"context_line":""},{"line_number":2452,"context_line":"            err_msg \u003d encodeutils.exception_to_unicode(ex)"},{"line_number":2453,"context_line":"            msg \u003d (_(\u0027Error from libvirt while set password for username \u0027"}],"source_content_type":"text/x-python","patch_set":17,"id":"3fa7e38b_7b9c550c","line":2450,"updated":"2019-12-13 06:37:27.000000000","message":"I tested the bug report on a Queens devstack with a ubuntu/xenial64 and a master (Ussuri) devstack with a centos/7 and in both cases, after following the reproduce steps with cirros, this is the error I got. And the instance did not go into ERROR state, it remained in ACTIVE state.\n\nThe NotImplementedError seems appropriate because it\u0027s saying \"set password\" either (1) isn\u0027t implemented by the driver or (2) isn\u0027t implemented in the image (which it is not in cirros image).","commit_id":"fe000fba2cdaeb7a5d0da625dbb5ade8e7fe52f0"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"cd777396a70696e2ecf1f07ec1601e81010d490a","unresolved":false,"context_lines":[{"line_number":2447,"context_line":"            if error_code \u003d\u003d libvirt.VIR_ERR_AGENT_UNRESPONSIVE:"},{"line_number":2448,"context_line":"                LOG.debug(\u0027Failed to set password: QEMU agent unresponsive\u0027,"},{"line_number":2449,"context_line":"                          instance_uuid\u003dinstance.uuid)"},{"line_number":2450,"context_line":"                raise NotImplementedError()"},{"line_number":2451,"context_line":""},{"line_number":2452,"context_line":"            err_msg \u003d encodeutils.exception_to_unicode(ex)"},{"line_number":2453,"context_line":"            msg \u003d (_(\u0027Error from libvirt while set password for username \u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_92bfab5e","line":2450,"range":{"start_line":2450,"start_character":22,"end_line":2450,"end_character":41},"updated":"2019-12-13 16:13:13.000000000","message":"Here is where we could raise InstanceAgentNotRunning to improve the error messaging to the user.","commit_id":"0ed87417a661359a5be7e67656ef2132ebb1cc84"}]}
