)]}'
{"openstack_dashboard/api/nova.py":[{"author":{"_account_id":14151,"name":"ziyu032","email":"chen.qiaomin@99cloud.net","username":"ziyu032"},"change_message_id":"7c11ee1066b9d92f9547e49ba699072bdff53884","unresolved":false,"context_lines":[{"line_number":456,"context_line":""},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"@profiler.trace"},{"line_number":459,"context_line":"def keypair_delete(request, name):"},{"line_number":460,"context_line":"    novaclient(request).keypairs.delete(name)"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1f1a1f67_b36c189d","line":459,"range":{"start_line":459,"start_character":28,"end_line":459,"end_character":32},"updated":"2017-07-12 08:02:05.000000000","message":"There should not change, name and id is same for keypair.","commit_id":"efb3ac479e90eed4508f9e2f4ee0a889f44958fb"},{"author":{"_account_id":16352,"name":"Shu Muto","email":"shu.mutow@gmail.com","username":"shu.mutow"},"change_message_id":"8ae5ead7d80d374bff1416a9799c4101f68c302b","unresolved":false,"context_lines":[{"line_number":456,"context_line":""},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"@profiler.trace"},{"line_number":459,"context_line":"def keypair_delete(request, name):"},{"line_number":460,"context_line":"    novaclient(request).keypairs.delete(name)"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1f1a1f67_8c24370f","line":459,"range":{"start_line":459,"start_character":28,"end_line":459,"end_character":32},"in_reply_to":"1f1a1f67_b36c189d","updated":"2017-07-13 05:44:15.000000000","message":"No. We use only keypair name in Horizon. But nova has ID for keypair independently. We should not call keypair name as ID.","commit_id":"efb3ac479e90eed4508f9e2f4ee0a889f44958fb"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"10804479283179c59ffa80befe59aa6d20c6a406","unresolved":false,"context_lines":[{"line_number":468,"context_line":""},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"@profiler.trace"},{"line_number":471,"context_line":"def keypair_get(request, keypair_id):"},{"line_number":472,"context_line":"    return novaclient(request).keypairs.get(keypair_id)"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7f287b81_f3fb1176","line":471,"range":{"start_line":471,"start_character":25,"end_line":471,"end_character":35},"updated":"2017-08-28 12:14:29.000000000","message":"This could be renamed to \u0027name\u0027 for the sake of consistency.","commit_id":"cb4000834631fd1be434f8033da837002009c388"},{"author":{"_account_id":16352,"name":"Shu Muto","email":"shu.mutow@gmail.com","username":"shu.mutow"},"change_message_id":"48ad254b43a7fdfbee72d6f5ffdbfe3fc79f912b","unresolved":false,"context_lines":[{"line_number":468,"context_line":""},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"@profiler.trace"},{"line_number":471,"context_line":"def keypair_get(request, keypair_id):"},{"line_number":472,"context_line":"    return novaclient(request).keypairs.get(keypair_id)"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7f287b81_73694bf7","line":471,"range":{"start_line":471,"start_character":25,"end_line":471,"end_character":35},"in_reply_to":"7f287b81_f3fb1176","updated":"2017-08-29 04:55:44.000000000","message":"Done","commit_id":"cb4000834631fd1be434f8033da837002009c388"}],"openstack_dashboard/static/app/core/keypairs/actions/delete.service.js":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"10804479283179c59ffa80befe59aa6d20c6a406","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    //////////////"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    function allowed() {"},{"line_number":60,"context_line":"      return $qExtensions.booleanAsPromise(true);"},{"line_number":61,"context_line":"    }"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    function perform(items, scope) {"}],"source_content_type":"text/javascript","patch_set":10,"id":"7f287b81_b37469ff","line":60,"range":{"start_line":60,"start_character":6,"end_line":60,"end_character":49},"updated":"2017-08-28 12:14:29.000000000","message":"Shouldn\u0027t we have a policy check here? We seem to have relevant policy rules:\n\n egrep keypairs openstack_dashboard/conf/nova_policy.json","commit_id":"cb4000834631fd1be434f8033da837002009c388"},{"author":{"_account_id":16352,"name":"Shu Muto","email":"shu.mutow@gmail.com","username":"shu.mutow"},"change_message_id":"48ad254b43a7fdfbee72d6f5ffdbfe3fc79f912b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    //////////////"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    function allowed() {"},{"line_number":60,"context_line":"      return $qExtensions.booleanAsPromise(true);"},{"line_number":61,"context_line":"    }"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    function perform(items, scope) {"}],"source_content_type":"text/javascript","patch_set":10,"id":"7f287b81_aeb2a847","line":60,"range":{"start_line":60,"start_character":6,"end_line":60,"end_character":49},"in_reply_to":"7f287b81_b37469ff","updated":"2017-08-29 04:55:44.000000000","message":"Done","commit_id":"cb4000834631fd1be434f8033da837002009c388"}],"openstack_dashboard/static/app/core/keypairs/keypairs.service.js":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"10804479283179c59ffa80befe59aa6d20c6a406","unresolved":false,"context_lines":[{"line_number":56,"context_line":"      function modifyResponse(response) {"},{"line_number":57,"context_line":"        return {data: {items: response.data.items.map(modifyItems)}};"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        function modifyItems(item) {"},{"line_number":60,"context_line":"          item \u003d item.keypair;"},{"line_number":61,"context_line":"          item.id \u003d item.name;"},{"line_number":62,"context_line":"          item.trackBy \u003d item.name;"}],"source_content_type":"text/javascript","patch_set":10,"id":"7f287b81_139c5d5b","line":59,"range":{"start_line":59,"start_character":27,"end_line":59,"end_character":28},"updated":"2017-08-28 12:14:29.000000000","message":"nit: unnecessary plural","commit_id":"cb4000834631fd1be434f8033da837002009c388"},{"author":{"_account_id":16352,"name":"Shu Muto","email":"shu.mutow@gmail.com","username":"shu.mutow"},"change_message_id":"48ad254b43a7fdfbee72d6f5ffdbfe3fc79f912b","unresolved":false,"context_lines":[{"line_number":56,"context_line":"      function modifyResponse(response) {"},{"line_number":57,"context_line":"        return {data: {items: response.data.items.map(modifyItems)}};"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        function modifyItems(item) {"},{"line_number":60,"context_line":"          item \u003d item.keypair;"},{"line_number":61,"context_line":"          item.id \u003d item.name;"},{"line_number":62,"context_line":"          item.trackBy \u003d item.name;"}],"source_content_type":"text/javascript","patch_set":10,"id":"7f287b81_4ea8e48a","line":59,"range":{"start_line":59,"start_character":27,"end_line":59,"end_character":28},"in_reply_to":"7f287b81_139c5d5b","updated":"2017-08-29 04:55:44.000000000","message":"Done","commit_id":"cb4000834631fd1be434f8033da837002009c388"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"10804479283179c59ffa80befe59aa6d20c6a406","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        function modifyItems(item) {"},{"line_number":60,"context_line":"          item \u003d item.keypair;"},{"line_number":61,"context_line":"          item.id \u003d item.name;"},{"line_number":62,"context_line":"          item.trackBy \u003d item.name;"},{"line_number":63,"context_line":"          return item;"},{"line_number":64,"context_line":"        }"}],"source_content_type":"text/javascript","patch_set":10,"id":"7f287b81_f3e8b1e2","line":61,"updated":"2017-08-28 12:14:29.000000000","message":"This seems to be a little inconsistent with the API and/or CLI. While I understand that for keypairs the \u0027name\u0027 is the real identifier and the \u0027id\u0027 attribute seems to be a made-up, unusable integer, this way we cover up what the API is doing. That may be a bit confusing. I would either leave item.id as it was or delete it completely.","commit_id":"cb4000834631fd1be434f8033da837002009c388"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"559ff670dfc8dab206f61f79b67bab5280242721","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        function modifyItems(item) {"},{"line_number":60,"context_line":"          item \u003d item.keypair;"},{"line_number":61,"context_line":"          item.id \u003d item.name;"},{"line_number":62,"context_line":"          item.trackBy \u003d item.name;"},{"line_number":63,"context_line":"          return item;"},{"line_number":64,"context_line":"        }"}],"source_content_type":"text/javascript","patch_set":10,"id":"7f287b81_36196e21","line":61,"in_reply_to":"7f287b81_ce18541f","updated":"2017-08-29 07:39:17.000000000","message":"Understood. Nova is quite weird about IDs of keypairs. There\u0027s an id in the output of \u0027keypair show\u0027, but no id in the output of \u0027keypair list\u0027. Yesterday I only checked the former. Never would have thought the latter behaves differently.","commit_id":"cb4000834631fd1be434f8033da837002009c388"},{"author":{"_account_id":16352,"name":"Shu Muto","email":"shu.mutow@gmail.com","username":"shu.mutow"},"change_message_id":"48ad254b43a7fdfbee72d6f5ffdbfe3fc79f912b","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        function modifyItems(item) {"},{"line_number":60,"context_line":"          item \u003d item.keypair;"},{"line_number":61,"context_line":"          item.id \u003d item.name;"},{"line_number":62,"context_line":"          item.trackBy \u003d item.name;"},{"line_number":63,"context_line":"          return item;"},{"line_number":64,"context_line":"        }"}],"source_content_type":"text/javascript","patch_set":10,"id":"7f287b81_ce18541f","line":61,"in_reply_to":"7f287b81_f3e8b1e2","updated":"2017-08-29 04:55:44.000000000","message":"Nova API for keypair list doesn\u0027t return ID for each keypair. But Angular framework for table needs `id` attribute to call actions with selected item. So this set `name` to `id`.","commit_id":"cb4000834631fd1be434f8033da837002009c388"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"10804479283179c59ffa80befe59aa6d20c6a406","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        function modifyItems(item) {"},{"line_number":60,"context_line":"          item \u003d item.keypair;"},{"line_number":61,"context_line":"          item.id \u003d item.name;"},{"line_number":62,"context_line":"          item.trackBy \u003d item.name;"},{"line_number":63,"context_line":"          return item;"},{"line_number":64,"context_line":"        }"},{"line_number":65,"context_line":"      }"}],"source_content_type":"text/javascript","patch_set":10,"id":"7f287b81_33b4f9f1","line":62,"range":{"start_line":62,"start_character":25,"end_line":62,"end_character":34},"updated":"2017-08-28 12:14:29.000000000","message":"In rare cases this could be wrong (if somebody deletes and re-creates a keypair by the same name behind our back). name+fingerprint would be a tiny bit better.","commit_id":"cb4000834631fd1be434f8033da837002009c388"},{"author":{"_account_id":16352,"name":"Shu Muto","email":"shu.mutow@gmail.com","username":"shu.mutow"},"change_message_id":"48ad254b43a7fdfbee72d6f5ffdbfe3fc79f912b","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        function modifyItems(item) {"},{"line_number":60,"context_line":"          item \u003d item.keypair;"},{"line_number":61,"context_line":"          item.id \u003d item.name;"},{"line_number":62,"context_line":"          item.trackBy \u003d item.name;"},{"line_number":63,"context_line":"          return item;"},{"line_number":64,"context_line":"        }"},{"line_number":65,"context_line":"      }"}],"source_content_type":"text/javascript","patch_set":10,"id":"7f287b81_6e34c093","line":62,"range":{"start_line":62,"start_character":25,"end_line":62,"end_character":34},"in_reply_to":"7f287b81_33b4f9f1","updated":"2017-08-29 04:55:44.000000000","message":"Done","commit_id":"cb4000834631fd1be434f8033da837002009c388"}]}
