)]}'
{"README.md":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c41f8b604fd06d0ae61531f1dc5a320c0e0c9898","unresolved":false,"context_lines":[{"line_number":3,"context_line":""},{"line_number":4,"context_line":"OpenStack Reservation Service."},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"Probably we use keystone api v3"}],"source_content_type":"text/x-gfm","patch_set":37,"id":"AAAAUH%2F%2B9A0%3D","line":6,"updated":"2014-01-20 13:22:32.000000000","message":"Finally, no need to change it here, I\u0027m doing it on my own review https://review.openstack.org/#/c/67801/\n\nYou can leave as it is","commit_id":"51e495dc0c324c70dc620b60927877ed8a58de4d"}],"climate/api/service.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1606c7d47984ae4ded7ecca238f89b03626e1395","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        :type data: dict"},{"line_number":43,"context_line":"        \"\"\""},{"line_number":44,"context_line":"        # here API should go to Keystone API v3 and create trust"},{"line_number":45,"context_line":"        trust \u003d trusts.create_trust()"},{"line_number":46,"context_line":"        trust_id \u003d trust.id"},{"line_number":47,"context_line":"        data.update({\u0027trust_id\u0027: trust_id})"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAAUH%2F%2B%2Fm0%3D","line":45,"updated":"2014-01-19 21:57:06.000000000","message":"Disagree totally ! \nAs said, this is not mandatory, and should be managed on the Manager side, not in the API.","commit_id":"7aa1d27c95cf33c945bbbbd710e9c9ccfd4cd7f4"}],"climate/manager/service.py":[{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"1eefa25521fe3ed76ca57231d78dafb14344249d","unresolved":false,"context_lines":[{"line_number":186,"context_line":"    def delete_lease(self, lease_id):"},{"line_number":187,"context_line":"        lease \u003d self.get_lease(lease_id)"},{"line_number":188,"context_line":"        keystone.create_ctx_from_trust(lease[\u0027trust_id\u0027])"},{"line_number":189,"context_line":"        for reservation in lease[\u0027reservations\u0027]:"},{"line_number":190,"context_line":"            self.plugins[reservation[\u0027resource_type\u0027]]\\"},{"line_number":191,"context_line":"                .on_end(reservation[\u0027resource_id\u0027])"},{"line_number":192,"context_line":"        db_api.lease_destroy(lease_id)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9pJ8%3D","line":189,"updated":"2013-12-09 11:42:04.000000000","message":"here we should use \u0027with\u0027 statement, I suppose.","commit_id":"7cc852f1abe1ab700eb1c888ccf54c6ce4cff4c7"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"2f6a0db0b9dfcc498399c6ca9a6df167e17002a1","unresolved":false,"context_lines":[{"line_number":186,"context_line":"    def delete_lease(self, lease_id):"},{"line_number":187,"context_line":"        lease \u003d self.get_lease(lease_id)"},{"line_number":188,"context_line":"        keystone.create_ctx_from_trust(lease[\u0027trust_id\u0027])"},{"line_number":189,"context_line":"        for reservation in lease[\u0027reservations\u0027]:"},{"line_number":190,"context_line":"            self.plugins[reservation[\u0027resource_type\u0027]]\\"},{"line_number":191,"context_line":"                .on_end(reservation[\u0027resource_id\u0027])"},{"line_number":192,"context_line":"        db_api.lease_destroy(lease_id)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9jtg%3D","line":189,"in_reply_to":"AAAATn%2F9pJ8%3D","updated":"2013-12-10 09:17:13.000000000","message":"yeap, that\u0027s a good idea","commit_id":"7cc852f1abe1ab700eb1c888ccf54c6ce4cff4c7"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"1eefa25521fe3ed76ca57231d78dafb14344249d","unresolved":false,"context_lines":[{"line_number":191,"context_line":"                .on_end(reservation[\u0027resource_id\u0027])"},{"line_number":192,"context_line":"        db_api.lease_destroy(lease_id)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def start_lease(self, lease_id, event_id):"},{"line_number":195,"context_line":"        self._basic_action(lease_id, event_id, \u0027on_start\u0027, \u0027active\u0027)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def end_lease(self, lease_id, event_id):"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9pJ0%3D","line":194,"updated":"2013-12-09 11:42:04.000000000","message":"I think here we should use trust_ctx too (like in case we need to do smth with instances on start)","commit_id":"7cc852f1abe1ab700eb1c888ccf54c6ce4cff4c7"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"2f6a0db0b9dfcc498399c6ca9a6df167e17002a1","unresolved":false,"context_lines":[{"line_number":191,"context_line":"                .on_end(reservation[\u0027resource_id\u0027])"},{"line_number":192,"context_line":"        db_api.lease_destroy(lease_id)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def start_lease(self, lease_id, event_id):"},{"line_number":195,"context_line":"        self._basic_action(lease_id, event_id, \u0027on_start\u0027, \u0027active\u0027)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def end_lease(self, lease_id, event_id):"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9jtw%3D","line":194,"in_reply_to":"AAAATn%2F9pJ0%3D","updated":"2013-12-10 09:17:13.000000000","message":"Sounds good.","commit_id":"7cc852f1abe1ab700eb1c888ccf54c6ce4cff4c7"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"1eefa25521fe3ed76ca57231d78dafb14344249d","unresolved":false,"context_lines":[{"line_number":194,"context_line":"    def start_lease(self, lease_id, event_id):"},{"line_number":195,"context_line":"        self._basic_action(lease_id, event_id, \u0027on_start\u0027, \u0027active\u0027)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def end_lease(self, lease_id, event_id):"},{"line_number":198,"context_line":"        self._basic_action(lease_id, event_id, \u0027on_end\u0027, \u0027deleted\u0027)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def _basic_action(self, lease_id, event_id, action_time,"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9pJw%3D","line":197,"updated":"2013-12-09 11:42:04.000000000","message":"the same for the end","commit_id":"7cc852f1abe1ab700eb1c888ccf54c6ce4cff4c7"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"2f6a0db0b9dfcc498399c6ca9a6df167e17002a1","unresolved":false,"context_lines":[{"line_number":194,"context_line":"    def start_lease(self, lease_id, event_id):"},{"line_number":195,"context_line":"        self._basic_action(lease_id, event_id, \u0027on_start\u0027, \u0027active\u0027)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def end_lease(self, lease_id, event_id):"},{"line_number":198,"context_line":"        self._basic_action(lease_id, event_id, \u0027on_end\u0027, \u0027deleted\u0027)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def _basic_action(self, lease_id, event_id, action_time,"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9jto%3D","line":197,"in_reply_to":"AAAATn%2F9pJw%3D","updated":"2013-12-10 09:17:13.000000000","message":"+1","commit_id":"7cc852f1abe1ab700eb1c888ccf54c6ce4cff4c7"}],"climate/service/trusts.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"84c2fc2107695147242fdea01bc02c1e67f1dd48","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 Mirantis Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F88vk%3D","line":1,"updated":"2013-12-18 13:38:47.000000000","message":"please move from climate.service to climate.utils (we need to prevent modules inflation)","commit_id":"585f8f0a94c8ab2a2c5640a47d3bd5c899174be5"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"812630f6520cab670de9796efbea8bda6ee8620d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 Mirantis Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F849U%3D","line":1,"in_reply_to":"AAAATn%2F88vk%3D","updated":"2013-12-19 05:36:51.000000000","message":"Yeap, we notice it yesterday while testing it on devstack. Forgot to fix it.","commit_id":"585f8f0a94c8ab2a2c5640a47d3bd5c899174be5"}],"climate/utils/trusts.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1606c7d47984ae4ded7ecca238f89b03626e1395","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def create_trust():"},{"line_number":25,"context_line":"    \"\"\"Creates trust via Keystone API v3 to use in plugins.\"\"\""},{"line_number":26,"context_line":"    client \u003d keystone.ClimateKeystoneClient()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    trustee_id \u003d keystone.ClimateKeystoneClient("},{"line_number":29,"context_line":"        username\u003dCONF.os_admin_username,"}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAAUH%2F%2B%2Fnc%3D","line":26,"updated":"2014-01-19 21:57:06.000000000","message":"If there is no API endpoint configured with version 3, this raises a VersionNotAvailable exception, which needs to be handled anyway.\n\nI can understand the version 3 as mandatory for supporting virtual instances reservation, but we need to handle all the cases in a safely manner.\n\nI would preferably vote for a degraded support of Climate, with no trusts, which can still works, provided the admin provided a long-running token duration...\nAs we\u0027re close to 0.1 release, OK for creating a bug and leave only trusts, but please handle the error still.","commit_id":"7aa1d27c95cf33c945bbbbd710e9c9ccfd4cd7f4"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1606c7d47984ae4ded7ecca238f89b03626e1395","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        tenant\u003dCONF.os_admin_tenant_name).user_id"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    ctx \u003d context.current()"},{"line_number":34,"context_line":"    trust \u003d client.trusts.create(trustor_user\u003dclient.user_id,"},{"line_number":35,"context_line":"                                 trustee_user\u003dtrustee_id,"},{"line_number":36,"context_line":"                                 impersonation\u003dFalse,"},{"line_number":37,"context_line":"                                 role_names\u003dctx.roles,"}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAAUH%2F%2B%2FnY%3D","line":34,"updated":"2014-01-19 21:57:06.000000000","message":"please handle the possible Exceptions here...","commit_id":"7aa1d27c95cf33c945bbbbd710e9c9ccfd4cd7f4"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1606c7d47984ae4ded7ecca238f89b03626e1395","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    ctx \u003d context.ClimateContext()"},{"line_number":52,"context_line":"    ctx.user_name \u003d CONF.os_admin_username"},{"line_number":53,"context_line":"    ctx.tenant_name \u003d CONF.os_admin_tenant_name"},{"line_number":54,"context_line":"    auth_url \u003d \"%s://%s:%s/v3\" % (CONF.os_auth_protocol,"},{"line_number":55,"context_line":"                                  CONF.os_auth_host,"},{"line_number":56,"context_line":"                                  CONF.os_auth_port)"},{"line_number":57,"context_line":"    client \u003d keystone.ClimateKeystoneClient("}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAAUH%2F%2B%2Fm4%3D","line":54,"updated":"2014-01-19 21:57:06.000000000","message":"NO NO NO !\n\nIf virtual instances need API V3, this is not the case for Physical ones, and I don\u0027t want a V3 for signing...\n\nAll this method needs handling both Keystone V2 and V3 for correct use, or if not, it would be a -2 vote for me.","commit_id":"7aa1d27c95cf33c945bbbbd710e9c9ccfd4cd7f4"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"519527e4530a73dba75f986e541b6218b134aae3","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    ctx \u003d context.ClimateContext()"},{"line_number":52,"context_line":"    ctx.user_name \u003d CONF.os_admin_username"},{"line_number":53,"context_line":"    ctx.tenant_name \u003d CONF.os_admin_tenant_name"},{"line_number":54,"context_line":"    auth_url \u003d \"%s://%s:%s/v3\" % (CONF.os_auth_protocol,"},{"line_number":55,"context_line":"                                  CONF.os_auth_host,"},{"line_number":56,"context_line":"                                  CONF.os_auth_port)"},{"line_number":57,"context_line":"    client \u003d keystone.ClimateKeystoneClient("}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAAUH%2F%2B%2Bqo%3D","line":54,"in_reply_to":"AAAAUH%2F%2B%2Fm4%3D","updated":"2014-01-20 06:40:52.000000000","message":"We can\u0027t use API v2 with trusts here, because API v2 don\u0027t know about trusts","commit_id":"7aa1d27c95cf33c945bbbbd710e9c9ccfd4cd7f4"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"da408a5c8dc680bebed2d08533bfa995883d47c2","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def create_trust():"},{"line_number":25,"context_line":"    \"\"\"Creates trust via Keystone API v3 to use in plugins.\"\"\""},{"line_number":26,"context_line":"    client \u003d keystone.ClimateKeystoneClient()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    trustee_id \u003d keystone.ClimateKeystoneClient("},{"line_number":29,"context_line":"        username\u003dCONF.os_admin_username,"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2B9HI%3D","line":26,"updated":"2014-01-20 13:05:14.000000000","message":"Please handle the VersionNotAvailable exception here in case of API V3 not available","commit_id":"51e495dc0c324c70dc620b60927877ed8a58de4d"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"d79d2a8404726b1abaf0f2df95bb01024302f54b","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def create_trust():"},{"line_number":25,"context_line":"    \"\"\"Creates trust via Keystone API v3 to use in plugins.\"\"\""},{"line_number":26,"context_line":"    client \u003d keystone.ClimateKeystoneClient()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    trustee_id \u003d keystone.ClimateKeystoneClient("},{"line_number":29,"context_line":"        username\u003dCONF.os_admin_username,"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2B8%2FU%3D","line":26,"in_reply_to":"AAAAUH%2F%2B9HI%3D","updated":"2014-01-20 13:36:22.000000000","message":"yeap, forget about it.","commit_id":"51e495dc0c324c70dc620b60927877ed8a58de4d"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"da408a5c8dc680bebed2d08533bfa995883d47c2","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        tenant\u003dCONF.os_admin_tenant_name).user_id"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    ctx \u003d context.current()"},{"line_number":34,"context_line":"    trust \u003d client.trusts.create(trustor_user\u003dclient.user_id,"},{"line_number":35,"context_line":"                                 trustee_user\u003dtrustee_id,"},{"line_number":36,"context_line":"                                 impersonation\u003dFalse,"},{"line_number":37,"context_line":"                                 role_names\u003dctx.roles,"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2B9Gs%3D","line":34,"updated":"2014-01-20 13:05:14.000000000","message":"please handle the possible exception when Keystone is failing to create the trust.\n\nIdeally, we should create our own Climate exception for rendering it correctly to the user (this method is called when creating a lease, it\u0027s API driven)","commit_id":"51e495dc0c324c70dc620b60927877ed8a58de4d"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"d79d2a8404726b1abaf0f2df95bb01024302f54b","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        tenant\u003dCONF.os_admin_tenant_name).user_id"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    ctx \u003d context.current()"},{"line_number":34,"context_line":"    trust \u003d client.trusts.create(trustor_user\u003dclient.user_id,"},{"line_number":35,"context_line":"                                 trustee_user\u003dtrustee_id,"},{"line_number":36,"context_line":"                                 impersonation\u003dFalse,"},{"line_number":37,"context_line":"                                 role_names\u003dctx.roles,"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2B8%2FQ%3D","line":34,"in_reply_to":"AAAAUH%2F%2B9Gs%3D","updated":"2014-01-20 13:36:22.000000000","message":"sure","commit_id":"51e495dc0c324c70dc620b60927877ed8a58de4d"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"da408a5c8dc680bebed2d08533bfa995883d47c2","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    auth_url \u003d \"%s://%s:%s/v3\" % (CONF.os_auth_protocol,"},{"line_number":55,"context_line":"                                  CONF.os_auth_host,"},{"line_number":56,"context_line":"                                  CONF.os_auth_port)"},{"line_number":57,"context_line":"    client \u003d keystone.ClimateKeystoneClient("},{"line_number":58,"context_line":"        password\u003dCONF.os_admin_password,"},{"line_number":59,"context_line":"        trust_id\u003dtrust_id,"},{"line_number":60,"context_line":"        auth_url\u003dauth_url,"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2B9GQ%3D","line":57,"updated":"2014-01-20 13:05:14.000000000","message":"Manage the VersionNotAvailable exception for graceful exit","commit_id":"51e495dc0c324c70dc620b60927877ed8a58de4d"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"d79d2a8404726b1abaf0f2df95bb01024302f54b","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    auth_url \u003d \"%s://%s:%s/v3\" % (CONF.os_auth_protocol,"},{"line_number":55,"context_line":"                                  CONF.os_auth_host,"},{"line_number":56,"context_line":"                                  CONF.os_auth_port)"},{"line_number":57,"context_line":"    client \u003d keystone.ClimateKeystoneClient("},{"line_number":58,"context_line":"        password\u003dCONF.os_admin_password,"},{"line_number":59,"context_line":"        trust_id\u003dtrust_id,"},{"line_number":60,"context_line":"        auth_url\u003dauth_url,"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2B8%2FI%3D","line":57,"in_reply_to":"AAAAUH%2F%2B9GQ%3D","updated":"2014-01-20 13:36:22.000000000","message":"sure","commit_id":"51e495dc0c324c70dc620b60927877ed8a58de4d"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3141df27599817131a4aff2ce9180d9192d87e79","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    ctx.auth_token \u003d client.auth_token"},{"line_number":65,"context_line":"    ctx.service_catalog \u003d\\"},{"line_number":66,"context_line":"        client.service_catalog.catalog[\u0027catalog\u0027]"},{"line_number":67,"context_line":"    ctx.tenant_id \u003d client.tenant_id"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    # use \u0027with ctx\u0027 statement in the place you need context from trust"}],"source_content_type":"text/x-python","patch_set":43,"id":"AAAAUH%2F%2Bo%2FQ%3D","line":66,"updated":"2014-01-23 16:51:17.000000000","message":"smaaaaall note : the \\ was not necessary as the line is less than 80 chars","commit_id":"bdae5ea3e79478ba230b430fb4c372e1f1cebacb"}]}
