)]}'
{"nova/api/openstack/compute/rest_api_version_history.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e5969eb7d22359a11a0f7752a009e1dce315705d","unresolved":false,"context_lines":[{"line_number":1139,"context_line":"----"},{"line_number":1140,"context_line":""},{"line_number":1141,"context_line":"Adds support for rescuing boot from volume instances when the compute host"},{"line_number":1142,"context_line":"reports the COMPUTE_BFV_RESCUE capability trait."}],"source_content_type":"text/x-rst","patch_set":20,"id":"df33271e_279710ee","line":1142,"range":{"start_line":1142,"start_character":12,"end_line":1142,"end_character":30},"updated":"2020-04-07 16:27:53.000000000","message":"``literal``","commit_id":"16692861fb5b2b6a4d6a801d2202811e28ca32f6"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"81c2b66f9d1094eb417a56d0822fcfcee366a879","unresolved":false,"context_lines":[{"line_number":1139,"context_line":"----"},{"line_number":1140,"context_line":""},{"line_number":1141,"context_line":"Adds support for rescuing boot from volume instances when the compute host"},{"line_number":1142,"context_line":"reports the COMPUTE_BFV_RESCUE capability trait."}],"source_content_type":"text/x-rst","patch_set":20,"id":"df33271e_0a5491c9","line":1142,"range":{"start_line":1142,"start_character":12,"end_line":1142,"end_character":30},"in_reply_to":"df33271e_279710ee","updated":"2020-04-07 16:35:05.000000000","message":"Done","commit_id":"16692861fb5b2b6a4d6a801d2202811e28ca32f6"}],"nova/tests/functional/api_sample_tests/test_rescue.py":[{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"09a8610df832cae15156df0772880712474b8e07","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        self._verify_response(\u0027server-get-resp-unrescue\u0027, subs, response, 200)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"class Rescuev287JsonTest(RescueJsonTest):"},{"line_number":98,"context_line":"    \"\"\"2.87 adds support for rescuing boot from volume instances\"\"\""},{"line_number":99,"context_line":"    microversion \u003d \u00272.87\u0027"},{"line_number":100,"context_line":"    scenarios \u003d [(\u0027v2_87\u0027, {\u0027api_major_version\u0027: \u0027v2.1\u0027})]"}],"source_content_type":"text/x-python","patch_set":22,"id":"df33271e_6f70b9a6","line":100,"range":{"start_line":97,"start_character":0,"end_line":100,"end_character":58},"updated":"2020-04-08 08:50:39.000000000","message":"As a result of this we end up duplicating API samples.\n\nThis might not be required given the request and response are unchanged by this microversion, happy to remove if that\u0027s the case.","commit_id":"dbab559892fe9b062e5fde8ea8cd123cca4ad0b1"}],"nova/tests/functional/test_server_rescue.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"093826e7c9c4ac3e1fb4db6fc18bd8f36b223641","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                      ex.response.text)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class DisallowBFVRescuev281WithTrait(BFVRescue):"},{"line_number":56,"context_line":"    \"\"\"Asserts that BFV rescue requests fail prior to microversion 2.82 even"},{"line_number":57,"context_line":"       when the required COMPUTE_RESCUE_BFV trait is reported by the compute."},{"line_number":58,"context_line":"    \"\"\""},{"line_number":59,"context_line":"    compute_driver \u003d \u0027fake.RescueBFVDriver\u0027"},{"line_number":60,"context_line":"    microversion \u003d \u00272.81\u0027"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def test_bfv_rescue_not_supported(self):"},{"line_number":63,"context_line":"        server \u003d self._create_bfv_server()"},{"line_number":64,"context_line":"        ex \u003d self.assertRaises(client.OpenStackApiException,"},{"line_number":65,"context_line":"            self.api.post_server_action, server[\u0027id\u0027], {\u0027rescue\u0027: {"},{"line_number":66,"context_line":"            \u0027rescue_image_ref\u0027: \u0027155d900f-4e14-4e4c-a73d-069cbf4541e6\u0027}})"},{"line_number":67,"context_line":"        self.assertEqual(400, ex.response.status_code)"},{"line_number":68,"context_line":"        self.assertIn(\u0027Cannot rescue a volume-backed instance\u0027,"},{"line_number":69,"context_line":"                      ex.response.text)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class DisallowBFVRescuev282WithoutTrait(BFVRescue):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_b905bc11","line":69,"range":{"start_line":55,"start_character":0,"end_line":69,"end_character":39},"updated":"2020-02-19 11:40:28.000000000","message":"nit: Rather than using separate tests like this, you could use the \u0027temporary_mutation\u0027 function instead. Might be a bit faster than setting everything up and tearing it down. This is also fine though","commit_id":"642370660c0b7a0fb677b34c75657119edf4a6a4"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"cb31565d8d5405a4960cad584838b9cefd680b6e","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                      ex.response.text)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class DisallowBFVRescuev281WithTrait(BFVRescue):"},{"line_number":56,"context_line":"    \"\"\"Asserts that BFV rescue requests fail prior to microversion 2.82 even"},{"line_number":57,"context_line":"       when the required COMPUTE_RESCUE_BFV trait is reported by the compute."},{"line_number":58,"context_line":"    \"\"\""},{"line_number":59,"context_line":"    compute_driver \u003d \u0027fake.RescueBFVDriver\u0027"},{"line_number":60,"context_line":"    microversion \u003d \u00272.81\u0027"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def test_bfv_rescue_not_supported(self):"},{"line_number":63,"context_line":"        server \u003d self._create_bfv_server()"},{"line_number":64,"context_line":"        ex \u003d self.assertRaises(client.OpenStackApiException,"},{"line_number":65,"context_line":"            self.api.post_server_action, server[\u0027id\u0027], {\u0027rescue\u0027: {"},{"line_number":66,"context_line":"            \u0027rescue_image_ref\u0027: \u0027155d900f-4e14-4e4c-a73d-069cbf4541e6\u0027}})"},{"line_number":67,"context_line":"        self.assertEqual(400, ex.response.status_code)"},{"line_number":68,"context_line":"        self.assertIn(\u0027Cannot rescue a volume-backed instance\u0027,"},{"line_number":69,"context_line":"                      ex.response.text)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class DisallowBFVRescuev282WithoutTrait(BFVRescue):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_00a330b2","line":69,"range":{"start_line":55,"start_character":0,"end_line":69,"end_character":39},"in_reply_to":"3fa7e38b_b905bc11","updated":"2020-02-19 15:31:49.000000000","message":"ACK, I can look into that in a respin.","commit_id":"642370660c0b7a0fb677b34c75657119edf4a6a4"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"e22f8463a12e188a9655620b22d49430ab5fd20b","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        return server"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class DisallowBFVRescuev281(BFVRescue):"},{"line_number":40,"context_line":"    \"\"\"Asserts that BFV rescue requests fail prior to microversion 2.83."},{"line_number":41,"context_line":"    \"\"\""},{"line_number":42,"context_line":"    compute_driver \u003d \u0027fake.MediumFakeDriver\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"df33271e_be452773","line":39,"range":{"start_line":39,"start_character":24,"end_line":39,"end_character":27},"updated":"2020-03-23 11:22:46.000000000","message":"282","commit_id":"c61858b9bdb6e7b8fbf20fbdec4967089ce80bb3"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"f8538be6a348e05be1511302ad0362650a4a6aa9","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        return server"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class DisallowBFVRescuev281(BFVRescue):"},{"line_number":40,"context_line":"    \"\"\"Asserts that BFV rescue requests fail prior to microversion 2.83."},{"line_number":41,"context_line":"    \"\"\""},{"line_number":42,"context_line":"    compute_driver \u003d \u0027fake.MediumFakeDriver\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"df33271e_7f79affa","line":39,"range":{"start_line":39,"start_character":24,"end_line":39,"end_character":27},"in_reply_to":"df33271e_be452773","updated":"2020-03-25 14:30:00.000000000","message":"Done","commit_id":"c61858b9bdb6e7b8fbf20fbdec4967089ce80bb3"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"e22f8463a12e188a9655620b22d49430ab5fd20b","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    \"\"\"Asserts that BFV rescue requests fail prior to microversion 2.83."},{"line_number":41,"context_line":"    \"\"\""},{"line_number":42,"context_line":"    compute_driver \u003d \u0027fake.MediumFakeDriver\u0027"},{"line_number":43,"context_line":"    microversion \u003d \u00272.81\u0027"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def test_bfv_rescue_not_supported(self):"},{"line_number":46,"context_line":"        server \u003d self._create_bfv_server()"}],"source_content_type":"text/x-python","patch_set":15,"id":"df33271e_9e4ae37d","line":43,"range":{"start_line":43,"start_character":20,"end_line":43,"end_character":24},"updated":"2020-03-23 11:22:46.000000000","message":"2.82","commit_id":"c61858b9bdb6e7b8fbf20fbdec4967089ce80bb3"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"f8538be6a348e05be1511302ad0362650a4a6aa9","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    \"\"\"Asserts that BFV rescue requests fail prior to microversion 2.83."},{"line_number":41,"context_line":"    \"\"\""},{"line_number":42,"context_line":"    compute_driver \u003d \u0027fake.MediumFakeDriver\u0027"},{"line_number":43,"context_line":"    microversion \u003d \u00272.81\u0027"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def test_bfv_rescue_not_supported(self):"},{"line_number":46,"context_line":"        server \u003d self._create_bfv_server()"}],"source_content_type":"text/x-python","patch_set":15,"id":"df33271e_5f7cabea","line":43,"range":{"start_line":43,"start_character":20,"end_line":43,"end_character":24},"in_reply_to":"df33271e_9e4ae37d","updated":"2020-03-25 14:30:00.000000000","message":"Done","commit_id":"c61858b9bdb6e7b8fbf20fbdec4967089ce80bb3"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"e22f8463a12e188a9655620b22d49430ab5fd20b","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                      ex.response.text)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class DisallowBFVRescuev281WithTrait(BFVRescue):"},{"line_number":56,"context_line":"    \"\"\"Asserts that BFV rescue requests fail prior to microversion 2.83 even"},{"line_number":57,"context_line":"       when the required COMPUTE_RESCUE_BFV trait is reported by the compute."},{"line_number":58,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"df33271e_de5bcb51","line":55,"range":{"start_line":55,"start_character":24,"end_line":55,"end_character":27},"updated":"2020-03-23 11:22:46.000000000","message":"282","commit_id":"c61858b9bdb6e7b8fbf20fbdec4967089ce80bb3"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"f8538be6a348e05be1511302ad0362650a4a6aa9","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                      ex.response.text)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class DisallowBFVRescuev281WithTrait(BFVRescue):"},{"line_number":56,"context_line":"    \"\"\"Asserts that BFV rescue requests fail prior to microversion 2.83 even"},{"line_number":57,"context_line":"       when the required COMPUTE_RESCUE_BFV trait is reported by the compute."},{"line_number":58,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"df33271e_bf8337cc","line":55,"range":{"start_line":55,"start_character":24,"end_line":55,"end_character":27},"in_reply_to":"df33271e_de5bcb51","updated":"2020-03-25 14:30:00.000000000","message":"Done","commit_id":"c61858b9bdb6e7b8fbf20fbdec4967089ce80bb3"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"e22f8463a12e188a9655620b22d49430ab5fd20b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"       when the required COMPUTE_RESCUE_BFV trait is reported by the compute."},{"line_number":58,"context_line":"    \"\"\""},{"line_number":59,"context_line":"    compute_driver \u003d \u0027fake.RescueBFVDriver\u0027"},{"line_number":60,"context_line":"    microversion \u003d \u00272.81\u0027"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def test_bfv_rescue_not_supported(self):"},{"line_number":63,"context_line":"        server \u003d self._create_bfv_server()"}],"source_content_type":"text/x-python","patch_set":15,"id":"df33271e_3e59175a","line":60,"range":{"start_line":60,"start_character":20,"end_line":60,"end_character":24},"updated":"2020-03-23 11:22:46.000000000","message":"2.82","commit_id":"c61858b9bdb6e7b8fbf20fbdec4967089ce80bb3"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"f8538be6a348e05be1511302ad0362650a4a6aa9","unresolved":false,"context_lines":[{"line_number":57,"context_line":"       when the required COMPUTE_RESCUE_BFV trait is reported by the compute."},{"line_number":58,"context_line":"    \"\"\""},{"line_number":59,"context_line":"    compute_driver \u003d \u0027fake.RescueBFVDriver\u0027"},{"line_number":60,"context_line":"    microversion \u003d \u00272.81\u0027"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def test_bfv_rescue_not_supported(self):"},{"line_number":63,"context_line":"        server \u003d self._create_bfv_server()"}],"source_content_type":"text/x-python","patch_set":15,"id":"df33271e_9f8633db","line":60,"range":{"start_line":60,"start_character":20,"end_line":60,"end_character":24},"in_reply_to":"df33271e_3e59175a","updated":"2020-03-25 14:30:00.000000000","message":"Done","commit_id":"c61858b9bdb6e7b8fbf20fbdec4967089ce80bb3"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"e22f8463a12e188a9655620b22d49430ab5fd20b","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                      ex.response.text)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class DisallowBFVRescuev282WithoutTrait(BFVRescue):"},{"line_number":73,"context_line":"    \"\"\"Asserts that BFV rescue requests fail with microversion 2.83 (or later)"},{"line_number":74,"context_line":"    when the required COMPUTE_RESCUE_BFV trait is not reported by the compute."},{"line_number":75,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"df33271e_7e30bf08","line":72,"range":{"start_line":72,"start_character":24,"end_line":72,"end_character":27},"updated":"2020-03-23 11:22:46.000000000","message":"283","commit_id":"c61858b9bdb6e7b8fbf20fbdec4967089ce80bb3"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"f8538be6a348e05be1511302ad0362650a4a6aa9","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                      ex.response.text)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class DisallowBFVRescuev282WithoutTrait(BFVRescue):"},{"line_number":73,"context_line":"    \"\"\"Asserts that BFV rescue requests fail with microversion 2.83 (or later)"},{"line_number":74,"context_line":"    when the required COMPUTE_RESCUE_BFV trait is not reported by the compute."},{"line_number":75,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"df33271e_ff6c9f37","line":72,"range":{"start_line":72,"start_character":24,"end_line":72,"end_character":27},"in_reply_to":"df33271e_7e30bf08","updated":"2020-03-25 14:30:00.000000000","message":"Done","commit_id":"c61858b9bdb6e7b8fbf20fbdec4967089ce80bb3"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"e22f8463a12e188a9655620b22d49430ab5fd20b","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                      ex.response.text)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class AllowBFVRescuev282WithTrait(BFVRescue):"},{"line_number":90,"context_line":"    \"\"\"Asserts that BFV rescue requests pass with microversion 2.83 (or later)"},{"line_number":91,"context_line":"    when the required COMPUTE_RESCUE_BFV trait is reported by the compute."},{"line_number":92,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"df33271e_5e35fbf6","line":89,"range":{"start_line":89,"start_character":21,"end_line":89,"end_character":24},"updated":"2020-03-23 11:22:46.000000000","message":"283","commit_id":"c61858b9bdb6e7b8fbf20fbdec4967089ce80bb3"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"f8538be6a348e05be1511302ad0362650a4a6aa9","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                      ex.response.text)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class AllowBFVRescuev282WithTrait(BFVRescue):"},{"line_number":90,"context_line":"    \"\"\"Asserts that BFV rescue requests pass with microversion 2.83 (or later)"},{"line_number":91,"context_line":"    when the required COMPUTE_RESCUE_BFV trait is reported by the compute."},{"line_number":92,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"df33271e_df671b51","line":89,"range":{"start_line":89,"start_character":21,"end_line":89,"end_character":24},"in_reply_to":"df33271e_5e35fbf6","updated":"2020-03-25 14:30:00.000000000","message":"Done","commit_id":"c61858b9bdb6e7b8fbf20fbdec4967089ce80bb3"}],"nova/tests/unit/api/openstack/compute/test_rescue.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"e22f8463a12e188a9655620b22d49430ab5fd20b","unresolved":false,"context_lines":[{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def setUp(self):"},{"line_number":301,"context_line":"        super(RescueTestV283, self).setUp()"},{"line_number":302,"context_line":"        v282_req \u003d api_version_request.APIVersionRequest(\u00272.83\u0027)"},{"line_number":303,"context_line":"        self.fake_req.api_version_request \u003d v282_req"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    @mock.patch(\u0027nova.compute.api.API.rescue\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"df33271e_9e3f83d5","line":302,"range":{"start_line":302,"start_character":9,"end_line":302,"end_character":12},"updated":"2020-03-23 11:22:46.000000000","message":"283","commit_id":"c61858b9bdb6e7b8fbf20fbdec4967089ce80bb3"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"f8538be6a348e05be1511302ad0362650a4a6aa9","unresolved":false,"context_lines":[{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def setUp(self):"},{"line_number":301,"context_line":"        super(RescueTestV283, self).setUp()"},{"line_number":302,"context_line":"        v282_req \u003d api_version_request.APIVersionRequest(\u00272.83\u0027)"},{"line_number":303,"context_line":"        self.fake_req.api_version_request \u003d v282_req"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    @mock.patch(\u0027nova.compute.api.API.rescue\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"df33271e_5f65cb44","line":302,"range":{"start_line":302,"start_character":9,"end_line":302,"end_character":12},"in_reply_to":"df33271e_9e3f83d5","updated":"2020-03-25 14:30:00.000000000","message":"Done","commit_id":"c61858b9bdb6e7b8fbf20fbdec4967089ce80bb3"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"e22f8463a12e188a9655620b22d49430ab5fd20b","unresolved":false,"context_lines":[{"line_number":300,"context_line":"    def setUp(self):"},{"line_number":301,"context_line":"        super(RescueTestV283, self).setUp()"},{"line_number":302,"context_line":"        v282_req \u003d api_version_request.APIVersionRequest(\u00272.83\u0027)"},{"line_number":303,"context_line":"        self.fake_req.api_version_request \u003d v282_req"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    @mock.patch(\u0027nova.compute.api.API.rescue\u0027)"},{"line_number":306,"context_line":"    @mock.patch(\u0027nova.api.openstack.common.get_instance\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"df33271e_fe232fbd","line":303,"range":{"start_line":303,"start_character":45,"end_line":303,"end_character":48},"updated":"2020-03-23 11:22:46.000000000","message":"283","commit_id":"c61858b9bdb6e7b8fbf20fbdec4967089ce80bb3"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"f8538be6a348e05be1511302ad0362650a4a6aa9","unresolved":false,"context_lines":[{"line_number":300,"context_line":"    def setUp(self):"},{"line_number":301,"context_line":"        super(RescueTestV283, self).setUp()"},{"line_number":302,"context_line":"        v282_req \u003d api_version_request.APIVersionRequest(\u00272.83\u0027)"},{"line_number":303,"context_line":"        self.fake_req.api_version_request \u003d v282_req"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    @mock.patch(\u0027nova.compute.api.API.rescue\u0027)"},{"line_number":306,"context_line":"    @mock.patch(\u0027nova.api.openstack.common.get_instance\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"df33271e_bf5cd77e","line":303,"range":{"start_line":303,"start_character":45,"end_line":303,"end_character":48},"in_reply_to":"df33271e_fe232fbd","updated":"2020-03-25 14:30:00.000000000","message":"Done","commit_id":"c61858b9bdb6e7b8fbf20fbdec4967089ce80bb3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e5969eb7d22359a11a0f7752a009e1dce315705d","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                          self.fake_req, UUID, body\u003dbody)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"class RescuePolicyEnforcementV21(test.NoDBTestCase):"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def setUp(self):"},{"line_number":227,"context_line":"        super(RescuePolicyEnforcementV21, self).setUp()"},{"line_number":228,"context_line":"        self.controller \u003d rescue_v21.RescueController()"},{"line_number":229,"context_line":"        self.req \u003d fakes.HTTPRequest.blank(\u0027\u0027)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    @mock.patch(\u0027nova.api.openstack.common.get_instance\u0027)"},{"line_number":232,"context_line":"    def test_rescue_policy_failed_with_other_project(self, get_instance_mock):"},{"line_number":233,"context_line":"        get_instance_mock.return_value \u003d fake_instance.fake_instance_obj("},{"line_number":234,"context_line":"            self.req.environ[\u0027nova.context\u0027],"},{"line_number":235,"context_line":"            project_id\u003dself.req.environ[\u0027nova.context\u0027].project_id)"},{"line_number":236,"context_line":"        rule_name \u003d \"os_compute_api:os-rescue\""},{"line_number":237,"context_line":"        self.policy.set_rules({rule_name: \"project_id:%(project_id)s\"})"},{"line_number":238,"context_line":"        body \u003d {\"rescue\": {\"adminPass\": \"AABBCC112233\"}}"},{"line_number":239,"context_line":"        # Change the project_id in request context."},{"line_number":240,"context_line":"        self.req.environ[\u0027nova.context\u0027].project_id \u003d \u0027other-project\u0027"},{"line_number":241,"context_line":"        exc \u003d self.assertRaises("},{"line_number":242,"context_line":"            exception.PolicyNotAuthorized,"},{"line_number":243,"context_line":"            self.controller._rescue, self.req, fakes.FAKE_UUID,"},{"line_number":244,"context_line":"            body\u003dbody)"},{"line_number":245,"context_line":"        self.assertEqual("},{"line_number":246,"context_line":"            \"Policy doesn\u0027t allow %s to be performed.\" % rule_name,"},{"line_number":247,"context_line":"            exc.format_message())"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    @mock.patch(\u0027nova.api.openstack.common.get_instance\u0027)"},{"line_number":250,"context_line":"    def test_rescue_overridden_policy_failed_with_other_user_in_same_project("},{"line_number":251,"context_line":"        self, get_instance_mock):"},{"line_number":252,"context_line":"        get_instance_mock.return_value \u003d ("},{"line_number":253,"context_line":"            fake_instance.fake_instance_obj(self.req.environ[\u0027nova.context\u0027]))"},{"line_number":254,"context_line":"        rule_name \u003d \"os_compute_api:os-rescue\""},{"line_number":255,"context_line":"        self.policy.set_rules({rule_name: \"user_id:%(user_id)s\"})"},{"line_number":256,"context_line":"        # Change the user_id in request context."},{"line_number":257,"context_line":"        self.req.environ[\u0027nova.context\u0027].user_id \u003d \u0027other-user\u0027"},{"line_number":258,"context_line":"        body \u003d {\"rescue\": {\"adminPass\": \"AABBCC112233\"}}"},{"line_number":259,"context_line":"        exc \u003d self.assertRaises(exception.PolicyNotAuthorized,"},{"line_number":260,"context_line":"                                self.controller._rescue, self.req,"},{"line_number":261,"context_line":"                                fakes.FAKE_UUID, body\u003dbody)"},{"line_number":262,"context_line":"        self.assertEqual("},{"line_number":263,"context_line":"                      \"Policy doesn\u0027t allow %s to be performed.\" % rule_name,"},{"line_number":264,"context_line":"                      exc.format_message())"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    @mock.patch(\u0027nova.compute.api.API.rescue\u0027)"},{"line_number":267,"context_line":"    @mock.patch(\u0027nova.api.openstack.common.get_instance\u0027)"},{"line_number":268,"context_line":"    def test_lock_overridden_policy_pass_with_same_user(self,"},{"line_number":269,"context_line":"                                                        get_instance_mock,"},{"line_number":270,"context_line":"                                                        rescue_mock):"},{"line_number":271,"context_line":"        instance \u003d fake_instance.fake_instance_obj("},{"line_number":272,"context_line":"            self.req.environ[\u0027nova.context\u0027],"},{"line_number":273,"context_line":"            user_id\u003dself.req.environ[\u0027nova.context\u0027].user_id)"},{"line_number":274,"context_line":"        get_instance_mock.return_value \u003d instance"},{"line_number":275,"context_line":"        rule_name \u003d \"os_compute_api:os-rescue\""},{"line_number":276,"context_line":"        self.policy.set_rules({rule_name: \"user_id:%(user_id)s\"})"},{"line_number":277,"context_line":"        body \u003d {\"rescue\": {\"adminPass\": \"AABBCC112233\"}}"},{"line_number":278,"context_line":"        self.controller._rescue(self.req, fakes.FAKE_UUID, body\u003dbody)"},{"line_number":279,"context_line":"        rescue_mock.assert_called_once_with(self.req.environ[\u0027nova.context\u0027],"},{"line_number":280,"context_line":"                                            instance,"},{"line_number":281,"context_line":"                                            rescue_password\u003d\u0027AABBCC112233\u0027,"},{"line_number":282,"context_line":"                                            rescue_image_ref\u003dNone,"},{"line_number":283,"context_line":"                                            allow_bfv_rescue\u003dFalse)"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def test_unrescue_policy_failed(self):"},{"line_number":286,"context_line":"        rule_name \u003d \"os_compute_api:os-rescue\""},{"line_number":287,"context_line":"        self.policy.set_rules({rule_name: \"project:non_fake\"})"},{"line_number":288,"context_line":"        body \u003d dict(unrescue\u003dNone)"},{"line_number":289,"context_line":"        exc \u003d self.assertRaises("},{"line_number":290,"context_line":"            exception.PolicyNotAuthorized,"},{"line_number":291,"context_line":"            self.controller._unrescue, self.req, fakes.FAKE_UUID,"},{"line_number":292,"context_line":"            body\u003dbody)"},{"line_number":293,"context_line":"        self.assertEqual("},{"line_number":294,"context_line":"            \"Policy doesn\u0027t allow %s to be performed.\" % rule_name,"},{"line_number":295,"context_line":"            exc.format_message())"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"class RescueTestV287(RescueTestV21):"}],"source_content_type":"text/x-python","patch_set":20,"id":"df33271e_ca3aa9cb","line":295,"range":{"start_line":224,"start_character":0,"end_line":295,"end_character":33},"updated":"2020-04-07 16:27:53.000000000","message":"Whoops. Looks like this was brought in when rebasing onto I04087be1e0023c026c06b690f20126472b0b63f0","commit_id":"16692861fb5b2b6a4d6a801d2202811e28ca32f6"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"81c2b66f9d1094eb417a56d0822fcfcee366a879","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                          self.fake_req, UUID, body\u003dbody)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"class RescuePolicyEnforcementV21(test.NoDBTestCase):"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def setUp(self):"},{"line_number":227,"context_line":"        super(RescuePolicyEnforcementV21, self).setUp()"},{"line_number":228,"context_line":"        self.controller \u003d rescue_v21.RescueController()"},{"line_number":229,"context_line":"        self.req \u003d fakes.HTTPRequest.blank(\u0027\u0027)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    @mock.patch(\u0027nova.api.openstack.common.get_instance\u0027)"},{"line_number":232,"context_line":"    def test_rescue_policy_failed_with_other_project(self, get_instance_mock):"},{"line_number":233,"context_line":"        get_instance_mock.return_value \u003d fake_instance.fake_instance_obj("},{"line_number":234,"context_line":"            self.req.environ[\u0027nova.context\u0027],"},{"line_number":235,"context_line":"            project_id\u003dself.req.environ[\u0027nova.context\u0027].project_id)"},{"line_number":236,"context_line":"        rule_name \u003d \"os_compute_api:os-rescue\""},{"line_number":237,"context_line":"        self.policy.set_rules({rule_name: \"project_id:%(project_id)s\"})"},{"line_number":238,"context_line":"        body \u003d {\"rescue\": {\"adminPass\": \"AABBCC112233\"}}"},{"line_number":239,"context_line":"        # Change the project_id in request context."},{"line_number":240,"context_line":"        self.req.environ[\u0027nova.context\u0027].project_id \u003d \u0027other-project\u0027"},{"line_number":241,"context_line":"        exc \u003d self.assertRaises("},{"line_number":242,"context_line":"            exception.PolicyNotAuthorized,"},{"line_number":243,"context_line":"            self.controller._rescue, self.req, fakes.FAKE_UUID,"},{"line_number":244,"context_line":"            body\u003dbody)"},{"line_number":245,"context_line":"        self.assertEqual("},{"line_number":246,"context_line":"            \"Policy doesn\u0027t allow %s to be performed.\" % rule_name,"},{"line_number":247,"context_line":"            exc.format_message())"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    @mock.patch(\u0027nova.api.openstack.common.get_instance\u0027)"},{"line_number":250,"context_line":"    def test_rescue_overridden_policy_failed_with_other_user_in_same_project("},{"line_number":251,"context_line":"        self, get_instance_mock):"},{"line_number":252,"context_line":"        get_instance_mock.return_value \u003d ("},{"line_number":253,"context_line":"            fake_instance.fake_instance_obj(self.req.environ[\u0027nova.context\u0027]))"},{"line_number":254,"context_line":"        rule_name \u003d \"os_compute_api:os-rescue\""},{"line_number":255,"context_line":"        self.policy.set_rules({rule_name: \"user_id:%(user_id)s\"})"},{"line_number":256,"context_line":"        # Change the user_id in request context."},{"line_number":257,"context_line":"        self.req.environ[\u0027nova.context\u0027].user_id \u003d \u0027other-user\u0027"},{"line_number":258,"context_line":"        body \u003d {\"rescue\": {\"adminPass\": \"AABBCC112233\"}}"},{"line_number":259,"context_line":"        exc \u003d self.assertRaises(exception.PolicyNotAuthorized,"},{"line_number":260,"context_line":"                                self.controller._rescue, self.req,"},{"line_number":261,"context_line":"                                fakes.FAKE_UUID, body\u003dbody)"},{"line_number":262,"context_line":"        self.assertEqual("},{"line_number":263,"context_line":"                      \"Policy doesn\u0027t allow %s to be performed.\" % rule_name,"},{"line_number":264,"context_line":"                      exc.format_message())"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    @mock.patch(\u0027nova.compute.api.API.rescue\u0027)"},{"line_number":267,"context_line":"    @mock.patch(\u0027nova.api.openstack.common.get_instance\u0027)"},{"line_number":268,"context_line":"    def test_lock_overridden_policy_pass_with_same_user(self,"},{"line_number":269,"context_line":"                                                        get_instance_mock,"},{"line_number":270,"context_line":"                                                        rescue_mock):"},{"line_number":271,"context_line":"        instance \u003d fake_instance.fake_instance_obj("},{"line_number":272,"context_line":"            self.req.environ[\u0027nova.context\u0027],"},{"line_number":273,"context_line":"            user_id\u003dself.req.environ[\u0027nova.context\u0027].user_id)"},{"line_number":274,"context_line":"        get_instance_mock.return_value \u003d instance"},{"line_number":275,"context_line":"        rule_name \u003d \"os_compute_api:os-rescue\""},{"line_number":276,"context_line":"        self.policy.set_rules({rule_name: \"user_id:%(user_id)s\"})"},{"line_number":277,"context_line":"        body \u003d {\"rescue\": {\"adminPass\": \"AABBCC112233\"}}"},{"line_number":278,"context_line":"        self.controller._rescue(self.req, fakes.FAKE_UUID, body\u003dbody)"},{"line_number":279,"context_line":"        rescue_mock.assert_called_once_with(self.req.environ[\u0027nova.context\u0027],"},{"line_number":280,"context_line":"                                            instance,"},{"line_number":281,"context_line":"                                            rescue_password\u003d\u0027AABBCC112233\u0027,"},{"line_number":282,"context_line":"                                            rescue_image_ref\u003dNone,"},{"line_number":283,"context_line":"                                            allow_bfv_rescue\u003dFalse)"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def test_unrescue_policy_failed(self):"},{"line_number":286,"context_line":"        rule_name \u003d \"os_compute_api:os-rescue\""},{"line_number":287,"context_line":"        self.policy.set_rules({rule_name: \"project:non_fake\"})"},{"line_number":288,"context_line":"        body \u003d dict(unrescue\u003dNone)"},{"line_number":289,"context_line":"        exc \u003d self.assertRaises("},{"line_number":290,"context_line":"            exception.PolicyNotAuthorized,"},{"line_number":291,"context_line":"            self.controller._unrescue, self.req, fakes.FAKE_UUID,"},{"line_number":292,"context_line":"            body\u003dbody)"},{"line_number":293,"context_line":"        self.assertEqual("},{"line_number":294,"context_line":"            \"Policy doesn\u0027t allow %s to be performed.\" % rule_name,"},{"line_number":295,"context_line":"            exc.format_message())"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"class RescueTestV287(RescueTestV21):"}],"source_content_type":"text/x-python","patch_set":20,"id":"df33271e_aa44851a","line":295,"range":{"start_line":224,"start_character":0,"end_line":295,"end_character":33},"in_reply_to":"df33271e_ca3aa9cb","updated":"2020-04-07 16:35:05.000000000","message":"*facepalm* thanks.","commit_id":"16692861fb5b2b6a4d6a801d2202811e28ca32f6"}]}
