)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"4e01b90fd28d2635c95a2897f137217a67361b2b","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Gives the opportunity to set the pointer type from image properties."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"DocImpact: We can now use the image property \"hw_pointer_model\""},{"line_number":12,"context_line":"to configure whether or not we want to enable the usb device."},{"line_number":13,"context_line":"Implements: blueprint virt-configure-usb-tablet-from-image"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I11d3e031c202c39258263212401a0f035ec67d88"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3a50d1a3_d03721fd","line":12,"updated":"2015-07-23 05:28:01.000000000","message":"Please add that the image property has precedence over the global configuration property","commit_id":"9dd39fc05bdedddaad87a83aa84412dda11a2929"}],"nova/exception.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"48dbce5f028f751edb58bed635c05ea4f8aa1c06","unresolved":false,"context_lines":[{"line_number":2156,"context_line":""},{"line_number":2157,"context_line":""},{"line_number":2158,"context_line":"class UnsupportedPointerModelRequested(Invalid):"},{"line_number":2159,"context_line":"    msg_fmt \u003d _(\"Pointer \u0027%(model)s\u0027 requested is not suported by host.\")"}],"source_content_type":"text/x-python","patch_set":34,"id":"7aa08908_47bedbae","line":2159,"range":{"start_line":2159,"start_character":17,"end_line":2159,"end_character":24},"updated":"2016-06-17 18:34:44.000000000","message":"s/Pointer/Pointer model/\n\nFor context on what the thing is that\u0027s requested by not valid.","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"48dbce5f028f751edb58bed635c05ea4f8aa1c06","unresolved":false,"context_lines":[{"line_number":2156,"context_line":""},{"line_number":2157,"context_line":""},{"line_number":2158,"context_line":"class UnsupportedPointerModelRequested(Invalid):"},{"line_number":2159,"context_line":"    msg_fmt \u003d _(\"Pointer \u0027%(model)s\u0027 requested is not suported by host.\")"}],"source_content_type":"text/x-python","patch_set":34,"id":"7aa08908_e7ac278a","line":2159,"range":{"start_line":2159,"start_character":54,"end_line":2159,"end_character":62},"updated":"2016-06-17 18:34:44.000000000","message":"supported","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a18d46d36e017230f5f5280c7226fb32ba704bdd","unresolved":false,"context_lines":[{"line_number":2156,"context_line":""},{"line_number":2157,"context_line":""},{"line_number":2158,"context_line":"class UnsupportedPointerModelRequested(Invalid):"},{"line_number":2159,"context_line":"    msg_fmt \u003d _(\"Pointer \u0027%(model)s\u0027 requested is not suported by host.\")"}],"source_content_type":"text/x-python","patch_set":35,"id":"5a9d85d2_0e96154c","line":2159,"updated":"2016-06-20 19:27:37.000000000","message":"You missed my comments from ps34.","commit_id":"0158139babe705d7a12980409963472d2f462d48"}],"nova/objects/image_meta.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5197edba06cccbbb26dfb007860c984b0192c669","unresolved":false,"context_lines":[{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        # Generic property to specify the pointer type."},{"line_number":249,"context_line":"        # eg: ps2|xen|vmware|usbmouse|usbtablet|spice."},{"line_number":250,"context_line":"        \u0027hw_pointer_model\u0027: fields.StringField(),"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        # boolean \u0027yes\u0027 or \u0027no\u0027 to enable QEMU guest agent"},{"line_number":253,"context_line":"        \u0027hw_qemu_guest_agent\u0027: fields.FlexibleBooleanField(),"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a7e1126_75632fdd","line":250,"updated":"2015-12-17 16:14:35.000000000","message":"This should be more strict, it should be an enum, see HVTypeField for an example.","commit_id":"8706bdf9b9f125140b6a98b2efa8a74b506e1132"}],"nova/tests/unit/objects/test_objects.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5197edba06cccbbb26dfb007860c984b0192c669","unresolved":false,"context_lines":[{"line_number":1252,"context_line":"    \u0027TaskLogList\u0027: {\u0027TaskLog\u0027: \u00271.0\u0027},"},{"line_number":1253,"context_line":"    \u0027VirtCPUModel\u0027: {\u0027VirtCPUFeature\u0027: \u00271.0\u0027, \u0027VirtCPUTopology\u0027: \u00271.0\u0027},"},{"line_number":1254,"context_line":"    \u0027VirtualInterfaceList\u0027: {\u0027VirtualInterface\u0027: \u00271.0\u0027}"},{"line_number":1255,"context_line":"}"},{"line_number":1256,"context_line":""},{"line_number":1257,"context_line":""},{"line_number":1258,"context_line":"class TestObjectVersions(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a7e1126_f5095f2d","line":1255,"updated":"2015-12-17 16:14:35.000000000","message":"Why are you adding this back in? Its no longer needed. Rebase error I guess?","commit_id":"8706bdf9b9f125140b6a98b2efa8a74b506e1132"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3620ab1e88d6dc2a0792c2412b3a914d6f2be4bb","unresolved":false,"context_lines":[{"line_number":3871,"context_line":"        self.flags(enabled\u003dspice_enabled,"},{"line_number":3872,"context_line":"                   agent_enabled\u003dagent_enabled, group\u003d\u0027spice\u0027)"},{"line_number":3873,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":3874,"context_line":"        image_meta \u003d objects.ImageMeta.from_dict(image_meta)"},{"line_number":3875,"context_line":"        return drvr._get_guest_pointer_model(os_type, image_meta)"},{"line_number":3876,"context_line":""},{"line_number":3877,"context_line":"    def test_get_guest_usb_tablet_wipe(self):"}],"source_content_type":"text/x-python","patch_set":34,"id":"5a9d85d2_cbf6cdd6","line":3874,"range":{"start_line":3874,"start_character":49,"end_line":3874,"end_character":59},"updated":"2016-06-20 15:05:36.000000000","message":"image_meta defaults to None, and this from_dict method will return {}, which will eventually cause an AttributeError in the code when image_meta.properties is called.\n\nSo it seems we should check that image_meta passed in is None or not and handle appropriately.","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d762a5d0428a544def6e91b3a6acbaab3fff9350","unresolved":false,"context_lines":[{"line_number":3871,"context_line":"        self.flags(enabled\u003dspice_enabled,"},{"line_number":3872,"context_line":"                   agent_enabled\u003dagent_enabled, group\u003d\u0027spice\u0027)"},{"line_number":3873,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":3874,"context_line":"        image_meta \u003d objects.ImageMeta.from_dict(image_meta)"},{"line_number":3875,"context_line":"        return drvr._get_guest_pointer_model(os_type, image_meta)"},{"line_number":3876,"context_line":""},{"line_number":3877,"context_line":"    def test_get_guest_usb_tablet_wipe(self):"}],"source_content_type":"text/x-python","patch_set":34,"id":"5a9d85d2_a588c423","line":3874,"in_reply_to":"5a9d85d2_8e120e61","updated":"2016-06-20 18:23:51.000000000","message":"Yeah you\u0027re correct, I was thinking from_dict returned an empty {} which I would have considered a bug anyway.","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a6911e83eac95f68b5e73e05baecfa0109b3bb4b","unresolved":false,"context_lines":[{"line_number":3871,"context_line":"        self.flags(enabled\u003dspice_enabled,"},{"line_number":3872,"context_line":"                   agent_enabled\u003dagent_enabled, group\u003d\u0027spice\u0027)"},{"line_number":3873,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":3874,"context_line":"        image_meta \u003d objects.ImageMeta.from_dict(image_meta)"},{"line_number":3875,"context_line":"        return drvr._get_guest_pointer_model(os_type, image_meta)"},{"line_number":3876,"context_line":""},{"line_number":3877,"context_line":"    def test_get_guest_usb_tablet_wipe(self):"}],"source_content_type":"text/x-python","patch_set":34,"id":"5a9d85d2_8e120e61","line":3874,"in_reply_to":"5a9d85d2_cbf6cdd6","updated":"2016-06-20 16:52:12.000000000","message":"Actually if image_meta is None, the method objects.ImageMeta.from_dict() handle it correctly to create an empty ImageMeta object.\n\nI do not see a problem here, no ?","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"48dbce5f028f751edb58bed635c05ea4f8aa1c06","unresolved":false,"context_lines":[{"line_number":3949,"context_line":"    def test_get_guest_pointer_model_usb_tablet(self):"},{"line_number":3950,"context_line":"        self.flags(use_usb_tablet\u003dFalse, group\u003d\u0027libvirt\u0027)"},{"line_number":3951,"context_line":"        self.flags(pointer_model\u003d\u0027usbtablet\u0027)"},{"line_number":3952,"context_line":""},{"line_number":3953,"context_line":"        tablet \u003d self._test_get_guest_usb_tablet(True, True, vm_mode.HVM)"},{"line_number":3954,"context_line":"        self.assertIsNotNone(tablet)"},{"line_number":3955,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"7aa08908_22cf3d80","line":3952,"updated":"2016-06-17 18:34:44.000000000","message":"unrelated whitespace","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3620ab1e88d6dc2a0792c2412b3a914d6f2be4bb","unresolved":false,"context_lines":[{"line_number":4841,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.driver.LibvirtDriver.\u0027"},{"line_number":4842,"context_line":"                \u0027_get_guest_pointer_model\u0027)"},{"line_number":4843,"context_line":"    def test_get_guest_config_os_command_empty("},{"line_number":4844,"context_line":"            self, mock_get_guest_pointer_model):"},{"line_number":4845,"context_line":"        self.flags(virt_type\u003d\"kvm\","},{"line_number":4846,"context_line":"                   cpu_mode\u003dNone,"},{"line_number":4847,"context_line":"                   group\u003d\u0027libvirt\u0027)"}],"source_content_type":"text/x-python","patch_set":34,"id":"5a9d85d2_cb79ad31","line":4844,"range":{"start_line":4844,"start_character":18,"end_line":4844,"end_character":46},"updated":"2016-06-20 15:05:36.000000000","message":"Maybe we should assert this is called as expected if you had to add it?","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"b733f064a9f2e0a13c48825ef503893264382fbd","unresolved":false,"context_lines":[{"line_number":4841,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.driver.LibvirtDriver.\u0027"},{"line_number":4842,"context_line":"                \u0027_get_guest_pointer_model\u0027)"},{"line_number":4843,"context_line":"    def test_get_guest_config_os_command_empty("},{"line_number":4844,"context_line":"            self, mock_get_guest_pointer_model):"},{"line_number":4845,"context_line":"        self.flags(virt_type\u003d\"kvm\","},{"line_number":4846,"context_line":"                   cpu_mode\u003dNone,"},{"line_number":4847,"context_line":"                   group\u003d\u0027libvirt\u0027)"}],"source_content_type":"text/x-python","patch_set":34,"id":"5a9d85d2_e900ecac","line":4844,"in_reply_to":"5a9d85d2_ae51ca64","updated":"2016-06-20 16:57:10.000000000","message":"No need of this \"anymore\", thanks to have pointed it to me.","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a6911e83eac95f68b5e73e05baecfa0109b3bb4b","unresolved":false,"context_lines":[{"line_number":4841,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.driver.LibvirtDriver.\u0027"},{"line_number":4842,"context_line":"                \u0027_get_guest_pointer_model\u0027)"},{"line_number":4843,"context_line":"    def test_get_guest_config_os_command_empty("},{"line_number":4844,"context_line":"            self, mock_get_guest_pointer_model):"},{"line_number":4845,"context_line":"        self.flags(virt_type\u003d\"kvm\","},{"line_number":4846,"context_line":"                   cpu_mode\u003dNone,"},{"line_number":4847,"context_line":"                   group\u003d\u0027libvirt\u0027)"}],"source_content_type":"text/x-python","patch_set":34,"id":"5a9d85d2_ae51ca64","line":4844,"in_reply_to":"5a9d85d2_cb79ad31","updated":"2016-06-20 16:52:12.000000000","message":"I\u0027d say this test have is not in relation with pointer model but I can add for sure.","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6fd86695c0db14bf73033d0fa26c165f383cadcc","unresolved":false,"context_lines":[{"line_number":4837,"context_line":"                                     image_meta, disk_info)"},{"line_number":4838,"context_line":"        self.assertIsNone(cfg.os_cmdline)"},{"line_number":4839,"context_line":""},{"line_number":4840,"context_line":"    def test_get_guest_config_os_command_empty("},{"line_number":4841,"context_line":"            self):"},{"line_number":4842,"context_line":"        self.flags(virt_type\u003d\"kvm\","},{"line_number":4843,"context_line":"                   cpu_mode\u003dNone,"}],"source_content_type":"text/x-python","patch_set":35,"id":"5a9d85d2_217f9fab","line":4840,"updated":"2016-06-20 22:31:05.000000000","message":"nit: should probably undo this change.","commit_id":"0158139babe705d7a12980409963472d2f462d48"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"92e60b004e9b282dfa7b8cbb72dcf7d8174258c1","unresolved":false,"context_lines":[{"line_number":4138,"context_line":"        if image_meta is not None:"},{"line_number":4139,"context_line":"            wants_usb_tablet \u003d strutils.bool_from_string("},{"line_number":4140,"context_line":"                image_meta.get(\u0027properties\u0027, {}).get("},{"line_number":4141,"context_line":"                    \u0027hw_use_usb_tablet\u0027, wants_usb_tablet))"},{"line_number":4142,"context_line":""},{"line_number":4143,"context_line":"        # We want a tablet if VNC is enabled, or SPICE is enabled and"},{"line_number":4144,"context_line":"        # the SPICE agent is disabled. If the SPICE agent is enabled"}],"source_content_type":"text/x-python","patch_set":2,"id":"dac4157f_50ef3287","line":4141,"updated":"2015-04-21 09:53:29.000000000","message":"Hmm, I wonder if this is too specific to usb tablet. There are already 5 possible pointer modes we can use - ps2, xenbus (xen hypervisor only), vmware (with qemu/kvm !), USB mouse, USB tablet, and SPICE agent.\n\nI think perhaps we should have a generic property to specify the pointer type. eg  hw_pointer_model\u003dps2|xen|vmware|usbmouse|usbtablet|spice","commit_id":"28d63c96d0cfd5e2a131d6d566be3d63a028e12e"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"d16a73b992a665688908c987f676ad3478d16e86","unresolved":false,"context_lines":[{"line_number":4138,"context_line":"        if image_meta is not None:"},{"line_number":4139,"context_line":"            wants_usb_tablet \u003d strutils.bool_from_string("},{"line_number":4140,"context_line":"                image_meta.get(\u0027properties\u0027, {}).get("},{"line_number":4141,"context_line":"                    \u0027hw_use_usb_tablet\u0027, wants_usb_tablet))"},{"line_number":4142,"context_line":""},{"line_number":4143,"context_line":"        # We want a tablet if VNC is enabled, or SPICE is enabled and"},{"line_number":4144,"context_line":"        # the SPICE agent is disabled. If the SPICE agent is enabled"}],"source_content_type":"text/x-python","patch_set":2,"id":"dac4157f_4d679425","line":4141,"in_reply_to":"dac4157f_50ef3287","updated":"2015-04-21 11:54:44.000000000","message":"Sure I will do","commit_id":"28d63c96d0cfd5e2a131d6d566be3d63a028e12e"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"6055767fa15af6a42d2aff115e5b75444b500420","unresolved":false,"context_lines":[{"line_number":4266,"context_line":"        pointer_model \u003d CONF.pointer_model"},{"line_number":4267,"context_line":"        if image_meta is not None:"},{"line_number":4268,"context_line":"            pointer_model \u003d image_meta.get(\u0027properties\u0027, {}).get("},{"line_number":4269,"context_line":"                \u0027hw_pointer_model\u0027, pointer_model)"},{"line_number":4270,"context_line":""},{"line_number":4271,"context_line":"        if pointer_model \u003d\u003d \"usbtablet\":"},{"line_number":4272,"context_line":"            return self._get_guest_usb_tablet(os_type)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_0e3defc3","line":4269,"updated":"2015-06-09 09:35:40.000000000","message":"Although the libvirt driver isn\u0027t converted to use it yet, all image properties are now defined in nova/objects/image_meta.py, so that must be updated.","commit_id":"1d18d04b06857ba89d2acbc3008d720f70395bcc"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"78519a2fa12de80f20cc63bc37b17ed69b1ee693","unresolved":false,"context_lines":[{"line_number":4266,"context_line":"        pointer_model \u003d CONF.pointer_model"},{"line_number":4267,"context_line":"        if image_meta is not None:"},{"line_number":4268,"context_line":"            pointer_model \u003d image_meta.get(\u0027properties\u0027, {}).get("},{"line_number":4269,"context_line":"                \u0027hw_pointer_model\u0027, pointer_model)"},{"line_number":4270,"context_line":""},{"line_number":4271,"context_line":"        if pointer_model \u003d\u003d \"usbtablet\":"},{"line_number":4272,"context_line":"            return self._get_guest_usb_tablet(os_type)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_7ec3eeed","line":4269,"in_reply_to":"3afb71cf_0e3defc3","updated":"2015-06-09 10:53:09.000000000","message":"Done","commit_id":"1d18d04b06857ba89d2acbc3008d720f70395bcc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"48dbce5f028f751edb58bed635c05ea4f8aa1c06","unresolved":false,"context_lines":[{"line_number":4458,"context_line":"        return guest"},{"line_number":4459,"context_line":""},{"line_number":4460,"context_line":"    def _get_guest_pointer_model(self, os_type, image_meta\u003dNone):"},{"line_number":4461,"context_line":"        pointer_model \u003d image_meta.properties.get("},{"line_number":4462,"context_line":"            \u0027hw_pointer_model\u0027, CONF.pointer_model)"},{"line_number":4463,"context_line":"        if pointer_model is None and CONF.libvirt.use_usb_tablet:"},{"line_number":4464,"context_line":"            # TODO(sahid): We set pointer_model to keep compatibility"}],"source_content_type":"text/x-python","patch_set":34,"id":"7aa08908_c745ab6f","line":4461,"range":{"start_line":4461,"start_character":24,"end_line":4461,"end_character":34},"updated":"2016-06-17 18:34:44.000000000","message":"You\u0027re defaulting image_meta to None...so might want to check that, or don\u0027t make it optional.","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"9f89809db1df6e863d3ab32e4aaab434712e0ac0","unresolved":false,"context_lines":[{"line_number":4458,"context_line":"        return guest"},{"line_number":4459,"context_line":""},{"line_number":4460,"context_line":"    def _get_guest_pointer_model(self, os_type, image_meta\u003dNone):"},{"line_number":4461,"context_line":"        pointer_model \u003d image_meta.properties.get("},{"line_number":4462,"context_line":"            \u0027hw_pointer_model\u0027, CONF.pointer_model)"},{"line_number":4463,"context_line":"        if pointer_model is None and CONF.libvirt.use_usb_tablet:"},{"line_number":4464,"context_line":"            # TODO(sahid): We set pointer_model to keep compatibility"}],"source_content_type":"text/x-python","patch_set":34,"id":"5a9d85d2_4499426e","line":4461,"in_reply_to":"7aa08908_c745ab6f","updated":"2016-06-20 08:21:00.000000000","message":"I\u0027m going to remove the optional sense of this parameter","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4c65587af196c1523fe821fca3327bf1aa87d302","unresolved":false,"context_lines":[{"line_number":4480,"context_line":"                    CONF.spice.enabled and not CONF.spice.agent_enabled):"},{"line_number":4481,"context_line":"                return self._get_guest_usb_tablet(os_type)"},{"line_number":4482,"context_line":"            else:"},{"line_number":4483,"context_line":"                if CONF.pointer_model or CONF.libvirt.use_usb_tablet:"},{"line_number":4484,"context_line":"                    # For backward compatibility We don\u0027t want to break"},{"line_number":4485,"context_line":"                    # process of booting an instance if host is configured"},{"line_number":4486,"context_line":"                    # to use USB tablet without VNC or SPICE and SPICE"}],"source_content_type":"text/x-python","patch_set":34,"id":"7aa08908_02a16194","line":4483,"updated":"2016-06-17 18:38:52.000000000","message":"I don\u0027t think you need this.","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3620ab1e88d6dc2a0792c2412b3a914d6f2be4bb","unresolved":false,"context_lines":[{"line_number":4480,"context_line":"                    CONF.spice.enabled and not CONF.spice.agent_enabled):"},{"line_number":4481,"context_line":"                return self._get_guest_usb_tablet(os_type)"},{"line_number":4482,"context_line":"            else:"},{"line_number":4483,"context_line":"                if CONF.pointer_model or CONF.libvirt.use_usb_tablet:"},{"line_number":4484,"context_line":"                    # For backward compatibility We don\u0027t want to break"},{"line_number":4485,"context_line":"                    # process of booting an instance if host is configured"},{"line_number":4486,"context_line":"                    # to use USB tablet without VNC or SPICE and SPICE"}],"source_content_type":"text/x-python","patch_set":34,"id":"5a9d85d2_cb108d51","line":4483,"in_reply_to":"5a9d85d2_646f1e93","updated":"2016-06-20 15:05:36.000000000","message":"OK that makes sense I think.","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"9f89809db1df6e863d3ab32e4aaab434712e0ac0","unresolved":false,"context_lines":[{"line_number":4480,"context_line":"                    CONF.spice.enabled and not CONF.spice.agent_enabled):"},{"line_number":4481,"context_line":"                return self._get_guest_usb_tablet(os_type)"},{"line_number":4482,"context_line":"            else:"},{"line_number":4483,"context_line":"                if CONF.pointer_model or CONF.libvirt.use_usb_tablet:"},{"line_number":4484,"context_line":"                    # For backward compatibility We don\u0027t want to break"},{"line_number":4485,"context_line":"                    # process of booting an instance if host is configured"},{"line_number":4486,"context_line":"                    # to use USB tablet without VNC or SPICE and SPICE"}],"source_content_type":"text/x-python","patch_set":34,"id":"5a9d85d2_646f1e93","line":4483,"in_reply_to":"7aa08908_02a16194","updated":"2016-06-20 08:21:00.000000000","message":"You can see line 4479 the condition to make working usbtablet. If this condition is not fulfilled we should to handle that differently according the context; When usbtablet is requested by host or usbtablet is requested by users.\n\n - The case of host (from CONF), for backward compatibility we don\u0027t stop the process but warn operators that something is not well configured.\n - The case of users request, we return exception and stop the process of booting the instance.","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"48dbce5f028f751edb58bed635c05ea4f8aa1c06","unresolved":false,"context_lines":[{"line_number":4489,"context_line":"                                    \u0027configuration. In order to accept this \u0027"},{"line_number":4490,"context_line":"                                    \u0027request VNC should be enabled or SPICE \u0027"},{"line_number":4491,"context_line":"                                    \u0027and SPICE agent disabled on host.\u0027))"},{"line_number":4492,"context_line":"                else:"},{"line_number":4493,"context_line":"                    raise exception.UnsupportedPointerModelRequested("},{"line_number":4494,"context_line":"                        model\u003d\"usbtablet\")"},{"line_number":4495,"context_line":""},{"line_number":4496,"context_line":"    def _get_guest_usb_tablet(self, os_type):"},{"line_number":4497,"context_line":"        tablet \u003d None"}],"source_content_type":"text/x-python","patch_set":34,"id":"7aa08908_a2d04d54","line":4494,"range":{"start_line":4492,"start_character":16,"end_line":4494,"end_character":42},"updated":"2016-06-17 18:34:44.000000000","message":"I\u0027m having a hard time making sense of this, you\u0027re passing usbtablet to the exception but that\u0027s the only supported option right now, right?\n\nhttps://review.openstack.org/#/c/174854/34/nova/objects/fields.py@572\n\nSo you\u0027re basically saying, it\u0027s invalid, but it\u0027s the only option available. :)","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"9f89809db1df6e863d3ab32e4aaab434712e0ac0","unresolved":false,"context_lines":[{"line_number":4491,"context_line":"                                    \u0027and SPICE agent disabled on host.\u0027))"},{"line_number":4492,"context_line":"                else:"},{"line_number":4493,"context_line":"                    raise exception.UnsupportedPointerModelRequested("},{"line_number":4494,"context_line":"                        model\u003d\"usbtablet\")"},{"line_number":4495,"context_line":""},{"line_number":4496,"context_line":"    def _get_guest_usb_tablet(self, os_type):"},{"line_number":4497,"context_line":"        tablet \u003d None"}],"source_content_type":"text/x-python","patch_set":34,"id":"5a9d85d2_a400e6ab","line":4494,"in_reply_to":"7aa08908_02f6818e","updated":"2016-06-20 08:21:00.000000000","message":"Line 4474 you can see that we are in context of \"usbtablet\" here. The point of this code is to handle errors in this particular context. please see comment line 4483","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4c65587af196c1523fe821fca3327bf1aa87d302","unresolved":false,"context_lines":[{"line_number":4489,"context_line":"                                    \u0027configuration. In order to accept this \u0027"},{"line_number":4490,"context_line":"                                    \u0027request VNC should be enabled or SPICE \u0027"},{"line_number":4491,"context_line":"                                    \u0027and SPICE agent disabled on host.\u0027))"},{"line_number":4492,"context_line":"                else:"},{"line_number":4493,"context_line":"                    raise exception.UnsupportedPointerModelRequested("},{"line_number":4494,"context_line":"                        model\u003d\"usbtablet\")"},{"line_number":4495,"context_line":""},{"line_number":4496,"context_line":"    def _get_guest_usb_tablet(self, os_type):"},{"line_number":4497,"context_line":"        tablet \u003d None"}],"source_content_type":"text/x-python","patch_set":34,"id":"7aa08908_02f6818e","line":4494,"range":{"start_line":4492,"start_character":16,"end_line":4494,"end_character":42},"in_reply_to":"7aa08908_a2d04d54","updated":"2016-06-17 18:38:52.000000000","message":"I\u0027m assuming what you wanted here is to make this the \u0027else\u0027 for \"if pointer_model \u003d\u003d \"usbtablet\":\", as in we don\u0027t know how to support whatever was configured. And you\u0027d pass pointer_model (the variable) into the exception.\n\nHowever, I still don\u0027t know how we\u0027d even get this far because of the enum validation on the image metadata properties (the property value can only be \u0027usbtablet\u0027 right now), and the config option for pointer_model uses \u0027choices\u0027 so it has to be None or \u0027usbtablet\u0027, you\u0027ll get a ValueError or something otherwise.","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"48dbce5f028f751edb58bed635c05ea4f8aa1c06","unresolved":false,"context_lines":[{"line_number":4500,"context_line":"            tablet.type \u003d \"tablet\""},{"line_number":4501,"context_line":"            tablet.bus \u003d \"usb\""},{"line_number":4502,"context_line":"        else:"},{"line_number":4503,"context_line":"            if CONF.pointer_model or CONF.libvirt.use_usb_tablet:"},{"line_number":4504,"context_line":"                # For backward compatibility We don\u0027t want to break"},{"line_number":4505,"context_line":"                # process of booting an instance if virtual machine mode"},{"line_number":4506,"context_line":"                # is not configured as HVM."}],"source_content_type":"text/x-python","patch_set":34,"id":"7aa08908_421409e8","line":4503,"updated":"2016-06-17 18:34:44.000000000","message":"Why do we need to check this? This is only called from above when pointer_model \u003d\u003d \u0027usbtablet\u0027.","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3620ab1e88d6dc2a0792c2412b3a914d6f2be4bb","unresolved":false,"context_lines":[{"line_number":4500,"context_line":"            tablet.type \u003d \"tablet\""},{"line_number":4501,"context_line":"            tablet.bus \u003d \"usb\""},{"line_number":4502,"context_line":"        else:"},{"line_number":4503,"context_line":"            if CONF.pointer_model or CONF.libvirt.use_usb_tablet:"},{"line_number":4504,"context_line":"                # For backward compatibility We don\u0027t want to break"},{"line_number":4505,"context_line":"                # process of booting an instance if virtual machine mode"},{"line_number":4506,"context_line":"                # is not configured as HVM."}],"source_content_type":"text/x-python","patch_set":34,"id":"5a9d85d2_cb3ecdb7","line":4503,"in_reply_to":"5a9d85d2_847cca21","updated":"2016-06-20 15:05:36.000000000","message":"OK. I\u0027d probably pass pointer_model into this method so that can be used in the exception, but the method name does have \u0027usb_tablet\u0027 in it so it\u0027s probably nit-picking at this point.","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"9f89809db1df6e863d3ab32e4aaab434712e0ac0","unresolved":false,"context_lines":[{"line_number":4500,"context_line":"            tablet.type \u003d \"tablet\""},{"line_number":4501,"context_line":"            tablet.bus \u003d \"usb\""},{"line_number":4502,"context_line":"        else:"},{"line_number":4503,"context_line":"            if CONF.pointer_model or CONF.libvirt.use_usb_tablet:"},{"line_number":4504,"context_line":"                # For backward compatibility We don\u0027t want to break"},{"line_number":4505,"context_line":"                # process of booting an instance if virtual machine mode"},{"line_number":4506,"context_line":"                # is not configured as HVM."}],"source_content_type":"text/x-python","patch_set":34,"id":"5a9d85d2_847cca21","line":4503,"in_reply_to":"7aa08908_421409e8","updated":"2016-06-20 08:21:00.000000000","message":"To make working usbtablet the condition line 4498 should be fulfilled. If not we should to handle cases where host is requesting usbstable or users are requesting usbtablet. \n\n - The case of host (from CONF), for backward compatibility we don\u0027t stop the process but warn operators that something is not well configured.\n - The case of users request, we return exception and stop the process of booting the instance.","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"}],"releasenotes/notes/pointer-model-b4a1828c43e8d523.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"48dbce5f028f751edb58bed635c05ea4f8aa1c06","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - The pointer_model configuration option and hw_pointer_model image"},{"line_number":4,"context_line":"    properties was added to specify different pointer models for input"},{"line_number":5,"context_line":"    devices. This replaces the now deprecated use_usb_tablet"},{"line_number":6,"context_line":"    option."}],"source_content_type":"text/x-yaml","patch_set":34,"id":"7aa08908_879a8312","line":3,"range":{"start_line":3,"start_character":8,"end_line":3,"end_character":42},"updated":"2016-06-17 18:34:44.000000000","message":"I\u0027d think it would be helpful to also point out in the help text for this configuration option that you can bypass the config option by specifying hw_pointer_model in the image properties.","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"8740c7b1e27a6ea7bfc10cf6b8e4174bf5d62f91","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - The pointer_model configuration option and hw_pointer_model image"},{"line_number":4,"context_line":"    properties was added to specify different pointer models for input"},{"line_number":5,"context_line":"    devices. This replaces the now deprecated use_usb_tablet"},{"line_number":6,"context_line":"    option."}],"source_content_type":"text/x-yaml","patch_set":34,"id":"5a9d85d2_645b9e55","line":3,"in_reply_to":"7aa08908_879a8312","updated":"2016-06-20 08:37:24.000000000","message":"Yes I will do","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"48dbce5f028f751edb58bed635c05ea4f8aa1c06","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - The pointer_model configuration option and hw_pointer_model image"},{"line_number":4,"context_line":"    properties was added to specify different pointer models for input"},{"line_number":5,"context_line":"    devices. This replaces the now deprecated use_usb_tablet"},{"line_number":6,"context_line":"    option."},{"line_number":7,"context_line":"deprecations:"}],"source_content_type":"text/x-yaml","patch_set":34,"id":"7aa08908_87cc4336","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":14},"updated":"2016-06-17 18:34:44.000000000","message":"s/properties/property/","commit_id":"a13cc54eb1b183301d33b432fbe678953bca0504"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a18d46d36e017230f5f5280c7226fb32ba704bdd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - The pointer_model configuration option and hw_pointer_model image"},{"line_number":4,"context_line":"    properties was added to specify different pointer models for input"},{"line_number":5,"context_line":"    devices. This replaces the now deprecated use_usb_tablet"},{"line_number":6,"context_line":"    option."}],"source_content_type":"text/x-yaml","patch_set":35,"id":"5a9d85d2_ce824d00","line":3,"updated":"2016-06-20 19:27:37.000000000","message":"You missed some comments from ps34.","commit_id":"0158139babe705d7a12980409963472d2f462d48"}]}
