)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"86165fa97a3fa3d517c10f66791875b10c9a14e8","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds get_console_connect_info API"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Blueprint: hyper-v-rdp-console"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Currently graphical console access to Nova instances is limited to clients"},{"line_number":12,"context_line":"which are part of Nova itself (novnc, xvpvnc, spice-html5)."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAQ3%2F%2F%2FNc%3D","line":9,"updated":"2013-08-11 19:49:46.000000000","message":"Ah, I see the blueprint is up here, I was looking for it toward the bottom above the change id.","commit_id":"8e48c824b58ce3717bda84fdc6966603397e38c2"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"2312ae6ee93b831ab16cf8424b97f43eb34b733a","unresolved":false,"context_lines":[{"line_number":22,"context_line":"check_token private API. This allows external clients to obtain the"},{"line_number":23,"context_line":"necessary protocol connection information by providing a token"},{"line_number":24,"context_line":"previously obtained with calls to get_vnc_console, get_spice_console"},{"line_number":25,"context_line":"or get_rdp_console."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Includes V2 and V3 API implementations."},{"line_number":28,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"AAAAUH%2F%2Bi%2BA%3D","line":25,"updated":"2014-01-24 14:54:58.000000000","message":"I think there\u0027s a question to be asked about whether we realy want to support this or not. \n\nThe server side web sockets proxy impl we use isn\u0027t really specific to VNC or SPICE protocol at all. I think it is desirable that we use same web sockets proxy impl for RDP too, so we have a consistent deployment story for this regardless of protocol.","commit_id":"10d1288e840346490a4279098aed536e265e3d10"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"93c8fdee2627f96d28705b50e4630926891bc0e2","unresolved":false,"context_lines":[{"line_number":22,"context_line":"check_token private API. This allows external clients to obtain the"},{"line_number":23,"context_line":"necessary protocol connection information by providing a token"},{"line_number":24,"context_line":"previously obtained with calls to get_vnc_console, get_spice_console"},{"line_number":25,"context_line":"or get_rdp_console."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Includes V2 and V3 API implementations."},{"line_number":28,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"AAAAUH%2F%2Bi70%3D","line":25,"in_reply_to":"AAAAUH%2F%2Bi%2BA%3D","updated":"2014-01-24 15:00:58.000000000","message":"Might not be protocol specific, but:\n\n1) Perfomance is a very important topic for the protocol used over the websockets. A solution that optimizes performance and supports any protocol (starting with VNC and RDP) is unfeasible.\n\n2) For RDP, the only available solution is FreeRDP which is definitely not using the current Nova websocket API.\n\n3) Denying the users the opportunity to use whatever remote technology solution they want is IMO not a good idea.\n\nThis topic has also been discussed and agreed at least since Havana.","commit_id":"10d1288e840346490a4279098aed536e265e3d10"}],"doc/api_samples/os-console-auth-tokens/server-post-req.json":[{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"de53699214f6a3f9da1796ede8bf546bb19f9b0e","unresolved":false,"context_lines":[{"line_number":13,"context_line":"            }"},{"line_number":14,"context_line":"        ]"},{"line_number":15,"context_line":"    }"},{"line_number":16,"context_line":"}"}],"source_content_type":"application/json","patch_set":38,"id":"AAAAU3%2F%2FzA0%3D","line":16,"updated":"2014-02-24 18:34:41.000000000","message":"What are all of the server post samples for?","commit_id":"d8bd4f4333d44d2f4f7354481a93ca75a5ea7ba0"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"84da279f8c79dce32d6cd8aeeb3f9315f6f3dd92","unresolved":false,"context_lines":[{"line_number":13,"context_line":"            }"},{"line_number":14,"context_line":"        ]"},{"line_number":15,"context_line":"    }"},{"line_number":16,"context_line":"}"}],"source_content_type":"application/json","patch_set":38,"id":"AAAAU3%2F%2Fy8c%3D","line":16,"in_reply_to":"AAAAU3%2F%2FzA0%3D","updated":"2014-02-24 18:43:08.000000000","message":"They come from the templates, as the integrated tests create a server, get an RDP console and then obtain the console auth token.\n\nBy wondering if those extra samples needed to be included in the doc/api_samples, I noticed that the os-consoles API does the same: https://github.com/openstack/nova/tree/e638a8f2ecdb0035b25aca6e8867c732296c0782/doc/api_samples/os-consoles","commit_id":"d8bd4f4333d44d2f4f7354481a93ca75a5ea7ba0"}],"etc/nova/policy.json":[{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"53a14f69abde85aafd59dd246dd6d6eef9842765","unresolved":false,"context_lines":[{"line_number":244,"context_line":"    \"compute_extension:v3:os-migrations:index\": \"rule:admin_api\","},{"line_number":245,"context_line":"    \"compute_extension:v3:os-migrations:discoverable\": \"\","},{"line_number":246,"context_line":"    \"compute_extension:console_auth_tokens\": \"\","},{"line_number":247,"context_line":"    \"compute_extension:v3:console-auth-tokens\": \"\","},{"line_number":248,"context_line":""},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    \"volume:create\": \"\","}],"source_content_type":"application/json","patch_set":17,"id":"AAAATH%2F%2FMxQ%3D","line":247,"updated":"2013-10-21 15:07:57.000000000","message":"discoverable?","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"3246c12979cda24afd5c48a5292999428a896d7a","unresolved":false,"context_lines":[{"line_number":244,"context_line":"    \"compute_extension:v3:os-migrations:index\": \"rule:admin_api\","},{"line_number":245,"context_line":"    \"compute_extension:v3:os-migrations:discoverable\": \"\","},{"line_number":246,"context_line":"    \"compute_extension:console_auth_tokens\": \"\","},{"line_number":247,"context_line":"    \"compute_extension:v3:console-auth-tokens\": \"\","},{"line_number":248,"context_line":""},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    \"volume:create\": \"\","}],"source_content_type":"application/json","patch_set":17,"id":"AAAATX%2F%2F%2F6k%3D","line":247,"in_reply_to":"AAAATH%2F%2FMxQ%3D","updated":"2013-10-23 04:50:00.000000000","message":"still why this extension v3 version isn\u0027t discoverable?","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"936e783bfe636a052d5cbe3b4ae023cba8ad304a","unresolved":false,"context_lines":[{"line_number":244,"context_line":"    \"compute_extension:v3:os-migrations:index\": \"rule:admin_api\","},{"line_number":245,"context_line":"    \"compute_extension:v3:os-migrations:discoverable\": \"\","},{"line_number":246,"context_line":"    \"compute_extension:console_auth_tokens\": \"\","},{"line_number":247,"context_line":"    \"compute_extension:v3:console-auth-tokens\": \"\","},{"line_number":248,"context_line":""},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    \"volume:create\": \"\","}],"source_content_type":"application/json","patch_set":17,"id":"AAAATX%2F%2F%2BXY%3D","line":247,"in_reply_to":"AAAATX%2F%2F%2F6k%3D","updated":"2013-10-23 13:17:47.000000000","message":"Done","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"50bb86acc81108067ac4a8c1562422b4e038ed8d","unresolved":false,"context_lines":[{"line_number":257,"context_line":"    \"compute_extension:os-assisted-volume-snapshots:create\": \"rule:admin_api\","},{"line_number":258,"context_line":"    \"compute_extension:os-assisted-volume-snapshots:delete\": \"rule:admin_api\","},{"line_number":259,"context_line":"    \"compute_extension:console_auth_tokens\": \"\","},{"line_number":260,"context_line":"    \"compute_extension:v3:console-auth-tokens\": \"\","},{"line_number":261,"context_line":"    \"compute_extension:v3:console-auth-tokens:discoverable\": \"\","},{"line_number":262,"context_line":""},{"line_number":263,"context_line":""}],"source_content_type":"application/json","patch_set":34,"id":"AAAAUX%2F%2BWtU%3D","line":260,"updated":"2014-02-21 17:04:14.000000000","message":"Looks like you should limit this to admin only by default","commit_id":"dcb6d68710988c44fe3989d60653cd48e7c2919b"}],"nova/api/openstack/compute/contrib/console_auth_tokens.py":[{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"53a14f69abde85aafd59dd246dd6d6eef9842765","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        token \u003d id"},{"line_number":41,"context_line":"        connect_info \u003d self._consoleauth_rpcapi.check_token(context, token)"},{"line_number":42,"context_line":"        if not connect_info:"},{"line_number":43,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003d_(\"Invalid Token\"))"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        return {\u0027console\u0027:"},{"line_number":46,"context_line":"                dict([(i, connect_info[i])"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATH%2F%2FMxo%3D","line":43,"updated":"2013-10-21 15:07:57.000000000","message":"ditto","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"3246c12979cda24afd5c48a5292999428a896d7a","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        token \u003d id"},{"line_number":41,"context_line":"        connect_info \u003d self._consoleauth_rpcapi.check_token(context, token)"},{"line_number":42,"context_line":"        if not connect_info:"},{"line_number":43,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003d_(\"Invalid Token\"))"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        return {\u0027console\u0027:"},{"line_number":46,"context_line":"                dict([(i, connect_info[i])"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATX%2F%2F%2F8M%3D","line":43,"in_reply_to":"AAAATH%2F%2FMsk%3D","updated":"2013-10-23 04:50:00.000000000","message":"*invalid* doesn\u0027t sounds like not found very much IMHO, but it\u0027s not a big deal.","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"b3bc51831f58be5631c66c66de8afc71e736c6a6","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        token \u003d id"},{"line_number":41,"context_line":"        connect_info \u003d self._consoleauth_rpcapi.check_token(context, token)"},{"line_number":42,"context_line":"        if not connect_info:"},{"line_number":43,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003d_(\"Invalid Token\"))"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        return {\u0027console\u0027:"},{"line_number":46,"context_line":"                dict([(i, connect_info[i])"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATH%2F%2FMsk%3D","line":43,"in_reply_to":"AAAATH%2F%2FMxo%3D","updated":"2013-10-21 15:25:13.000000000","message":"No, the 404 is wanted as is. The given token was not found.\n\nPlease use \"ditto\" for comments in the same file only or previous files in the list, or it\u0027d be difficult to track the source.","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"4a21f30897b9572bdc7158eac302defa3fd469f6","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        token \u003d id"},{"line_number":41,"context_line":"        connect_info \u003d self._consoleauth_rpcapi.check_token(context, token)"},{"line_number":42,"context_line":"        if not connect_info:"},{"line_number":43,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003d_(\"Invalid Token\"))"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        return {\u0027console\u0027:"},{"line_number":46,"context_line":"                dict([(i, connect_info[i])"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATX%2F%2F%2BRw%3D","line":43,"in_reply_to":"AAAATX%2F%2F%2BXA%3D","updated":"2013-10-23 13:35:19.000000000","message":"that would be great.","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"936e783bfe636a052d5cbe3b4ae023cba8ad304a","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        token \u003d id"},{"line_number":41,"context_line":"        connect_info \u003d self._consoleauth_rpcapi.check_token(context, token)"},{"line_number":42,"context_line":"        if not connect_info:"},{"line_number":43,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003d_(\"Invalid Token\"))"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        return {\u0027console\u0027:"},{"line_number":46,"context_line":"                dict([(i, connect_info[i])"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATX%2F%2F%2BXA%3D","line":43,"in_reply_to":"AAAATX%2F%2F%2F8M%3D","updated":"2013-10-23 13:17:47.000000000","message":"What about keeping the 404 and change the message to \"Token not found\"?","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"89585e50e7075135e7fabbfa229e15d2e0049894","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        if console_type !\u003d \"rdp-html5\":"},{"line_number":45,"context_line":"            raise webob.exc.HTTPUnauthorized("},{"line_number":46,"context_line":"                explanation\u003d_(\"The requested console type details are not \""},{"line_number":47,"context_line":"                              \"accessible\"))"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        return {\u0027console\u0027:"},{"line_number":50,"context_line":"                dict([(i, connect_info[i])"}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAAUX%2F%2BRzM%3D","line":47,"updated":"2014-02-22 16:19:33.000000000","message":"Yep, this works for me","commit_id":"b857193314c184d3ceb5ee1543804cc9dec18b88"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"de53699214f6a3f9da1796ede8bf546bb19f9b0e","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        controller \u003d ConsoleAuthTokensController()"},{"line_number":67,"context_line":"        ext \u003d extensions.ResourceExtension(\u0027os-console-auth-tokens\u0027,"},{"line_number":68,"context_line":"                                           controller,"},{"line_number":69,"context_line":"                                           member_actions\u003d{\u0027action\u0027: \u0027POST\u0027})"},{"line_number":70,"context_line":"        return [ext]"}],"source_content_type":"text/x-python","patch_set":38,"id":"AAAAU3%2F%2FzBI%3D","line":69,"updated":"2014-02-24 18:34:41.000000000","message":"It looks like this be GET instead of POST.  This doesn\u0027t appear to be using the body for anything.","commit_id":"d8bd4f4333d44d2f4f7354481a93ca75a5ea7ba0"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"84da279f8c79dce32d6cd8aeeb3f9315f6f3dd92","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        controller \u003d ConsoleAuthTokensController()"},{"line_number":67,"context_line":"        ext \u003d extensions.ResourceExtension(\u0027os-console-auth-tokens\u0027,"},{"line_number":68,"context_line":"                                           controller,"},{"line_number":69,"context_line":"                                           member_actions\u003d{\u0027action\u0027: \u0027POST\u0027})"},{"line_number":70,"context_line":"        return [ext]"}],"source_content_type":"text/x-python","patch_set":38,"id":"AAAAU3%2F%2Fy7w%3D","line":69,"in_reply_to":"AAAAU3%2F%2FzBI%3D","updated":"2014-02-24 18:43:08.000000000","message":"Being an action, the body is used by the request.","commit_id":"d8bd4f4333d44d2f4f7354481a93ca75a5ea7ba0"}],"nova/api/openstack/compute/plugins/v3/console_auth_tokens.py":[{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"53a14f69abde85aafd59dd246dd6d6eef9842765","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        connect_info \u003d self._consoleauth_rpcapi.check_token(context, token)"},{"line_number":48,"context_line":"        if not connect_info:"},{"line_number":49,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003d_(\"Invalid Token\"))"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        return {\u0027console\u0027:"},{"line_number":52,"context_line":"                dict([(i, connect_info[i])"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATH%2F%2FMx0%3D","line":49,"updated":"2013-10-21 15:07:57.000000000","message":"why invlid token raise 404? it should be BadRequest, right?","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"3246c12979cda24afd5c48a5292999428a896d7a","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        connect_info \u003d self._consoleauth_rpcapi.check_token(context, token)"},{"line_number":48,"context_line":"        if not connect_info:"},{"line_number":49,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003d_(\"Invalid Token\"))"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        return {\u0027console\u0027:"},{"line_number":52,"context_line":"                dict([(i, connect_info[i])"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATX%2F%2F%2F6s%3D","line":49,"in_reply_to":"AAAATH%2F%2FMsc%3D","updated":"2013-10-23 04:50:00.000000000","message":"*invalid* doesn\u0027t sounds like not found very much IMHO, but it\u0027s not a big deal.","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"b3bc51831f58be5631c66c66de8afc71e736c6a6","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        connect_info \u003d self._consoleauth_rpcapi.check_token(context, token)"},{"line_number":48,"context_line":"        if not connect_info:"},{"line_number":49,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003d_(\"Invalid Token\"))"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        return {\u0027console\u0027:"},{"line_number":52,"context_line":"                dict([(i, connect_info[i])"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATH%2F%2FMsc%3D","line":49,"in_reply_to":"AAAATH%2F%2FMx0%3D","updated":"2013-10-21 15:25:13.000000000","message":"No, the 404 is wanted as is. The given token was not found.","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"936e783bfe636a052d5cbe3b4ae023cba8ad304a","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        connect_info \u003d self._consoleauth_rpcapi.check_token(context, token)"},{"line_number":48,"context_line":"        if not connect_info:"},{"line_number":49,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003d_(\"Invalid Token\"))"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        return {\u0027console\u0027:"},{"line_number":52,"context_line":"                dict([(i, connect_info[i])"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATX%2F%2F%2BW0%3D","line":49,"in_reply_to":"AAAATX%2F%2F%2F6s%3D","updated":"2013-10-23 13:17:47.000000000","message":"ditto","commit_id":"3f7702de24cf21649c9076b85e66042874602433"}],"nova/compute/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66bfd204eb43faaf3a6aa410a8f528cf0c960c88","unresolved":false,"context_lines":[{"line_number":2469,"context_line":"        return connect_info"},{"line_number":2470,"context_line":""},{"line_number":2471,"context_line":"    def get_console_connect_info(self, context, token):"},{"line_number":2472,"context_line":"        rpcapi \u003d consoleauth_rpcapi.ConsoleAuthAPI()"},{"line_number":2473,"context_line":"        return self.consoleauth_rpcapi.check_token(context, token\u003dtoken)"},{"line_number":2474,"context_line":""},{"line_number":2475,"context_line":"    @wrap_check_policy"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQ3%2F%2F%2FO4%3D","line":2472,"updated":"2013-08-11 18:40:13.000000000","message":"This variable isn\u0027t used.","commit_id":"e3b28d2e8735968aa1ae9f67cf5a65bd3999d58a"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"80f89ac9cca95d56302accf58a712ff1436fb072","unresolved":false,"context_lines":[{"line_number":2469,"context_line":"        return connect_info"},{"line_number":2470,"context_line":""},{"line_number":2471,"context_line":"    def get_console_connect_info(self, context, token):"},{"line_number":2472,"context_line":"        rpcapi \u003d consoleauth_rpcapi.ConsoleAuthAPI()"},{"line_number":2473,"context_line":"        return self.consoleauth_rpcapi.check_token(context, token\u003dtoken)"},{"line_number":2474,"context_line":""},{"line_number":2475,"context_line":"    @wrap_check_policy"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQ3%2F%2F%2FNo%3D","line":2472,"in_reply_to":"AAAAQ3%2F%2F%2FO4%3D","updated":"2013-08-11 19:36:48.000000000","message":"Thanks, I really missed this one.","commit_id":"e3b28d2e8735968aa1ae9f67cf5a65bd3999d58a"}],"nova/consoleauth/manager.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9d9ba235c22e13470349082a08436046a7ce83e8","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                    instance_uuid, token[\u0027port\u0027], token[\u0027console_type\u0027])"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        instance \u003d jsonutils.to_primitive(self.db.instance_get_by_uuid("},{"line_number":107,"context_line":"            context, instance_uuid))"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        return self.compute_rpcapi.validate_console_port(context,"},{"line_number":110,"context_line":"                                            instance,"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAAUH%2F9UoE%3D","line":107,"updated":"2014-02-07 18:50:35.000000000","message":"Um, what? We don\u0027t serialize things like instances in this layer. That should be done in rpcapi, if at all. I\u0027m very curious why this is suddenly needed in this patch.\n\nFurther, I would argue that if there is a need to make this serialization step now, that you should convert this to a new-world Instance object lookup and pass that instead.","commit_id":"3d6672cc6af50af96d3a4fdda062b8d8faccb577"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"c9ea4e6479cd1a577c7e15bb29584efc12dfc136","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                    instance_uuid, token[\u0027port\u0027], token[\u0027console_type\u0027])"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        instance \u003d jsonutils.to_primitive(self.db.instance_get_by_uuid("},{"line_number":107,"context_line":"            context, instance_uuid))"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        return self.compute_rpcapi.validate_console_port(context,"},{"line_number":110,"context_line":"                                            instance,"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAAUH%2F9Ugs%3D","line":107,"in_reply_to":"AAAAUH%2F9UoE%3D","updated":"2014-02-07 19:11:10.000000000","message":"The integrated tests for this patch started failing after this patch got merged, due to  serialisation issues:\n\nhttps://github.com/openstack/nova/commit/6c3f082058d4cd582d47871eadfc394e7e01b9e1 (see nova/nova/compute/rpcapi.py)\n\nThis solved the problem, but I was also wondering why a db query was performed here in the first place!","commit_id":"3d6672cc6af50af96d3a4fdda062b8d8faccb577"}],"nova/tests/api/openstack/compute/contrib/test_console_auth_tokens.py":[{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"53a14f69abde85aafd59dd246dd6d6eef9842765","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from nova.openstack.common import jsonutils"},{"line_number":22,"context_line":"from nova import test"},{"line_number":23,"context_line":"from nova.tests.api.openstack import fakes"},{"line_number":24,"context_line":"from oslo.config import cfg"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"CONF \u003d cfg.CONF"},{"line_number":27,"context_line":"CONF.import_opt(\u0027osapi_compute_ext_list\u0027, \u0027nova.api.openstack.compute.contrib\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATH%2F%2FMyY%3D","line":24,"updated":"2013-10-21 15:07:57.000000000","message":"this line should goes to third party group","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"3246c12979cda24afd5c48a5292999428a896d7a","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from nova.openstack.common import jsonutils"},{"line_number":22,"context_line":"from nova import test"},{"line_number":23,"context_line":"from nova.tests.api.openstack import fakes"},{"line_number":24,"context_line":"from oslo.config import cfg"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"CONF \u003d cfg.CONF"},{"line_number":27,"context_line":"CONF.import_opt(\u0027osapi_compute_ext_list\u0027, \u0027nova.api.openstack.compute.contrib\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATX%2F%2F%2F64%3D","line":24,"in_reply_to":"AAAATH%2F%2FId8%3D","updated":"2013-10-23 04:50:00.000000000","message":"Thanks Matt.","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"07f7a54631f88c4f63497325907803e5f7b38956","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from nova.openstack.common import jsonutils"},{"line_number":22,"context_line":"from nova import test"},{"line_number":23,"context_line":"from nova.tests.api.openstack import fakes"},{"line_number":24,"context_line":"from oslo.config import cfg"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"CONF \u003d cfg.CONF"},{"line_number":27,"context_line":"CONF.import_opt(\u0027osapi_compute_ext_list\u0027, \u0027nova.api.openstack.compute.contrib\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATH%2F%2FId8%3D","line":24,"in_reply_to":"AAAATH%2F%2FMq8%3D","updated":"2013-10-22 18:01:59.000000000","message":"Alex:\n\nhttp://docs.openstack.org/developer/hacking/#imports","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"b3bc51831f58be5631c66c66de8afc71e736c6a6","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from nova.openstack.common import jsonutils"},{"line_number":22,"context_line":"from nova import test"},{"line_number":23,"context_line":"from nova.tests.api.openstack import fakes"},{"line_number":24,"context_line":"from oslo.config import cfg"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"CONF \u003d cfg.CONF"},{"line_number":27,"context_line":"CONF.import_opt(\u0027osapi_compute_ext_list\u0027, \u0027nova.api.openstack.compute.contrib\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATH%2F%2FMq8%3D","line":24,"in_reply_to":"AAAATH%2F%2FMyY%3D","updated":"2013-10-21 15:25:13.000000000","message":"No problem for that, but can you point me to the rule that you are referring to?","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"936e783bfe636a052d5cbe3b4ae023cba8ad304a","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from nova.openstack.common import jsonutils"},{"line_number":22,"context_line":"from nova import test"},{"line_number":23,"context_line":"from nova.tests.api.openstack import fakes"},{"line_number":24,"context_line":"from oslo.config import cfg"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"CONF \u003d cfg.CONF"},{"line_number":27,"context_line":"CONF.import_opt(\u0027osapi_compute_ext_list\u0027, \u0027nova.api.openstack.compute.contrib\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATX%2F%2F%2BVY%3D","line":24,"in_reply_to":"AAAATX%2F%2F%2F64%3D","updated":"2013-10-23 13:17:47.000000000","message":"Thanks Matt. Now I got it. \"nova\" is a project import while \"oslo\" is not.\n\nMy bad, I keep on thinking that \"nova\" is not a project import as well so they should stick together, but as long as this code stays in Nova GuoHui remark is definitely correct.\n\nI wonder if we have to rework all the imports if / when we\u0027ll move the driver out from Nova. :-)","commit_id":"3f7702de24cf21649c9076b85e66042874602433"}],"nova/tests/api/openstack/compute/plugins/v3/test_console_auth_tokens.py":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"6e3dbba16dcf12aeafd93cef8154a08c0b322420","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        self.stubs.Set(consoleauth_rpcapi.ConsoleAuthAPI, \u0027check_token\u0027,"},{"line_number":51,"context_line":"                       _fake_check_token)"},{"line_number":52,"context_line":"        self.app \u003d fakes.wsgi_app_v3(init_only\u003d(\u0027console-auth-tokens\u0027,"},{"line_number":53,"context_line":"                                                \u0027console-auth-tokens\u0027))"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def _create_request(self):"},{"line_number":56,"context_line":"        body \u003d {\u0027get_console_connect_info\u0027: None}"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAASn%2F%2FuQM%3D","line":53,"updated":"2013-08-30 13:10:34.000000000","message":"shouldn\u0027t need to specify the extension twice?","commit_id":"026a8c18c1715f055064e1b48b6773ff61231d5a"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"326106da1eb60846617c2fd4cc65a2afdafc52a0","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        self.stubs.Set(consoleauth_rpcapi.ConsoleAuthAPI, \u0027check_token\u0027,"},{"line_number":51,"context_line":"                       _fake_check_token)"},{"line_number":52,"context_line":"        self.app \u003d fakes.wsgi_app_v3(init_only\u003d(\u0027console-auth-tokens\u0027,"},{"line_number":53,"context_line":"                                                \u0027console-auth-tokens\u0027))"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def _create_request(self):"},{"line_number":56,"context_line":"        body \u003d {\u0027get_console_connect_info\u0027: None}"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAASn%2F%2Fqjo%3D","line":53,"in_reply_to":"AAAASn%2F%2FuQM%3D","updated":"2013-08-31 19:24:16.000000000","message":"Done","commit_id":"026a8c18c1715f055064e1b48b6773ff61231d5a"}],"nova/tests/fake_policy.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"04c852396c110a021de15a1e6a4500cd7b64c886","unresolved":false,"context_lines":[{"line_number":295,"context_line":"    \"compute_extension:os-assisted-volume-snapshots:create\": \"\","},{"line_number":296,"context_line":"    \"compute_extension:os-assisted-volume-snapshots:delete\": \"\","},{"line_number":297,"context_line":"    \"compute_extension:console_auth_tokens\": \"is_admin:True\","},{"line_number":298,"context_line":"    \"compute_extension:v3:os-console-auth-tokens\": \"is_admin:True\","},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    \"volume:create\": \"\","},{"line_number":301,"context_line":"    \"volume:get\": \"\","}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAAVX%2F%2FuQY%3D","line":298,"updated":"2014-02-28 19:12:26.000000000","message":"Missing the discoverable bit here.","commit_id":"dd273737ae650879b8d8db2437e310eb9ed2eac2"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"b372e685d262cd72d1a784276cbe7ce48cf4cd85","unresolved":false,"context_lines":[{"line_number":295,"context_line":"    \"compute_extension:os-assisted-volume-snapshots:create\": \"\","},{"line_number":296,"context_line":"    \"compute_extension:os-assisted-volume-snapshots:delete\": \"\","},{"line_number":297,"context_line":"    \"compute_extension:console_auth_tokens\": \"is_admin:True\","},{"line_number":298,"context_line":"    \"compute_extension:v3:os-console-auth-tokens\": \"is_admin:True\","},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    \"volume:create\": \"\","},{"line_number":301,"context_line":"    \"volume:get\": \"\","}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAAVX%2F%2Ft0E%3D","line":298,"in_reply_to":"AAAAVX%2F%2FuQY%3D","updated":"2014-02-28 20:09:48.000000000","message":"Hi John, good catch!. The discoverable bit does not make sense anymore now that we marked this API as is_admin. I asked suggestions on IRC and removed it from policy.json.","commit_id":"dd273737ae650879b8d8db2437e310eb9ed2eac2"}],"nova/tests/integrated/api_samples/console-auth-tokens/get-console-connect-info-post-resp.json.tpl":[{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"53a14f69abde85aafd59dd246dd6d6eef9842765","unresolved":false,"context_lines":[{"line_number":2,"context_line":"    \"console\": {"},{"line_number":3,"context_line":"        \"instance_uuid\": \"%(id)s\","},{"line_number":4,"context_line":"        \"host\": \"%(host)s\","},{"line_number":5,"context_line":"        \"port\": %(port)s,"},{"line_number":6,"context_line":"        \"internal_access_path\": \"%(internal_access_path)s\""},{"line_number":7,"context_line":"    }"},{"line_number":8,"context_line":"}"}],"source_content_type":"text/x-smarty","patch_set":17,"id":"AAAATH%2F%2FM08%3D","line":5,"updated":"2013-10-21 15:07:57.000000000","message":"\"%(port)s\"","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"b3bc51831f58be5631c66c66de8afc71e736c6a6","unresolved":false,"context_lines":[{"line_number":2,"context_line":"    \"console\": {"},{"line_number":3,"context_line":"        \"instance_uuid\": \"%(id)s\","},{"line_number":4,"context_line":"        \"host\": \"%(host)s\","},{"line_number":5,"context_line":"        \"port\": %(port)s,"},{"line_number":6,"context_line":"        \"internal_access_path\": \"%(internal_access_path)s\""},{"line_number":7,"context_line":"    }"},{"line_number":8,"context_line":"}"}],"source_content_type":"text/x-smarty","patch_set":17,"id":"AAAATH%2F%2FMqg%3D","line":5,"in_reply_to":"AAAATH%2F%2FM08%3D","updated":"2013-10-21 15:25:13.000000000","message":"nope, it\u0027s a number.","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"3246c12979cda24afd5c48a5292999428a896d7a","unresolved":false,"context_lines":[{"line_number":2,"context_line":"    \"console\": {"},{"line_number":3,"context_line":"        \"instance_uuid\": \"%(id)s\","},{"line_number":4,"context_line":"        \"host\": \"%(host)s\","},{"line_number":5,"context_line":"        \"port\": %(port)s,"},{"line_number":6,"context_line":"        \"internal_access_path\": \"%(internal_access_path)s\""},{"line_number":7,"context_line":"    }"},{"line_number":8,"context_line":"}"}],"source_content_type":"text/x-smarty","patch_set":17,"id":"AAAATX%2F%2F%2F5M%3D","line":5,"in_reply_to":"AAAATH%2F%2FMqg%3D","updated":"2013-10-23 04:50:00.000000000","message":"in this case, you convinced me, other case see my comments in get-console-connect-info-post-resp.xml.tpl, thanks","commit_id":"3f7702de24cf21649c9076b85e66042874602433"}],"nova/tests/integrated/api_samples/console-auth-tokens/get-console-connect-info-post-resp.xml.tpl":[{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"53a14f69abde85aafd59dd246dd6d6eef9842765","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e"},{"line_number":2,"context_line":"\u003cconsole\u003e"},{"line_number":3,"context_line":"    \u003cinstance_uuid\u003e%(id)s\u003c/instance_uuid\u003e"},{"line_number":4,"context_line":"    \u003chost\u003e%(host)s\u003c/host\u003e"},{"line_number":5,"context_line":"    \u003cport\u003e%(port)s\u003c/port\u003e"},{"line_number":6,"context_line":"    \u003cinternal_access_path\u003e%(internal_access_path)s\u003c/internal_access_path\u003e"}],"source_content_type":"text/x-smarty","patch_set":17,"id":"AAAATH%2F%2FM0s%3D","line":3,"updated":"2013-10-21 15:07:57.000000000","message":"\"%(id)s\"","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"b3bc51831f58be5631c66c66de8afc71e736c6a6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e"},{"line_number":2,"context_line":"\u003cconsole\u003e"},{"line_number":3,"context_line":"    \u003cinstance_uuid\u003e%(id)s\u003c/instance_uuid\u003e"},{"line_number":4,"context_line":"    \u003chost\u003e%(host)s\u003c/host\u003e"},{"line_number":5,"context_line":"    \u003cport\u003e%(port)s\u003c/port\u003e"},{"line_number":6,"context_line":"    \u003cinternal_access_path\u003e%(internal_access_path)s\u003c/internal_access_path\u003e"}],"source_content_type":"text/x-smarty","patch_set":17,"id":"AAAATH%2F%2FMqQ%3D","line":3,"in_reply_to":"AAAATH%2F%2FM0s%3D","updated":"2013-10-21 15:25:13.000000000","message":"nope, it\u0027s a number","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"3246c12979cda24afd5c48a5292999428a896d7a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e"},{"line_number":2,"context_line":"\u003cconsole\u003e"},{"line_number":3,"context_line":"    \u003cinstance_uuid\u003e%(id)s\u003c/instance_uuid\u003e"},{"line_number":4,"context_line":"    \u003chost\u003e%(host)s\u003c/host\u003e"},{"line_number":5,"context_line":"    \u003cport\u003e%(port)s\u003c/port\u003e"},{"line_number":6,"context_line":"    \u003cinternal_access_path\u003e%(internal_access_path)s\u003c/internal_access_path\u003e"}],"source_content_type":"text/x-smarty","patch_set":17,"id":"AAAATX%2F%2F%2F50%3D","line":3,"in_reply_to":"AAAATH%2F%2FMqQ%3D","updated":"2013-10-23 04:50:00.000000000","message":"actually I am fine with either case that with or without quotation marks, but at least we should keep consistency with other template in this patch, like server-post-resp.xml.tpl.\n\nanother question, why we don\u0027t generate v3 doc?","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"936e783bfe636a052d5cbe3b4ae023cba8ad304a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e"},{"line_number":2,"context_line":"\u003cconsole\u003e"},{"line_number":3,"context_line":"    \u003cinstance_uuid\u003e%(id)s\u003c/instance_uuid\u003e"},{"line_number":4,"context_line":"    \u003chost\u003e%(host)s\u003c/host\u003e"},{"line_number":5,"context_line":"    \u003cport\u003e%(port)s\u003c/port\u003e"},{"line_number":6,"context_line":"    \u003cinternal_access_path\u003e%(internal_access_path)s\u003c/internal_access_path\u003e"}],"source_content_type":"text/x-smarty","patch_set":17,"id":"AAAATX%2F%2F%2BUw%3D","line":3,"in_reply_to":"AAAATX%2F%2F%2F50%3D","updated":"2013-10-23 13:17:47.000000000","message":"I\u0027m going to check the other templates.\nI\u0027ll check also the V3 docs!","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"53a14f69abde85aafd59dd246dd6d6eef9842765","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e"},{"line_number":2,"context_line":"\u003cconsole\u003e"},{"line_number":3,"context_line":"    \u003cinstance_uuid\u003e%(id)s\u003c/instance_uuid\u003e"},{"line_number":4,"context_line":"    \u003chost\u003e%(host)s\u003c/host\u003e"},{"line_number":5,"context_line":"    \u003cport\u003e%(port)s\u003c/port\u003e"},{"line_number":6,"context_line":"    \u003cinternal_access_path\u003e%(internal_access_path)s\u003c/internal_access_path\u003e"},{"line_number":7,"context_line":"\u003c/console\u003e"}],"source_content_type":"text/x-smarty","patch_set":17,"id":"AAAATH%2F%2FMz8%3D","line":4,"updated":"2013-10-21 15:07:57.000000000","message":"ditto","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"b3bc51831f58be5631c66c66de8afc71e736c6a6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e"},{"line_number":2,"context_line":"\u003cconsole\u003e"},{"line_number":3,"context_line":"    \u003cinstance_uuid\u003e%(id)s\u003c/instance_uuid\u003e"},{"line_number":4,"context_line":"    \u003chost\u003e%(host)s\u003c/host\u003e"},{"line_number":5,"context_line":"    \u003cport\u003e%(port)s\u003c/port\u003e"},{"line_number":6,"context_line":"    \u003cinternal_access_path\u003e%(internal_access_path)s\u003c/internal_access_path\u003e"},{"line_number":7,"context_line":"\u003c/console\u003e"}],"source_content_type":"text/x-smarty","patch_set":17,"id":"AAAATH%2F%2FMqI%3D","line":4,"in_reply_to":"AAAATH%2F%2FMz8%3D","updated":"2013-10-21 15:25:13.000000000","message":"ditto","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"53a14f69abde85aafd59dd246dd6d6eef9842765","unresolved":false,"context_lines":[{"line_number":2,"context_line":"\u003cconsole\u003e"},{"line_number":3,"context_line":"    \u003cinstance_uuid\u003e%(id)s\u003c/instance_uuid\u003e"},{"line_number":4,"context_line":"    \u003chost\u003e%(host)s\u003c/host\u003e"},{"line_number":5,"context_line":"    \u003cport\u003e%(port)s\u003c/port\u003e"},{"line_number":6,"context_line":"    \u003cinternal_access_path\u003e%(internal_access_path)s\u003c/internal_access_path\u003e"},{"line_number":7,"context_line":"\u003c/console\u003e"}],"source_content_type":"text/x-smarty","patch_set":17,"id":"AAAATH%2F%2FMzo%3D","line":5,"updated":"2013-10-21 15:07:57.000000000","message":"ditto","commit_id":"3f7702de24cf21649c9076b85e66042874602433"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"b3bc51831f58be5631c66c66de8afc71e736c6a6","unresolved":false,"context_lines":[{"line_number":2,"context_line":"\u003cconsole\u003e"},{"line_number":3,"context_line":"    \u003cinstance_uuid\u003e%(id)s\u003c/instance_uuid\u003e"},{"line_number":4,"context_line":"    \u003chost\u003e%(host)s\u003c/host\u003e"},{"line_number":5,"context_line":"    \u003cport\u003e%(port)s\u003c/port\u003e"},{"line_number":6,"context_line":"    \u003cinternal_access_path\u003e%(internal_access_path)s\u003c/internal_access_path\u003e"},{"line_number":7,"context_line":"\u003c/console\u003e"}],"source_content_type":"text/x-smarty","patch_set":17,"id":"AAAATH%2F%2FMqE%3D","line":5,"in_reply_to":"AAAATH%2F%2FMzo%3D","updated":"2013-10-21 15:25:13.000000000","message":"ditto","commit_id":"3f7702de24cf21649c9076b85e66042874602433"}]}
