)]}'
{"etc/nova/policy.json":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"bb002ab53b868ff60a016a5e5cca969815d3c0b3","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \"compute_extension:admin_actions:migrateLive\": \"rule:admin_api\","},{"line_number":29,"context_line":"    \"compute_extension:admin_actions:resetState\": \"rule:admin_api\","},{"line_number":30,"context_line":"    \"compute_extension:admin_actions:migrate\": \"rule:admin_api\","},{"line_number":31,"context_line":"    \"compute_extension:v3:os-admin-passwd\": \"rule:admin_api\","},{"line_number":32,"context_line":"    \"compute_extension:aggregates\": \"rule:admin_api\","},{"line_number":33,"context_line":"    \"compute_extension:agents\": \"rule:admin_api\","},{"line_number":34,"context_line":"    \"compute_extension:v3:os-agents\": \"rule:admin_api\","}],"source_content_type":"application/json","patch_set":6,"id":"AAAAQn%2F%2FuCs%3D","line":31,"updated":"2013-07-24 14:17:55.000000000","message":"Does this really need to be admin_api or admin_or_owner?","commit_id":"ae9111ebb8de458027980c07db8ad8cdea11c07c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e670d9780ccbd41b7dc46645d798839ff3695028","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \"compute_extension:admin_actions:migrateLive\": \"rule:admin_api\","},{"line_number":29,"context_line":"    \"compute_extension:admin_actions:resetState\": \"rule:admin_api\","},{"line_number":30,"context_line":"    \"compute_extension:admin_actions:migrate\": \"rule:admin_api\","},{"line_number":31,"context_line":"    \"compute_extension:v3:os-admin-passwd\": \"rule:admin_api\","},{"line_number":32,"context_line":"    \"compute_extension:aggregates\": \"rule:admin_api\","},{"line_number":33,"context_line":"    \"compute_extension:agents\": \"rule:admin_api\","},{"line_number":34,"context_line":"    \"compute_extension:v3:os-agents\": \"rule:admin_api\","}],"source_content_type":"application/json","patch_set":6,"id":"AAAAQn%2F%2Fr5M%3D","line":31,"in_reply_to":"AAAAQn%2F%2FuCs%3D","updated":"2013-07-25 02:54:12.000000000","message":"Needn\u0027t","commit_id":"ae9111ebb8de458027980c07db8ad8cdea11c07c"}],"nova/api/openstack/compute/plugins/v3/admin_passwd.py":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"f34ab9c7486549cdfc783ef59a5dc43502a6be1a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2Fqew%3D","line":3,"updated":"2013-07-15 01:02:55.000000000","message":"Should have IBM copyright here","commit_id":"201f7366e30e862c325f539cac76fff0ce74641f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"eb431d36391ea9a0d12b00075eb83beca941c1eb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2FqRI%3D","line":3,"in_reply_to":"AAAAP3%2F%2Fqew%3D","updated":"2013-07-15 03:35:09.000000000","message":"Done","commit_id":"201f7366e30e862c325f539cac76fff0ce74641f"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"f34ab9c7486549cdfc783ef59a5dc43502a6be1a","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class ChangePasswordDeserializer(wsgi.XMLDeserializer):"},{"line_number":33,"context_line":"    def default(self, string):"},{"line_number":34,"context_line":"        \"\"\"Deserialize an xml-formatted server create request.\"\"\""},{"line_number":35,"context_line":"        dom \u003d xmlutil.safe_minidom_parse_string(string)"},{"line_number":36,"context_line":"        action_node \u003d dom.childNodes[0]"},{"line_number":37,"context_line":"        action_name \u003d action_node.tagName"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2Fqek%3D","line":34,"updated":"2013-07-15 01:02:55.000000000","message":"This comment seems wrong I think?","commit_id":"201f7366e30e862c325f539cac76fff0ce74641f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"eb431d36391ea9a0d12b00075eb83beca941c1eb","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class ChangePasswordDeserializer(wsgi.XMLDeserializer):"},{"line_number":33,"context_line":"    def default(self, string):"},{"line_number":34,"context_line":"        \"\"\"Deserialize an xml-formatted server create request.\"\"\""},{"line_number":35,"context_line":"        dom \u003d xmlutil.safe_minidom_parse_string(string)"},{"line_number":36,"context_line":"        action_node \u003d dom.childNodes[0]"},{"line_number":37,"context_line":"        action_name \u003d action_node.tagName"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2FqRE%3D","line":34,"in_reply_to":"AAAAP3%2F%2Fqek%3D","updated":"2013-07-15 03:35:09.000000000","message":"Done","commit_id":"201f7366e30e862c325f539cac76fff0ce74641f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ef510a37a451fa70609fd5190069c8563d94acc9","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @wsgi.deserializers(xml\u003dChangePasswordDeserializer)"},{"line_number":53,"context_line":"    def change_password(self, req, id, body):"},{"line_number":54,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":55,"context_line":"        authorize(context)"},{"line_number":56,"context_line":"        if (not \u0027change_password\u0027 in body or"},{"line_number":57,"context_line":"                \u0027admin_password\u0027 not in body[\u0027change_password\u0027]):"},{"line_number":58,"context_line":"            msg \u003d _(\"No admin_password was specified\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAQn%2F%2FeCw%3D","line":55,"updated":"2013-07-30 17:28:04.000000000","message":"It would be good to check we get 401 errors at the appropriate moment, just to make sure the new policy applies.","commit_id":"c055d8749716e48b8cdab149e639c56abd9d9b34"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"440619de5ff4ffe9175dbbf20f795fd8919a482c","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @wsgi.deserializers(xml\u003dChangePasswordDeserializer)"},{"line_number":53,"context_line":"    def change_password(self, req, id, body):"},{"line_number":54,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":55,"context_line":"        authorize(context)"},{"line_number":56,"context_line":"        if (not \u0027change_password\u0027 in body or"},{"line_number":57,"context_line":"                \u0027admin_password\u0027 not in body[\u0027change_password\u0027]):"},{"line_number":58,"context_line":"            msg \u003d _(\"No admin_password was specified\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAQn%2F%2Fb4Y%3D","line":55,"in_reply_to":"AAAAQn%2F%2FeCw%3D","updated":"2013-07-31 08:42:35.000000000","message":"The policy is empty for this action in policy.conf.","commit_id":"c055d8749716e48b8cdab149e639c56abd9d9b34"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"417dff39673acb036f730797e3087240877b5cd1","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from nova.openstack.common.gettextutils import _"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"ALIAS \u003d \"os-admin-passwd\""},{"line_number":29,"context_line":"authorize \u003d extensions.extension_authorizer(\u0027compute\u0027, \u0027v3:%s\u0027 % ALIAS)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAQn%2F%2FbcE%3D","line":28,"updated":"2013-07-31 10:57:04.000000000","message":"not sure if this should be os-admin-password, but will let other decide.","commit_id":"f577b103f4e67dbc970ef53fa8cc8fc8b24ed5fe"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"12da25601265cfe83ee6b65ffb67e30ed168ba97","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from nova.openstack.common.gettextutils import _"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"ALIAS \u003d \"os-admin-passwd\""},{"line_number":29,"context_line":"authorize \u003d extensions.extension_authorizer(\u0027compute\u0027, \u0027v3:%s\u0027 % ALIAS)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAQn%2F%2FYZE%3D","line":28,"in_reply_to":"AAAAQn%2F%2Fa8M%3D","updated":"2013-08-01 03:06:06.000000000","message":"Emm... totally no reason. let me update!","commit_id":"f577b103f4e67dbc970ef53fa8cc8fc8b24ed5fe"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"44a93af22b03eba0fca4d464380113345b5c0166","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from nova.openstack.common.gettextutils import _"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"ALIAS \u003d \"os-admin-passwd\""},{"line_number":29,"context_line":"authorize \u003d extensions.extension_authorizer(\u0027compute\u0027, \u0027v3:%s\u0027 % ALIAS)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAQn%2F%2Fa8M%3D","line":28,"in_reply_to":"AAAAQn%2F%2FbcE%3D","updated":"2013-07-31 13:28:01.000000000","message":"I personally prefer password instead of passwd. Any reason not to change it?","commit_id":"f577b103f4e67dbc970ef53fa8cc8fc8b24ed5fe"}],"nova/tests/api/openstack/compute/plugins/v3/test_admin_passwd.py":[{"author":{"_account_id":2711,"name":"Zhang Hua","display_name":"Zhang Hua","email":"joshua.zhang@canonical.com","username":"zhhuabj"},"change_message_id":"7d37f5cedd6ecc66a1f45f75f45149360686db93","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        body \u003d {\u0027change_password\u0027: {}}"},{"line_number":97,"context_line":"        res \u003d self._make_request(url, body)"},{"line_number":98,"context_line":"        self.assertEqual(res.status_int, 400)"},{"line_number":99,"context_line":"        "},{"line_number":100,"context_line":"        body \u003d {}"},{"line_number":101,"context_line":"        res \u003d self._make_request(url, body)"},{"line_number":102,"context_line":"        self.assertEqual(res.status_int, 400)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2FT3A%3D","line":99,"updated":"2013-07-04 10:17:18.000000000","message":"trailing space here","commit_id":"3d149082a92c5490b44e1f7b1d71d83548be998d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c483e6610c6d7b78c0286088ef3400d544ae5698","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        body \u003d {\u0027change_password\u0027: {}}"},{"line_number":97,"context_line":"        res \u003d self._make_request(url, body)"},{"line_number":98,"context_line":"        self.assertEqual(res.status_int, 400)"},{"line_number":99,"context_line":"        "},{"line_number":100,"context_line":"        body \u003d {}"},{"line_number":101,"context_line":"        res \u003d self._make_request(url, body)"},{"line_number":102,"context_line":"        self.assertEqual(res.status_int, 400)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2FTkw%3D","line":99,"in_reply_to":"AAAAPn%2F%2FT3A%3D","updated":"2013-07-04 12:33:53.000000000","message":"Ops, thanks","commit_id":"3d149082a92c5490b44e1f7b1d71d83548be998d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ef510a37a451fa70609fd5190069c8563d94acc9","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        res \u003d self._make_request(url, body)"},{"line_number":99,"context_line":"        self.assertEqual(res.status_int, 400)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        body \u003d {}"},{"line_number":102,"context_line":"        res \u003d self._make_request(url, body)"},{"line_number":103,"context_line":"        self.assertEqual(res.status_int, 400)"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAQn%2F%2FeDE%3D","line":101,"updated":"2013-07-30 17:28:04.000000000","message":"I would have these as two tests myself.","commit_id":"c055d8749716e48b8cdab149e639c56abd9d9b34"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"440619de5ff4ffe9175dbbf20f795fd8919a482c","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        res \u003d self._make_request(url, body)"},{"line_number":99,"context_line":"        self.assertEqual(res.status_int, 400)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        body \u003d {}"},{"line_number":102,"context_line":"        res \u003d self._make_request(url, body)"},{"line_number":103,"context_line":"        self.assertEqual(res.status_int, 400)"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAQn%2F%2Fb%2F0%3D","line":101,"in_reply_to":"AAAAQn%2F%2FeDE%3D","updated":"2013-07-31 08:42:35.000000000","message":"After checking I found this needless, if \u0027change_password\u0027 isn\u0027t in the dict, the wsgi won\u0027t route this action to this extension. I will remove this. Thanks","commit_id":"c055d8749716e48b8cdab149e639c56abd9d9b34"}]}
