)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"e990ecdaa84cfff88a64ef548d95630c9bd0c55e","unresolved":false,"context_lines":[{"line_number":11,"context_line":"Also removes policy check from compute api. And give default rules"},{"line_number":12,"context_line":"for v3 policy check."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Partial implements bp v3-api-policy"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I6c4f1c677b64015c61440f9db941d1ab9cf77b48"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAATn%2F8uYA%3D","line":14,"updated":"2013-12-21 03:30:15.000000000","message":"Partially implements bp v3-api-policy","commit_id":"5e2be03e13efad03816403cf9970dca08d13bfa6"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3e027f68ff1e7657ab6e6b95dab8eb739385d9cf","unresolved":false,"context_lines":[{"line_number":11,"context_line":"Also removes policy check from compute api. And give default rules"},{"line_number":12,"context_line":"for v3 policy check."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Partial implements bp v3-api-policy"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I6c4f1c677b64015c61440f9db941d1ab9cf77b48"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAATn%2F8uJ8%3D","line":14,"in_reply_to":"AAAATn%2F8uYA%3D","updated":"2013-12-21 06:31:38.000000000","message":"thanks","commit_id":"5e2be03e13efad03816403cf9970dca08d13bfa6"}],"nova/api/openstack/extensions.py":[{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"d5ef403256133052e0db8b8eaf423a105bafe241","unresolved":false,"context_lines":[{"line_number":408,"context_line":"    return authorize"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"def check_compute_policy(context, action, target, scope\u003d\u0027compute\u0027):"},{"line_number":412,"context_line":"    _action \u003d \u0027%s:%s\u0027 % (scope, action)"},{"line_number":413,"context_line":"    nova.policy.enforce(context, _action, target)"},{"line_number":414,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fvuc%3D","line":411,"updated":"2014-01-02 14:44:57.000000000","message":"I‘m confused why add this method. Do I miss something? \n\nAs you mentioned in the commit message, you add core_authorizer in order to\ndistinguish core and extension api.\n\nBut why did you add this method?\n\nI think there are just core api and extensions api,\nthe above three authorizers are enough. (maybe will need add soft_core_authorizer in future).\n\nBut I\u0027m not sure when we should use this one , we can use extension_authorizer instead(all of them are implemented by nova.policy.enforce)\n\nSo when it\u0027s core api, we use core_authorizer,  when it\u0027s extension api, we use extension_authorizer. It makes more sense, I think.","commit_id":"b93624bae3a4fe3229617438cd8ce8acb80beffa"},{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"3d51a3781f364ec6f41b4f99d3cd370606eca384","unresolved":false,"context_lines":[{"line_number":408,"context_line":"    return authorize"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"def check_compute_policy(context, action, target, scope\u003d\u0027compute\u0027):"},{"line_number":412,"context_line":"    _action \u003d \u0027%s:%s\u0027 % (scope, action)"},{"line_number":413,"context_line":"    nova.policy.enforce(context, _action, target)"},{"line_number":414,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FtCg%3D","line":411,"in_reply_to":"AAAAT3%2F%2Ftew%3D","updated":"2014-01-03 06:15:14.000000000","message":"Yes, we must keep compatibility for v2 :(.\n\nI wanted to suggest we can handle this in extension_authorizer by adding extra parameter. \nBut it seems that still can\u0027t make\nthe code clean. And this method shouldn\u0027t be used in nova v3 api. \nSo It\u0027s OK for me, currently.","commit_id":"b93624bae3a4fe3229617438cd8ce8acb80beffa"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c3dd128c84de0b49391137997245690c4b84fe5c","unresolved":false,"context_lines":[{"line_number":408,"context_line":"    return authorize"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"def check_compute_policy(context, action, target, scope\u003d\u0027compute\u0027):"},{"line_number":412,"context_line":"    _action \u003d \u0027%s:%s\u0027 % (scope, action)"},{"line_number":413,"context_line":"    nova.policy.enforce(context, _action, target)"},{"line_number":414,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Ftew%3D","line":411,"in_reply_to":"AAAAT3%2F%2Fvuc%3D","updated":"2014-01-03 02:55:05.000000000","message":"This is used by ec2 and nova v2 api. they use \u0027compute:xxx\u0027 for keep compatibility.\n\nhttps://review.openstack.org/#/c/63566/7/nova/api/openstack/compute/contrib/server_start_stop.py\nhttps://review.openstack.org/#/c/63566/7/nova/api/ec2/cloud.py","commit_id":"b93624bae3a4fe3229617438cd8ce8acb80beffa"}],"nova/tests/api/ec2/test_cloud.py":[{"author":{"_account_id":8430,"name":"Christopher Lefelhocz","email":"christopher.lefelhoc@rackspace.com","username":"leif"},"change_message_id":"98f5f47a08e64dc43aaadc04ffc17b84b849000a","unresolved":false,"context_lines":[{"line_number":2108,"context_line":"            \u0027default\u0027: common_policy.parse_rule(\u0027\u0027)"},{"line_number":2109,"context_line":"        }"},{"line_number":2110,"context_line":"        common_policy.set_rules(common_policy.Rules(rules))"},{"line_number":2111,"context_line":"        self.assertRaises(exception.PolicyNotAuthorized,"},{"line_number":2112,"context_line":"                          self.cloud.terminate_instances,"},{"line_number":2113,"context_line":"                          self.context, [instance_id])"},{"line_number":2114,"context_line":"        self._restart_compute_service()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAT3%2F%2FylM%3D","line":2111,"updated":"2013-12-31 14:57:43.000000000","message":"How is calling terminate_instances testing the start_instances policy?","commit_id":"8c5cfdc67a7ac133803c5c4f9f0ed4cc13bf0b29"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"23c825cbaeb7f1c515012ce28dafcef2e3906e9e","unresolved":false,"context_lines":[{"line_number":2108,"context_line":"            \u0027default\u0027: common_policy.parse_rule(\u0027\u0027)"},{"line_number":2109,"context_line":"        }"},{"line_number":2110,"context_line":"        common_policy.set_rules(common_policy.Rules(rules))"},{"line_number":2111,"context_line":"        self.assertRaises(exception.PolicyNotAuthorized,"},{"line_number":2112,"context_line":"                          self.cloud.terminate_instances,"},{"line_number":2113,"context_line":"                          self.context, [instance_id])"},{"line_number":2114,"context_line":"        self._restart_compute_service()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAT3%2F%2Fw4I%3D","line":2111,"in_reply_to":"AAAAT3%2F%2FylM%3D","updated":"2014-01-02 05:21:16.000000000","message":"sorry, this is mistake when I copy the code. thanks.","commit_id":"8c5cfdc67a7ac133803c5c4f9f0ed4cc13bf0b29"}],"nova/tests/api/openstack/compute/contrib/test_server_start_stop.py":[{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"eec87ef97e8462309277dbd88b2b8ba42db153ec","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        except exception.PolicyNotAuthorized as e:"},{"line_number":75,"context_line":"            self.assertIn(\u0027compute:start\u0027, e.format_message())"},{"line_number":76,"context_line":"        else:"},{"line_number":77,"context_line":"            self.fail(\"Exception PolicyNotAuthorized not raised\")"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def test_start_not_ready(self):"},{"line_number":80,"context_line":"        self.stubs.Set(db, \u0027instance_get_by_uuid\u0027, fake_instance_get)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2FkLQ%3D","line":77,"updated":"2014-01-11 01:15:14.000000000","message":"hi, Alex. assertRaises actually returns the exception raised. We can verify the message that way.\nhttp://testtools.readthedocs.org/en/latest/for-test-authors.html#improved-assertraises\n\nhttps://review.openstack.org/#/c/65071/2/nova/tests/api/openstack/compute/plugins/v3/test_shelve.py\n\nand the assert can give more formatted and detailed information than fail.","commit_id":"5b9916ba80e8ba2f584991b1016ad85d919ebf4c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ea4646d76b4ec708a209d895ffad0cad0c476978","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        except exception.PolicyNotAuthorized as e:"},{"line_number":75,"context_line":"            self.assertIn(\u0027compute:start\u0027, e.format_message())"},{"line_number":76,"context_line":"        else:"},{"line_number":77,"context_line":"            self.fail(\"Exception PolicyNotAuthorized not raised\")"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def test_start_not_ready(self):"},{"line_number":80,"context_line":"        self.stubs.Set(db, \u0027instance_get_by_uuid\u0027, fake_instance_get)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2FkJA%3D","line":77,"in_reply_to":"AAAAUH%2F%2FkLQ%3D","updated":"2014-01-11 01:44:50.000000000","message":"Ivan, thanks, I like that. I saw you update your patch, after jenkins say it ok, then I will update the patch.","commit_id":"5b9916ba80e8ba2f584991b1016ad85d919ebf4c"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"62a9887fe61e113ffff1af6148cfac77adbcde73","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        }"},{"line_number":68,"context_line":"        common_policy.set_rules(common_policy.Rules(rules))"},{"line_number":69,"context_line":"        self.stubs.Set(db, \u0027instance_get_by_uuid\u0027, fake_instance_get)"},{"line_number":70,"context_line":"        req \u003d fakes.HTTPRequestV3.blank(\u0027/servers/test_inst/action\u0027)"},{"line_number":71,"context_line":"        body \u003d dict(start\u003d\"\")"},{"line_number":72,"context_line":"        exc \u003d self.assertRaises(exception.PolicyNotAuthorized,"},{"line_number":73,"context_line":"                                self.controller._start_server,"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUX%2F%2FqQY%3D","line":70,"updated":"2014-02-11 17:23:11.000000000","message":"This should be HTTPRequest rather than HTTPRequestV3","commit_id":"1ea80be4ceb55309fec9a67958f35cf6a03552be"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"045c7999b320fc607621da05c0ade212c4e5e8ee","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        }"},{"line_number":68,"context_line":"        common_policy.set_rules(common_policy.Rules(rules))"},{"line_number":69,"context_line":"        self.stubs.Set(db, \u0027instance_get_by_uuid\u0027, fake_instance_get)"},{"line_number":70,"context_line":"        req \u003d fakes.HTTPRequestV3.blank(\u0027/servers/test_inst/action\u0027)"},{"line_number":71,"context_line":"        body \u003d dict(start\u003d\"\")"},{"line_number":72,"context_line":"        exc \u003d self.assertRaises(exception.PolicyNotAuthorized,"},{"line_number":73,"context_line":"                                self.controller._start_server,"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUX%2F%2FnZU%3D","line":70,"in_reply_to":"AAAAUX%2F%2FqQY%3D","updated":"2014-02-12 00:03:32.000000000","message":"Done","commit_id":"1ea80be4ceb55309fec9a67958f35cf6a03552be"}],"nova/tests/api/openstack/compute/plugins/v3/test_servers.py":[{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"c7d3451d88a59e959134ebda01cbb2a5eb347c22","unresolved":false,"context_lines":[{"line_number":1472,"context_line":"        body \u003d dict(stop\u003d\u0027\u0027)"},{"line_number":1473,"context_line":"        self.assertRaises(exception.PolicyNotAuthorized,"},{"line_number":1474,"context_line":"                          self.controller._stop_server,"},{"line_number":1475,"context_line":"                          req, FAKE_UUID, body)"},{"line_number":1476,"context_line":"        self.assertRaisesRegexp(exception.PolicyNotAuthorized,"},{"line_number":1477,"context_line":"                                \"compute:v3:servers:stop\","},{"line_number":1478,"context_line":"                                self.controller._stop_server,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2F0pE%3D","line":1475,"updated":"2014-01-08 02:45:21.000000000","message":"redundant?","commit_id":"a9b48ee7380882dace1c61a11f399f4c40828e52"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a35705de1d6898c8f50e9079c5e2d9aec5c9cf0e","unresolved":false,"context_lines":[{"line_number":1472,"context_line":"        body \u003d dict(stop\u003d\u0027\u0027)"},{"line_number":1473,"context_line":"        self.assertRaises(exception.PolicyNotAuthorized,"},{"line_number":1474,"context_line":"                          self.controller._stop_server,"},{"line_number":1475,"context_line":"                          req, FAKE_UUID, body)"},{"line_number":1476,"context_line":"        self.assertRaisesRegexp(exception.PolicyNotAuthorized,"},{"line_number":1477,"context_line":"                                \"compute:v3:servers:stop\","},{"line_number":1478,"context_line":"                                self.controller._stop_server,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2F0nc%3D","line":1475,"in_reply_to":"AAAAUH%2F%2F0pE%3D","updated":"2014-01-08 02:50:25.000000000","message":"oops, thanks","commit_id":"a9b48ee7380882dace1c61a11f399f4c40828e52"}],"nova/tests/api/openstack/compute/test_extensions.py":[{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"145b2343632926cbe66f76fd9a10f8470f039048","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                            target).AndRaise("},{"line_number":161,"context_line":"            exception.PolicyNotAuthorized("},{"line_number":162,"context_line":"                action\u003d\"compute_extension:used_limits_for_admin\"))"},{"line_number":163,"context_line":"        (\u0027compute\u0027, \u0027used_limits_for_admin\u0027)"},{"line_number":164,"context_line":"        self.mox.ReplayAll()"},{"line_number":165,"context_line":"        authorize \u003d base_extensions.extension_authorizer(\u0027compute\u0027,"},{"line_number":166,"context_line":"                                                        \u0027used_limits_for_admin\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2F%2BHg%3D","line":163,"updated":"2014-01-06 02:22:19.000000000","message":"unused, please clean this by the way, thanks.","commit_id":"b93624bae3a4fe3229617438cd8ce8acb80beffa"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e0437e408898f1d658350c3357bb0eefae67b8de","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                            target).AndRaise("},{"line_number":161,"context_line":"            exception.PolicyNotAuthorized("},{"line_number":162,"context_line":"                action\u003d\"compute_extension:used_limits_for_admin\"))"},{"line_number":163,"context_line":"        (\u0027compute\u0027, \u0027used_limits_for_admin\u0027)"},{"line_number":164,"context_line":"        self.mox.ReplayAll()"},{"line_number":165,"context_line":"        authorize \u003d base_extensions.extension_authorizer(\u0027compute\u0027,"},{"line_number":166,"context_line":"                                                        \u0027used_limits_for_admin\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2F9w0%3D","line":163,"in_reply_to":"AAAAUH%2F%2F%2BHg%3D","updated":"2014-01-06 06:45:31.000000000","message":"Done","commit_id":"b93624bae3a4fe3229617438cd8ce8acb80beffa"},{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"145b2343632926cbe66f76fd9a10f8470f039048","unresolved":false,"context_lines":[{"line_number":177,"context_line":"                            target).AndRaise("},{"line_number":178,"context_line":"            exception.PolicyNotAuthorized("},{"line_number":179,"context_line":"                action\u003d\"compute:used_limits_for_admin\"))"},{"line_number":180,"context_line":"        (\u0027compute\u0027, \u0027used_limits_for_admin\u0027)"},{"line_number":181,"context_line":"        self.mox.ReplayAll()"},{"line_number":182,"context_line":"        authorize \u003d base_extensions.core_authorizer(\u0027compute\u0027,"},{"line_number":183,"context_line":"                                                    \u0027used_limits_for_admin\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2F%2BHQ%3D","line":180,"updated":"2014-01-06 02:22:19.000000000","message":"this line should be removed.","commit_id":"b93624bae3a4fe3229617438cd8ce8acb80beffa"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e0437e408898f1d658350c3357bb0eefae67b8de","unresolved":false,"context_lines":[{"line_number":177,"context_line":"                            target).AndRaise("},{"line_number":178,"context_line":"            exception.PolicyNotAuthorized("},{"line_number":179,"context_line":"                action\u003d\"compute:used_limits_for_admin\"))"},{"line_number":180,"context_line":"        (\u0027compute\u0027, \u0027used_limits_for_admin\u0027)"},{"line_number":181,"context_line":"        self.mox.ReplayAll()"},{"line_number":182,"context_line":"        authorize \u003d base_extensions.core_authorizer(\u0027compute\u0027,"},{"line_number":183,"context_line":"                                                    \u0027used_limits_for_admin\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2F9ww%3D","line":180,"in_reply_to":"AAAAUH%2F%2F%2BHQ%3D","updated":"2014-01-06 06:45:31.000000000","message":"Done","commit_id":"b93624bae3a4fe3229617438cd8ce8acb80beffa"}]}
