)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e6e7dd00fa6c75cfb88c175711874b2f77637d02","unresolved":false,"context_lines":[{"line_number":7,"context_line":"[dnm] Make sure that we have USB Host controller for tablet"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When graphical console is enabled Nova adds \u0027usbtablet\u0027 as pointing"},{"line_number":10,"context_line":"device. But it does not check is there an USB host present in VM"},{"line_number":11,"context_line":"instance."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"On x86 there is USB host present by default but not on aarch64."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5f93b717_eec21934","line":10,"range":{"start_line":10,"start_character":42,"end_line":10,"end_character":50},"updated":"2018-01-31 16:01:57.000000000","message":"What is a USB host? Is that related to this?\n\nhttps://libvirt.org/formatdomain.html#elementsHostDev","commit_id":"7328dd6ac6cb19ed7dccbbb56950aba2e6163a8f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e6e7dd00fa6c75cfb88c175711874b2f77637d02","unresolved":false,"context_lines":[{"line_number":7,"context_line":"[dnm] Make sure that we have USB Host controller for tablet"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When graphical console is enabled Nova adds \u0027usbtablet\u0027 as pointing"},{"line_number":10,"context_line":"device. But it does not check is there an USB host present in VM"},{"line_number":11,"context_line":"instance."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"On x86 there is USB host present by default but not on aarch64."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5f93b717_6eafe97c","line":10,"range":{"start_line":10,"start_character":30,"end_line":10,"end_character":32},"updated":"2018-01-31 16:01:57.000000000","message":"if","commit_id":"7328dd6ac6cb19ed7dccbbb56950aba2e6163a8f"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"937285b376456f2ab6e1711fdcba874b4a716c29","unresolved":false,"context_lines":[{"line_number":7,"context_line":"[dnm] Make sure that we have USB Host controller for tablet"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When graphical console is enabled Nova adds \u0027usbtablet\u0027 as pointing"},{"line_number":10,"context_line":"device. But it does not check is there an USB host present in VM"},{"line_number":11,"context_line":"instance."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"On x86 there is USB host present by default but not on aarch64."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5f93b717_b9777da0","line":10,"range":{"start_line":10,"start_character":42,"end_line":10,"end_character":50},"in_reply_to":"5f93b717_eec21934","updated":"2018-01-31 16:20:51.000000000","message":"USB host controller: \n\nhttps://libvirt.org/formatdomain.html#elementsControllers","commit_id":"7328dd6ac6cb19ed7dccbbb56950aba2e6163a8f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"75c66b8eea47d40615c4dbf57af24cd9a6d3e5b5","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make sure that we have USB Host controller for tablet"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When graphical console is enabled Nova adds \u0027usbtablet\u0027 as pointing"},{"line_number":10,"context_line":"device. But it does not check if there an USB host controller present"},{"line_number":11,"context_line":"in VM instance. And this is a problem on !x86 architectures."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Due to backward compatibility libvirt on x86 adds USB host controller"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5f93b717_1902310c","line":10,"range":{"start_line":9,"start_character":0,"end_line":10,"end_character":8},"updated":"2018-01-31 16:47:02.000000000","message":"Again, this is ignoring the pointer_model config option - that needs to be mentioned here and possibly dealt with in the code.","commit_id":"9d907e06fa3885212cc03019162edcb0392a2978"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9349f1f407173c98911f797eb5a7dab7704be6c9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Make sure that we have USB Host controller for tablet"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When graphical console is enabled Nova adds \u0027usbtablet\u0027 as pointing"},{"line_number":10,"context_line":"device. But it does not check if there an USB host controller present"},{"line_number":11,"context_line":"in VM instance. And this is a problem on !x86 architectures."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Due to backward compatibility libvirt on x86 adds USB host controller"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5f93b717_d97fe9dd","line":10,"range":{"start_line":10,"start_character":33,"end_line":10,"end_character":41},"updated":"2018-01-31 16:40:28.000000000","message":"there is a","commit_id":"9d907e06fa3885212cc03019162edcb0392a2978"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":12988,"name":"Peter Penchev","email":"openstack-dev@storpool.com","username":"ppenchev"},"change_message_id":"ac85135d9679482a1c4b56f94c54ff6ea5a73d5f","unresolved":false,"context_lines":[{"line_number":5633,"context_line":"            libvirt_driver.DEFAULT_UEFI_LOADER_PATH[\u0027aarch64\u0027])"},{"line_number":5634,"context_line":"        self.assertEqual(cfg.os_mach_type, \"virt\")"},{"line_number":5635,"context_line":""},{"line_number":5636,"context_line":"        usbhost_exist \u003d False"},{"line_number":5637,"context_line":"        for device in cfg.devices:"},{"line_number":5638,"context_line":"            if device.root_name \u003d\u003d \u0027controller\u0027 and device.type \u003d\u003d \u0027usb\u0027:"},{"line_number":5639,"context_line":"                usbhost_exist \u003d True"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f93b717_f812c861","line":5636,"updated":"2018-02-01 11:32:08.000000000","message":"A very minor nit, but wouldn\u0027t it be better as \"_exists\"?","commit_id":"f2b23c251fdddef6dfb7c842bc02dfc65461e39d"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"7b9da81166249dc73e9f88487d0ddf123c27c0e7","unresolved":false,"context_lines":[{"line_number":5633,"context_line":"            libvirt_driver.DEFAULT_UEFI_LOADER_PATH[\u0027aarch64\u0027])"},{"line_number":5634,"context_line":"        self.assertEqual(cfg.os_mach_type, \"virt\")"},{"line_number":5635,"context_line":""},{"line_number":5636,"context_line":"        usbhost_exist \u003d False"},{"line_number":5637,"context_line":"        for device in cfg.devices:"},{"line_number":5638,"context_line":"            if device.root_name \u003d\u003d \u0027controller\u0027 and device.type \u003d\u003d \u0027usb\u0027:"},{"line_number":5639,"context_line":"                usbhost_exist \u003d True"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f93b717_736c9b9b","line":5636,"in_reply_to":"5f93b717_f812c861","updated":"2018-02-01 11:38:41.000000000","message":"Done","commit_id":"f2b23c251fdddef6dfb7c842bc02dfc65461e39d"}],"nova/virt/libvirt/config.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9349f1f407173c98911f797eb5a7dab7704be6c9","unresolved":false,"context_lines":[{"line_number":1572,"context_line":"        return seclabel"},{"line_number":1573,"context_line":""},{"line_number":1574,"context_line":""},{"line_number":1575,"context_line":"class LibvirtConfigGuestUSBHost(LibvirtConfigGuestDevice):"},{"line_number":1576,"context_line":""},{"line_number":1577,"context_line":"    def __init__(self, **kwargs):"},{"line_number":1578,"context_line":"        super(LibvirtConfigGuestUSBHost, self).__init__(root_name\u003d\"controller\","}],"source_content_type":"text/x-python","patch_set":3,"id":"5f93b717_f9fae540","line":1575,"range":{"start_line":1575,"start_character":24,"end_line":1575,"end_character":31},"updated":"2018-01-31 16:40:28.000000000","message":"I think this should probably be HostController instead of USBHost. The type of the host controller is settable via the type attribute on the object and therefore the config object subclass should just be HostController...","commit_id":"9d907e06fa3885212cc03019162edcb0392a2978"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9349f1f407173c98911f797eb5a7dab7704be6c9","unresolved":false,"context_lines":[{"line_number":1575,"context_line":"class LibvirtConfigGuestUSBHost(LibvirtConfigGuestDevice):"},{"line_number":1576,"context_line":""},{"line_number":1577,"context_line":"    def __init__(self, **kwargs):"},{"line_number":1578,"context_line":"        super(LibvirtConfigGuestUSBHost, self).__init__(root_name\u003d\"controller\","},{"line_number":1579,"context_line":"                                                      **kwargs)"},{"line_number":1580,"context_line":""},{"line_number":1581,"context_line":"        self.type \u003d \u0027usb\u0027"},{"line_number":1582,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5f93b717_79ced52d","line":1579,"range":{"start_line":1578,"start_character":79,"end_line":1579,"end_character":63},"updated":"2018-01-31 16:40:28.000000000","message":"nit: pretty sure this can all fit on one line :)","commit_id":"9d907e06fa3885212cc03019162edcb0392a2978"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"3f0c9d39d29bc1bf1f6707fa13087d0e345b1d0b","unresolved":false,"context_lines":[{"line_number":1575,"context_line":"class LibvirtConfigGuestUSBHost(LibvirtConfigGuestDevice):"},{"line_number":1576,"context_line":""},{"line_number":1577,"context_line":"    def __init__(self, **kwargs):"},{"line_number":1578,"context_line":"        super(LibvirtConfigGuestUSBHost, self).__init__(root_name\u003d\"controller\","},{"line_number":1579,"context_line":"                                                      **kwargs)"},{"line_number":1580,"context_line":""},{"line_number":1581,"context_line":"        self.type \u003d \u0027usb\u0027"},{"line_number":1582,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5f93b717_f473cc14","line":1579,"range":{"start_line":1578,"start_character":79,"end_line":1579,"end_character":63},"in_reply_to":"5f93b717_79ced52d","updated":"2018-01-31 17:52:00.000000000","message":"like in several other copies of that copy/pasted line ;D","commit_id":"9d907e06fa3885212cc03019162edcb0392a2978"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6a2aaea0d69cab9768532d6d8db1f87de997f375","unresolved":false,"context_lines":[{"line_number":1572,"context_line":"        return seclabel"},{"line_number":1573,"context_line":""},{"line_number":1574,"context_line":""},{"line_number":1575,"context_line":"class LibvirtConfigGuestUSBHostController(LibvirtConfigGuestDevice):"},{"line_number":1576,"context_line":""},{"line_number":1577,"context_line":"    def __init__(self, **kwargs):"},{"line_number":1578,"context_line":"        super(LibvirtConfigGuestUSBHostController, self).__init__("}],"source_content_type":"text/x-python","patch_set":8,"id":"5f93b717_e22d2e95","line":1575,"range":{"start_line":1575,"start_character":6,"end_line":1575,"end_character":41},"updated":"2018-02-01 15:15:25.000000000","message":"Depending on the version of libvirt being used, there is a required index attribute that you\u0027re missing:\n\nhttps://libvirt.org/formatdomain.html#elementsControllers\n\n\"Since 1.3.5 the index is optional; if not specified, it will be auto-assigned to be the lowest unused index for the given controller type.\"\n\nNow requires libvirt\u003e\u003d1.2.9 so we have to account for the required index attribute for now:\n\nhttps://github.com/openstack/nova/blob/02b505806a3a4d7cb51cf0a78523bb15338b27ce/nova/virt/libvirt/driver.py#L207\n\nGiven I think we would only ever have one of these per guest, the index can be 0?","commit_id":"eaee6a2c6ab6687365c3c5999ea8e1b4c40e7d89"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"80ea8e0b804cf1c6bdf1b03203c21744072b0027","unresolved":false,"context_lines":[{"line_number":1572,"context_line":"        return seclabel"},{"line_number":1573,"context_line":""},{"line_number":1574,"context_line":""},{"line_number":1575,"context_line":"class LibvirtConfigGuestUSBHostController(LibvirtConfigGuestDevice):"},{"line_number":1576,"context_line":""},{"line_number":1577,"context_line":"    def __init__(self, **kwargs):"},{"line_number":1578,"context_line":"        super(LibvirtConfigGuestUSBHostController, self).__init__("}],"source_content_type":"text/x-python","patch_set":9,"id":"5f93b717_df7fa863","line":1575,"range":{"start_line":1575,"start_character":42,"end_line":1575,"end_character":66},"updated":"2018-02-01 17:28:31.000000000","message":"This should subclass LibvirtConfigGuestController.\n\nThat way you get the model and index attributes for free.","commit_id":"3dac7c832fd12f7ab523553a3bf5c608af427199"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"f7b8f090426f081fa3a2ee33bc0869c12de7fd0d","unresolved":false,"context_lines":[{"line_number":1572,"context_line":"        return seclabel"},{"line_number":1573,"context_line":""},{"line_number":1574,"context_line":""},{"line_number":1575,"context_line":"class LibvirtConfigGuestUSBHostController(LibvirtConfigGuestDevice):"},{"line_number":1576,"context_line":""},{"line_number":1577,"context_line":"    def __init__(self, **kwargs):"},{"line_number":1578,"context_line":"        super(LibvirtConfigGuestUSBHostController, self).__init__("}],"source_content_type":"text/x-python","patch_set":9,"id":"5f93b717_1f0bd0d5","line":1575,"range":{"start_line":1575,"start_character":42,"end_line":1575,"end_character":66},"in_reply_to":"5f93b717_df7fa863","updated":"2018-02-01 17:34:22.000000000","message":"Done","commit_id":"3dac7c832fd12f7ab523553a3bf5c608af427199"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"80ea8e0b804cf1c6bdf1b03203c21744072b0027","unresolved":false,"context_lines":[{"line_number":1632,"context_line":"        return dev"},{"line_number":1633,"context_line":""},{"line_number":1634,"context_line":""},{"line_number":1635,"context_line":"class LibvirtConfigGuestController(LibvirtConfigGuestDevice):"},{"line_number":1636,"context_line":""},{"line_number":1637,"context_line":"    def __init__(self, **kwargs):"},{"line_number":1638,"context_line":"        super(LibvirtConfigGuestController,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f93b717_9facc0ed","line":1635,"updated":"2018-02-01 17:28:31.000000000","message":"This is the class that the new USB-specific controller class should subclass.","commit_id":"3dac7c832fd12f7ab523553a3bf5c608af427199"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"f7b8f090426f081fa3a2ee33bc0869c12de7fd0d","unresolved":false,"context_lines":[{"line_number":1632,"context_line":"        return dev"},{"line_number":1633,"context_line":""},{"line_number":1634,"context_line":""},{"line_number":1635,"context_line":"class LibvirtConfigGuestController(LibvirtConfigGuestDevice):"},{"line_number":1636,"context_line":""},{"line_number":1637,"context_line":"    def __init__(self, **kwargs):"},{"line_number":1638,"context_line":"        super(LibvirtConfigGuestController,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f93b717_bf0dfce8","line":1635,"in_reply_to":"5f93b717_9facc0ed","updated":"2018-02-01 17:34:22.000000000","message":"Done","commit_id":"3dac7c832fd12f7ab523553a3bf5c608af427199"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f49d1ac2f5a3608851250a309e972b17bfc2d074","unresolved":false,"context_lines":[{"line_number":1638,"context_line":"        return controller"},{"line_number":1639,"context_line":""},{"line_number":1640,"context_line":""},{"line_number":1641,"context_line":"class LibvirtConfigGuestUSBHostController(LibvirtConfigGuestController):"},{"line_number":1642,"context_line":""},{"line_number":1643,"context_line":"    def __init__(self, **kwargs):"},{"line_number":1644,"context_line":"        super(LibvirtConfigGuestUSBHostController, self).__init__(**kwargs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f93b717_b0e52bde","line":1641,"updated":"2018-02-01 19:37:17.000000000","message":"You ignored my comment from an earlier patch set:\n\nhttps://review.openstack.org/#/c/538003/8/nova/virt/libvirt/config.py@1575\n\nSo far as I can tell, there is no minimum version check for libvirt with aarch64, I think that would happen here:\n\nhttps://github.com/openstack/nova/blob/02b505806a3a4d7cb51cf0a78523bb15338b27ce/nova/virt/libvirt/driver.py#L552\n\nBut that doesn\u0027t happen because aarch64 isn\u0027t in MIN_LIBVIRT_OTHER_ARCH. So we\u0027re left with the global min libvirt default of 1.2.9, which if you\u0027re using that, requires an index attribute to be set for the controller element.\n\nThe solution is probably to add aarch64 to MIN_LIBVIRT_OTHER_ARCH if we\u0027re going to continue building more support into the libvirt driver for that architecture, and that likely should happen in a separate change that comes before this one.","commit_id":"cb5d49a2dfc810ec5cf0dab8da15e9bc57312e57"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"72e245475f4074e5aee73b00ad3cfc49da1fa02b","unresolved":false,"context_lines":[{"line_number":1638,"context_line":"        return controller"},{"line_number":1639,"context_line":""},{"line_number":1640,"context_line":""},{"line_number":1641,"context_line":"class LibvirtConfigGuestUSBHostController(LibvirtConfigGuestController):"},{"line_number":1642,"context_line":""},{"line_number":1643,"context_line":"    def __init__(self, **kwargs):"},{"line_number":1644,"context_line":"        super(LibvirtConfigGuestUSBHostController, self).__init__(**kwargs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f93b717_708b23c2","line":1641,"in_reply_to":"5f93b717_b0e52bde","updated":"2018-02-01 19:50:37.000000000","message":"I set index in driver.py when I call that class. That way each use can have other index value.\n\nWill send a separate patch to set MIN_LIBVIRT_OTHER_ARCH for aarch64 to 3.6.0 one.","commit_id":"cb5d49a2dfc810ec5cf0dab8da15e9bc57312e57"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1836843a45183902a28ca9f16b5e2423703579ac","unresolved":false,"context_lines":[{"line_number":1625,"context_line":"        self.index \u003d None"},{"line_number":1626,"context_line":"        self.model \u003d None"},{"line_number":1627,"context_line":""},{"line_number":1628,"context_line":"    def format_dom(self):"},{"line_number":1629,"context_line":"        controller \u003d super(LibvirtConfigGuestController, self).format_dom()"},{"line_number":1630,"context_line":"        controller.set(\"type\", self.type)"},{"line_number":1631,"context_line":""},{"line_number":1632,"context_line":"        if self.index is not None:"},{"line_number":1633,"context_line":"            controller.set(\"index\", str(self.index))"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa0c359_2bd730f0","line":1630,"range":{"start_line":1628,"start_character":0,"end_line":1630,"end_character":41},"updated":"2018-02-05 18:12:19.000000000","message":"see note below...","commit_id":"1a316a3bc433061985c1d729a589a09429fa06af"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"836c54d54a167e668d52cd7a2c42c44a196e23ea","unresolved":false,"context_lines":[{"line_number":1625,"context_line":"        self.index \u003d None"},{"line_number":1626,"context_line":"        self.model \u003d None"},{"line_number":1627,"context_line":""},{"line_number":1628,"context_line":"    def format_dom(self):"},{"line_number":1629,"context_line":"        controller \u003d super(LibvirtConfigGuestController, self).format_dom()"},{"line_number":1630,"context_line":"        controller.set(\"type\", self.type)"},{"line_number":1631,"context_line":""},{"line_number":1632,"context_line":"        if self.index is not None:"},{"line_number":1633,"context_line":"            controller.set(\"index\", str(self.index))"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa0c359_6b00d835","line":1630,"range":{"start_line":1628,"start_character":0,"end_line":1630,"end_character":41},"in_reply_to":"3fa0c359_2bd730f0","updated":"2018-02-05 18:19:25.000000000","message":"Done","commit_id":"1a316a3bc433061985c1d729a589a09429fa06af"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1836843a45183902a28ca9f16b5e2423703579ac","unresolved":false,"context_lines":[{"line_number":1647,"context_line":"    def format_dom(self):"},{"line_number":1648,"context_line":"        controller \u003d super(LibvirtConfigGuestUSBHostController,"},{"line_number":1649,"context_line":"                           self).format_dom()"},{"line_number":1650,"context_line":""},{"line_number":1651,"context_line":"        controller.set(\u0027type\u0027, self.type)"},{"line_number":1652,"context_line":""},{"line_number":1653,"context_line":"        return controller"},{"line_number":1654,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa0c359_6bcd385c","line":1651,"range":{"start_line":1650,"start_character":0,"end_line":1651,"end_character":41},"updated":"2018-02-05 18:12:19.000000000","message":"This isn\u0027t necessary, since the superclass does it:\n\n     def format_dom(self):\n        controller \u003d super(LibvirtConfigGuestController, self).format_dom()\n        controller.set(\"type\", self.type)","commit_id":"1a316a3bc433061985c1d729a589a09429fa06af"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"836c54d54a167e668d52cd7a2c42c44a196e23ea","unresolved":false,"context_lines":[{"line_number":1647,"context_line":"    def format_dom(self):"},{"line_number":1648,"context_line":"        controller \u003d super(LibvirtConfigGuestUSBHostController,"},{"line_number":1649,"context_line":"                           self).format_dom()"},{"line_number":1650,"context_line":""},{"line_number":1651,"context_line":"        controller.set(\u0027type\u0027, self.type)"},{"line_number":1652,"context_line":""},{"line_number":1653,"context_line":"        return controller"},{"line_number":1654,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa0c359_cbefac85","line":1651,"range":{"start_line":1650,"start_character":0,"end_line":1651,"end_character":41},"in_reply_to":"3fa0c359_6bcd385c","updated":"2018-02-05 18:19:25.000000000","message":"Done","commit_id":"1a316a3bc433061985c1d729a589a09429fa06af"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1836843a45183902a28ca9f16b5e2423703579ac","unresolved":false,"context_lines":[{"line_number":1644,"context_line":"        super(LibvirtConfigGuestUSBHostController, self).__init__(**kwargs)"},{"line_number":1645,"context_line":"        self.type \u003d \u0027usb\u0027"},{"line_number":1646,"context_line":""},{"line_number":1647,"context_line":"    def format_dom(self):"},{"line_number":1648,"context_line":"        controller \u003d super(LibvirtConfigGuestUSBHostController,"},{"line_number":1649,"context_line":"                           self).format_dom()"},{"line_number":1650,"context_line":""},{"line_number":1651,"context_line":"        controller.set(\u0027type\u0027, self.type)"},{"line_number":1652,"context_line":""},{"line_number":1653,"context_line":"        return controller"},{"line_number":1654,"context_line":""},{"line_number":1655,"context_line":""},{"line_number":1656,"context_line":"class LibvirtConfigGuestHostdev(LibvirtConfigGuestDevice):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa0c359_8bff6466","line":1653,"range":{"start_line":1647,"start_character":0,"end_line":1653,"end_character":25},"updated":"2018-02-05 18:12:19.000000000","message":"Which makes this entire method unnecessary since it\u0027s the default implementation to call the superclass\u0027s method of the same name when a subclass doesn\u0027t implement the method.","commit_id":"1a316a3bc433061985c1d729a589a09429fa06af"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"836c54d54a167e668d52cd7a2c42c44a196e23ea","unresolved":false,"context_lines":[{"line_number":1644,"context_line":"        super(LibvirtConfigGuestUSBHostController, self).__init__(**kwargs)"},{"line_number":1645,"context_line":"        self.type \u003d \u0027usb\u0027"},{"line_number":1646,"context_line":""},{"line_number":1647,"context_line":"    def format_dom(self):"},{"line_number":1648,"context_line":"        controller \u003d super(LibvirtConfigGuestUSBHostController,"},{"line_number":1649,"context_line":"                           self).format_dom()"},{"line_number":1650,"context_line":""},{"line_number":1651,"context_line":"        controller.set(\u0027type\u0027, self.type)"},{"line_number":1652,"context_line":""},{"line_number":1653,"context_line":"        return controller"},{"line_number":1654,"context_line":""},{"line_number":1655,"context_line":""},{"line_number":1656,"context_line":"class LibvirtConfigGuestHostdev(LibvirtConfigGuestDevice):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa0c359_4b039c43","line":1653,"range":{"start_line":1647,"start_character":0,"end_line":1653,"end_character":25},"in_reply_to":"3fa0c359_8bff6466","updated":"2018-02-05 18:19:25.000000000","message":"Done","commit_id":"1a316a3bc433061985c1d729a589a09429fa06af"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6be4f02396576a2e7ddcedc406fd994f09f36a00","unresolved":false,"context_lines":[{"line_number":1638,"context_line":"        return controller"},{"line_number":1639,"context_line":""},{"line_number":1640,"context_line":""},{"line_number":1641,"context_line":"class LibvirtConfigGuestUSBHostController(LibvirtConfigGuestController):"},{"line_number":1642,"context_line":""},{"line_number":1643,"context_line":"    def __init__(self, **kwargs):"},{"line_number":1644,"context_line":"        super(LibvirtConfigGuestUSBHostController, self).__init__(**kwargs)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_76e66919","line":1641,"updated":"2018-02-06 08:54:52.000000000","message":"You nee to add test in test_config.py so we assert the XML generated.","commit_id":"f2adac3463b381c8b30305186d6983a1bce5290c"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e6e7dd00fa6c75cfb88c175711874b2f77637d02","unresolved":false,"context_lines":[{"line_number":5033,"context_line":""},{"line_number":5034,"context_line":"        pointer \u003d self._get_guest_pointer_model(guest.os_type, image_meta)"},{"line_number":5035,"context_line":"        if pointer:"},{"line_number":5036,"context_line":"            usbhost \u003d vconfig.LibvirtConfigGuestUSBHost()"},{"line_number":5037,"context_line":"            guest.add_device(usbhost)"},{"line_number":5038,"context_line":"            guest.add_device(pointer)"},{"line_number":5039,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_ae909144","line":5036,"range":{"start_line":5036,"start_character":48,"end_line":5036,"end_character":54},"updated":"2018-01-31 16:01:57.000000000","message":"What is a USB host element? Can you explain that in the commit message? I\u0027m not sure what the problem is and how this fixes it.","commit_id":"7328dd6ac6cb19ed7dccbbb56950aba2e6163a8f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6fcc664943b69005940ea7713b48641533eed78a","unresolved":false,"context_lines":[{"line_number":5033,"context_line":""},{"line_number":5034,"context_line":"        pointer \u003d self._get_guest_pointer_model(guest.os_type, image_meta)"},{"line_number":5035,"context_line":"        if pointer:"},{"line_number":5036,"context_line":"            usbhost \u003d vconfig.LibvirtConfigGuestUSBHost()"},{"line_number":5037,"context_line":"            guest.add_device(usbhost)"},{"line_number":5038,"context_line":"            guest.add_device(pointer)"},{"line_number":5039,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_c7104d51","line":5036,"range":{"start_line":5036,"start_character":48,"end_line":5036,"end_character":54},"in_reply_to":"5f93b717_19e1d12a","updated":"2018-02-01 09:16:14.000000000","message":"I don\u0027t think you should have the code under this condition. We need a new condition where arch !\u003d x86 so we add a USB controller. I can\u0027t image nowadays a O/S which is not going to handle it.","commit_id":"7328dd6ac6cb19ed7dccbbb56950aba2e6163a8f"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"937285b376456f2ab6e1711fdcba874b4a716c29","unresolved":false,"context_lines":[{"line_number":5033,"context_line":""},{"line_number":5034,"context_line":"        pointer \u003d self._get_guest_pointer_model(guest.os_type, image_meta)"},{"line_number":5035,"context_line":"        if pointer:"},{"line_number":5036,"context_line":"            usbhost \u003d vconfig.LibvirtConfigGuestUSBHost()"},{"line_number":5037,"context_line":"            guest.add_device(usbhost)"},{"line_number":5038,"context_line":"            guest.add_device(pointer)"},{"line_number":5039,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_19e1d12a","line":5036,"range":{"start_line":5036,"start_character":48,"end_line":5036,"end_character":54},"in_reply_to":"5f93b717_ae909144","updated":"2018-01-31 16:20:51.000000000","message":"USB Host controller. Will explain in commit message.","commit_id":"7328dd6ac6cb19ed7dccbbb56950aba2e6163a8f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e6e7dd00fa6c75cfb88c175711874b2f77637d02","unresolved":false,"context_lines":[{"line_number":5146,"context_line":"            add_video_driver \u003d True"},{"line_number":5147,"context_line":"        return add_video_driver"},{"line_number":5148,"context_line":""},{"line_number":5149,"context_line":"    def _get_guest_pointer_model(self, os_type, image_meta):"},{"line_number":5150,"context_line":"        pointer_model \u003d image_meta.properties.get("},{"line_number":5151,"context_line":"            \u0027hw_pointer_model\u0027, CONF.pointer_model)"},{"line_number":5152,"context_line":"        if pointer_model is None and CONF.libvirt.use_usb_tablet:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_0ea745a9","line":5149,"range":{"start_line":5149,"start_character":8,"end_line":5149,"end_character":32},"updated":"2018-01-31 16:01:57.000000000","message":"The choices for the pointer_model option are:\n\nchoices\u003d[None, \u0027ps2mouse\u0027, \u0027usbtablet\u0027],\n\nSo what if the pointer_model is set to ps2mouse? Are we always going to set this USBHost element? That doesn\u0027t sound correct.","commit_id":"7328dd6ac6cb19ed7dccbbb56950aba2e6163a8f"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"937285b376456f2ab6e1711fdcba874b4a716c29","unresolved":false,"context_lines":[{"line_number":5146,"context_line":"            add_video_driver \u003d True"},{"line_number":5147,"context_line":"        return add_video_driver"},{"line_number":5148,"context_line":""},{"line_number":5149,"context_line":"    def _get_guest_pointer_model(self, os_type, image_meta):"},{"line_number":5150,"context_line":"        pointer_model \u003d image_meta.properties.get("},{"line_number":5151,"context_line":"            \u0027hw_pointer_model\u0027, CONF.pointer_model)"},{"line_number":5152,"context_line":"        if pointer_model is None and CONF.libvirt.use_usb_tablet:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_d98a8968","line":5149,"range":{"start_line":5149,"start_character":8,"end_line":5149,"end_character":32},"in_reply_to":"5f93b717_0ea745a9","updated":"2018-01-31 16:20:51.000000000","message":"ps/2 mouse is x86 only. Nova runs on other architectures as well.","commit_id":"7328dd6ac6cb19ed7dccbbb56950aba2e6163a8f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d168f0dce6689f06aabbe13a0c78780187ba6e4c","unresolved":false,"context_lines":[{"line_number":5146,"context_line":"            add_video_driver \u003d True"},{"line_number":5147,"context_line":"        return add_video_driver"},{"line_number":5148,"context_line":""},{"line_number":5149,"context_line":"    def _get_guest_pointer_model(self, os_type, image_meta):"},{"line_number":5150,"context_line":"        pointer_model \u003d image_meta.properties.get("},{"line_number":5151,"context_line":"            \u0027hw_pointer_model\u0027, CONF.pointer_model)"},{"line_number":5152,"context_line":"        if pointer_model is None and CONF.libvirt.use_usb_tablet:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_993de1de","line":5149,"range":{"start_line":5149,"start_character":8,"end_line":5149,"end_character":32},"in_reply_to":"5f93b717_d98a8968","updated":"2018-01-31 16:44:40.000000000","message":"\u003e ps/2 mouse is x86 only. Nova runs on other architectures as well.\n\nWhere is \"ps/2 mouse is x86 only.\" asserted?","commit_id":"7328dd6ac6cb19ed7dccbbb56950aba2e6163a8f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e6e7dd00fa6c75cfb88c175711874b2f77637d02","unresolved":false,"context_lines":[{"line_number":5182,"context_line":"                    raise exception.UnsupportedPointerModelRequested("},{"line_number":5183,"context_line":"                        model\u003d\"usbtablet\")"},{"line_number":5184,"context_line":""},{"line_number":5185,"context_line":"    def _get_guest_usb_tablet(self, os_type):"},{"line_number":5186,"context_line":"        tablet \u003d None"},{"line_number":5187,"context_line":"        if os_type \u003d\u003d fields.VMMode.HVM:"},{"line_number":5188,"context_line":"            tablet \u003d vconfig.LibvirtConfigGuestInput()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_4ef8ed79","line":5185,"range":{"start_line":5185,"start_character":8,"end_line":5185,"end_character":29},"updated":"2018-01-31 16:01:57.000000000","message":"Seems more appropriate to check for this in here, but returning two items out of this would complicate the method.","commit_id":"7328dd6ac6cb19ed7dccbbb56950aba2e6163a8f"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"937285b376456f2ab6e1711fdcba874b4a716c29","unresolved":false,"context_lines":[{"line_number":5182,"context_line":"                    raise exception.UnsupportedPointerModelRequested("},{"line_number":5183,"context_line":"                        model\u003d\"usbtablet\")"},{"line_number":5184,"context_line":""},{"line_number":5185,"context_line":"    def _get_guest_usb_tablet(self, os_type):"},{"line_number":5186,"context_line":"        tablet \u003d None"},{"line_number":5187,"context_line":"        if os_type \u003d\u003d fields.VMMode.HVM:"},{"line_number":5188,"context_line":"            tablet \u003d vconfig.LibvirtConfigGuestInput()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_59dbd97a","line":5185,"range":{"start_line":5185,"start_character":8,"end_line":5185,"end_character":29},"in_reply_to":"5f93b717_4ef8ed79","updated":"2018-01-31 16:20:51.000000000","message":"this function checks does guest uses USB tablet or not. Nothing else.","commit_id":"7328dd6ac6cb19ed7dccbbb56950aba2e6163a8f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b2672d93602323dbcee7509baade55e3acb182e","unresolved":false,"context_lines":[{"line_number":5031,"context_line":""},{"line_number":5032,"context_line":"        self._create_consoles(virt_type, guest, instance, flavor, image_meta)"},{"line_number":5033,"context_line":""},{"line_number":5034,"context_line":"        # On non-x86 architectures USB Host controller may not be present in the"},{"line_number":5035,"context_line":"        # default configuration. Make sure that VM instance have some USB ports"},{"line_number":5036,"context_line":"        # available to plug requested usb tablet device by adding one."},{"line_number":5037,"context_line":"        if caps.host.cpu.arch not in [\u0027i686\u0027, \u0027x86_64\u0027]:"},{"line_number":5038,"context_line":"            usbhost \u003d vconfig.LibvirtConfigGuestUSBHostController()"},{"line_number":5039,"context_line":"            guest.add_device(usbhost)"},{"line_number":5040,"context_line":""},{"line_number":5041,"context_line":"        pointer \u003d self._get_guest_pointer_model(guest.os_type, image_meta)"},{"line_number":5042,"context_line":"        if pointer:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f93b717_f90ac9cf","line":5039,"range":{"start_line":5034,"start_character":0,"end_line":5039,"end_character":37},"updated":"2018-02-01 13:36:30.000000000","message":"Is there any reason we need to limit this to non-x86 architectures? What happens if you add it for x86? Does it override the default, or does it add a second controller?","commit_id":"1c45d0787cf324cf5bf3d4de37badcf4b0db20b2"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"c5d57ea61d2fe848926f5aa11d896616faea1b45","unresolved":false,"context_lines":[{"line_number":5031,"context_line":""},{"line_number":5032,"context_line":"        self._create_consoles(virt_type, guest, instance, flavor, image_meta)"},{"line_number":5033,"context_line":""},{"line_number":5034,"context_line":"        # On non-x86 architectures USB Host controller may not be present in the"},{"line_number":5035,"context_line":"        # default configuration. Make sure that VM instance have some USB ports"},{"line_number":5036,"context_line":"        # available to plug requested usb tablet device by adding one."},{"line_number":5037,"context_line":"        if caps.host.cpu.arch not in [\u0027i686\u0027, \u0027x86_64\u0027]:"},{"line_number":5038,"context_line":"            usbhost \u003d vconfig.LibvirtConfigGuestUSBHostController()"},{"line_number":5039,"context_line":"            guest.add_device(usbhost)"},{"line_number":5040,"context_line":""},{"line_number":5041,"context_line":"        pointer \u003d self._get_guest_pointer_model(guest.os_type, image_meta)"},{"line_number":5042,"context_line":"        if pointer:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f93b717_d92d8dfe","line":5039,"range":{"start_line":5034,"start_character":0,"end_line":5039,"end_character":37},"in_reply_to":"5f93b717_39fcb1b3","updated":"2018-02-01 13:49:27.000000000","message":"We can not check for it. As it is present due to default configuration we would have to count them and I am not sure is their amount same in every libvirt version.","commit_id":"1c45d0787cf324cf5bf3d4de37badcf4b0db20b2"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"96a10fcb45de90d61f5cc8269f2c526d6b35bc0f","unresolved":false,"context_lines":[{"line_number":5031,"context_line":""},{"line_number":5032,"context_line":"        self._create_consoles(virt_type, guest, instance, flavor, image_meta)"},{"line_number":5033,"context_line":""},{"line_number":5034,"context_line":"        # On non-x86 architectures USB Host controller may not be present in the"},{"line_number":5035,"context_line":"        # default configuration. Make sure that VM instance have some USB ports"},{"line_number":5036,"context_line":"        # available to plug requested usb tablet device by adding one."},{"line_number":5037,"context_line":"        if caps.host.cpu.arch not in [\u0027i686\u0027, \u0027x86_64\u0027]:"},{"line_number":5038,"context_line":"            usbhost \u003d vconfig.LibvirtConfigGuestUSBHostController()"},{"line_number":5039,"context_line":"            guest.add_device(usbhost)"},{"line_number":5040,"context_line":""},{"line_number":5041,"context_line":"        pointer \u003d self._get_guest_pointer_model(guest.os_type, image_meta)"},{"line_number":5042,"context_line":"        if pointer:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f93b717_39fcb1b3","line":5039,"range":{"start_line":5034,"start_character":0,"end_line":5039,"end_character":37},"in_reply_to":"5f93b717_f90ac9cf","updated":"2018-02-01 13:37:01.000000000","message":"If the latter, we should add a test to make sure this _isn\u0027t_ added for x86","commit_id":"1c45d0787cf324cf5bf3d4de37badcf4b0db20b2"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"c5d57ea61d2fe848926f5aa11d896616faea1b45","unresolved":false,"context_lines":[{"line_number":5031,"context_line":""},{"line_number":5032,"context_line":"        self._create_consoles(virt_type, guest, instance, flavor, image_meta)"},{"line_number":5033,"context_line":""},{"line_number":5034,"context_line":"        # On non-x86 architectures USB Host controller may not be present in the"},{"line_number":5035,"context_line":"        # default configuration. Make sure that VM instance have some USB ports"},{"line_number":5036,"context_line":"        # available to plug requested usb tablet device by adding one."},{"line_number":5037,"context_line":"        if caps.host.cpu.arch not in [\u0027i686\u0027, \u0027x86_64\u0027]:"},{"line_number":5038,"context_line":"            usbhost \u003d vconfig.LibvirtConfigGuestUSBHostController()"},{"line_number":5039,"context_line":"            guest.add_device(usbhost)"},{"line_number":5040,"context_line":""},{"line_number":5041,"context_line":"        pointer \u003d self._get_guest_pointer_model(guest.os_type, image_meta)"},{"line_number":5042,"context_line":"        if pointer:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f93b717_d9082d93","line":5039,"range":{"start_line":5034,"start_character":0,"end_line":5039,"end_character":37},"in_reply_to":"5f93b717_f90ac9cf","updated":"2018-02-01 13:49:27.000000000","message":"it would just add another one.","commit_id":"1c45d0787cf324cf5bf3d4de37badcf4b0db20b2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6a2aaea0d69cab9768532d6d8db1f87de997f375","unresolved":false,"context_lines":[{"line_number":5033,"context_line":""},{"line_number":5034,"context_line":"        # On non-x86 architectures USB Host controller may not be present in"},{"line_number":5035,"context_line":"        # the default configuration. Make sure that VM instance have some USB"},{"line_number":5036,"context_line":"        # ports available to plug requested usb tablet device by adding one."},{"line_number":5037,"context_line":"        if caps.host.cpu.arch not in [\u0027i686\u0027, \u0027x86_64\u0027]:"},{"line_number":5038,"context_line":"            usbhost \u003d vconfig.LibvirtConfigGuestUSBHostController()"},{"line_number":5039,"context_line":"            guest.add_device(usbhost)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f93b717_a27f2664","line":5036,"updated":"2018-02-01 15:15:25.000000000","message":"I think it would be good to also add a note in this comment about how ps2mouse, the other pointer_model option, is only supported on x86.","commit_id":"eaee6a2c6ab6687365c3c5999ea8e1b4c40e7d89"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5a7687d4bbbecd23f349dd964b7d51c6afe5aac7","unresolved":false,"context_lines":[{"line_number":5038,"context_line":"            usbhost \u003d vconfig.LibvirtConfigGuestUSBHostController()"},{"line_number":5039,"context_line":"            guest.add_device(usbhost)"},{"line_number":5040,"context_line":""},{"line_number":5041,"context_line":"        pointer \u003d self._get_guest_pointer_model(guest.os_type, image_meta)"},{"line_number":5042,"context_line":"        if pointer:"},{"line_number":5043,"context_line":"            guest.add_device(pointer)"},{"line_number":5044,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f93b717_c2dfd20a","line":5041,"range":{"start_line":5041,"start_character":23,"end_line":5041,"end_character":47},"updated":"2018-02-01 15:25:42.000000000","message":"This only returns something if we\u0027re using usbtablet as the pointer_model, so putting the arch check above into the \"if pointer\" conditional below makes more sense to me since they are coupled.","commit_id":"eaee6a2c6ab6687365c3c5999ea8e1b4c40e7d89"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6a2aaea0d69cab9768532d6d8db1f87de997f375","unresolved":false,"context_lines":[{"line_number":5040,"context_line":""},{"line_number":5041,"context_line":"        pointer \u003d self._get_guest_pointer_model(guest.os_type, image_meta)"},{"line_number":5042,"context_line":"        if pointer:"},{"line_number":5043,"context_line":"            guest.add_device(pointer)"},{"line_number":5044,"context_line":""},{"line_number":5045,"context_line":"        self._guest_add_spice_channel(guest)"},{"line_number":5046,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f93b717_c286f266","line":5043,"updated":"2018-02-01 15:15:25.000000000","message":"Why wouldn\u0027t we add the usb controller if we know we\u0027re going to have a usbtablet pointer model?\n\nI think you said before that ps2mouse only works with x86, so I guess with the above arch check, we are asserting that if you\u0027re on !x86 then you have to be using usbtable as that\u0027s the only other option - but still, can\u0027t we put that into the \"if pointer\" block since they are related?","commit_id":"eaee6a2c6ab6687365c3c5999ea8e1b4c40e7d89"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"80ea8e0b804cf1c6bdf1b03203c21744072b0027","unresolved":false,"context_lines":[{"line_number":5072,"context_line":""},{"line_number":5073,"context_line":"                if not usbhost_exists:"},{"line_number":5074,"context_line":"                    usbhost \u003d vconfig.LibvirtConfigGuestUSBHostController()"},{"line_number":5075,"context_line":"                    usbhost.index \u003d 0"},{"line_number":5076,"context_line":"                    guest.add_device(usbhost)"},{"line_number":5077,"context_line":""},{"line_number":5078,"context_line":"        # Qemu guest agent only support \u0027qemu\u0027 and \u0027kvm\u0027 hypervisor"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f93b717_3fbeccfe","line":5075,"updated":"2018-02-01 17:28:31.000000000","message":"What about the model attribute of the controller? According to https://libvirt.org/formatdomain.html#elementsControllers, there is a model attribute that, for USB controllers, may contain one of:\n\n\"piix3-uhci\", \"piix4-uhci\", \"ehci\", \"ich9-ehci1\", \"ich9-uhci1\", \"ich9-uhci2\", \"ich9-uhci3\", \"vt82c686b-uhci\", \"pci-ohci\", \"nec-xhci\", \"qusb1\" (xen pvusb with qemu backend, version 1.1), \"qusb2\" (xen pvusb with qemu backend, version 2.0) or \"qemu-xhci\"\n\nIn addition, since libvirt 1.3.5, USB controllers accept a ports attribute to configure how many devices can be connected to the controller.","commit_id":"3dac7c832fd12f7ab523553a3bf5c608af427199"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"f7b8f090426f081fa3a2ee33bc0869c12de7fd0d","unresolved":false,"context_lines":[{"line_number":5072,"context_line":""},{"line_number":5073,"context_line":"                if not usbhost_exists:"},{"line_number":5074,"context_line":"                    usbhost \u003d vconfig.LibvirtConfigGuestUSBHostController()"},{"line_number":5075,"context_line":"                    usbhost.index \u003d 0"},{"line_number":5076,"context_line":"                    guest.add_device(usbhost)"},{"line_number":5077,"context_line":""},{"line_number":5078,"context_line":"        # Qemu guest agent only support \u0027qemu\u0027 and \u0027kvm\u0027 hypervisor"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f93b717_7fa534a1","line":5075,"in_reply_to":"5f93b717_3fbeccfe","updated":"2018-02-01 17:34:22.000000000","message":"If \u0027model\u0027 is omitted then libvirt adds whatever is default for architecture and qemu version. So x86/i440fx gets \u0027piix3-uhci\u0027, x86/q35 and aarch64 get \u0027qemu-xhci\u0027 if qemu \u003e\u003d 2.10 or \u0027nec-xhci\u0027 for older versions.\n\nDoing whole \u0027model\u0027 deduction in Nova is worthless - this is libvirt\u0027s job.\n\nAnd we do not have to set \u0027ports\u0027 as default (4) is good.","commit_id":"3dac7c832fd12f7ab523553a3bf5c608af427199"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a54c724a51e8d86c45ee841cbfb15203db983510","unresolved":false,"context_lines":[{"line_number":5072,"context_line":""},{"line_number":5073,"context_line":"                if not usbhost_exists:"},{"line_number":5074,"context_line":"                    usbhost \u003d vconfig.LibvirtConfigGuestUSBHostController()"},{"line_number":5075,"context_line":"                    usbhost.index \u003d 0"},{"line_number":5076,"context_line":"                    guest.add_device(usbhost)"},{"line_number":5077,"context_line":""},{"line_number":5078,"context_line":"        # Qemu guest agent only support \u0027qemu\u0027 and \u0027kvm\u0027 hypervisor"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f93b717_9fce0058","line":5075,"in_reply_to":"5f93b717_7fa534a1","updated":"2018-02-01 17:35:32.000000000","message":"Gotcha, thanks for the info. :)","commit_id":"3dac7c832fd12f7ab523553a3bf5c608af427199"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f49d1ac2f5a3608851250a309e972b17bfc2d074","unresolved":false,"context_lines":[{"line_number":5040,"context_line":"        if self._guest_add_video_device(guest):"},{"line_number":5041,"context_line":"            self._add_video_driver(guest, image_meta, flavor)"},{"line_number":5042,"context_line":""},{"line_number":5043,"context_line":"            # We want video \u003d\u003d we want graphical console. Some architectures"},{"line_number":5044,"context_line":"            # do not have input devices attached in default configuration."},{"line_number":5045,"context_line":"            # Let then add USB Host controller and USB keyboard."},{"line_number":5046,"context_line":"            # x86(-64) and ppc64 have usb host controller and keyboard"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f93b717_90ceef57","line":5043,"updated":"2018-02-01 19:37:17.000000000","message":"nit: please move this new big block of code into a private helper method, like _add_video_driver. These libvirt driver methods tend to get huge building the config xml if we don\u0027t do that.","commit_id":"cb5d49a2dfc810ec5cf0dab8da15e9bc57312e57"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"72e245475f4074e5aee73b00ad3cfc49da1fa02b","unresolved":false,"context_lines":[{"line_number":5040,"context_line":"        if self._guest_add_video_device(guest):"},{"line_number":5041,"context_line":"            self._add_video_driver(guest, image_meta, flavor)"},{"line_number":5042,"context_line":""},{"line_number":5043,"context_line":"            # We want video \u003d\u003d we want graphical console. Some architectures"},{"line_number":5044,"context_line":"            # do not have input devices attached in default configuration."},{"line_number":5045,"context_line":"            # Let then add USB Host controller and USB keyboard."},{"line_number":5046,"context_line":"            # x86(-64) and ppc64 have usb host controller and keyboard"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f93b717_508ce7d5","line":5043,"in_reply_to":"5f93b717_90ceef57","updated":"2018-02-01 19:50:37.000000000","message":"good idea, thanks","commit_id":"cb5d49a2dfc810ec5cf0dab8da15e9bc57312e57"},{"author":{"_account_id":7979,"name":"Mikhail S Medvedev","email":"mihailmed@gmail.com","username":"msmedved"},"change_message_id":"e8f8ea67ffb33ac1103d29de93ed6aa03f9aa016","unresolved":false,"context_lines":[{"line_number":5045,"context_line":"            # Let then add USB Host controller and USB keyboard."},{"line_number":5046,"context_line":"            # x86(-64) and ppc64 have usb host controller and keyboard"},{"line_number":5047,"context_line":"            # s390x does not support USB"},{"line_number":5048,"context_line":"            if caps.host.cpu.arch not in [\u0027i686\u0027, \u0027x86_64\u0027, \u0027ppc64\u0027, \u0027s390x\u0027]:"},{"line_number":5049,"context_line":""},{"line_number":5050,"context_line":"                usbhost_exists \u003d False"},{"line_number":5051,"context_line":"                keyboard_exists \u003d False"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f93b717_8686b5b8","line":5048,"range":{"start_line":5048,"start_character":0,"end_line":5048,"end_character":78},"updated":"2018-02-01 21:31:55.000000000","message":"ppc64 is excluded from this new behavior, are there any reasons ppc64le and ppc are not being excluded too? I have no opinion myself on this and need to take a deeper look either way.\n\nProbably a nit: noticed fields.Architecture is used instead of hardcoding arch strings. Should it be done here too? For example https://github.com/openstack/nova/blob/02b505806a3a4d7cb51cf0a78523bb15338b27ce/nova/virt/libvirt/driver.py#L4512","commit_id":"cb5d49a2dfc810ec5cf0dab8da15e9bc57312e57"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"87e145dfd1ac3f73783013fc25783b7625141ed2","unresolved":false,"context_lines":[{"line_number":5050,"context_line":"                usbhost_exists \u003d False"},{"line_number":5051,"context_line":"                keyboard_exists \u003d False"},{"line_number":5052,"context_line":""},{"line_number":5053,"context_line":"                for device in guest.devices:"},{"line_number":5054,"context_line":"                    try:"},{"line_number":5055,"context_line":"                        if device.root_name \u003d\u003d \u0027controller\u0027 and device.type \u003d\u003d \u0027usb\u0027:"},{"line_number":5056,"context_line":"                            usbhost_exists \u003d True"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f93b717_95dfb30b","line":5053,"updated":"2018-02-02 08:48:08.000000000","message":"How this is supposed to work? \u0027guest.devices\u0027 is generated by the Nova and not by libvirt. To see the \u0027usb\u0027 or \u0027keyboard\u0027 controllers added to the domain XML you first need to boot the instance and get domain XML from libvirt API.\n\nThis terrible hack is not going to work at all.","commit_id":"cb5d49a2dfc810ec5cf0dab8da15e9bc57312e57"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"87e145dfd1ac3f73783013fc25783b7625141ed2","unresolved":false,"context_lines":[{"line_number":5062,"context_line":""},{"line_number":5063,"context_line":"                # Add USB keyboard as PS/2 support may be not present on"},{"line_number":5064,"context_line":"                # non-x86 architectures."},{"line_number":5065,"context_line":"                if not keyboard_exists:"},{"line_number":5066,"context_line":"                    keyboard \u003d vconfig.LibvirtConfigGuestInput()"},{"line_number":5067,"context_line":"                    keyboard.type \u003d \"keyboard\""},{"line_number":5068,"context_line":"                    keyboard.bus \u003d \"usb\""}],"source_content_type":"text/x-python","patch_set":10,"id":"5f93b717_f5d397ff","line":5065,"updated":"2018-02-02 08:48:08.000000000","message":"As indicated before you need to add the controllers by looking at the architecture and if needed by the libvirt version.","commit_id":"cb5d49a2dfc810ec5cf0dab8da15e9bc57312e57"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"31b737abb549e25240ebdb5e3d2659808cc3f892","unresolved":false,"context_lines":[{"line_number":4938,"context_line":"        return cpu_config"},{"line_number":4939,"context_line":""},{"line_number":4940,"context_line":"    def _guest_add_usb_host_keyboard(self, guest):"},{"line_number":4941,"context_line":"        # Add USB keyboard as PS/2 support may be not present on"},{"line_number":4942,"context_line":"        # non-x86 architectures."},{"line_number":4943,"context_line":"        keyboard \u003d vconfig.LibvirtConfigGuestInput()"},{"line_number":4944,"context_line":"        keyboard.type \u003d \"keyboard\""},{"line_number":4945,"context_line":"        keyboard.bus \u003d \"usb\""}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa0c359_835e6ee4","line":4942,"range":{"start_line":4941,"start_character":8,"end_line":4942,"end_character":32},"updated":"2018-02-05 16:24:43.000000000","message":"nit: This could probably be a docstring","commit_id":"1a4f6c1cefd1a92ff0ec2f6063710e05be3a0fd2"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"aa8c8f48bfe1b3d9bfb64ce72f15de98731c9381","unresolved":false,"context_lines":[{"line_number":4938,"context_line":"        return cpu_config"},{"line_number":4939,"context_line":""},{"line_number":4940,"context_line":"    def _guest_add_usb_host_keyboard(self, guest):"},{"line_number":4941,"context_line":"        # Add USB keyboard as PS/2 support may be not present on"},{"line_number":4942,"context_line":"        # non-x86 architectures."},{"line_number":4943,"context_line":"        keyboard \u003d vconfig.LibvirtConfigGuestInput()"},{"line_number":4944,"context_line":"        keyboard.type \u003d \"keyboard\""},{"line_number":4945,"context_line":"        keyboard.bus \u003d \"usb\""}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa0c359_f53b6599","line":4942,"range":{"start_line":4941,"start_character":8,"end_line":4942,"end_character":32},"in_reply_to":"3fa0c359_835e6ee4","updated":"2018-02-05 16:53:05.000000000","message":"Done","commit_id":"1a4f6c1cefd1a92ff0ec2f6063710e05be3a0fd2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1836843a45183902a28ca9f16b5e2423703579ac","unresolved":false,"context_lines":[{"line_number":4940,"context_line":"    def _guest_add_usb_host_keyboard(self, guest):"},{"line_number":4941,"context_line":"        \"\"\"Add USB Host controller and keyboard for graphical console use."},{"line_number":4942,"context_line":""},{"line_number":4943,"context_line":"        Add USB keyboard as PS/2 support may be not present on non-x86"},{"line_number":4944,"context_line":"        architectures."},{"line_number":4945,"context_line":"        \"\"\""},{"line_number":4946,"context_line":"        keyboard \u003d vconfig.LibvirtConfigGuestInput()"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa0c359_cb132cb8","line":4943,"range":{"start_line":4943,"start_character":41,"end_line":4943,"end_character":59},"updated":"2018-02-05 18:12:19.000000000","message":"may not be present :)","commit_id":"1a316a3bc433061985c1d729a589a09429fa06af"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"836c54d54a167e668d52cd7a2c42c44a196e23ea","unresolved":false,"context_lines":[{"line_number":4940,"context_line":"    def _guest_add_usb_host_keyboard(self, guest):"},{"line_number":4941,"context_line":"        \"\"\"Add USB Host controller and keyboard for graphical console use."},{"line_number":4942,"context_line":""},{"line_number":4943,"context_line":"        Add USB keyboard as PS/2 support may be not present on non-x86"},{"line_number":4944,"context_line":"        architectures."},{"line_number":4945,"context_line":"        \"\"\""},{"line_number":4946,"context_line":"        keyboard \u003d vconfig.LibvirtConfigGuestInput()"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa0c359_aba3404f","line":4943,"range":{"start_line":4943,"start_character":41,"end_line":4943,"end_character":59},"in_reply_to":"3fa0c359_cb132cb8","updated":"2018-02-05 18:19:25.000000000","message":"Done","commit_id":"1a316a3bc433061985c1d729a589a09429fa06af"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6be4f02396576a2e7ddcedc406fd994f09f36a00","unresolved":false,"context_lines":[{"line_number":5055,"context_line":"        if self._guest_add_video_device(guest):"},{"line_number":5056,"context_line":"            self._add_video_driver(guest, image_meta, flavor)"},{"line_number":5057,"context_line":""},{"line_number":5058,"context_line":"            # We want video \u003d\u003d we want graphical console. Some architectures"},{"line_number":5059,"context_line":"            # do not have input devices attached in default configuration."},{"line_number":5060,"context_line":"            # Let then add USB Host controller and USB keyboard."},{"line_number":5061,"context_line":"            # x86(-64) and ppc64 have usb host controller and keyboard"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_56600dcf","line":5058,"updated":"2018-02-06 08:54:52.000000000","message":"Not sure I really understand this.","commit_id":"f2adac3463b381c8b30305186d6983a1bce5290c"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"5dd0bf49b0a7d80b5d98bb4c2deeffaee2e45190","unresolved":false,"context_lines":[{"line_number":5055,"context_line":"        if self._guest_add_video_device(guest):"},{"line_number":5056,"context_line":"            self._add_video_driver(guest, image_meta, flavor)"},{"line_number":5057,"context_line":""},{"line_number":5058,"context_line":"            # We want video \u003d\u003d we want graphical console. Some architectures"},{"line_number":5059,"context_line":"            # do not have input devices attached in default configuration."},{"line_number":5060,"context_line":"            # Let then add USB Host controller and USB keyboard."},{"line_number":5061,"context_line":"            # x86(-64) and ppc64 have usb host controller and keyboard"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_f6efd984","line":5058,"in_reply_to":"3fa0c359_56600dcf","updated":"2018-02-06 09:14:09.000000000","message":"Nova adds video device only when graphical console is enabled in /etc/nova/nova.conf (either vnc or spice).\n\nSo when it adds video then I need to add usb keyboard (and usb host controller) on aarch64 as this architecture lacks it.\n\nGraphical console without any keyboard is quite unusable in case of any text input.","commit_id":"f2adac3463b381c8b30305186d6983a1bce5290c"}]}
