)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"dd86b042a26941634880847f1a2ae800425cbec8","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A new API is added with microversion 2.2:"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"POST /servers/\u003cuuid\u003e/console"},{"line_number":12,"context_line":"{"},{"line_number":13,"context_line":"  \"protocol\": [\"vnc\"|\"rdp\"|\"serial\"|\"spice\"],"},{"line_number":14,"context_line":"  \"type\": [\"novnc\"|\"xpvnc\"|\"rdp-html5\"|\"spice-html5\"|\"serial\"]"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1a930d6b_96579225","line":11,"updated":"2015-01-26 22:26:09.000000000","message":"servers/{server_id}/console","commit_id":"7554766d8f5f32c9ce90d79179be0d6724c323a8"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"9a188579da31f24ce2a9c6070f79dc45d72c9f12","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A new API is added with microversion 2.2:"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"POST /servers/\u003cuuid\u003e/console"},{"line_number":12,"context_line":"{"},{"line_number":13,"context_line":"  \"protocol\": [\"vnc\"|\"rdp\"|\"serial\"|\"spice\"],"},{"line_number":14,"context_line":"  \"type\": [\"novnc\"|\"xpvnc\"|\"rdp-html5\"|\"spice-html5\"|\"serial\"]"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1a930d6b_574348ae","line":11,"in_reply_to":"1a930d6b_96579225","updated":"2015-01-27 15:05:48.000000000","message":"Done","commit_id":"7554766d8f5f32c9ce90d79179be0d6724c323a8"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"74ad0e6bc05aeea3407722d62b8f913a41b14f4b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Consolidate the APIs for getting consoles"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A new API is added with microversion 2.3:"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"POST /servers/\u003cuuid\u003e/console"},{"line_number":12,"context_line":"{"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"dac4157f_3d459cb2","line":9,"updated":"2015-04-21 19:27:14.000000000","message":"guess 2.4 here","commit_id":"8d796cbdbebbc76f80536e29245e81621a4432b9"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"472247c8110e6f21b02e849e50aaa920e63343ce","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Consolidate the APIs for getting consoles"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A new API is added with microversion 2.3:"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"POST /servers/\u003cuuid\u003e/console"},{"line_number":12,"context_line":"{"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"dac4157f_5445b36d","line":9,"in_reply_to":"dac4157f_3d459cb2","updated":"2015-04-22 11:09:04.000000000","message":"Done","commit_id":"8d796cbdbebbc76f80536e29245e81621a4432b9"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6497639c5c3a8a13ef0c9980915712a32814a6c8","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"POST /servers/\u003cuuid\u003e/remote-consoles"},{"line_number":12,"context_line":"{"},{"line_number":13,"context_line":"  \"console\": {"},{"line_number":14,"context_line":"    \"protocol\": [\"vnc\"|\"rdp\"|\"serial\"|\"spice\"],"},{"line_number":15,"context_line":"    \"type\": [\"novnc\"|\"xpvnc\"|\"rdp-html5\"|\"spice-html5\"|\"serial\"]"},{"line_number":16,"context_line":"  }"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"ba3cc151_8bd4f2eb","line":13,"updated":"2015-07-03 07:24:09.000000000","message":"remote-console match resource name in the url","commit_id":"21dfc43bea31a03ef52d703267dc455f8d021ff2"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8285c24469c7729b15e5bcecd63567dc998ee976","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"POST /servers/\u003cuuid\u003e/remote-consoles"},{"line_number":12,"context_line":"{"},{"line_number":13,"context_line":"  \"console\": {"},{"line_number":14,"context_line":"    \"protocol\": [\"vnc\"|\"rdp\"|\"serial\"|\"spice\"],"},{"line_number":15,"context_line":"    \"type\": [\"novnc\"|\"xpvnc\"|\"rdp-html5\"|\"spice-html5\"|\"serial\"]"},{"line_number":16,"context_line":"  }"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"ba3cc151_ae3f84b2","line":13,"in_reply_to":"ba3cc151_8bd4f2eb","updated":"2015-07-03 07:37:26.000000000","message":"I am fine for current \"console\".\nbut if changing it as Alex said, here should be \"remote_console\" instead of including \"-\" because API-WG guideline contains that \n\n Field names should use `snake_case` style","commit_id":"21dfc43bea31a03ef52d703267dc455f8d021ff2"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"4e81d8a984c09eb6d74e187b56ce3e19ec9b44f0","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"POST /servers/\u003cuuid\u003e/remote-consoles"},{"line_number":12,"context_line":"{"},{"line_number":13,"context_line":"  \"console\": {"},{"line_number":14,"context_line":"    \"protocol\": [\"vnc\"|\"rdp\"|\"serial\"|\"spice\"],"},{"line_number":15,"context_line":"    \"type\": [\"novnc\"|\"xpvnc\"|\"rdp-html5\"|\"spice-html5\"|\"serial\"]"},{"line_number":16,"context_line":"  }"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"ba3cc151_81cdb167","line":13,"in_reply_to":"ba3cc151_ae3f84b2","updated":"2015-07-03 08:06:03.000000000","message":"OK, I hope I finally get this right in patch set #27","commit_id":"21dfc43bea31a03ef52d703267dc455f8d021ff2"}],"doc/v3/api_samples/os-remote-consoles/v2.6/create-vnc-console-req.json":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2403c133eba8d3a2eddfd5e08f6af385d8a6149a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"protocol\": \"vnc\","},{"line_number":3,"context_line":"    \"type\": \"novnc\""},{"line_number":4,"context_line":"}"}],"source_content_type":"application/json","patch_set":24,"id":"ba3cc151_bd37f44b","line":1,"updated":"2015-07-02 04:36:52.000000000","message":"Most APIs accept/return a request/response like\n\n{\n    \"server\": {\n        \"imageRef\": ...\n\nand original console API also returns a response like\n\n{\n    \"console\": {\n        \"type\": \"rdp-html5\",\n...\n\nCurrent request/response doesn\u0027t contain a top key(\"console\" in this case), that seems inconsistent between APIs.\nI\u0027m sorry I could not detect it on nova-spec review, but I\u0027d like to know that is intentional or not.","commit_id":"41f506441bbcc4a826dd8c730450e564d340233d"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f0301c039972d7fd10a259b3f613734d14a598eb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"protocol\": \"vnc\","},{"line_number":3,"context_line":"    \"type\": \"novnc\""},{"line_number":4,"context_line":"}"}],"source_content_type":"application/json","patch_set":24,"id":"ba3cc151_c428e0e4","line":1,"in_reply_to":"ba3cc151_a446fc4c","updated":"2015-07-02 07:24:15.000000000","message":"I see, thanks for your explanation.\n\nCurrent API-WG guideline doesn\u0027t cover this case and that is TODO like https://github.com/openstack/api-wg/blob/master/guidelines/representation_structure.rst#singular-resources\n\nSo my concern here is that this API is inconsistent between whole Nova APIs before API-WG guideline definition.","commit_id":"41f506441bbcc4a826dd8c730450e564d340233d"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"93d24f5aa4258fd68e2fcee86984b55e508863f0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"protocol\": \"vnc\","},{"line_number":3,"context_line":"    \"type\": \"novnc\""},{"line_number":4,"context_line":"}"}],"source_content_type":"application/json","patch_set":24,"id":"ba3cc151_a446fc4c","line":1,"in_reply_to":"ba3cc151_bd37f44b","updated":"2015-07-02 07:05:12.000000000","message":"Yes, it is intentional and it was discussed during the spec review. Please see the comment from Jay Pipes:\n\nhttps://review.openstack.org/#/c/141065/2/specs/kilo/approved/consolidate-console-api.rst,cm","commit_id":"41f506441bbcc4a826dd8c730450e564d340233d"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"91962877a6e5de20f1975cbaf1098e144ca0e925","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"protocol\": \"vnc\","},{"line_number":3,"context_line":"    \"type\": \"novnc\""},{"line_number":4,"context_line":"}"}],"source_content_type":"application/json","patch_set":24,"id":"ba3cc151_39665f2a","line":1,"in_reply_to":"ba3cc151_c428e0e4","updated":"2015-07-03 07:02:47.000000000","message":"OK, I will add the top-level key","commit_id":"41f506441bbcc4a826dd8c730450e564d340233d"}],"doc/v3/api_samples/os-remote-consoles/v2.6/create-vnc-console-resp.json":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2403c133eba8d3a2eddfd5e08f6af385d8a6149a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"protocol\": \"vnc\","},{"line_number":3,"context_line":"    \"type\": \"novnc\","},{"line_number":4,"context_line":"    \"url\": \"http://example.com:6080/vnc_auto.html?token\u003db60bcfc3-5fd4-4d21-986c-e83379107819\""},{"line_number":5,"context_line":"}"}],"source_content_type":"application/json","patch_set":24,"id":"ba3cc151_7d3e4c29","line":2,"updated":"2015-07-02 04:36:52.000000000","message":"ditto","commit_id":"41f506441bbcc4a826dd8c730450e564d340233d"}],"nova/api/openstack/api_version_request.py":[{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"5df0a3e310fc44de761a1e5911eaf4ba71288034","unresolved":false,"context_lines":[{"line_number":47,"context_line":"# Note(cyeoh): This only applies for the v2.1 API once microversions"},{"line_number":48,"context_line":"# support is fully merged. It does not affect the V2 API."},{"line_number":49,"context_line":"_MIN_API_VERSION \u003d \"2.1\""},{"line_number":50,"context_line":"_MAX_API_VERSION \u003d \"2.2\""},{"line_number":51,"context_line":"DEFAULT_API_VERSION \u003d _MIN_API_VERSION"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_3abc0a06","line":50,"updated":"2015-01-26 18:06:06.000000000","message":"FYI, in the blueprint spec link you have listed 2.1 as the version this feature is introduced.  Can you update that link found here:\n\nhttp://specs.openstack.org/openstack/nova-specs/specs/kilo/approved/consolidate-console-api.html","commit_id":"7554766d8f5f32c9ce90d79179be0d6724c323a8"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"4f689fd5144060da261181aed3a5475d6fb886f4","unresolved":false,"context_lines":[{"line_number":47,"context_line":"# Note(cyeoh): This only applies for the v2.1 API once microversions"},{"line_number":48,"context_line":"# support is fully merged. It does not affect the V2 API."},{"line_number":49,"context_line":"_MIN_API_VERSION \u003d \"2.1\""},{"line_number":50,"context_line":"_MAX_API_VERSION \u003d \"2.2\""},{"line_number":51,"context_line":"DEFAULT_API_VERSION \u003d _MIN_API_VERSION"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_7adf720d","line":50,"in_reply_to":"1a930d6b_3abc0a06","updated":"2015-01-26 18:16:36.000000000","message":"I can\u0027t know the exact microversion before the patch lands (there other patches in flight trying to take 2.2). I will update the spec as soon as the patch merges.","commit_id":"7554766d8f5f32c9ce90d79179be0d6724c323a8"}],"nova/api/openstack/compute/plugins/v3/console.py":[{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"10891a29afc6828bba4fde55e4c6dbc7afc639c5","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                \u0027url\u0027: output[\u0027url\u0027]}"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @wsgi.Controller.api_version(\"2.2\")"},{"line_number":62,"context_line":"    @extensions.expected_errors((400, 404, 409, 501))"},{"line_number":63,"context_line":"    def create(self, req, server_id, body):"},{"line_number":64,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":65,"context_line":"        instance \u003d common.get_instance(self.compute_api, context, server_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_90700da9","line":62,"updated":"2015-01-20 12:30:26.000000000","message":"None of your code here returns a 404, I think. The returning of 404 in case of a version\u003c2.2 being used is handled by the framework.\n\nSee: https://github.com/openstack/nova/blob/master/nova/tests/unit/api/openstack/compute/test_plugins/microversions.py#L47-L58 and https://github.com/openstack/nova/blob/master/nova/tests/unit/api/openstack/compute/test_microversions.py#L157-L162","commit_id":"39b23628e9599daad10b1980711e221ead9d24c4"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"ea002326c952011357dfe12c786588a557076f64","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                \u0027url\u0027: output[\u0027url\u0027]}"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @wsgi.Controller.api_version(\"2.2\")"},{"line_number":62,"context_line":"    @extensions.expected_errors((400, 404, 409, 501))"},{"line_number":63,"context_line":"    def create(self, req, server_id, body):"},{"line_number":64,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":65,"context_line":"        instance \u003d common.get_instance(self.compute_api, context, server_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_ebff9f00","line":62,"in_reply_to":"3a961159_90700da9","updated":"2015-01-20 15:59:01.000000000","message":"Done","commit_id":"39b23628e9599daad10b1980711e221ead9d24c4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a295772ed13f836e85e00fe5f502ea7737bc6d33","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @wsgi.Controller.api_version(\"2.2\")"},{"line_number":65,"context_line":"    @extensions.expected_errors((400, 409, 501))"},{"line_number":66,"context_line":"    def create(self, req, server_id, body):"},{"line_number":67,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":68,"context_line":"        authorize(context)"},{"line_number":69,"context_line":"        instance \u003d common.get_instance(self.compute_api, context, server_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_ac494d8d","line":66,"updated":"2015-01-21 11:19:42.000000000","message":"we need json-schema to validate the input","commit_id":"13d7039a021f2f339b3b1e9271b8318a605ce47a"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"db1ec920a9e0114273828576fbb08a86efdb2011","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @wsgi.Controller.api_version(\"2.2\")"},{"line_number":65,"context_line":"    @extensions.expected_errors((400, 409, 501))"},{"line_number":66,"context_line":"    def create(self, req, server_id, body):"},{"line_number":67,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":68,"context_line":"        authorize(context)"},{"line_number":69,"context_line":"        instance \u003d common.get_instance(self.compute_api, context, server_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_f28322ca","line":66,"in_reply_to":"1a930d6b_ac494d8d","updated":"2015-01-21 16:13:11.000000000","message":"Done","commit_id":"13d7039a021f2f339b3b1e9271b8318a605ce47a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a295772ed13f836e85e00fe5f502ea7737bc6d33","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            elif protocol \u003d\u003d \u0027serial\u0027:"},{"line_number":81,"context_line":"                return self._get_serial_console(context,"},{"line_number":82,"context_line":"                                                instance,"},{"line_number":83,"context_line":"                                                console_type)"},{"line_number":84,"context_line":"            else:"},{"line_number":85,"context_line":"                raise webob.exc.HTTPBadRequest()"},{"line_number":86,"context_line":"        except exception.InstanceNotReady as e:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_6c368505","line":83,"updated":"2015-01-21 11:19:42.000000000","message":"how about using a dict as mapping, then avoid a lot of \u0027elif\u0027? But it\u0027s fine.","commit_id":"13d7039a021f2f339b3b1e9271b8318a605ce47a"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"db1ec920a9e0114273828576fbb08a86efdb2011","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            elif protocol \u003d\u003d \u0027serial\u0027:"},{"line_number":81,"context_line":"                return self._get_serial_console(context,"},{"line_number":82,"context_line":"                                                instance,"},{"line_number":83,"context_line":"                                                console_type)"},{"line_number":84,"context_line":"            else:"},{"line_number":85,"context_line":"                raise webob.exc.HTTPBadRequest()"},{"line_number":86,"context_line":"        except exception.InstanceNotReady as e:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_12898eeb","line":83,"in_reply_to":"1a930d6b_6c368505","updated":"2015-01-21 16:13:11.000000000","message":"Done","commit_id":"13d7039a021f2f339b3b1e9271b8318a605ce47a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a295772ed13f836e85e00fe5f502ea7737bc6d33","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                                                instance,"},{"line_number":83,"context_line":"                                                console_type)"},{"line_number":84,"context_line":"            else:"},{"line_number":85,"context_line":"                raise webob.exc.HTTPBadRequest()"},{"line_number":86,"context_line":"        except exception.InstanceNotReady as e:"},{"line_number":87,"context_line":"            raise webob.exc.HTTPConflict("},{"line_number":88,"context_line":"                    explanation\u003d_(\u0027Instance not yet ready\u0027))"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_ec2195b5","line":85,"updated":"2015-01-21 11:19:42.000000000","message":"need json-schema to validate this.","commit_id":"13d7039a021f2f339b3b1e9271b8318a605ce47a"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"db1ec920a9e0114273828576fbb08a86efdb2011","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                                                instance,"},{"line_number":83,"context_line":"                                                console_type)"},{"line_number":84,"context_line":"            else:"},{"line_number":85,"context_line":"                raise webob.exc.HTTPBadRequest()"},{"line_number":86,"context_line":"        except exception.InstanceNotReady as e:"},{"line_number":87,"context_line":"            raise webob.exc.HTTPConflict("},{"line_number":88,"context_line":"                    explanation\u003d_(\u0027Instance not yet ready\u0027))"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_326daa33","line":85,"in_reply_to":"1a930d6b_ec2195b5","updated":"2015-01-21 16:13:11.000000000","message":"Done","commit_id":"13d7039a021f2f339b3b1e9271b8318a605ce47a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a295772ed13f836e85e00fe5f502ea7737bc6d33","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                raise webob.exc.HTTPBadRequest()"},{"line_number":86,"context_line":"        except exception.InstanceNotReady as e:"},{"line_number":87,"context_line":"            raise webob.exc.HTTPConflict("},{"line_number":88,"context_line":"                    explanation\u003d_(\u0027Instance not yet ready\u0027))"},{"line_number":89,"context_line":"        except exception.ConsoleTypeUnavailable as e:"},{"line_number":90,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":91,"context_line":"        except NotImplementedError:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_8c12d160","line":88,"updated":"2015-01-21 11:19:42.000000000","message":"just \u0027explanation\u003de.format_message()\u0027 enough","commit_id":"13d7039a021f2f339b3b1e9271b8318a605ce47a"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"db1ec920a9e0114273828576fbb08a86efdb2011","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                raise webob.exc.HTTPBadRequest()"},{"line_number":86,"context_line":"        except exception.InstanceNotReady as e:"},{"line_number":87,"context_line":"            raise webob.exc.HTTPConflict("},{"line_number":88,"context_line":"                    explanation\u003d_(\u0027Instance not yet ready\u0027))"},{"line_number":89,"context_line":"        except exception.ConsoleTypeUnavailable as e:"},{"line_number":90,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":91,"context_line":"        except NotImplementedError:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_526a361b","line":88,"in_reply_to":"1a930d6b_8c12d160","updated":"2015-01-21 16:13:11.000000000","message":"Done","commit_id":"13d7039a021f2f339b3b1e9271b8318a605ce47a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"88099f826001483ea838342decddd5b8c0cc82ae","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                \u0027url\u0027: output[\u0027url\u0027]}"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @wsgi.Controller.api_version(\"2.2\")"},{"line_number":70,"context_line":"    @extensions.expected_errors((400, 409, 501))"},{"line_number":71,"context_line":"    @validation.schema(console.create_console)"},{"line_number":72,"context_line":"    def create(self, req, server_id, body):"},{"line_number":73,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_844d85c6","line":70,"updated":"2015-01-27 12:37:31.000000000","message":"we need 404","commit_id":"7554766d8f5f32c9ce90d79179be0d6724c323a8"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"9a188579da31f24ce2a9c6070f79dc45d72c9f12","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                \u0027url\u0027: output[\u0027url\u0027]}"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @wsgi.Controller.api_version(\"2.2\")"},{"line_number":70,"context_line":"    @extensions.expected_errors((400, 409, 501))"},{"line_number":71,"context_line":"    @validation.schema(console.create_console)"},{"line_number":72,"context_line":"    def create(self, req, server_id, body):"},{"line_number":73,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_17e54008","line":70,"in_reply_to":"1a930d6b_844d85c6","updated":"2015-01-27 15:05:48.000000000","message":"Done","commit_id":"7554766d8f5f32c9ce90d79179be0d6724c323a8"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"26351a9f0b07421fa5899a6eee965d8ebe061026","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    \"\"\"Console.\"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    name \u003d \"Console\""},{"line_number":95,"context_line":"    alias \u003d \"console\""},{"line_number":96,"context_line":"    version \u003d 1"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def get_resources(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_e4500934","line":95,"updated":"2015-01-27 12:38:51.000000000","message":"os-console? for v3 we need \u0027os-\u0027 as prefix, but not sure we changed the style. the easy choice just add that prefix for now.","commit_id":"7554766d8f5f32c9ce90d79179be0d6724c323a8"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"9a188579da31f24ce2a9c6070f79dc45d72c9f12","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    \"\"\"Console.\"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    name \u003d \"Console\""},{"line_number":95,"context_line":"    alias \u003d \"console\""},{"line_number":96,"context_line":"    version \u003d 1"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def get_resources(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_57eb48db","line":95,"in_reply_to":"1a930d6b_e4500934","updated":"2015-01-27 15:05:48.000000000","message":"Done","commit_id":"7554766d8f5f32c9ce90d79179be0d6724c323a8"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"7390fd0b707b16317264a4e34b77e26ce840f0e3","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            return handler(context, instance, console_type)"},{"line_number":82,"context_line":"        except exception.InstanceNotReady as e:"},{"line_number":83,"context_line":"            raise webob.exc.HTTPConflict(explanation\u003de.format_message())"},{"line_number":84,"context_line":"        except exception.ConsoleTypeUnavailable as e:"},{"line_number":85,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":86,"context_line":"        except NotImplementedError:"},{"line_number":87,"context_line":"            msg \u003d _(\"Unable to get console, functionality not implemented\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_e3cd84b8","line":84,"updated":"2015-02-04 21:38:31.000000000","message":"how about the original exceptions handled such as \n\nexception.ImageSerialPortNumberInvalid,\n                exception.ImageSerialPortNumberExceedFlavorValue,\n                exception.SocketPortRangeExhaustedException\n\nin original code?\n\nif we don\u0027t catch them, it might return error here?","commit_id":"8bfe55f310f6474fe202ce349e8b377c5e22eb3e"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"f34d0e553b7ac4b998a8206e9f8ebbcc1897b3c9","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            return handler(context, instance, console_type)"},{"line_number":82,"context_line":"        except exception.InstanceNotReady as e:"},{"line_number":83,"context_line":"            raise webob.exc.HTTPConflict(explanation\u003de.format_message())"},{"line_number":84,"context_line":"        except exception.ConsoleTypeUnavailable as e:"},{"line_number":85,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":86,"context_line":"        except NotImplementedError:"},{"line_number":87,"context_line":"            msg \u003d _(\"Unable to get console, functionality not implemented\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_b6e6ec42","line":84,"in_reply_to":"da86d52c_e3cd84b8","updated":"2015-02-09 12:22:34.000000000","message":"Done","commit_id":"8bfe55f310f6474fe202ce349e8b377c5e22eb3e"},{"author":{"_account_id":642,"name":"Matt Dietz","email":"matthew.dietz@gmail.com","username":"cerberus"},"change_message_id":"45621cc785e2182f58a05e37a43549ff443aab39","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                                                     console_type)"},{"line_number":65,"context_line":"        return {\u0027protocol\u0027: \u0027serial\u0027,"},{"line_number":66,"context_line":"                \u0027type\u0027: console_type,"},{"line_number":67,"context_line":"                \u0027url\u0027: output[\u0027url\u0027]}"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @wsgi.Controller.api_version(\"2.2\")"},{"line_number":70,"context_line":"    @extensions.expected_errors((400, 409, 501))"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_ab02f608","line":67,"updated":"2015-02-09 16:36:12.000000000","message":"I\u0027d like to see these further consolidated, since they only differ in the get_*_console and call they make and protocol key. Seems like you could use your dispatcher below to pull both the protocol and the function to call out of the handlers dictionary","commit_id":"5140525d653322cdfcec4ae15ac307ba5b5bef4c"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"414de8603126ca0d12e67029ed2e0e1cdf890bba","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                                                     console_type)"},{"line_number":65,"context_line":"        return {\u0027protocol\u0027: \u0027serial\u0027,"},{"line_number":66,"context_line":"                \u0027type\u0027: console_type,"},{"line_number":67,"context_line":"                \u0027url\u0027: output[\u0027url\u0027]}"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @wsgi.Controller.api_version(\"2.2\")"},{"line_number":70,"context_line":"    @extensions.expected_errors((400, 409, 501))"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_04581e31","line":67,"in_reply_to":"da86d52c_ab02f608","updated":"2015-02-10 15:25:26.000000000","message":"Done","commit_id":"5140525d653322cdfcec4ae15ac307ba5b5bef4c"},{"author":{"_account_id":642,"name":"Matt Dietz","email":"matthew.dietz@gmail.com","username":"cerberus"},"change_message_id":"45621cc785e2182f58a05e37a43549ff443aab39","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"class Console(extensions.V3APIExtensionBase):"},{"line_number":95,"context_line":"    \"\"\"Console.\"\"\""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    name \u003d \"Console\""},{"line_number":98,"context_line":"    alias \u003d \"console\""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_663675e9","line":95,"updated":"2015-02-09 16:36:12.000000000","message":"Could I get a more informative docstring here, please?","commit_id":"5140525d653322cdfcec4ae15ac307ba5b5bef4c"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"414de8603126ca0d12e67029ed2e0e1cdf890bba","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"class Console(extensions.V3APIExtensionBase):"},{"line_number":95,"context_line":"    \"\"\"Console.\"\"\""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    name \u003d \"Console\""},{"line_number":98,"context_line":"    alias \u003d \"console\""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_245b622f","line":95,"in_reply_to":"da86d52c_663675e9","updated":"2015-02-10 15:25:26.000000000","message":"Done","commit_id":"5140525d653322cdfcec4ae15ac307ba5b5bef4c"}],"nova/api/openstack/compute/plugins/v3/remote_consoles.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"74ad0e6bc05aeea3407722d62b8f913a41b14f4b","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        return {\u0027console\u0027: {\u0027type\u0027: console_type, \u0027url\u0027: output[\u0027url\u0027]}}"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    @wsgi.Controller.api_version(\"2.1\", \"2.3\")  # noqa"},{"line_number":131,"context_line":"    @extensions.expected_errors((400, 404, 409, 501))"},{"line_number":132,"context_line":"    @wsgi.action(\u0027os-getSerialConsole\u0027)"},{"line_number":133,"context_line":"    @validation.schema(remote_consoles.get_serial_console)"}],"source_content_type":"text/x-python","patch_set":15,"id":"dac4157f_9ddca8e5","line":130,"updated":"2015-04-21 19:27:14.000000000","message":"why we need #noqa here?","commit_id":"8d796cbdbebbc76f80536e29245e81621a4432b9"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"472247c8110e6f21b02e849e50aaa920e63343ce","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        return {\u0027console\u0027: {\u0027type\u0027: console_type, \u0027url\u0027: output[\u0027url\u0027]}}"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    @wsgi.Controller.api_version(\"2.1\", \"2.3\")  # noqa"},{"line_number":131,"context_line":"    @extensions.expected_errors((400, 404, 409, 501))"},{"line_number":132,"context_line":"    @wsgi.action(\u0027os-getSerialConsole\u0027)"},{"line_number":133,"context_line":"    @validation.schema(remote_consoles.get_serial_console)"}],"source_content_type":"text/x-python","patch_set":15,"id":"dac4157f_7703190e","line":130,"in_reply_to":"dac4157f_9ddca8e5","updated":"2015-04-22 11:09:04.000000000","message":"Done","commit_id":"8d796cbdbebbc76f80536e29245e81621a4432b9"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0fbb7b455d4b150ef7bc23f9a095334b542b285a","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        return {\u0027console\u0027: {\u0027type\u0027: console_type, \u0027url\u0027: output[\u0027url\u0027]}}"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    @wsgi.Controller.api_version(\"2.5\")"},{"line_number":156,"context_line":"    @extensions.expected_errors((400, 409, 501))"},{"line_number":157,"context_line":"    @validation.schema(remote_consoles.create_v25)"},{"line_number":158,"context_line":"    def create(self, req, server_id, body):"},{"line_number":159,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa32b979_e0302158","line":156,"updated":"2015-06-19 07:39:06.000000000","message":"missing 404, instance may raise notfound and unittest.","commit_id":"7f70a0c8ce90874253c0cb5b06456b4ecd5c6a21"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"07d702e3faf1cef79298583f4c6864a19e932516","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        return {\u0027console\u0027: {\u0027type\u0027: console_type, \u0027url\u0027: output[\u0027url\u0027]}}"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    @wsgi.Controller.api_version(\"2.5\")"},{"line_number":156,"context_line":"    @extensions.expected_errors((400, 409, 501))"},{"line_number":157,"context_line":"    @validation.schema(remote_consoles.create_v25)"},{"line_number":158,"context_line":"    def create(self, req, server_id, body):"},{"line_number":159,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa32b979_fdd440be","line":156,"in_reply_to":"fa32b979_e0302158","updated":"2015-06-19 13:03:20.000000000","message":"Done","commit_id":"7f70a0c8ce90874253c0cb5b06456b4ecd5c6a21"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0fbb7b455d4b150ef7bc23f9a095334b542b285a","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        except (exception.ConsoleTypeUnavailable,"},{"line_number":174,"context_line":"                exception.ImageSerialPortNumberInvalid,"},{"line_number":175,"context_line":"                exception.ImageSerialPortNumberExceedFlavorValue,"},{"line_number":176,"context_line":"                exception.SocketPortRangeExhaustedException) as e:"},{"line_number":177,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":178,"context_line":"        except NotImplementedError:"},{"line_number":179,"context_line":"            common.raise_feature_not_supported()"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa32b979_408c6dd9","line":176,"updated":"2015-06-19 07:39:06.000000000","message":"emm...how about add unittest for last three case also","commit_id":"7f70a0c8ce90874253c0cb5b06456b4ecd5c6a21"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"07d702e3faf1cef79298583f4c6864a19e932516","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        except (exception.ConsoleTypeUnavailable,"},{"line_number":174,"context_line":"                exception.ImageSerialPortNumberInvalid,"},{"line_number":175,"context_line":"                exception.ImageSerialPortNumberExceedFlavorValue,"},{"line_number":176,"context_line":"                exception.SocketPortRangeExhaustedException) as e:"},{"line_number":177,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":178,"context_line":"        except NotImplementedError:"},{"line_number":179,"context_line":"            common.raise_feature_not_supported()"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa32b979_9ddad4e8","line":176,"in_reply_to":"fa32b979_408c6dd9","updated":"2015-06-19 13:03:20.000000000","message":"Done","commit_id":"7f70a0c8ce90874253c0cb5b06456b4ecd5c6a21"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0fbb7b455d4b150ef7bc23f9a095334b542b285a","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                exception.ImageSerialPortNumberExceedFlavorValue,"},{"line_number":176,"context_line":"                exception.SocketPortRangeExhaustedException) as e:"},{"line_number":177,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":178,"context_line":"        except NotImplementedError:"},{"line_number":179,"context_line":"            common.raise_feature_not_supported()"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa32b979_608731b5","line":178,"updated":"2015-06-19 07:39:06.000000000","message":"ditto, for unittest","commit_id":"7f70a0c8ce90874253c0cb5b06456b4ecd5c6a21"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"07d702e3faf1cef79298583f4c6864a19e932516","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                exception.ImageSerialPortNumberExceedFlavorValue,"},{"line_number":176,"context_line":"                exception.SocketPortRangeExhaustedException) as e:"},{"line_number":177,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":178,"context_line":"        except NotImplementedError:"},{"line_number":179,"context_line":"            common.raise_feature_not_supported()"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa32b979_bdd798be","line":178,"in_reply_to":"fa32b979_608731b5","updated":"2015-06-19 13:03:20.000000000","message":"Done","commit_id":"7f70a0c8ce90874253c0cb5b06456b4ecd5c6a21"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0fbb7b455d4b150ef7bc23f9a095334b542b285a","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        resources \u003d ["},{"line_number":197,"context_line":"            extensions.ResourceExtension("},{"line_number":198,"context_line":"                \u0027remote-consoles\u0027, RemoteConsolesController(), parent\u003dparent,"},{"line_number":199,"context_line":"                member_name\u003d\u0027remote-consoles\u0027)]"},{"line_number":200,"context_line":"        return resources"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa32b979_e0e261d4","line":199,"updated":"2015-06-19 07:39:06.000000000","message":"member name should be \u0027remote-console\u0027","commit_id":"7f70a0c8ce90874253c0cb5b06456b4ecd5c6a21"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"07d702e3faf1cef79298583f4c6864a19e932516","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        resources \u003d ["},{"line_number":197,"context_line":"            extensions.ResourceExtension("},{"line_number":198,"context_line":"                \u0027remote-consoles\u0027, RemoteConsolesController(), parent\u003dparent,"},{"line_number":199,"context_line":"                member_name\u003d\u0027remote-consoles\u0027)]"},{"line_number":200,"context_line":"        return resources"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa32b979_7de1109a","line":199,"in_reply_to":"fa32b979_e0e261d4","updated":"2015-06-19 13:03:20.000000000","message":"Done","commit_id":"7f70a0c8ce90874253c0cb5b06456b4ecd5c6a21"}],"nova/api/openstack/compute/schemas/v3/console.py":[{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"f2ac91da4fb747218a240e4b78ed025e8749c3c9","unresolved":false,"context_lines":[{"line_number":16,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":17,"context_line":"    \u0027properties\u0027: {"},{"line_number":18,"context_line":"        \u0027protocol\u0027: {"},{"line_number":19,"context_line":"            \u0027type\u0027: \u0027string\u0027,"},{"line_number":20,"context_line":"            \u0027enum\u0027: [\u0027vnc\u0027, \u0027spice\u0027, \u0027rdp\u0027, \u0027serial\u0027],"},{"line_number":21,"context_line":"        },"},{"line_number":22,"context_line":"        \u0027type\u0027: {"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_c35e3e45","line":19,"updated":"2015-01-22 11:43:42.000000000","message":"nit: this is not necessary - the type is constrained to be one of the values in the enum anyway.","commit_id":"eb7002d974f8cd0b86d1a42e63ac345690f107d0"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"c9ef953997b1daf1c5f378039f5cb062418b4bde","unresolved":false,"context_lines":[{"line_number":16,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":17,"context_line":"    \u0027properties\u0027: {"},{"line_number":18,"context_line":"        \u0027protocol\u0027: {"},{"line_number":19,"context_line":"            \u0027type\u0027: \u0027string\u0027,"},{"line_number":20,"context_line":"            \u0027enum\u0027: [\u0027vnc\u0027, \u0027spice\u0027, \u0027rdp\u0027, \u0027serial\u0027],"},{"line_number":21,"context_line":"        },"},{"line_number":22,"context_line":"        \u0027type\u0027: {"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_29e36134","line":19,"in_reply_to":"1a930d6b_c35e3e45","updated":"2015-01-22 12:43:46.000000000","message":"Done","commit_id":"eb7002d974f8cd0b86d1a42e63ac345690f107d0"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"f2ac91da4fb747218a240e4b78ed025e8749c3c9","unresolved":false,"context_lines":[{"line_number":20,"context_line":"            \u0027enum\u0027: [\u0027vnc\u0027, \u0027spice\u0027, \u0027rdp\u0027, \u0027serial\u0027],"},{"line_number":21,"context_line":"        },"},{"line_number":22,"context_line":"        \u0027type\u0027: {"},{"line_number":23,"context_line":"            \u0027type\u0027: \u0027string\u0027,"},{"line_number":24,"context_line":"            \u0027enum\u0027: [\u0027novnc\u0027, \u0027xvpvnc\u0027, \u0027rdp-html5\u0027, \u0027spice-html5\u0027, \u0027serial\u0027],"},{"line_number":25,"context_line":"        },"},{"line_number":26,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_43324e11","line":23,"updated":"2015-01-22 11:43:42.000000000","message":"nit: same.","commit_id":"eb7002d974f8cd0b86d1a42e63ac345690f107d0"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"c9ef953997b1daf1c5f378039f5cb062418b4bde","unresolved":false,"context_lines":[{"line_number":20,"context_line":"            \u0027enum\u0027: [\u0027vnc\u0027, \u0027spice\u0027, \u0027rdp\u0027, \u0027serial\u0027],"},{"line_number":21,"context_line":"        },"},{"line_number":22,"context_line":"        \u0027type\u0027: {"},{"line_number":23,"context_line":"            \u0027type\u0027: \u0027string\u0027,"},{"line_number":24,"context_line":"            \u0027enum\u0027: [\u0027novnc\u0027, \u0027xvpvnc\u0027, \u0027rdp-html5\u0027, \u0027spice-html5\u0027, \u0027serial\u0027],"},{"line_number":25,"context_line":"        },"},{"line_number":26,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_49d18d56","line":23,"in_reply_to":"1a930d6b_43324e11","updated":"2015-01-22 12:43:46.000000000","message":"Done","commit_id":"eb7002d974f8cd0b86d1a42e63ac345690f107d0"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"33b016038b19b45ad6e7ce73d213e663954bbb82","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 VMware Inc.  All rights reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_7f675c4d","line":1,"updated":"2015-01-26 21:27:43.000000000","message":"Shouldn\u0027t this be: Copyright 2015 OpenStack Foundation","commit_id":"7554766d8f5f32c9ce90d79179be0d6724c323a8"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"9a188579da31f24ce2a9c6070f79dc45d72c9f12","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 VMware Inc.  All rights reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_1793805b","line":1,"in_reply_to":"1a930d6b_7f675c4d","updated":"2015-01-27 15:05:48.000000000","message":"No","commit_id":"7554766d8f5f32c9ce90d79179be0d6724c323a8"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"88099f826001483ea838342decddd5b8c0cc82ae","unresolved":false,"context_lines":[{"line_number":16,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":17,"context_line":"    \u0027properties\u0027: {"},{"line_number":18,"context_line":"        \u0027protocol\u0027: {"},{"line_number":19,"context_line":"            \u0027enum\u0027: [\u0027vnc\u0027, \u0027spice\u0027, \u0027rdp\u0027, \u0027serial\u0027],"},{"line_number":20,"context_line":"        },"},{"line_number":21,"context_line":"        \u0027type\u0027: {"},{"line_number":22,"context_line":"            \u0027enum\u0027: [\u0027novnc\u0027, \u0027xvpvnc\u0027, \u0027rdp-html5\u0027, \u0027spice-html5\u0027, \u0027serial\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_64009934","line":19,"updated":"2015-01-27 12:37:31.000000000","message":"also need \u0027type\u0027: \u0027string\u0027","commit_id":"7554766d8f5f32c9ce90d79179be0d6724c323a8"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"9a188579da31f24ce2a9c6070f79dc45d72c9f12","unresolved":false,"context_lines":[{"line_number":16,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":17,"context_line":"    \u0027properties\u0027: {"},{"line_number":18,"context_line":"        \u0027protocol\u0027: {"},{"line_number":19,"context_line":"            \u0027enum\u0027: [\u0027vnc\u0027, \u0027spice\u0027, \u0027rdp\u0027, \u0027serial\u0027],"},{"line_number":20,"context_line":"        },"},{"line_number":21,"context_line":"        \u0027type\u0027: {"},{"line_number":22,"context_line":"            \u0027enum\u0027: [\u0027novnc\u0027, \u0027xvpvnc\u0027, \u0027rdp-html5\u0027, \u0027spice-html5\u0027, \u0027serial\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_57ec28bb","line":19,"in_reply_to":"1a930d6b_64009934","updated":"2015-01-27 15:05:48.000000000","message":"Matthew wanted me to remove this in patch set 4. I am not really sure why we need it but I\u0027ll bring it back for consistency with other schemas.","commit_id":"7554766d8f5f32c9ce90d79179be0d6724c323a8"}],"nova/api/openstack/compute/schemas/v3/remote_consoles.py":[{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"e7e789159dc93cb74abe5854efff81e9b2e180d7","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            \u0027enum\u0027: [\u0027vnc\u0027, \u0027spice\u0027, \u0027rdp\u0027, \u0027serial\u0027],"},{"line_number":96,"context_line":"        },"},{"line_number":97,"context_line":"        \u0027type\u0027: {"},{"line_number":98,"context_line":"            \u0027enum\u0027: [\u0027novnc\u0027, \u0027xvpvnc\u0027, \u0027rdp-html5\u0027, \u0027spice-html5\u0027, \u0027serial\u0027],"},{"line_number":99,"context_line":"        },"},{"line_number":100,"context_line":"    },"},{"line_number":101,"context_line":"    \u0027required\u0027: [\u0027protocol\u0027, \u0027type\u0027],"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a016987_38a4bca4","line":98,"updated":"2015-05-15 09:30:39.000000000","message":"there maybe an request value combine like this:\n\nprotocal: vnc\ntype: serial\n\nwhich is wrong... can we validate such cases in schema?(no knowledge about it, but that would be better)\n\nEli.","commit_id":"5d4c5dc2682ff3df65011954f96c2bf651a523f8"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"d65fc76b8aa2dd59841cae8c19d0fdb2d23655e7","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            \u0027enum\u0027: [\u0027vnc\u0027, \u0027spice\u0027, \u0027rdp\u0027, \u0027serial\u0027],"},{"line_number":96,"context_line":"        },"},{"line_number":97,"context_line":"        \u0027type\u0027: {"},{"line_number":98,"context_line":"            \u0027enum\u0027: [\u0027novnc\u0027, \u0027xvpvnc\u0027, \u0027rdp-html5\u0027, \u0027spice-html5\u0027, \u0027serial\u0027],"},{"line_number":99,"context_line":"        },"},{"line_number":100,"context_line":"    },"},{"line_number":101,"context_line":"    \u0027required\u0027: [\u0027protocol\u0027, \u0027type\u0027],"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a016987_dcd1fcce","line":98,"in_reply_to":"7a016987_38a4bca4","updated":"2015-05-16 10:49:41.000000000","message":"Agree that would be better but I don\u0027t know how to achieve this with json schema. Any advice is welcome.","commit_id":"5d4c5dc2682ff3df65011954f96c2bf651a523f8"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"0910352fb824140340f850cc13cf569a6e154b61","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            \u0027enum\u0027: [\u0027vnc\u0027, \u0027spice\u0027, \u0027rdp\u0027, \u0027serial\u0027],"},{"line_number":96,"context_line":"        },"},{"line_number":97,"context_line":"        \u0027type\u0027: {"},{"line_number":98,"context_line":"            \u0027enum\u0027: [\u0027novnc\u0027, \u0027xvpvnc\u0027, \u0027rdp-html5\u0027, \u0027spice-html5\u0027, \u0027serial\u0027],"},{"line_number":99,"context_line":"        },"},{"line_number":100,"context_line":"    },"},{"line_number":101,"context_line":"    \u0027required\u0027: [\u0027protocol\u0027, \u0027type\u0027],"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a016987_e3ae9a80","line":98,"in_reply_to":"7a016987_dcd1fcce","updated":"2015-05-26 10:42:57.000000000","message":"Conditional validation like this is not possible with JSON-schema.","commit_id":"5d4c5dc2682ff3df65011954f96c2bf651a523f8"}],"nova/api/openstack/rest_api_version_history.rst":[{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"33b016038b19b45ad6e7ce73d213e663954bbb82","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"  A new API for getting an instance console is added::"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"  POST /servers/\u003cuuid\u003e/console"},{"line_number":29,"context_line":"  {"},{"line_number":30,"context_line":"    \"protocol\": [\"vnc\"|\"rdp\"|\"serial\"|\"spice\"],"},{"line_number":31,"context_line":"    \"type\": [\"novnc\"|\"xpvnc\"|\"rdp-html5\"|\"spice-html5\"|\"serial\"]"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a930d6b_5f9700ec","line":28,"updated":"2015-01-26 21:27:43.000000000","message":"NIT, but this is probably clearer:\n\n/servers/{server_id}?/console","commit_id":"7554766d8f5f32c9ce90d79179be0d6724c323a8"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"9a188579da31f24ce2a9c6070f79dc45d72c9f12","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"  A new API for getting an instance console is added::"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"  POST /servers/\u003cuuid\u003e/console"},{"line_number":29,"context_line":"  {"},{"line_number":30,"context_line":"    \"protocol\": [\"vnc\"|\"rdp\"|\"serial\"|\"spice\"],"},{"line_number":31,"context_line":"    \"type\": [\"novnc\"|\"xpvnc\"|\"rdp-html5\"|\"spice-html5\"|\"serial\"]"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a930d6b_173d402b","line":28,"in_reply_to":"1a930d6b_5f9700ec","updated":"2015-01-27 15:05:48.000000000","message":"Done","commit_id":"7554766d8f5f32c9ce90d79179be0d6724c323a8"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0fbb7b455d4b150ef7bc23f9a095334b542b285a","unresolved":false,"context_lines":[{"line_number":60,"context_line":"2.5"},{"line_number":61,"context_line":"---"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"  A new API for getting remote console is added::"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    POST /servers/\u003cuuid\u003e/remote-consoles"},{"line_number":66,"context_line":"    {"}],"source_content_type":"text/x-rst","patch_set":21,"id":"fa32b979_e07ee1e2","line":63,"updated":"2015-06-19 07:39:06.000000000","message":"you also remove some apis, we should describe at here.","commit_id":"7f70a0c8ce90874253c0cb5b06456b4ecd5c6a21"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"07d702e3faf1cef79298583f4c6864a19e932516","unresolved":false,"context_lines":[{"line_number":60,"context_line":"2.5"},{"line_number":61,"context_line":"---"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"  A new API for getting remote console is added::"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    POST /servers/\u003cuuid\u003e/remote-consoles"},{"line_number":66,"context_line":"    {"}],"source_content_type":"text/x-rst","patch_set":21,"id":"fa32b979_3df2a870","line":63,"in_reply_to":"fa32b979_e07ee1e2","updated":"2015-06-19 13:03:20.000000000","message":"Done","commit_id":"7f70a0c8ce90874253c0cb5b06456b4ecd5c6a21"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8cfa2a4685ca0909407b75d4e5b1087497d59b0d","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    }"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  The old APIs \u0027os-getVNCConsole\u0027, \u0027os-getSPICEConsole\u0027, \u0027os-getSerialConsole\u0027"},{"line_number":72,"context_line":"  and \u0027os-getRDPConsole\u0027 are removed."}],"source_content_type":"text/x-rst","patch_set":23,"id":"fa32b979_73289186","line":72,"updated":"2015-06-25 04:44:30.000000000","message":"Here is my concern.\nCan we keep the existing old APIs in short-term?\nIn general, when removing CONF options or RCP calls, we set deprecation time for one/two cycles for avoiding big impact to users.\n\nThe removal of APIs also would be an impact to users, that means backwards incompatible change.\nIn addition, the corresponding nova-spec doesn\u0027t mention about this.\nI\u0027d like to avoid it at this time.","commit_id":"af63d733472c02415498a3ce4701307979f98417"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"51ad1456c2af907c5d059dcccc0da16dafd31c3e","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    }"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  The old APIs \u0027os-getVNCConsole\u0027, \u0027os-getSPICEConsole\u0027, \u0027os-getSerialConsole\u0027"},{"line_number":72,"context_line":"  and \u0027os-getRDPConsole\u0027 are removed."}],"source_content_type":"text/x-rst","patch_set":23,"id":"fa32b979_24971d3b","line":72,"in_reply_to":"fa32b979_097554c9","updated":"2015-06-25 07:10:32.000000000","message":"The microversion switch is the job of who write the client, i.e. the python-novaclient. the end-user will use that client and will have no concern the micro version.\n\nSo it is not very hard. especially for the end user.","commit_id":"af63d733472c02415498a3ce4701307979f98417"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"58f329d5650cb33b424f1c78909fce571e38258c","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    }"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  The old APIs \u0027os-getVNCConsole\u0027, \u0027os-getSPICEConsole\u0027, \u0027os-getSerialConsole\u0027"},{"line_number":72,"context_line":"  and \u0027os-getRDPConsole\u0027 are removed."}],"source_content_type":"text/x-rst","patch_set":23,"id":"fa32b979_e4229551","line":72,"in_reply_to":"fa32b979_097554c9","updated":"2015-06-25 07:04:46.000000000","message":"This change was approved by the API WG, please see https://review.openstack.org/#/c/185844/.  It was explicitly stated the old APIs will be removed with the new microversion.","commit_id":"af63d733472c02415498a3ce4701307979f98417"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"f39a469c577bf60c33957fd93e9dca3dc29f8cf2","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    }"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  The old APIs \u0027os-getVNCConsole\u0027, \u0027os-getSPICEConsole\u0027, \u0027os-getSerialConsole\u0027"},{"line_number":72,"context_line":"  and \u0027os-getRDPConsole\u0027 are removed."}],"source_content_type":"text/x-rst","patch_set":23,"id":"fa32b979_c9ea0cd8","line":72,"in_reply_to":"fa32b979_73289186","updated":"2015-06-25 06:41:26.000000000","message":"Actually, the old apis are not removed. They are just restricted between microversion 2.1 and 2.4. It is backward compatible.","commit_id":"af63d733472c02415498a3ce4701307979f98417"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"4392abcc1f7d09c80c76dc65e3b4a7a7d06e50c8","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    }"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  The old APIs \u0027os-getVNCConsole\u0027, \u0027os-getSPICEConsole\u0027, \u0027os-getSerialConsole\u0027"},{"line_number":72,"context_line":"  and \u0027os-getRDPConsole\u0027 are removed."}],"source_content_type":"text/x-rst","patch_set":23,"id":"fa32b979_097554c9","line":72,"in_reply_to":"fa32b979_c9ea0cd8","updated":"2015-06-25 06:53:41.000000000","message":"Yeah, it is possible, but hard.\nThat requires to switch microversion for every feature on *all* client side.\nIt is hard to clients and seems backwards incompatible change.","commit_id":"af63d733472c02415498a3ce4701307979f98417"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"cf320a9dd1d4dc034b95d2a63d76b1478afb3f40","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    {"},{"line_number":75,"context_line":"      \"protocol\": [\"vnc\"|\"rdp\"|\"serial\"|\"spice\"],"},{"line_number":76,"context_line":"      \"type\": [\"novnc\"|\"xpvnc\"|\"rdp-html5\"|\"spice-html5\"|\"serial\"]"},{"line_number":77,"context_line":"    }"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"  The old APIs \u0027os-getVNCConsole\u0027, \u0027os-getSPICEConsole\u0027, \u0027os-getSerialConsole\u0027"},{"line_number":80,"context_line":"  and \u0027os-getRDPConsole\u0027 are removed."}],"source_content_type":"text/x-rst","patch_set":24,"id":"ba3cc151_48aff77c","line":77,"updated":"2015-07-02 12:59:06.000000000","message":"Might be good to show an example of the resulting response too?","commit_id":"41f506441bbcc4a826dd8c730450e564d340233d"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"91962877a6e5de20f1975cbaf1098e144ca0e925","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    {"},{"line_number":75,"context_line":"      \"protocol\": [\"vnc\"|\"rdp\"|\"serial\"|\"spice\"],"},{"line_number":76,"context_line":"      \"type\": [\"novnc\"|\"xpvnc\"|\"rdp-html5\"|\"spice-html5\"|\"serial\"]"},{"line_number":77,"context_line":"    }"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"  The old APIs \u0027os-getVNCConsole\u0027, \u0027os-getSPICEConsole\u0027, \u0027os-getSerialConsole\u0027"},{"line_number":80,"context_line":"  and \u0027os-getRDPConsole\u0027 are removed."}],"source_content_type":"text/x-rst","patch_set":24,"id":"ba3cc151_39bf3f62","line":77,"in_reply_to":"ba3cc151_48aff77c","updated":"2015-07-03 07:02:47.000000000","message":"Done","commit_id":"41f506441bbcc4a826dd8c730450e564d340233d"}],"nova/tests/functional/api_samples_test_base.py":[{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"4ca3d3a71a5f1fe15f6189bcce0d523cb5521d83","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    ctype \u003d \u0027json\u0027"},{"line_number":35,"context_line":"    all_extensions \u003d False"},{"line_number":36,"context_line":"    extension_name \u003d None"},{"line_number":37,"context_line":"    api_version \u003d \u00272.1\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def _pretty_data(self, data):"},{"line_number":40,"context_line":"        if self.ctype \u003d\u003d \u0027json\u0027:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_23ee22b5","line":37,"updated":"2015-01-22 11:38:50.000000000","message":"This should not be necessary. It\u0027s the default anyway. Does this (and the change below) set it for all functional tests?  I think we should leave it as unset, and.....\n\n(continues on line 305)","commit_id":"eb7002d974f8cd0b86d1a42e63ac345690f107d0"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"c9ef953997b1daf1c5f378039f5cb062418b4bde","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    ctype \u003d \u0027json\u0027"},{"line_number":35,"context_line":"    all_extensions \u003d False"},{"line_number":36,"context_line":"    extension_name \u003d None"},{"line_number":37,"context_line":"    api_version \u003d \u00272.1\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def _pretty_data(self, data):"},{"line_number":40,"context_line":"        if self.ctype \u003d\u003d \u0027json\u0027:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_492d0d46","line":37,"in_reply_to":"1a930d6b_23ee22b5","updated":"2015-01-22 12:43:46.000000000","message":"Done","commit_id":"eb7002d974f8cd0b86d1a42e63ac345690f107d0"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"4ca3d3a71a5f1fe15f6189bcce0d523cb5521d83","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        headers \u003d {}"},{"line_number":303,"context_line":"        headers[\u0027Content-Type\u0027] \u003d \u0027application/\u0027 + self.ctype"},{"line_number":304,"context_line":"        headers[\u0027Accept\u0027] \u003d \u0027application/\u0027 + self.ctype"},{"line_number":305,"context_line":"        headers[\u0027X-OpenStack-Compute-API-Version\u0027] \u003d self.api_version"},{"line_number":306,"context_line":"        return self.api.api_request(url, body\u003dbody, method\u003dmethod,"},{"line_number":307,"context_line":"                headers\u003dheaders, strip_version\u003dstrip_version)"},{"line_number":308,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_a3393243","line":305,"updated":"2015-01-22 11:38:50.000000000","message":"... only provide this header when the test specifically asks for it.","commit_id":"eb7002d974f8cd0b86d1a42e63ac345690f107d0"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"c9ef953997b1daf1c5f378039f5cb062418b4bde","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        headers \u003d {}"},{"line_number":303,"context_line":"        headers[\u0027Content-Type\u0027] \u003d \u0027application/\u0027 + self.ctype"},{"line_number":304,"context_line":"        headers[\u0027Accept\u0027] \u003d \u0027application/\u0027 + self.ctype"},{"line_number":305,"context_line":"        headers[\u0027X-OpenStack-Compute-API-Version\u0027] \u003d self.api_version"},{"line_number":306,"context_line":"        return self.api.api_request(url, body\u003dbody, method\u003dmethod,"},{"line_number":307,"context_line":"                headers\u003dheaders, strip_version\u003dstrip_version)"},{"line_number":308,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_a92af129","line":305,"in_reply_to":"1a930d6b_a3393243","updated":"2015-01-22 12:43:46.000000000","message":"Done","commit_id":"eb7002d974f8cd0b86d1a42e63ac345690f107d0"}],"nova/tests/functional/v3/test_console.py":[{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"c0296b9c8779c898e60c68ee9e4825af957c51ad","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                                 \u0027create-spice-console-req\u0027, body)"},{"line_number":44,"context_line":"        subs \u003d self._get_regexes()"},{"line_number":45,"context_line":"        subs[\"url\"] \u003d \\"},{"line_number":46,"context_line":"            \"((https?):((//)|(\\\\\\\\))+([\\w\\d:#@%/;$()~_?\\+-\u003d\\\\\\.\u0026](#!)?)*)\""},{"line_number":47,"context_line":"        self._verify_response(\u0027create-spice-console-resp\u0027, subs, response, 200)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def test_create_rdp_consoles(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_2f60c631","line":46,"updated":"2015-01-22 11:15:36.000000000","message":"These regexes are ridiculous. If we really _have_ to use them (vs just using a URL parser), can we extract them as a variable and put some comments giving some examples of what is acceptable please?","commit_id":"eb7002d974f8cd0b86d1a42e63ac345690f107d0"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"c9ef953997b1daf1c5f378039f5cb062418b4bde","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                                 \u0027create-spice-console-req\u0027, body)"},{"line_number":44,"context_line":"        subs \u003d self._get_regexes()"},{"line_number":45,"context_line":"        subs[\"url\"] \u003d \\"},{"line_number":46,"context_line":"            \"((https?):((//)|(\\\\\\\\))+([\\w\\d:#@%/;$()~_?\\+-\u003d\\\\\\.\u0026](#!)?)*)\""},{"line_number":47,"context_line":"        self._verify_response(\u0027create-spice-console-resp\u0027, subs, response, 200)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def test_create_rdp_consoles(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_0c4a33c5","line":46,"in_reply_to":"1a930d6b_2f60c631","updated":"2015-01-22 12:43:46.000000000","message":"I agree using regexes is ugly but this is how the response verification works. I will extract them as variables.","commit_id":"eb7002d974f8cd0b86d1a42e63ac345690f107d0"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"e5c576fd9797e87ac1e062de6c6a789c8ac9cb49","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        self.flags(enabled\u003dTrue, group\u003d\u0027rdp\u0027)"},{"line_number":29,"context_line":"        self.flags(enabled\u003dTrue, group\u003d\u0027serial_console\u0027)"},{"line_number":30,"context_line":"        self.http_regex \u003d \\"},{"line_number":31,"context_line":"            \"((https?):((//)|(\\\\\\\\))+([\\w\\d:#@%/;$()~_?\\+-\u003d\\\\\\.\u0026](#!)?)*)\""},{"line_number":32,"context_line":"        self.ws_regex \u003d \\"},{"line_number":33,"context_line":"            \"((ws?):((//)|(\\\\\\\\))+([\\w\\d:#@%/;$()~_?\\+-\u003d\\\\\\.\u0026](#!)?)*)\""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a930d6b_a2e843b5","line":31,"updated":"2015-01-23 08:59:24.000000000","message":"Hi - thanks for moving these up. I realise (now) that the API tests need regex. It\u0027s a shame because they\u0027re such a readability nightmare.\n\nAnyway I think we can simplify this one a bit - the url has to start with http:// or https:// doesn\u0027t it? Has to be exactly 2 forward slashes. So can can trim the first bit down:\n\n\"(https?://)([\\w\\d:#@%/;$()~_?\\+-\u003d\\\\\\.\u0026](#!)?)*)\"\n\nIn fact, the 2 regexes are identical apart from the very start, so perhaps:\n\n    non_protocol_part \u003d \"([\\w\\d:#@%/;$()~_?\\+-\u003d\\\\\\.\u0026](#!)?)*)\"\n    http_regex \u003d \"(https?://)\" + non_protocol_part\n    ws_regex \u003d \"(ws://)\" + non_protocol_part\n\nI guess it might be possible to trim down the non_protocol_part as well, but IDK exactly what is allowed there.","commit_id":"2bb501828b4b9a29836e469aa74bccf293a5941c"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"2e32c1b8972af9b8ab4ce5648ae3897c7def537e","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        self.flags(enabled\u003dTrue, group\u003d\u0027rdp\u0027)"},{"line_number":29,"context_line":"        self.flags(enabled\u003dTrue, group\u003d\u0027serial_console\u0027)"},{"line_number":30,"context_line":"        self.http_regex \u003d \\"},{"line_number":31,"context_line":"            \"((https?):((//)|(\\\\\\\\))+([\\w\\d:#@%/;$()~_?\\+-\u003d\\\\\\.\u0026](#!)?)*)\""},{"line_number":32,"context_line":"        self.ws_regex \u003d \\"},{"line_number":33,"context_line":"            \"((ws?):((//)|(\\\\\\\\))+([\\w\\d:#@%/;$()~_?\\+-\u003d\\\\\\.\u0026](#!)?)*)\""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a930d6b_10df813c","line":31,"in_reply_to":"1a930d6b_a2e843b5","updated":"2015-01-23 09:25:13.000000000","message":"OK, I will follow your suggestion. The non_protocol_part could be anything as this is the URL where the console proxy is deployed.","commit_id":"2bb501828b4b9a29836e469aa74bccf293a5941c"}],"nova/tests/functional/v3/test_remote_consoles.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"967cb9c3c342f6c57cfd85a0062f4b451525448f","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        self.http_regex \u003d \"(https?://)\" + non_protocol_part"},{"line_number":100,"context_line":"        self.ws_regex \u003d \"(ws?://)\" + non_protocol_part"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def test_create_vnc_consoles(self):"},{"line_number":103,"context_line":"        body \u003d {\u0027protocol\u0027: \u0027vnc\u0027, \u0027type\u0027: \u0027novnc\u0027}"},{"line_number":104,"context_line":"        self.request_api_version \u003d \u00272.4\u0027"},{"line_number":105,"context_line":"        response \u003d self._do_post(\u0027servers/%s/console\u0027 % self.uuid,"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a016987_bf0416c6","line":102,"updated":"2015-05-27 05:39:00.000000000","message":"Emm....only one api sample test enough for this api, we needn\u0027t add test for each case. In the API ref doc, we only need one sample to show.","commit_id":"5d4c5dc2682ff3df65011954f96c2bf651a523f8"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"bd7d0ca71cbb3f0b9d0c1810918c80a6aacbd393","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        self.http_regex \u003d \"(https?://)\" + non_protocol_part"},{"line_number":100,"context_line":"        self.ws_regex \u003d \"(ws?://)\" + non_protocol_part"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def test_create_vnc_consoles(self):"},{"line_number":103,"context_line":"        body \u003d {\u0027protocol\u0027: \u0027vnc\u0027, \u0027type\u0027: \u0027novnc\u0027}"},{"line_number":104,"context_line":"        self.request_api_version \u003d \u00272.4\u0027"},{"line_number":105,"context_line":"        response \u003d self._do_post(\u0027servers/%s/console\u0027 % self.uuid,"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a016987_55ba93e2","line":102,"in_reply_to":"7a016987_bf0416c6","updated":"2015-05-27 13:37:18.000000000","message":"OK, I will leave only the sample for VNC","commit_id":"5d4c5dc2682ff3df65011954f96c2bf651a523f8"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"967cb9c3c342f6c57cfd85a0062f4b451525448f","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        self.request_api_version \u003d \u00272.4\u0027"},{"line_number":115,"context_line":"        response \u003d self._do_post(\u0027servers/%s/console\u0027 % self.uuid,"},{"line_number":116,"context_line":"                                 \u0027create-spice-console-req\u0027, body,"},{"line_number":117,"context_line":"                                 api_version\u003d\u00272.4\u0027)"},{"line_number":118,"context_line":"        subs \u003d self._get_regexes()"},{"line_number":119,"context_line":"        subs[\"url\"] \u003d self.http_regex"},{"line_number":120,"context_line":"        self._verify_response(\u0027create-spice-console-resp\u0027, subs, response, 200)"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a016987_df5112da","line":117,"updated":"2015-05-27 05:39:00.000000000","message":"there is self.request_api_version at line 114, but we didn\u0027t use it at here.\n\nSo better to move request_api_version as class member, like this patch https://review.openstack.org/#/c/168966/8/nova/tests/functional/v3/test_fixed_ips.py","commit_id":"5d4c5dc2682ff3df65011954f96c2bf651a523f8"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"bd7d0ca71cbb3f0b9d0c1810918c80a6aacbd393","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        self.request_api_version \u003d \u00272.4\u0027"},{"line_number":115,"context_line":"        response \u003d self._do_post(\u0027servers/%s/console\u0027 % self.uuid,"},{"line_number":116,"context_line":"                                 \u0027create-spice-console-req\u0027, body,"},{"line_number":117,"context_line":"                                 api_version\u003d\u00272.4\u0027)"},{"line_number":118,"context_line":"        subs \u003d self._get_regexes()"},{"line_number":119,"context_line":"        subs[\"url\"] \u003d self.http_regex"},{"line_number":120,"context_line":"        self._verify_response(\u0027create-spice-console-resp\u0027, subs, response, 200)"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a016987_d53fa323","line":117,"in_reply_to":"7a016987_df5112da","updated":"2015-05-27 13:37:18.000000000","message":"I need to set request_api_version\u003dNone before calling _post_server(). Otherwise I have to duplicate the server templates in .../servers_v21/v2.4/ directory. I guess this is not what we want?","commit_id":"5d4c5dc2682ff3df65011954f96c2bf651a523f8"}],"nova/tests/unit/api/openstack/compute/contrib/test_consoles.py":[{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"10b51702ac16121d9063afb608d29a875ea3cff3","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        body \u003d {\u0027protocol\u0027: \u0027serial\u0027, \u0027type\u0027: \u0027serial\u0027}"},{"line_number":459,"context_line":"        output \u003d self.controller.create(self.req, fakes.FAKE_UUID, body\u003dbody)"},{"line_number":460,"context_line":"        self.assertEqual({\u0027protocol\u0027: \u0027serial\u0027, \u0027type\u0027: \u0027serial\u0027,"},{"line_number":461,"context_line":"                          \u0027url\u0027: \u0027http://fake\u0027}, output)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def test_create_console_instance_not_ready(self):"},{"line_number":464,"context_line":"        handler \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a016987_a47f0516","line":461,"updated":"2015-05-29 07:40:57.000000000","message":"I don\u0027t want to pollute your review with this, but wanted to make you aware that \"serial console\" uses \"ws\"/\"wss\" as scheme name: https://bugs.launchpad.net/nova/+bug/1459943","commit_id":"4affce4672c9be0bdad25d9d4294e51313dc530b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0fbb7b455d4b150ef7bc23f9a095334b542b285a","unresolved":false,"context_lines":[{"line_number":429,"context_line":"        self.assertTrue(get_serial_console.called)"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"class ConsolesExtensionTestV25(ConsolesExtensionTestV21):"},{"line_number":433,"context_line":"    def setUp(self):"},{"line_number":434,"context_line":"        super(ConsolesExtensionTestV25, self).setUp()"},{"line_number":435,"context_line":"        self.req \u003d fakes.HTTPRequest.blank(\u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa32b979_e0f34171","line":432,"updated":"2015-06-19 07:39:06.000000000","message":"we needn\u0027t based on ConsolesExtensionTestV21, as there are apis already removed, we needn\u0027t run test in this class again.","commit_id":"7f70a0c8ce90874253c0cb5b06456b4ecd5c6a21"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"07d702e3faf1cef79298583f4c6864a19e932516","unresolved":false,"context_lines":[{"line_number":429,"context_line":"        self.assertTrue(get_serial_console.called)"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"class ConsolesExtensionTestV25(ConsolesExtensionTestV21):"},{"line_number":433,"context_line":"    def setUp(self):"},{"line_number":434,"context_line":"        super(ConsolesExtensionTestV25, self).setUp()"},{"line_number":435,"context_line":"        self.req \u003d fakes.HTTPRequest.blank(\u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa32b979_dde61cb0","line":432,"in_reply_to":"fa32b979_e0f34171","updated":"2015-06-19 13:03:20.000000000","message":"Done","commit_id":"7f70a0c8ce90874253c0cb5b06456b4ecd5c6a21"}]}
