)]}'
{"etc/nova/policy.json":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"fb041bd89dc74c30ce6260501758d5d0dc0bfb19","unresolved":false,"context_lines":[{"line_number":218,"context_line":"    \"compute_extension:services\": \"rule:admin_api\","},{"line_number":219,"context_line":"    \"compute_extension:v3:os-services\": \"rule:admin_api\","},{"line_number":220,"context_line":"    \"compute_extension:v3:os-services:discoverable\": \"\","},{"line_number":221,"context_line":"    \"compute_extension:v3:server-metadata\": \"\","},{"line_number":222,"context_line":"    \"compute_extension:v3:server-metadata:discoverable\": \"\","},{"line_number":223,"context_line":"    \"compute_extension:v3:servers:discoverable\": \"\","},{"line_number":224,"context_line":"    \"compute_extension:shelve\": \"\","}],"source_content_type":"application/json","patch_set":2,"id":"AAAAT3%2F%2Fv2U%3D","line":221,"updated":"2014-01-02 13:20:58.000000000","message":"how about use separated policy rule for each action?","commit_id":"d1545c6e8b0b0da46799c6d6108998d54ede3429"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a61eb8c729e128623363b1b5a6e3cc0eaef36ad7","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    \"compute:get_all_tenants\": \"\","},{"line_number":14,"context_line":"    \"compute:start\": \"rule:admin_or_owner\","},{"line_number":15,"context_line":"    \"compute:stop\": \"rule:admin_or_owner\","},{"line_number":16,"context_line":"    \"compute:get_instance_metadata\": \"\","},{"line_number":17,"context_line":"    \"compute:update_instance_metadata\": \"\","},{"line_number":18,"context_line":"    \"compute:delete_instance_metadata\": \"\","},{"line_number":19,"context_line":"    \"compute:unlock_override\": \"rule:admin_api\","}],"source_content_type":"application/json","patch_set":3,"id":"AAAAUH%2F%2F0lo%3D","line":16,"updated":"2014-01-08 03:01:31.000000000","message":"this should be \"compute:get_instance_metadata\": \"rule:admin_or_owner\",\n\nempty string means pass the check.","commit_id":"cb7427570d65acb0994562ca3fec12bad57c7ca4"}],"nova/api/openstack/compute/plugins/v3/server_metadata.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6d3aafb181bdb86ccc24a26dae03240ebb00723c","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":89,"context_line":"        metadata \u003d body[\u0027metadata\u0027]"},{"line_number":90,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        new_metadata \u003d self._update_instance_metadata(context,"},{"line_number":93,"context_line":"                                                      server_id,"},{"line_number":94,"context_line":"                                                      metadata,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2F884%3D","side":"PARENT","line":91,"updated":"2014-01-06 09:39:18.000000000","message":"we shouldn\u0027t touch this line.","commit_id":"8c5cfdc67a7ac133803c5c4f9f0ed4cc13bf0b29"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"fb041bd89dc74c30ce6260501758d5d0dc0bfb19","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from nova.openstack.common.gettextutils import _"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"ALIAS \u003d \"server-metadata\""},{"line_number":29,"context_line":"authorizer \u003d extensions.extension_authorizer(\u0027compute\u0027, \u0027v3:\u0027 + ALIAS)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# NOTE(cyeoh): We cannot use the metadata serializers from"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAT3%2F%2Fv5o%3D","line":29,"updated":"2014-01-02 13:20:58.000000000","message":"We should use \u0027extensions.core_authorizer\u0027. for core api, we use \u0027compute:v3:servers:xxx\u0027","commit_id":"d1545c6e8b0b0da46799c6d6108998d54ede3429"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"fb041bd89dc74c30ce6260501758d5d0dc0bfb19","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    def _get_metadata(self, context, server_id):"},{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            server \u003d self.compute_api.get(context, server_id)"},{"line_number":67,"context_line":"            authorizer(context)"},{"line_number":68,"context_line":"            meta \u003d self.compute_api.get_instance_metadata(context, server)"},{"line_number":69,"context_line":"        except exception.InstanceNotFound:"},{"line_number":70,"context_line":"            msg \u003d _(\u0027Server does not exist\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAT3%2F%2Fv2Q%3D","line":67,"updated":"2014-01-02 13:20:58.000000000","message":"how about check the real target? authorizer(context, server)","commit_id":"d1545c6e8b0b0da46799c6d6108998d54ede3429"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"c31732c5cc83b4f458100b64a3eaf8e223b6c1cb","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    def _get_metadata(self, context, server_id):"},{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            server \u003d self.compute_api.get(context, server_id)"},{"line_number":67,"context_line":"            authorizer(context)"},{"line_number":68,"context_line":"            meta \u003d self.compute_api.get_instance_metadata(context, server)"},{"line_number":69,"context_line":"        except exception.InstanceNotFound:"},{"line_number":70,"context_line":"            msg \u003d _(\u0027Server does not exist\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2F9FM%3D","line":67,"in_reply_to":"AAAAT3%2F%2Fv2Q%3D","updated":"2014-01-06 09:09:11.000000000","message":"@Alex, Should i move the line \"server \u003d self.compute_api.get(context, server_id)\" to API action to separated policy rule for each action.. authorizer(context, server, \"index\")","commit_id":"d1545c6e8b0b0da46799c6d6108998d54ede3429"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"f5fb798ba64a85fa9f25d58d6dcc3fe3db102a1b","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    def _get_metadata(self, context, server_id):"},{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            server \u003d self.compute_api.get(context, server_id)"},{"line_number":67,"context_line":"            authorizer(context)"},{"line_number":68,"context_line":"            meta \u003d self.compute_api.get_instance_metadata(context, server)"},{"line_number":69,"context_line":"        except exception.InstanceNotFound:"},{"line_number":70,"context_line":"            msg \u003d _(\u0027Server does not exist\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2F87Y%3D","line":67,"in_reply_to":"AAAAUH%2F%2F89E%3D","updated":"2014-01-06 09:50:20.000000000","message":"@Alex, how about I don\u0027t move it, just use authorizer(context, action\u003d\"index\")? which one is better?","commit_id":"d1545c6e8b0b0da46799c6d6108998d54ede3429"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6d3aafb181bdb86ccc24a26dae03240ebb00723c","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    def _get_metadata(self, context, server_id):"},{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            server \u003d self.compute_api.get(context, server_id)"},{"line_number":67,"context_line":"            authorizer(context)"},{"line_number":68,"context_line":"            meta \u003d self.compute_api.get_instance_metadata(context, server)"},{"line_number":69,"context_line":"        except exception.InstanceNotFound:"},{"line_number":70,"context_line":"            msg \u003d _(\u0027Server does not exist\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2F89E%3D","line":67,"in_reply_to":"AAAAUH%2F%2F9FM%3D","updated":"2014-01-06 09:39:18.000000000","message":"yea, I think so","commit_id":"d1545c6e8b0b0da46799c6d6108998d54ede3429"}],"nova/compute/api.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7706f05c8f57a1fe7e7cf93c8351c1b98c6adae8","unresolved":false,"context_lines":[{"line_number":2867,"context_line":"                                                   sort_dir\u003d\u0027desc\u0027)"},{"line_number":2868,"context_line":"        for instance in instances:"},{"line_number":2869,"context_line":"            try:"},{"line_number":2870,"context_line":"                check_policy(context, \u0027get_all_instance_%s\u0027 % metadata_type,"},{"line_number":2871,"context_line":"                             instance)"},{"line_number":2872,"context_line":"                metadata \u003d instance.get(metadata_type, {})"},{"line_number":2873,"context_line":"                for filt in search_filts:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUX%2F%2B6Wo%3D","line":2870,"updated":"2014-02-18 08:57:47.000000000","message":"There is an hiding policy check :) Sorry, I missed from previous review.","commit_id":"02c82393f0d5387e6c220dc397521f52efc70f2c"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"e9f69e8a6cf97725e4a5021dfc462668232ccf3a","unresolved":false,"context_lines":[{"line_number":2867,"context_line":"                                                   sort_dir\u003d\u0027desc\u0027)"},{"line_number":2868,"context_line":"        for instance in instances:"},{"line_number":2869,"context_line":"            try:"},{"line_number":2870,"context_line":"                check_policy(context, \u0027get_all_instance_%s\u0027 % metadata_type,"},{"line_number":2871,"context_line":"                             instance)"},{"line_number":2872,"context_line":"                metadata \u003d instance.get(metadata_type, {})"},{"line_number":2873,"context_line":"                for filt in search_filts:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUX%2F%2B6SU%3D","line":2870,"in_reply_to":"AAAAUX%2F%2B6Wo%3D","updated":"2014-02-18 08:59:59.000000000","message":"It\u0027s my fault :) thanks","commit_id":"02c82393f0d5387e6c220dc397521f52efc70f2c"}],"nova/tests/api/ec2/test_cloud.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"42a2548d885bdf3436c6faac1813b93249d75a5c","unresolved":false,"context_lines":[{"line_number":2793,"context_line":"                common_policy.parse_rule(\"project_id:non_fake\"),"},{"line_number":2794,"context_line":"            \u0027compute:get\u0027: common_policy.parse_rule(\u0027\u0027),"},{"line_number":2795,"context_line":"            \u0027compute:update_instance_metadata\u0027:"},{"line_number":2796,"context_line":"                common_policy.parse_rule(\u0027\u0027),"},{"line_number":2797,"context_line":"            \u0027compute: get_instance_metadata\u0027:"},{"line_number":2798,"context_line":"                common_policy.parse_rule(\u0027\u0027)"},{"line_number":2799,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BnmU%3D","line":2796,"updated":"2014-02-20 07:08:18.000000000","message":"nit, compute:update_instance_metadata is needless?","commit_id":"46bde9b50b3a27980a1bdf3193aac2d264c2480a"}],"nova/tests/api/openstack/compute/test_server_metadata.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a61eb8c729e128623363b1b5a6e3cc0eaef36ad7","unresolved":false,"context_lines":[{"line_number":530,"context_line":"        rules \u003d {"},{"line_number":531,"context_line":"            \"compute:get_instance_metadata\":"},{"line_number":532,"context_line":"            common_policy.parse_rule(\"project_id:non_fake\"),"},{"line_number":533,"context_line":"            \u0027default\u0027: common_policy.parse_rule(\u0027\u0027)"},{"line_number":534,"context_line":"        }"},{"line_number":535,"context_line":"        common_policy.set_rules(common_policy.Rules(rules))"},{"line_number":536,"context_line":"        req \u003d fakes.HTTPRequest.blank(self.url)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F0lg%3D","line":533,"updated":"2014-01-08 03:01:31.000000000","message":"this should be \u0027compute:get\u0027, sorry for I leading this.","commit_id":"cb7427570d65acb0994562ca3fec12bad57c7ca4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a61eb8c729e128623363b1b5a6e3cc0eaef36ad7","unresolved":false,"context_lines":[{"line_number":542,"context_line":"        rules \u003d {"},{"line_number":543,"context_line":"            \"compute:update_instance_metadata\":"},{"line_number":544,"context_line":"            common_policy.parse_rule(\"project_id:non_fake\"),"},{"line_number":545,"context_line":"            \u0027default\u0027: common_policy.parse_rule(\u0027\u0027)"},{"line_number":546,"context_line":"        }"},{"line_number":547,"context_line":"        common_policy.set_rules(common_policy.Rules(rules))"},{"line_number":548,"context_line":"        req \u003d fakes.HTTPRequest.blank(self.url)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F0lY%3D","line":545,"updated":"2014-01-08 03:01:31.000000000","message":"ditto","commit_id":"cb7427570d65acb0994562ca3fec12bad57c7ca4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a61eb8c729e128623363b1b5a6e3cc0eaef36ad7","unresolved":false,"context_lines":[{"line_number":555,"context_line":"        rules \u003d {"},{"line_number":556,"context_line":"            \"compute:delete_instance_metadata\":"},{"line_number":557,"context_line":"            common_policy.parse_rule(\"project_id:non_fake\"),"},{"line_number":558,"context_line":"            \u0027default\u0027: common_policy.parse_rule(\u0027\u0027)"},{"line_number":559,"context_line":"        }"},{"line_number":560,"context_line":"        common_policy.set_rules(common_policy.Rules(rules))"},{"line_number":561,"context_line":"        req \u003d fakes.HTTPRequest.blank(self.url)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F0lU%3D","line":558,"updated":"2014-01-08 03:01:31.000000000","message":"ditto","commit_id":"cb7427570d65acb0994562ca3fec12bad57c7ca4"}]}
