)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"7ecb172c918693c9994bea51e4a67922acd768ac","unresolved":false,"context_lines":[{"line_number":10,"context_line":"rescue of an instance. If the image is not specified, then the"},{"line_number":11,"context_line":"base image ref is used by default."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Implements: blueprint allow-image-to-be-specified-during-rescue"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"DocImpact"},{"line_number":16,"context_line":"Change-Id: I59311fcfcb8eb54701618e92e5cdada109235b38"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"AAAAVX%2F%2F6wo%3D","line":13,"updated":"2014-02-27 11:43:45.000000000","message":"Neither the blueprint or this commit appear to describe how this new feature is used ? Can you describe the usage here please","commit_id":"37af0988013b151429655f65424942f3d91044ec"}],"doc/v3/api_samples/os-rescue/server-rescue-req-with-image-ref.xml":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"69e4e86810e7ab9c8fdc91d107b7407a61c006b1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e"},{"line_number":2,"context_line":"\u003crescue xmlns\u003d\"http://docs.openstack.org/compute/api/v1.1\""},{"line_number":3,"context_line":"    adminPass\u003d\"MySecretPass\"/\u003e"}],"source_content_type":"application/xml","patch_set":12,"id":"AAAAUX%2F%2FOJE%3D","line":1,"updated":"2014-03-03 13:55:51.000000000","message":"I think you need a rebase, v3 doesn\u0027t have XML any more.","commit_id":"37af0988013b151429655f65424942f3d91044ec"}],"nova/api/openstack/compute/contrib/extended_rescue_with_image.py":[{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"91d3446fb1473e8712a632315c37ec6f43535ede","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":"#"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAT3%2F%2FvP8%3D","line":1,"updated":"2014-01-02 16:43:09.000000000","message":"This is not needed","commit_id":"9bd7c70c994844a942cab9dc1a39f7604d99a804"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"91d3446fb1473e8712a632315c37ec6f43535ede","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":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAT3%2F%2FvMs%3D","line":3,"updated":"2014-01-02 16:43:09.000000000","message":"It should be 2014 now? ;-)","commit_id":"9bd7c70c994844a942cab9dc1a39f7604d99a804"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"dcd894e87b0b134b30406a463a359f01bce83770","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    def get_controller_extensions(self):"},{"line_number":31,"context_line":"        controller \u003d RescueController(self.ext_mgr)"},{"line_number":32,"context_line":"        extension \u003d exts.ControllerExtension(self, \u0027servers\u0027, controller)"},{"line_number":33,"context_line":"        return [extension]"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F8s7I%3D","line":33,"updated":"2013-12-22 16:02:36.000000000","message":"it needn\u0027t return controller. you can reference this https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/contrib/extended_quotas.py","commit_id":"9bd7c70c994844a942cab9dc1a39f7604d99a804"},{"author":{"_account_id":9220,"name":"Abhishek Shivanna","email":"abhishes@thoughtworks.com","username":"abhisheks"},"change_message_id":"11e85d79fde226e613b5949137881884c893aaac","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    def get_controller_extensions(self):"},{"line_number":31,"context_line":"        controller \u003d RescueController(self.ext_mgr)"},{"line_number":32,"context_line":"        extension \u003d exts.ControllerExtension(self, \u0027servers\u0027, controller)"},{"line_number":33,"context_line":"        return [extension]"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F8sL8%3D","line":33,"in_reply_to":"AAAATn%2F8s7I%3D","updated":"2013-12-23 06:07:34.000000000","message":"Done","commit_id":"9bd7c70c994844a942cab9dc1a39f7604d99a804"},{"author":{"_account_id":9220,"name":"Abhishek Shivanna","email":"abhishes@thoughtworks.com","username":"abhisheks"},"change_message_id":"9c6699a4094ad2047682722274242f82d1222d2b","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    def get_controller_extensions(self):"},{"line_number":31,"context_line":"        controller \u003d RescueController(self.ext_mgr)"},{"line_number":32,"context_line":"        extension \u003d exts.ControllerExtension(self, \u0027servers\u0027, controller)"},{"line_number":33,"context_line":"        return [extension]"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAT3%2F%2Fwq0%3D","line":33,"in_reply_to":"AAAATn%2F8sL8%3D","updated":"2014-01-02 07:14:43.000000000","message":"Without the get_controller_extensions(), Rescue is not recognised as a valid action on servers, as we get the error {\"badRequest\": {\"message\": \"There is no such action: rescue\", \"code\": 400}}.","commit_id":"9bd7c70c994844a942cab9dc1a39f7604d99a804"}],"nova/api/openstack/compute/contrib/rescue.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"dcd894e87b0b134b30406a463a359f01bce83770","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class RescueController(wsgi.Controller):"},{"line_number":35,"context_line":"    def __init__(self, ext_mgr\u003dNone, *args, **kwargs):"},{"line_number":36,"context_line":"        super(RescueController, self).__init__(*args, **kwargs)"},{"line_number":37,"context_line":"        self.compute_api \u003d compute.API()"},{"line_number":38,"context_line":"        self.ext_mgr \u003d ext_mgr"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F8s60%3D","line":35,"updated":"2013-12-22 16:02:36.000000000","message":"looks like needn\u0027t the default value. we always pass ext_mgr at line 100","commit_id":"9bd7c70c994844a942cab9dc1a39f7604d99a804"},{"author":{"_account_id":9220,"name":"Abhishek Shivanna","email":"abhishes@thoughtworks.com","username":"abhisheks"},"change_message_id":"11e85d79fde226e613b5949137881884c893aaac","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class RescueController(wsgi.Controller):"},{"line_number":35,"context_line":"    def __init__(self, ext_mgr\u003dNone, *args, **kwargs):"},{"line_number":36,"context_line":"        super(RescueController, self).__init__(*args, **kwargs)"},{"line_number":37,"context_line":"        self.compute_api \u003d compute.API()"},{"line_number":38,"context_line":"        self.ext_mgr \u003d ext_mgr"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F8sOc%3D","line":35,"in_reply_to":"AAAATn%2F8s60%3D","updated":"2013-12-23 06:07:34.000000000","message":"Done","commit_id":"9bd7c70c994844a942cab9dc1a39f7604d99a804"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"495bb870ca4c17557fa67785804f19bcc09df911","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        \"\"\"Rescue an instance.\"\"\""},{"line_number":49,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":50,"context_line":"        authorize(context)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        if body[\u0027rescue\u0027] and \u0027adminPass\u0027 in body[\u0027rescue\u0027]:"},{"line_number":53,"context_line":"            password \u003d body[\u0027rescue\u0027][\u0027adminPass\u0027]"},{"line_number":54,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F%2B3M%3D","side":"PARENT","line":51,"updated":"2014-01-05 09:57:19.000000000","message":"we shouldn\u0027t touch any extra line","commit_id":"01f85bdc057376708a1c1cca65bbcc85af494bfa"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"f5516866a3f2e508c11855032a9b674257922421","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        \"\"\"Rescue an instance.\"\"\""},{"line_number":49,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":50,"context_line":"        authorize(context)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        if body[\u0027rescue\u0027] and \u0027adminPass\u0027 in body[\u0027rescue\u0027]:"},{"line_number":53,"context_line":"            password \u003d body[\u0027rescue\u0027][\u0027adminPass\u0027]"},{"line_number":54,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F980%3D","side":"PARENT","line":51,"in_reply_to":"AAAAUH%2F%2F%2B3M%3D","updated":"2014-01-06 10:09:07.000000000","message":"Done","commit_id":"01f85bdc057376708a1c1cca65bbcc85af494bfa"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"495bb870ca4c17557fa67785804f19bcc09df911","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        instance \u003d self._get_instance(context, id)"},{"line_number":58,"context_line":"        try:"},{"line_number":59,"context_line":"            rescue_image_ref \u003d None"},{"line_number":60,"context_line":"            if(self.ext_mgr and"},{"line_number":61,"context_line":"                   self.ext_mgr.is_loaded(\"os-extended-rescue-with-image\")):"},{"line_number":62,"context_line":"                rescue_image_ref \u003d body[\"rescue\"].get(\"rescue_image_ref\")"},{"line_number":63,"context_line":"            self.compute_api.rescue(context, instance,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F%2B3I%3D","line":60,"updated":"2014-01-05 09:57:19.000000000","message":"looks like we needn\u0027t check \"if self.ext_mgr\"","commit_id":"729aa2102acda70058386e9933476098b368946a"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"f5516866a3f2e508c11855032a9b674257922421","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        instance \u003d self._get_instance(context, id)"},{"line_number":58,"context_line":"        try:"},{"line_number":59,"context_line":"            rescue_image_ref \u003d None"},{"line_number":60,"context_line":"            if(self.ext_mgr and"},{"line_number":61,"context_line":"                   self.ext_mgr.is_loaded(\"os-extended-rescue-with-image\")):"},{"line_number":62,"context_line":"                rescue_image_ref \u003d body[\"rescue\"].get(\"rescue_image_ref\")"},{"line_number":63,"context_line":"            self.compute_api.rescue(context, instance,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F98s%3D","line":60,"in_reply_to":"AAAAUH%2F%2F%2B3I%3D","updated":"2014-01-06 10:09:07.000000000","message":"Done","commit_id":"729aa2102acda70058386e9933476098b368946a"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"12bd8efb972a4f4f5c82d92ee1e61eaf0d7edeac","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            rescue_image_ref \u003d None"},{"line_number":62,"context_line":"            if self.ext_mgr.is_loaded(\"os-extended-rescue-with-image\"):"},{"line_number":63,"context_line":"                if body[\u0027rescue\u0027] and \u0027rescue_image_ref\u0027 in body[\u0027rescue\u0027]:"},{"line_number":64,"context_line":"                    rescue_image_ref \u003d body[\u0027rescue\u0027].get(\u0027rescue_image_ref\u0027)"},{"line_number":65,"context_line":"            self.compute_api.rescue(context, instance,"},{"line_number":66,"context_line":"                rescue_password\u003dpassword, rescue_image_ref\u003drescue_image_ref)"},{"line_number":67,"context_line":"        except exception.InstanceInvalidState as state_error:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAUX%2F%2FXw4%3D","line":64,"updated":"2014-02-13 17:02:57.000000000","message":"You use get() here, and just [] in rescue.py.  Should probably be consistent.","commit_id":"37af0988013b151429655f65424942f3d91044ec"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"69e4e86810e7ab9c8fdc91d107b7407a61c006b1","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            rescue_image_ref \u003d None"},{"line_number":62,"context_line":"            if self.ext_mgr.is_loaded(\"os-extended-rescue-with-image\"):"},{"line_number":63,"context_line":"                if body[\u0027rescue\u0027] and \u0027rescue_image_ref\u0027 in body[\u0027rescue\u0027]:"},{"line_number":64,"context_line":"                    rescue_image_ref \u003d body[\u0027rescue\u0027].get(\u0027rescue_image_ref\u0027)"},{"line_number":65,"context_line":"            self.compute_api.rescue(context, instance,"},{"line_number":66,"context_line":"                rescue_password\u003dpassword, rescue_image_ref\u003drescue_image_ref)"},{"line_number":67,"context_line":"        except exception.InstanceInvalidState as state_error:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAUX%2F%2FOKs%3D","line":64,"in_reply_to":"AAAAUX%2F%2FXw4%3D","updated":"2014-03-03 13:55:51.000000000","message":"Yeah, best to keep in consistent with line 55.","commit_id":"37af0988013b151429655f65424942f3d91044ec"}],"nova/api/openstack/compute/plugins/v3/rescue.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"dcd894e87b0b134b30406a463a359f01bce83770","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            password \u003d utils.generate_password()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        rescue_image_ref \u003d None"},{"line_number":64,"context_line":"        if body[\u0027rescue\u0027] and \u0027rescue_image_ref\u0027 in body[\u0027rescue\u0027]:"},{"line_number":65,"context_line":"            rescue_image_ref \u003d body[\u0027rescue\u0027][\u0027rescue_image_ref\u0027]"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        instance \u003d self._get_instance(context, id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F8s6w%3D","line":64,"updated":"2013-12-22 16:02:36.000000000","message":"doing a check like https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/plugins/v3/quota_sets.py#L152   before line 58. Then we needn\u0027t double check body with key \u0027rescue\u0027","commit_id":"9bd7c70c994844a942cab9dc1a39f7604d99a804"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"063f257cbe817ebe5319ee8aa1fd9f927fa4de46","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            password \u003d utils.generate_password()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        rescue_image_ref \u003d None"},{"line_number":64,"context_line":"        if body[\u0027rescue\u0027] and \u0027rescue_image_ref\u0027 in body[\u0027rescue\u0027]:"},{"line_number":65,"context_line":"            rescue_image_ref \u003d body[\u0027rescue\u0027][\u0027rescue_image_ref\u0027]"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        instance \u003d self._get_instance(context, id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAT3%2F%2F2MM%3D","line":64,"in_reply_to":"AAAAT3%2F%2F2iI%3D","updated":"2013-12-30 09:21:07.000000000","message":"oops, I means there is case for body \u003d {\u0027rescue\u0027: 123}.","commit_id":"9bd7c70c994844a942cab9dc1a39f7604d99a804"},{"author":{"_account_id":9220,"name":"Abhishek Shivanna","email":"abhishes@thoughtworks.com","username":"abhisheks"},"change_message_id":"0838929a272368eb7b942f7767fc58abacd0fbee","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            password \u003d utils.generate_password()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        rescue_image_ref \u003d None"},{"line_number":64,"context_line":"        if body[\u0027rescue\u0027] and \u0027rescue_image_ref\u0027 in body[\u0027rescue\u0027]:"},{"line_number":65,"context_line":"            rescue_image_ref \u003d body[\u0027rescue\u0027][\u0027rescue_image_ref\u0027]"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        instance \u003d self._get_instance(context, id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAT3%2F%2F2iI%3D","line":64,"in_reply_to":"AAAATn%2F8oYM%3D","updated":"2013-12-30 06:12:59.000000000","message":"So the current check should suffice right?\nbecause if \u0027rescue_image_ref\u0027 is set to None then the default behaviour of choosing image_base_ref from instance_meta_data is executed.","commit_id":"9bd7c70c994844a942cab9dc1a39f7604d99a804"},{"author":{"_account_id":9220,"name":"Abhishek Shivanna","email":"abhishes@thoughtworks.com","username":"abhisheks"},"change_message_id":"11e85d79fde226e613b5949137881884c893aaac","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            password \u003d utils.generate_password()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        rescue_image_ref \u003d None"},{"line_number":64,"context_line":"        if body[\u0027rescue\u0027] and \u0027rescue_image_ref\u0027 in body[\u0027rescue\u0027]:"},{"line_number":65,"context_line":"            rescue_image_ref \u003d body[\u0027rescue\u0027][\u0027rescue_image_ref\u0027]"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        instance \u003d self._get_instance(context, id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F8sOk%3D","line":64,"in_reply_to":"AAAATn%2F8s6w%3D","updated":"2013-12-23 06:07:34.000000000","message":"Using is_valid_body(body, \u0027rescue\u0027) evaluates to True only when the \u0027rescue\u0027 key exists AND body[\u0027rescue\u0027] is also a dictionary type. But in our case the value of \u0027rescue\u0027 can be None in which case the password is generated. \n\nOn a different note, we can actually eliminate the check for body[\u0027rescue\u0027] because the @wsgi.action(\u0027rescue\u0027) would have already made the check for the \u0027rescue\u0027 key before it reaches this part of the code.\n\nIdeally we should eliminate the checks for body[\u0027rescue\u0027] and similar checks in other functions.","commit_id":"9bd7c70c994844a942cab9dc1a39f7604d99a804"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4cad405e768734da3fc3a5ecd0cd5bca8b240a19","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            password \u003d utils.generate_password()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        rescue_image_ref \u003d None"},{"line_number":64,"context_line":"        if body[\u0027rescue\u0027] and \u0027rescue_image_ref\u0027 in body[\u0027rescue\u0027]:"},{"line_number":65,"context_line":"            rescue_image_ref \u003d body[\u0027rescue\u0027][\u0027rescue_image_ref\u0027]"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        instance \u003d self._get_instance(context, id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F8oYM%3D","line":64,"in_reply_to":"AAAATn%2F8sOk%3D","updated":"2013-12-24 01:45:27.000000000","message":"yeah, you are right, is_valid_body isn\u0027t good for this case at here. But looks like we still need ensure body[\u0027rescue\u0027] is dict before we check \"\u0027rescue_image_ref\u0027 in body[\u0027rescue\u0027]\". It will failed for a case \u0027rescue_image_ref\u0027 in None.\n\nCurrent the input validation isn\u0027t good enough. But there are some guys working on this: https://review.openstack.org/#/q/status:open+project:openstack/nova+branch:master+topic:bp/nova-api-validation-fw,n,z\n\nSo I guess we just need make this works for now basically.","commit_id":"9bd7c70c994844a942cab9dc1a39f7604d99a804"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"495bb870ca4c17557fa67785804f19bcc09df911","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @wsgi.action(\u0027rescue\u0027)"},{"line_number":53,"context_line":"    def _rescue(self, req, id, body):"},{"line_number":54,"context_line":"        \"\"\"Rescue an instance.\"\"\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":57,"context_line":"        authorize(context)"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F%2B3E%3D","line":55,"updated":"2014-01-05 09:57:19.000000000","message":"we shouldn\u0027t touch any extra line.","commit_id":"729aa2102acda70058386e9933476098b368946a"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"f5516866a3f2e508c11855032a9b674257922421","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @wsgi.action(\u0027rescue\u0027)"},{"line_number":53,"context_line":"    def _rescue(self, req, id, body):"},{"line_number":54,"context_line":"        \"\"\"Rescue an instance.\"\"\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":57,"context_line":"        authorize(context)"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F98Y%3D","line":55,"in_reply_to":"AAAAUH%2F%2F%2B3E%3D","updated":"2014-01-06 10:09:07.000000000","message":"Done","commit_id":"729aa2102acda70058386e9933476098b368946a"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"b01d9d53a0320d4d28b89d5d6eed92d35e1173e7","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        authorize(context)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        try:"},{"line_number":60,"context_line":"            rescue \u003d body[\u0027rescue\u0027]"},{"line_number":61,"context_line":"        except KeyError:"},{"line_number":62,"context_line":"            msg \u003d _(\"rescue parameter not specified\")"},{"line_number":63,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F%2B1E%3D","line":60,"updated":"2014-01-05 10:25:56.000000000","message":"What about using nova-api-validation-fw to do body validation?","commit_id":"729aa2102acda70058386e9933476098b368946a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"495bb870ca4c17557fa67785804f19bcc09df911","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            password \u003d rescue[\u0027admin_password\u0027]"},{"line_number":67,"context_line":"        except (TypeError, KeyError):"},{"line_number":68,"context_line":"            password \u003d utils.generate_password()"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        try:"},{"line_number":71,"context_line":"            rescue_image_ref \u003d rescue[\u0027rescue_image_ref\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F%2B24%3D","line":68,"updated":"2014-01-05 09:57:19.000000000","message":"if the exception is \u0027TypeError\u0027, I think we won\u0027t generate password, we should return HTTPBadRequest.\n\nHow about this:\n\nif not self.is_valid_body(body, \u0027rescue\u0027):\n    raise HttpBadRequest(explanation\u003dmsg)\n\nif \u0027admin_password\u0027 in body[\u0027rescue\u0027]:\n    password \u003d body[\u0027rescue\u0027][\u0027admin_password\u0027]\nelse:\n    password \u003d utils.generate_password()\n\nrescue_image_ref \u003d body[\u0027rescue\u0027][\u0027rescue_image_ref\u0027]\n\nI know \u0027is_valid_body\u0027 doing some extra checking. But it can ensure body[\u0027rescue\u0027] is dict. And later there are some guys will replace it with input validation schema.","commit_id":"729aa2102acda70058386e9933476098b368946a"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"f5516866a3f2e508c11855032a9b674257922421","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            password \u003d rescue[\u0027admin_password\u0027]"},{"line_number":67,"context_line":"        except (TypeError, KeyError):"},{"line_number":68,"context_line":"            password \u003d utils.generate_password()"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        try:"},{"line_number":71,"context_line":"            rescue_image_ref \u003d rescue[\u0027rescue_image_ref\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F97k%3D","line":68,"in_reply_to":"AAAAUH%2F%2F%2B24%3D","updated":"2014-01-06 10:09:07.000000000","message":"Changing the checks here fail the current tests.\n\nPlease check the latest patch and the comment on the same, as to why this might not work.","commit_id":"729aa2102acda70058386e9933476098b368946a"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"953c65c9476ae60450533f64c70537bc08c8c6a3","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            self.compute_api.rescue(context, instance,"},{"line_number":70,"context_line":"                                    rescue_password\u003dpassword,"},{"line_number":71,"context_line":"                                    rescue_image_ref\u003drescue_image_ref)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        except exception.InstanceInvalidState as state_error:"},{"line_number":74,"context_line":"            common.raise_http_conflict_for_instance_invalid_state(state_error,"},{"line_number":75,"context_line":"                                                                  \u0027rescue\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2F84Q%3D","line":72,"updated":"2014-01-06 10:09:20.000000000","message":"Using is_valid_body checks that body[\"rescue\"] must be a dict. However, in case of the password checks, I see that body {\"rescue\": \"abc\"} would also not raise any exception, a few of the rescue with password tests fail.\n\nI\u0027m not sure whether this should be the right behavior. But to not change the current behavior as a part of this patch, I am reverting to the old way of validating the body.","commit_id":"17a6de324b3cc155dc69065a8f4a39d15663a92c"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"12bd8efb972a4f4f5c82d92ee1e61eaf0d7edeac","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                                       want_objects\u003dTrue)"},{"line_number":57,"context_line":"        rescue_image_ref \u003d None"},{"line_number":58,"context_line":"        if body[\u0027rescue\u0027] and \u0027rescue_image_ref\u0027 in body[\u0027rescue\u0027]:"},{"line_number":59,"context_line":"            rescue_image_ref \u003d body[\u0027rescue\u0027][\u0027rescue_image_ref\u0027]"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        try:"},{"line_number":62,"context_line":"            self.compute_api.rescue(context, instance,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAUX%2F%2FXww%3D","line":59,"updated":"2014-02-13 17:02:57.000000000","message":"You use [] here and get() in api.py.  Should probably be consistent.","commit_id":"37af0988013b151429655f65424942f3d91044ec"}],"nova/compute/cells_api.py":[{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"91d3446fb1473e8712a632315c37ec6f43535ede","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        return self._call_to_cells(context, instance, \u0027get_diagnostics\u0027)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    @check_instance_cell"},{"line_number":258,"context_line":"    def rescue(self, context, instance, rescue_password\u003dNone,"},{"line_number":259,"context_line":"               rescue_image_ref\u003dNone):"},{"line_number":260,"context_line":"        \"\"\"Rescue the given instance.\"\"\""},{"line_number":261,"context_line":"        super(ComputeCellsAPI, self).rescue(context, instance,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAT3%2F%2FvM8%3D","line":258,"updated":"2014-01-02 16:43:09.000000000","message":"The unit test for this api should be updated","commit_id":"9bd7c70c994844a942cab9dc1a39f7604d99a804"}],"nova/compute/manager.py":[{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"c797983184e8fdcdc78b6dfda9c3b0bc9e38d199","unresolved":false,"context_lines":[{"line_number":2645,"context_line":"            rescue_image_ref \u003d system_meta.get(\u0027image_base_image_ref\u0027)"},{"line_number":2646,"context_line":""},{"line_number":2647,"context_line":"        # 1. First try to use base image associated with instance\u0027s current"},{"line_number":2648,"context_line":"        #    image."},{"line_number":2649,"context_line":"        #"},{"line_number":2650,"context_line":"        # The idea here is to provide the customer with a rescue environment"},{"line_number":2651,"context_line":"        # which they are familiar with. So, if they built their instance off of"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2BQXA%3D","line":2648,"updated":"2014-01-28 16:52:17.000000000","message":"These comments are no longer correct - the base image is now only used if the user hasn\u0027t specified an image","commit_id":"bb1f4b4f084158f25d9f8fde64703720aa8af26e"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"98551cf13bd99bdaea8cad9a2367efe6809d89b1","unresolved":false,"context_lines":[{"line_number":2645,"context_line":"            rescue_image_ref \u003d system_meta.get(\u0027image_base_image_ref\u0027)"},{"line_number":2646,"context_line":""},{"line_number":2647,"context_line":"        # 1. First try to use base image associated with instance\u0027s current"},{"line_number":2648,"context_line":"        #    image."},{"line_number":2649,"context_line":"        #"},{"line_number":2650,"context_line":"        # The idea here is to provide the customer with a rescue environment"},{"line_number":2651,"context_line":"        # which they are familiar with. So, if they built their instance off of"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2BMwU%3D","line":2648,"in_reply_to":"AAAAUH%2F%2BQXA%3D","updated":"2014-01-29 05:27:09.000000000","message":"Will change this.","commit_id":"bb1f4b4f084158f25d9f8fde64703720aa8af26e"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"c797983184e8fdcdc78b6dfda9c3b0bc9e38d199","unresolved":false,"context_lines":[{"line_number":2651,"context_line":"        # which they are familiar with. So, if they built their instance off of"},{"line_number":2652,"context_line":"        # a Debian image, their rescue VM will also be Debian."},{"line_number":2653,"context_line":"        if not rescue_image_ref:"},{"line_number":2654,"context_line":"            # 2. As a last resort, use instance\u0027s current image"},{"line_number":2655,"context_line":"            LOG.warn(_(\u0027Unable to find a different image to use for rescue VM,\u0027"},{"line_number":2656,"context_line":"                       \u0027 using instance\\\u0027s current image\u0027))"},{"line_number":2657,"context_line":"            rescue_image_ref \u003d instance[\u0027image_ref\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2BQWs%3D","line":2654,"updated":"2014-01-28 16:52:17.000000000","message":"As above - comment needs updating","commit_id":"bb1f4b4f084158f25d9f8fde64703720aa8af26e"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"98551cf13bd99bdaea8cad9a2367efe6809d89b1","unresolved":false,"context_lines":[{"line_number":2651,"context_line":"        # which they are familiar with. So, if they built their instance off of"},{"line_number":2652,"context_line":"        # a Debian image, their rescue VM will also be Debian."},{"line_number":2653,"context_line":"        if not rescue_image_ref:"},{"line_number":2654,"context_line":"            # 2. As a last resort, use instance\u0027s current image"},{"line_number":2655,"context_line":"            LOG.warn(_(\u0027Unable to find a different image to use for rescue VM,\u0027"},{"line_number":2656,"context_line":"                       \u0027 using instance\\\u0027s current image\u0027))"},{"line_number":2657,"context_line":"            rescue_image_ref \u003d instance[\u0027image_ref\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2BMwQ%3D","line":2654,"in_reply_to":"AAAAUH%2F%2BQWs%3D","updated":"2014-01-29 05:27:09.000000000","message":"This would still remain as is. The default behavior if no image ref is specified through the API call.","commit_id":"bb1f4b4f084158f25d9f8fde64703720aa8af26e"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3caa4ca49cf2cd4183de7f752fe553ec360912c2","unresolved":false,"context_lines":[{"line_number":2911,"context_line":"        \"\"\"Determine what image should be used to boot the rescue VM.\"\"\""},{"line_number":2912,"context_line":"        if not rescue_image_ref:"},{"line_number":2913,"context_line":"            system_meta \u003d utils.instance_sys_meta(instance)"},{"line_number":2914,"context_line":"            rescue_image_ref \u003d system_meta.get(\u0027image_base_image_ref\u0027)"},{"line_number":2915,"context_line":""},{"line_number":2916,"context_line":"        # 1. First try to use base image associated with instance\u0027s current"},{"line_number":2917,"context_line":"        #    image."}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWn%2F%2F9DA%3D","line":2914,"updated":"2014-04-08 09:22:18.000000000","message":"I recon we should have an image_rescue_image_ref, that is another option in here, but thats another blueprint... ignore my rambling.","commit_id":"d36f8051ad79c2bea4e5777ff399ae62d4283343"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3caa4ca49cf2cd4183de7f752fe553ec360912c2","unresolved":false,"context_lines":[{"line_number":2913,"context_line":"            system_meta \u003d utils.instance_sys_meta(instance)"},{"line_number":2914,"context_line":"            rescue_image_ref \u003d system_meta.get(\u0027image_base_image_ref\u0027)"},{"line_number":2915,"context_line":""},{"line_number":2916,"context_line":"        # 1. First try to use base image associated with instance\u0027s current"},{"line_number":2917,"context_line":"        #    image."},{"line_number":2918,"context_line":"        #"},{"line_number":2919,"context_line":"        # The idea here is to provide the customer with a rescue environment"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWn%2F%2F9II%3D","line":2916,"updated":"2014-04-08 09:22:18.000000000","message":"Feels like we should update this comment now, or just remove it.","commit_id":"d36f8051ad79c2bea4e5777ff399ae62d4283343"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"a003b76135fd310e1c578944eb6c800262e317ea","unresolved":false,"context_lines":[{"line_number":2913,"context_line":"            system_meta \u003d utils.instance_sys_meta(instance)"},{"line_number":2914,"context_line":"            rescue_image_ref \u003d system_meta.get(\u0027image_base_image_ref\u0027)"},{"line_number":2915,"context_line":""},{"line_number":2916,"context_line":"        # 1. First try to use base image associated with instance\u0027s current"},{"line_number":2917,"context_line":"        #    image."},{"line_number":2918,"context_line":"        #"},{"line_number":2919,"context_line":"        # The idea here is to provide the customer with a rescue environment"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAW3%2F%2F%2Biw%3D","line":2916,"in_reply_to":"AAAAWn%2F%2F9II%3D","updated":"2014-04-09 09:17:06.000000000","message":"Done","commit_id":"d36f8051ad79c2bea4e5777ff399ae62d4283343"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"96388be8fefb59514405323cd8acc9375eca7c5b","unresolved":false,"context_lines":[{"line_number":2940,"context_line":"    @wrap_instance_event"},{"line_number":2941,"context_line":"    def rescue_instance(self, context, instance, rescue_password):"},{"line_number":2942,"context_line":"        \"\"\"Rescue an instance on this host."},{"line_number":2943,"context_line":"        :param rescue_password: password to set on rescue instance"},{"line_number":2944,"context_line":"        \"\"\""},{"line_number":2945,"context_line":"        context \u003d context.elevated()"},{"line_number":2946,"context_line":"        LOG.audit(_(\u0027Rescuing\u0027), context\u003dcontext, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAW3%2F%2F7eo%3D","side":"PARENT","line":2943,"updated":"2014-04-09 12:36:48.000000000","message":"why did you delete this?\n\ni think that you should also add an explanation for the rescue_image_ref","commit_id":"aa3ff66df87b5af22be9997362f81fd7f6b2bed7"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e05d0b87b79962903ad81b8efff507ae83161847","unresolved":false,"context_lines":[{"line_number":2940,"context_line":"    @wrap_instance_event"},{"line_number":2941,"context_line":"    def rescue_instance(self, context, instance, rescue_password):"},{"line_number":2942,"context_line":"        \"\"\"Rescue an instance on this host."},{"line_number":2943,"context_line":"        :param rescue_password: password to set on rescue instance"},{"line_number":2944,"context_line":"        \"\"\""},{"line_number":2945,"context_line":"        context \u003d context.elevated()"},{"line_number":2946,"context_line":"        LOG.audit(_(\u0027Rescuing\u0027), context\u003dcontext, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAW3%2F%2F66s%3D","side":"PARENT","line":2943,"in_reply_to":"AAAAW3%2F%2F7b8%3D","updated":"2014-04-09 13:41:43.000000000","message":"its OK, the parm list is bad in the old one.","commit_id":"aa3ff66df87b5af22be9997362f81fd7f6b2bed7"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"ba1d869a20ca375153f03ca84543724257228b83","unresolved":false,"context_lines":[{"line_number":2940,"context_line":"    @wrap_instance_event"},{"line_number":2941,"context_line":"    def rescue_instance(self, context, instance, rescue_password):"},{"line_number":2942,"context_line":"        \"\"\"Rescue an instance on this host."},{"line_number":2943,"context_line":"        :param rescue_password: password to set on rescue instance"},{"line_number":2944,"context_line":"        \"\"\""},{"line_number":2945,"context_line":"        context \u003d context.elevated()"},{"line_number":2946,"context_line":"        LOG.audit(_(\u0027Rescuing\u0027), context\u003dcontext, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAW3%2F%2F7b8%3D","side":"PARENT","line":2943,"in_reply_to":"AAAAW3%2F%2F7eo%3D","updated":"2014-04-09 12:39:13.000000000","message":"Oops, was a mistake. I\u0027ll wait for some other comments, and put the comment back in the next patch.","commit_id":"aa3ff66df87b5af22be9997362f81fd7f6b2bed7"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"31749430483705264a9abf4662c7c3d1def96b04","unresolved":false,"context_lines":[{"line_number":2921,"context_line":"            rescue_image_ref \u003d system_meta.get(\u0027image_base_image_ref\u0027)"},{"line_number":2922,"context_line":""},{"line_number":2923,"context_line":"        if not rescue_image_ref:"},{"line_number":2924,"context_line":"            # 2. As a last resort, use instance\u0027s current image"},{"line_number":2925,"context_line":"            LOG.warn(_(\u0027Unable to find a different image to use for rescue VM,\u0027"},{"line_number":2926,"context_line":"                       \u0027 using instance\\\u0027s current image\u0027))"},{"line_number":2927,"context_line":"            rescue_image_ref \u003d instance[\u0027image_ref\u0027]"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAW3%2F%2F4pg%3D","line":2924,"updated":"2014-04-09 17:38:28.000000000","message":"This comment is the same as the one on line 2918 -- should probably delete one.","commit_id":"cfd2ad7dac4e89be759109c696f68f928a4765ee"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"85c7b31456197a8d0bda42885a3b5df06db04df4","unresolved":false,"context_lines":[{"line_number":2968,"context_line":"                        rescue_image_ref\u003dNone):"},{"line_number":2969,"context_line":"        \"\"\"Rescue an instance on this host."},{"line_number":2970,"context_line":"        :param rescue_password: password to set on rescue instance"},{"line_number":2971,"context_line":"        :param rescue_image_ref: image to be used for rescue"},{"line_number":2972,"context_line":"        \"\"\""},{"line_number":2973,"context_line":"        context \u003d context.elevated()"},{"line_number":2974,"context_line":"        LOG.audit(_(\u0027Rescuing\u0027), context\u003dcontext, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAW3%2F%2F0Uc%3D","line":2971,"updated":"2014-04-10 08:13:41.000000000","message":"If we have this kind of comment, it should really cover all the params.","commit_id":"9346c838d43533d9b868275eb5263943f599f074"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"f7dbeed0463c1698e425325403a97c931a4d87e4","unresolved":false,"context_lines":[{"line_number":2968,"context_line":"                        rescue_image_ref\u003dNone):"},{"line_number":2969,"context_line":"        \"\"\"Rescue an instance on this host."},{"line_number":2970,"context_line":"        :param rescue_password: password to set on rescue instance"},{"line_number":2971,"context_line":"        :param rescue_image_ref: image to be used for rescue"},{"line_number":2972,"context_line":"        \"\"\""},{"line_number":2973,"context_line":"        context \u003d context.elevated()"},{"line_number":2974,"context_line":"        LOG.audit(_(\u0027Rescuing\u0027), context\u003dcontext, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAW3%2F%2FzrY%3D","line":2971,"in_reply_to":"AAAAW3%2F%2F0Uc%3D","updated":"2014-04-10 09:29:15.000000000","message":"I\u0027d rather remove the comment, the parameters are named easily enough to understand.","commit_id":"9346c838d43533d9b868275eb5263943f599f074"}],"nova/compute/rpcapi.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3d394283ccae59b5b13a17ce421e9405fbf04843","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        return cctxt.call(ctxt, \u0027get_diagnostics\u0027,"},{"line_number":419,"context_line":"                          instance\u003dinstance_p)"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    def get_vnc_console(self, ctxt, instance, console_type):"},{"line_number":422,"context_line":"        if self.can_send_version(\u00273.2\u0027):"},{"line_number":423,"context_line":"            version \u003d \u00273.2\u0027"},{"line_number":424,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9JnU%3D","line":421,"updated":"2013-12-16 09:48:24.000000000","message":"You need to copy this sort of pattern.","commit_id":"9aa27544460a3f5e932ed55c84d9fe34378ab095"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3d394283ccae59b5b13a17ce421e9405fbf04843","unresolved":false,"context_lines":[{"line_number":624,"context_line":"    def rescue_instance(self, ctxt, instance, rescue_password,"},{"line_number":625,"context_line":"                        rescue_image_ref):"},{"line_number":626,"context_line":"        # NOTE(russellb) Havana compat"},{"line_number":627,"context_line":"        version \u003d self._get_compat_version(\u00273.4\u0027, \u00272.0\u0027)"},{"line_number":628,"context_line":"        instance_p \u003d jsonutils.to_primitive(instance)"},{"line_number":629,"context_line":"        cctxt \u003d self.client.prepare(server\u003d_compute_host(None, instance),"},{"line_number":630,"context_line":"                version\u003dversion)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9Jm8%3D","line":627,"updated":"2013-12-16 09:48:24.000000000","message":"see above, we need to provide compatilitity with version 3.0 and before where you drop rescue_image_ref from the passed arguments, I think.","commit_id":"9aa27544460a3f5e932ed55c84d9fe34378ab095"},{"author":{"_account_id":9220,"name":"Abhishek Shivanna","email":"abhishes@thoughtworks.com","username":"abhisheks"},"change_message_id":"e83e5eb3c9d4c5ddc83f06a081e3b9a7651c3e2b","unresolved":false,"context_lines":[{"line_number":624,"context_line":"    def rescue_instance(self, ctxt, instance, rescue_password,"},{"line_number":625,"context_line":"                        rescue_image_ref):"},{"line_number":626,"context_line":"        # NOTE(russellb) Havana compat"},{"line_number":627,"context_line":"        version \u003d self._get_compat_version(\u00273.4\u0027, \u00272.0\u0027)"},{"line_number":628,"context_line":"        instance_p \u003d jsonutils.to_primitive(instance)"},{"line_number":629,"context_line":"        cctxt \u003d self.client.prepare(server\u003d_compute_host(None, instance),"},{"line_number":630,"context_line":"                version\u003dversion)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9I5Q%3D","line":627,"in_reply_to":"AAAATn%2F9Jm8%3D","updated":"2013-12-16 12:34:46.000000000","message":"Done","commit_id":"9aa27544460a3f5e932ed55c84d9fe34378ab095"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"42b301642f619773e1cc6b35b904c2dc45056494","unresolved":false,"context_lines":[{"line_number":624,"context_line":"    def rescue_instance(self, ctxt, instance, rescue_password,"},{"line_number":625,"context_line":"                        rescue_image_ref):"},{"line_number":626,"context_line":"        # NOTE(russellb) Havana compat"},{"line_number":627,"context_line":"        version \u003d self._get_compat_version(\u00273.4\u0027, \u00272.0\u0027)"},{"line_number":628,"context_line":"        instance_p \u003d jsonutils.to_primitive(instance)"},{"line_number":629,"context_line":"        cctxt \u003d self.client.prepare(server\u003d_compute_host(None, instance),"},{"line_number":630,"context_line":"                version\u003dversion)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9Jio%3D","line":627,"updated":"2013-12-16 09:56:42.000000000","message":"Looks like my previous comments still apply.","commit_id":"648660e5945d39c56c4354031bf2fad5fa5b38c5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6defbde37069d30b0463b93251b2dcf97a3dd9a4","unresolved":false,"context_lines":[{"line_number":624,"context_line":"    def rescue_instance(self, ctxt, instance, rescue_password,"},{"line_number":625,"context_line":"                        rescue_image_ref\u003dNone):"},{"line_number":626,"context_line":"        # NOTE(russellb) Havana compat"},{"line_number":627,"context_line":"        version \u003d self._get_compat_version(\u00273.4\u0027, \u00272.0\u0027)"},{"line_number":628,"context_line":"        instance_p \u003d jsonutils.to_primitive(instance)"},{"line_number":629,"context_line":"        cctxt \u003d self.client.prepare(server\u003d_compute_host(None, instance),"},{"line_number":630,"context_line":"                version\u003dversion)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F89pw%3D","line":627,"updated":"2013-12-18 10:53:01.000000000","message":"Please seem my comments on the earlier patch set, we need to provide better backwards compatibility than this, we need to support version 3.0 and 2.0 and 3.4 at the moment.\n\nYou marked the comment as done, but I can\u0027t see this change in the code above.","commit_id":"0ad8150d2620cd94419d043bfb146fccd6ca4cc5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3caa4ca49cf2cd4183de7f752fe553ec360912c2","unresolved":false,"context_lines":[{"line_number":687,"context_line":"                          instance\u003dinstance_p, volume_id\u003dvolume_id)"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    def rescue_instance(self, ctxt, instance, rescue_password):"},{"line_number":690,"context_line":"        if self.client.can_send_version(\u00273.9\u0027):"},{"line_number":691,"context_line":"            version \u003d \u00273.9\u0027"},{"line_number":692,"context_line":"        else:"},{"line_number":693,"context_line":"            # NOTE(russellb) Havana compat"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWn%2F%2F9G8%3D","side":"PARENT","line":690,"updated":"2014-04-08 09:22:18.000000000","message":"We may go through and remove the havana compat now, but we really need to send the 3.9 version if we can, see:\n\n3.9 - Update rescue_instance() to take an instance object","commit_id":"33fc957a5aeb9d310cbff3ac22c7a3c97a794f72"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3caa4ca49cf2cd4183de7f752fe553ec360912c2","unresolved":false,"context_lines":[{"line_number":693,"context_line":"        msg_args \u003d {\u0027rescue_password\u0027: rescue_password, \u0027instance\u0027: instance}"},{"line_number":694,"context_line":"        if self.client.can_send_version(\u00273.24\u0027):"},{"line_number":695,"context_line":"            version \u003d \u00273.24\u0027"},{"line_number":696,"context_line":"            msg_args[\u0027rescue_image_ref\u0027] \u003d rescue_image_ref"},{"line_number":697,"context_line":"        else:"},{"line_number":698,"context_line":"            # NOTE(russellb) Havana compat"},{"line_number":699,"context_line":"            version \u003d self._get_compat_version(\u00273.0\u0027, \u00272.44\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWn%2F%2F9GQ%3D","line":696,"updated":"2014-04-08 09:22:18.000000000","message":"just else if can send 3.9, version is 3.9 would probably do the trick here.","commit_id":"d36f8051ad79c2bea4e5777ff399ae62d4283343"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"a003b76135fd310e1c578944eb6c800262e317ea","unresolved":false,"context_lines":[{"line_number":693,"context_line":"        msg_args \u003d {\u0027rescue_password\u0027: rescue_password, \u0027instance\u0027: instance}"},{"line_number":694,"context_line":"        if self.client.can_send_version(\u00273.24\u0027):"},{"line_number":695,"context_line":"            version \u003d \u00273.24\u0027"},{"line_number":696,"context_line":"            msg_args[\u0027rescue_image_ref\u0027] \u003d rescue_image_ref"},{"line_number":697,"context_line":"        else:"},{"line_number":698,"context_line":"            # NOTE(russellb) Havana compat"},{"line_number":699,"context_line":"            version \u003d self._get_compat_version(\u00273.0\u0027, \u00272.44\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAW3%2F%2F%2Bic%3D","line":696,"in_reply_to":"AAAAWn%2F%2F9GQ%3D","updated":"2014-04-09 09:17:06.000000000","message":"Done","commit_id":"d36f8051ad79c2bea4e5777ff399ae62d4283343"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e05d0b87b79962903ad81b8efff507ae83161847","unresolved":false,"context_lines":[{"line_number":694,"context_line":"        if self.client.can_send_version(\u00273.24\u0027):"},{"line_number":695,"context_line":"            version \u003d \u00273.24\u0027"},{"line_number":696,"context_line":"            msg_args[\u0027rescue_image_ref\u0027] \u003d rescue_image_ref"},{"line_number":697,"context_line":"        elif self.client.can_send_version(\u00273.9\u0027):"},{"line_number":698,"context_line":"            version \u003d \u00273.9\u0027"},{"line_number":699,"context_line":"        else:"},{"line_number":700,"context_line":"            # NOTE(russellb) Havana compat"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAW3%2F%2F66A%3D","line":697,"updated":"2014-04-09 13:41:43.000000000","message":"cool, thanks.","commit_id":"403c4ef7eb464f1670a7ce60965943184081e67d"}],"nova/tests/api/openstack/compute/contrib/test_extended_rescue_with_image.py":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"be0b7e6e120354a448027b2542cce43257ba36d0","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo.config import cfg"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import mock"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from nova.api.openstack import extensions"},{"line_number":22,"context_line":"from nova import compute"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2Boqk%3D","line":19,"updated":"2014-01-23 17:38:30.000000000","message":"import order is wrong here.  You want mock and oslo.config in one block, then all the nova imports together in the last block.","commit_id":"17a6de324b3cc155dc69065a8f4a39d15663a92c"}],"nova/tests/api/openstack/compute/contrib/test_rescue.py":[{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"b01d9d53a0320d4d28b89d5d6eed92d35e1173e7","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def rescue(self, context, instance, rescue_password\u003dNone,"},{"line_number":29,"context_line":"           rescue_image_ref\u003dNone):"},{"line_number":30,"context_line":"    pass"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F%2B1A%3D","line":29,"updated":"2014-01-05 10:25:56.000000000","message":"Can you please add a new file to test against when ext mgr is enabled?\n\nYou can refer to https://review.openstack.org/#/c/52733/17/nova/tests/api/openstack/compute/contrib/test_extended_hypervisors.py as an example (I can not say it is a good example as it is not merged yet, but you can get some idea from it.)","commit_id":"729aa2102acda70058386e9933476098b368946a"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"f5516866a3f2e508c11855032a9b674257922421","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def rescue(self, context, instance, rescue_password\u003dNone,"},{"line_number":29,"context_line":"           rescue_image_ref\u003dNone):"},{"line_number":30,"context_line":"    pass"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F99I%3D","line":29,"in_reply_to":"AAAAUH%2F%2F%2B1A%3D","updated":"2014-01-06 10:09:07.000000000","message":"This has been added as a part of test_extended_rescue_with_image.py","commit_id":"729aa2102acda70058386e9933476098b368946a"}],"nova/tests/compute/test_compute.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3caa4ca49cf2cd4183de7f752fe553ec360912c2","unresolved":false,"context_lines":[{"line_number":2033,"context_line":"        self.compute.rescue_instance(self.context, instance\u003dinstance,"},{"line_number":2034,"context_line":"            rescue_password\u003d\"password\", rescue_image_ref\u003dimage_ref)"},{"line_number":2035,"context_line":""},{"line_number":2036,"context_line":"        mock_get_remote_image_service.assert_called_with(mock.ANY, image_ref)"},{"line_number":2037,"context_line":"        mock_get_image_metadata.assert_called_with(mock.ANY, mock.ANY,"},{"line_number":2038,"context_line":"                                                   image_ref, instance)"},{"line_number":2039,"context_line":"        mock_rescue.assert_called_with(mock.ANY, instance, mock.ANY,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWn%2F%2F9Fk%3D","line":2036,"updated":"2014-04-08 09:22:18.000000000","message":"not sure we should/need to have so many mock.ANY in all these args.","commit_id":"d36f8051ad79c2bea4e5777ff399ae62d4283343"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"a003b76135fd310e1c578944eb6c800262e317ea","unresolved":false,"context_lines":[{"line_number":2033,"context_line":"        self.compute.rescue_instance(self.context, instance\u003dinstance,"},{"line_number":2034,"context_line":"            rescue_password\u003d\"password\", rescue_image_ref\u003dimage_ref)"},{"line_number":2035,"context_line":""},{"line_number":2036,"context_line":"        mock_get_remote_image_service.assert_called_with(mock.ANY, image_ref)"},{"line_number":2037,"context_line":"        mock_get_image_metadata.assert_called_with(mock.ANY, mock.ANY,"},{"line_number":2038,"context_line":"                                                   image_ref, instance)"},{"line_number":2039,"context_line":"        mock_rescue.assert_called_with(mock.ANY, instance, mock.ANY,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAW3%2F%2F9r0%3D","line":2036,"in_reply_to":"AAAAWn%2F%2F9Fk%3D","updated":"2014-04-09 09:17:06.000000000","message":"Done","commit_id":"d36f8051ad79c2bea4e5777ff399ae62d4283343"}],"nova/tests/compute/test_rpcapi.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3d394283ccae59b5b13a17ce421e9405fbf04843","unresolved":false,"context_lines":[{"line_number":559,"context_line":""},{"line_number":560,"context_line":"    def test_rescue_instance(self):"},{"line_number":561,"context_line":"        self._test_compute_api(\u0027rescue_instance\u0027, \u0027cast\u0027,"},{"line_number":562,"context_line":"                instance\u003dself.fake_instance, rescue_password\u003d\u0027pw\u0027,"},{"line_number":563,"context_line":"                rescue_image_ref\u003d\u0027fake_image_ref\u0027, version\u003d\u00273.4\u0027)"},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"        # NOTE(russellb) Havana compat"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9JmI%3D","line":562,"updated":"2013-12-16 09:48:24.000000000","message":"Need to test v3.0 as well really.","commit_id":"9aa27544460a3f5e932ed55c84d9fe34378ab095"},{"author":{"_account_id":9220,"name":"Abhishek Shivanna","email":"abhishes@thoughtworks.com","username":"abhisheks"},"change_message_id":"e83e5eb3c9d4c5ddc83f06a081e3b9a7651c3e2b","unresolved":false,"context_lines":[{"line_number":559,"context_line":""},{"line_number":560,"context_line":"    def test_rescue_instance(self):"},{"line_number":561,"context_line":"        self._test_compute_api(\u0027rescue_instance\u0027, \u0027cast\u0027,"},{"line_number":562,"context_line":"                instance\u003dself.fake_instance, rescue_password\u003d\u0027pw\u0027,"},{"line_number":563,"context_line":"                rescue_image_ref\u003d\u0027fake_image_ref\u0027, version\u003d\u00273.4\u0027)"},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"        # NOTE(russellb) Havana compat"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9Ji4%3D","line":562,"in_reply_to":"AAAATn%2F9JmI%3D","updated":"2013-12-16 12:34:46.000000000","message":"we have a different commit for v3 changes.","commit_id":"9aa27544460a3f5e932ed55c84d9fe34378ab095"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3d394283ccae59b5b13a17ce421e9405fbf04843","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        self.flags(compute\u003d\u0027havana\u0027, group\u003d\u0027upgrade_levels\u0027)"},{"line_number":567,"context_line":"        self._test_compute_api(\u0027rescue_instance\u0027, \u0027cast\u0027,"},{"line_number":568,"context_line":"                instance\u003dself.fake_instance, rescue_password\u003d\u0027pw\u0027,"},{"line_number":569,"context_line":"                version\u003d\u00272.0\u0027, rescue_image_ref\u003d\u0027fake_image_ref\u0027)"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    def test_reset_network(self):"},{"line_number":572,"context_line":"        self._test_compute_api(\u0027reset_network\u0027, \u0027cast\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9JmA%3D","line":569,"updated":"2013-12-16 09:48:24.000000000","message":"Not sure we should be passing the rescue_image_ref at this point.","commit_id":"9aa27544460a3f5e932ed55c84d9fe34378ab095"},{"author":{"_account_id":9220,"name":"Abhishek Shivanna","email":"abhishes@thoughtworks.com","username":"abhisheks"},"change_message_id":"e83e5eb3c9d4c5ddc83f06a081e3b9a7651c3e2b","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        self.flags(compute\u003d\u0027havana\u0027, group\u003d\u0027upgrade_levels\u0027)"},{"line_number":567,"context_line":"        self._test_compute_api(\u0027rescue_instance\u0027, \u0027cast\u0027,"},{"line_number":568,"context_line":"                instance\u003dself.fake_instance, rescue_password\u003d\u0027pw\u0027,"},{"line_number":569,"context_line":"                version\u003d\u00272.0\u0027, rescue_image_ref\u003d\u0027fake_image_ref\u0027)"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    def test_reset_network(self):"},{"line_number":572,"context_line":"        self._test_compute_api(\u0027reset_network\u0027, \u0027cast\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9I5w%3D","line":569,"in_reply_to":"AAAATn%2F9JmA%3D","updated":"2013-12-16 12:34:46.000000000","message":"have removed it in the latest patch.","commit_id":"9aa27544460a3f5e932ed55c84d9fe34378ab095"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3caa4ca49cf2cd4183de7f752fe553ec360912c2","unresolved":false,"context_lines":[{"line_number":571,"context_line":"                instance\u003dself.fake_instance, rescue_password\u003d\u0027pw\u0027,"},{"line_number":572,"context_line":"                rescue_image_ref\u003d\u0027fake_image_ref\u0027, version\u003d\u00273.24\u0027)"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"        # NOTE(russellb) Havana compat"},{"line_number":575,"context_line":"        self.flags(compute\u003d\u0027havana\u0027, group\u003d\u0027upgrade_levels\u0027)"},{"line_number":576,"context_line":"        self._test_compute_api(\u0027rescue_instance\u0027, \u0027cast\u0027,"},{"line_number":577,"context_line":"                instance\u003dself.fake_instance, rescue_password\u003d\u0027pw\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWn%2F%2F9FU%3D","line":574,"updated":"2014-04-08 09:22:18.000000000","message":"Please add a test for version 3.9 in here, you can then test your fix of rpcapi.","commit_id":"d36f8051ad79c2bea4e5777ff399ae62d4283343"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"a003b76135fd310e1c578944eb6c800262e317ea","unresolved":false,"context_lines":[{"line_number":571,"context_line":"                instance\u003dself.fake_instance, rescue_password\u003d\u0027pw\u0027,"},{"line_number":572,"context_line":"                rescue_image_ref\u003d\u0027fake_image_ref\u0027, version\u003d\u00273.24\u0027)"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"        # NOTE(russellb) Havana compat"},{"line_number":575,"context_line":"        self.flags(compute\u003d\u0027havana\u0027, group\u003d\u0027upgrade_levels\u0027)"},{"line_number":576,"context_line":"        self._test_compute_api(\u0027rescue_instance\u0027, \u0027cast\u0027,"},{"line_number":577,"context_line":"                instance\u003dself.fake_instance, rescue_password\u003d\u0027pw\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAW3%2F%2F9ro%3D","line":574,"in_reply_to":"AAAAWn%2F%2F9FU%3D","updated":"2014-04-09 09:17:06.000000000","message":"Done","commit_id":"d36f8051ad79c2bea4e5777ff399ae62d4283343"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e05d0b87b79962903ad81b8efff507ae83161847","unresolved":false,"context_lines":[{"line_number":571,"context_line":"        self._test_compute_api(\u0027rescue_instance\u0027, \u0027cast\u0027,"},{"line_number":572,"context_line":"            instance\u003dself.fake_instance, rescue_password\u003d\u0027pw\u0027, version\u003d\u00273.9\u0027)"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    def test_rescue_instance_with_rescue_image_ref_passed(self):"},{"line_number":575,"context_line":"        self._test_compute_api(\u0027rescue_instance\u0027, \u0027cast\u0027,"},{"line_number":576,"context_line":"            instance\u003dself.fake_instance, rescue_password\u003d\u0027pw\u0027,"},{"line_number":577,"context_line":"            rescue_image_ref\u003d\u0027fake_image_ref\u0027, version\u003d\u00273.24\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAW3%2F%2F65E%3D","line":574,"updated":"2014-04-09 13:41:43.000000000","message":"as this is the new one, I would have this as the default test myself, but this is cool.\n\nI know the rest of this file doesn\u0027t split up the tests like this, but really, I think it should do. So I am +1 on this bit really.","commit_id":"403c4ef7eb464f1670a7ce60965943184081e67d"}],"nova/tests/integrated/v3/api_samples/os-rescue/server-rescue-req-with-image-ref.xml.tpl":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"69e4e86810e7ab9c8fdc91d107b7407a61c006b1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e"},{"line_number":2,"context_line":"\u003crescue xmlns\u003d\"http://docs.openstack.org/compute/api/v1.1\""},{"line_number":3,"context_line":"    admin_password\u003d\"%(password)s\" rescue_image_ref\u003d\"%(rescue_image_ref)s\"/\u003e"}],"source_content_type":"text/x-smarty","patch_set":12,"id":"AAAAUX%2F%2FOI8%3D","line":2,"updated":"2014-03-03 13:55:51.000000000","message":"again, not sure you need this anymore.","commit_id":"37af0988013b151429655f65424942f3d91044ec"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"aaeec3dee7829751b1cbb6b56246c7e2a6fd4247","unresolved":false,"context_lines":[{"line_number":2180,"context_line":"        unrescue_xml_path \u003d os.path.join(instance_dir, \u0027unrescue.xml\u0027)"},{"line_number":2181,"context_line":"        libvirt_utils.write_to_file(unrescue_xml_path, unrescue_xml)"},{"line_number":2182,"context_line":""},{"line_number":2183,"context_line":"        rescue_image_id \u003d None"},{"line_number":2184,"context_line":"        if image_meta is not None:"},{"line_number":2185,"context_line":"            rescue_image_id \u003d image_meta.get(\u0027id\u0027)"},{"line_number":2186,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWn%2F%2F9fc%3D","line":2183,"updated":"2014-04-08 08:34:33.000000000","message":"why not set this as follows:\n\nif image_meta is not None:\n    rescue_image_id \u003d image_meta.get(\u0027id\u0027)\nelse:\n    rescue_image_id \u003d None","commit_id":"d36f8051ad79c2bea4e5777ff399ae62d4283343"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"a003b76135fd310e1c578944eb6c800262e317ea","unresolved":false,"context_lines":[{"line_number":2180,"context_line":"        unrescue_xml_path \u003d os.path.join(instance_dir, \u0027unrescue.xml\u0027)"},{"line_number":2181,"context_line":"        libvirt_utils.write_to_file(unrescue_xml_path, unrescue_xml)"},{"line_number":2182,"context_line":""},{"line_number":2183,"context_line":"        rescue_image_id \u003d None"},{"line_number":2184,"context_line":"        if image_meta is not None:"},{"line_number":2185,"context_line":"            rescue_image_id \u003d image_meta.get(\u0027id\u0027)"},{"line_number":2186,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAW3%2F%2F9oI%3D","line":2183,"in_reply_to":"AAAAWn%2F%2F9fc%3D","updated":"2014-04-09 09:17:06.000000000","message":"Done.\n\nIs this the convention followed, or is there a specific reason why this is better?","commit_id":"d36f8051ad79c2bea4e5777ff399ae62d4283343"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3caa4ca49cf2cd4183de7f752fe553ec360912c2","unresolved":false,"context_lines":[{"line_number":2185,"context_line":"            rescue_image_id \u003d image_meta.get(\u0027id\u0027)"},{"line_number":2186,"context_line":""},{"line_number":2187,"context_line":"        rescue_images \u003d {"},{"line_number":2188,"context_line":"            \u0027image_id\u0027: (rescue_image_id or"},{"line_number":2189,"context_line":"                        CONF.libvirt.rescue_image_id or instance[\u0027image_ref\u0027]),"},{"line_number":2190,"context_line":"            \u0027kernel_id\u0027: (CONF.libvirt.rescue_kernel_id or"},{"line_number":2191,"context_line":"                          instance[\u0027kernel_id\u0027]),"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWn%2F%2F9Dk%3D","line":2188,"updated":"2014-04-08 09:22:18.000000000","message":"I would be tempted to pull out all of these options into if statements above, but this is quite clear I think.\n\nI wonder if the conf description will need updating to say it can be overridden by the user\u0027s choice?","commit_id":"d36f8051ad79c2bea4e5777ff399ae62d4283343"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"a003b76135fd310e1c578944eb6c800262e317ea","unresolved":false,"context_lines":[{"line_number":2185,"context_line":"            rescue_image_id \u003d image_meta.get(\u0027id\u0027)"},{"line_number":2186,"context_line":""},{"line_number":2187,"context_line":"        rescue_images \u003d {"},{"line_number":2188,"context_line":"            \u0027image_id\u0027: (rescue_image_id or"},{"line_number":2189,"context_line":"                        CONF.libvirt.rescue_image_id or instance[\u0027image_ref\u0027]),"},{"line_number":2190,"context_line":"            \u0027kernel_id\u0027: (CONF.libvirt.rescue_kernel_id or"},{"line_number":2191,"context_line":"                          instance[\u0027kernel_id\u0027]),"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAW3%2F%2F9n4%3D","line":2188,"in_reply_to":"AAAAWn%2F%2F9Dk%3D","updated":"2014-04-09 09:17:06.000000000","message":"Done","commit_id":"d36f8051ad79c2bea4e5777ff399ae62d4283343"}]}
