)]}'
{"patrole_tempest_plugin/tests/api/volume/test_volume_actions_rbac.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"09119a2a95c9bc033583a03b4d06f545b74f799c","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class VolumesActionsV3RbacTest(rbac_base.BaseVolumeRbacTest):"},{"line_number":31,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @classmethod"},{"line_number":34,"context_line":"    def setup_clients(cls):"},{"line_number":35,"context_line":"        super(VolumesActionsV3RbacTest, cls).setup_clients()"},{"line_number":36,"context_line":"        cls.admin_image_client \u003d cls.os_admin.image_client_v2"},{"line_number":37,"context_line":"        cls.admin_volumes_client \u003d cls.os_admin.volumes_client_latest"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @classmethod"},{"line_number":40,"context_line":"    def resource_setup(cls):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_f06d8898","line":37,"range":{"start_line":31,"start_character":0,"end_line":37,"end_character":69},"updated":"2018-01-12 18:53:56.000000000","message":"All this should be removed.","commit_id":"cf1e18c67c8f55202419b16d4885ec5c7ddb9664"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"09119a2a95c9bc033583a03b4d06f545b74f799c","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    def test_attach_volume_to_instance(self):"},{"line_number":76,"context_line":"        server \u003d self._create_server()"},{"line_number":77,"context_line":"        with self.rbac_utils.override_role(self):"},{"line_number":78,"context_line":"            self._attach_volume(server)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @utils.services(\u0027compute\u0027)"},{"line_number":81,"context_line":"    @decorators.attr(type\u003d\u0027slow\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_105034d4","line":78,"range":{"start_line":78,"start_character":12,"end_line":78,"end_character":39},"updated":"2018-01-12 18:53:56.000000000","message":"This should be refactored to.\n\nI\u0027ve been considering something like this:\n\n    import functools\n\n    def _attach_volume(self, server, volume_id\u003dNone, do_wait\u003dTrue):\n        if volume_id is None:\n            volume_id \u003d self.volume[\u0027id\u0027]\n\n        self.servers_client.attach_volume(\n            server[\u0027id\u0027], volumeId\u003dvolume_id,\n            device\u003d\u0027/dev/%s\u0027 % CONF.compute.volume_device_name)\n        self.addCleanup(self._detach_volume, volume_id)\n\n        waiter \u003d functools.partial(waiters.wait_for_volume_resource_status,\n                                   self.volumes_client, volume_id, \u0027in-use\u0027)\n        if do_wait:\n            waiter()\n        else:\n            return waiter\n\n\n    @utils.services(\u0027compute\u0027)\n    @decorators.attr(type\u003d\u0027slow\u0027)\n    @rbac_rule_validation.action(\n        service\u003d\"cinder\",\n        rule\u003d\"volume_extension:volume_actions:detach\")\n    @decorators.idempotent_id(\u00275a042f6a-688b-42e6-a02e-fe5c47b89b07\u0027)\n    def test_detach_volume_from_instance(self):\n        server \u003d self._create_server()\n        self._attach_volume(server)\n\n        with self.rbac_utils.override_role(self):\n            waiter \u003d self._attach_volume(do_wait\u003dFalse)\n        waiter()\n\nBut that type of refactor is a bit more complex and maybe something I\u0027ll do later.\n\nFor now I\u0027m not sure that\u0027s the best approach, so we should probably just do this instead:\n\n    @utils.services(\u0027compute\u0027)\n    @decorators.attr(type\u003d\u0027slow\u0027)\n    @rbac_rule_validation.action(\n        service\u003d\"cinder\",\n        rule\u003d\"volume_extension:volume_actions:detach\")\n    @decorators.idempotent_id(\u00275a042f6a-688b-42e6-a02e-fe5c47b89b07\u0027)\n    def test_detach_volume_from_instance(self):\n        server \u003d self._create_server()\n        self._attach_volume(server)\n\n        with self.rbac_utils.override_role(self):\n            self.servers_client.attach_volume(\n                server[\u0027id\u0027], volumeId\u003dvolume_id,\n                device\u003d\u0027/dev/%s\u0027 % CONF.compute.volume_device_name)\n        self.addCleanup(self._detach_volume, self.volume[\u0027id\u0027])\n        waiters.wait_for_volume_resource_status(\n            self.volumes_client, self.volume[\u0027id\u0027], \u0027in-use\u0027)","commit_id":"cf1e18c67c8f55202419b16d4885ec5c7ddb9664"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"09119a2a95c9bc033583a03b4d06f545b74f799c","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        self._attach_volume(server)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        with self.rbac_utils.override_role(self):"},{"line_number":91,"context_line":"            self._detach_volume()"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    @decorators.attr(type\u003d[\"slow\"])"},{"line_number":94,"context_line":"    @utils.services(\u0027image\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_b005c0c4","line":91,"range":{"start_line":91,"start_character":12,"end_line":91,"end_character":33},"updated":"2018-01-12 18:53:56.000000000","message":"See above.","commit_id":"cf1e18c67c8f55202419b16d4885ec5c7ddb9664"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"fb025310379e8caa9404f7ffcb62444ef7617bab","unresolved":false,"context_lines":[{"line_number":259,"context_line":"    @rbac_rule_validation.action(service\u003d\"cinder\", rule\u003d\"volume:get_all\")"},{"line_number":260,"context_line":"    def test_show_volume_summary(self):"},{"line_number":261,"context_line":"        with self.rbac_utils.override_role(self):"},{"line_number":262,"context_line":"            self.volumes_client.show_volume_summary()[\u0027volume-summary\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_53c051e1","line":262,"range":{"start_line":262,"start_character":53,"end_line":262,"end_character":71},"updated":"2018-01-19 04:13:07.000000000","message":"We can remove this too.","commit_id":"ac1d84c9a701f7f8a8d0aa8087cf0e7283ae80ab"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"dbf4d07ef7b71083c0b7c7e4c2a366731f9c4810","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    _api_version \u003d 3"},{"line_number":225,"context_line":"    min_microversion \u003d \u00273.10\u0027"},{"line_number":226,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    @decorators.attr(type\u003d[\"slow\"])"},{"line_number":229,"context_line":"    @utils.services(\u0027image\u0027)"},{"line_number":230,"context_line":"    @rbac_rule_validation.action("}],"source_content_type":"text/x-python","patch_set":8,"id":"7f96bb07_b13dbfde","line":227,"updated":"2018-01-23 01:31:28.000000000","message":"We\u0027ll need to include this:\n\n    @classmethod\n    def setup_clients(cls):\n        super(VolumesActionsV310RbacTest, cls).setup_clients()\n        cls.image_client \u003d cls.os_primary.image_client_v2\n\n\nBecause of the following failure: http://logs.openstack.org/36/532636/8/check/patrole-multinode-admin/1ea69a7/job-output.txt.gz#_2018-01-23_00_11_26_370082","commit_id":"b4007eafcf48a08864406b5cd65766543c3f8d43"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"943d6ced8657b1849f06124d23c0b995670636fe","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class VolumesActionsV3RbacTest(rbac_base.BaseVolumeRbacTest):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @classmethod"},{"line_number":33,"context_line":"    def resource_setup(cls):"},{"line_number":34,"context_line":"        super(VolumesActionsV3RbacTest, cls).resource_setup()"}],"source_content_type":"text/x-python","patch_set":9,"id":"7f96bb07_0f31c0a2","line":31,"updated":"2018-01-24 03:19:31.000000000","message":"As before, image_client isn\u0027t defined and is throwing an error, so we need to add this here too:\n\n    @classmethod\n    def setup_clients(cls):\n        super(VolumesActionsV3RbacTest, cls).setup_clients()\n        cls.image_client \u003d cls.os_primary.image_client_v2","commit_id":"2ec69580e696f31f9e3de25e92e423da8b7ddd26"}],"patrole_tempest_plugin/tests/api/volume/test_volume_transfers_rbac.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"09119a2a95c9bc033583a03b4d06f545b74f799c","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class VolumesTransfersV3RbacTest(rbac_base.BaseVolumeRbacTest):"},{"line_number":25,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @classmethod"},{"line_number":28,"context_line":"    def setup_clients(cls):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_90120409","line":25,"range":{"start_line":25,"start_character":4,"end_line":25,"end_character":38},"updated":"2018-01-12 18:53:56.000000000","message":"Remove this.","commit_id":"cf1e18c67c8f55202419b16d4885ec5c7ddb9664"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"09119a2a95c9bc033583a03b4d06f545b74f799c","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def setup_clients(cls):"},{"line_number":29,"context_line":"        super(VolumesTransfersV3RbacTest, cls).setup_clients()"},{"line_number":30,"context_line":"        cls.transfers_client \u003d cls.os_primary.volume_transfers_v2_client"},{"line_number":31,"context_line":"        cls.admin_volumes_client \u003d cls.os_admin.volumes_client_latest"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @classmethod"},{"line_number":34,"context_line":"    def resource_setup(cls):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_30f9b0c7","line":31,"range":{"start_line":31,"start_character":8,"end_line":31,"end_character":69},"updated":"2018-01-12 18:53:56.000000000","message":"Ditto.","commit_id":"cf1e18c67c8f55202419b16d4885ec5c7ddb9664"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"09119a2a95c9bc033583a03b4d06f545b74f799c","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    @decorators.idempotent_id(\u002725413af4-468d-48ff-94ca-4436f8526b3e\u0027)"},{"line_number":56,"context_line":"    def test_create_volume_transfer(self):"},{"line_number":57,"context_line":"        with self.rbac_utils.override_role(self):"},{"line_number":58,"context_line":"            self._create_transfer()"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    @rbac_rule_validation.action(service\u003d\"cinder\","},{"line_number":61,"context_line":"                                 rule\u003d\"volume:get_transfer\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_f00268b4","line":58,"range":{"start_line":58,"start_character":12,"end_line":58,"end_character":35},"updated":"2018-01-12 18:53:56.000000000","message":"This is OK since _create_transfer_ doesn\u0027t use a waiter or anything else.","commit_id":"cf1e18c67c8f55202419b16d4885ec5c7ddb9664"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"fb025310379e8caa9404f7ffcb62444ef7617bab","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class VolumesTransfersV3RbacTest(rbac_base.BaseVolumeRbacTest):"},{"line_number":25,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @classmethod"},{"line_number":28,"context_line":"    def setup_clients(cls):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_739a2d14","line":25,"range":{"start_line":25,"start_character":4,"end_line":25,"end_character":38},"updated":"2018-01-19 04:13:07.000000000","message":"This can be removed.","commit_id":"ac1d84c9a701f7f8a8d0aa8087cf0e7283ae80ab"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"fb025310379e8caa9404f7ffcb62444ef7617bab","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def setup_clients(cls):"},{"line_number":29,"context_line":"        super(VolumesTransfersV3RbacTest, cls).setup_clients()"},{"line_number":30,"context_line":"        cls.transfers_client \u003d cls.os_primary.volume_transfers_v2_client"},{"line_number":31,"context_line":"        cls.admin_volumes_client \u003d cls.os_admin.volumes_client_latest"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @classmethod"},{"line_number":34,"context_line":"    def resource_setup(cls):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_139de908","line":31,"range":{"start_line":31,"start_character":8,"end_line":31,"end_character":69},"updated":"2018-01-19 04:13:07.000000000","message":"Ditto","commit_id":"ac1d84c9a701f7f8a8d0aa8087cf0e7283ae80ab"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"fb025310379e8caa9404f7ffcb62444ef7617bab","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        test_utils.call_and_ignore_notfound_exc("},{"line_number":43,"context_line":"            self.transfers_client.delete_volume_transfer, transfer[\u0027id\u0027])"},{"line_number":44,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":45,"context_line":"            self.admin_volumes_client, self.volume[\u0027id\u0027], \u0027available\u0027)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def _create_transfer(self):"},{"line_number":48,"context_line":"        transfer \u003d self.transfers_client.create_volume_transfer("}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_33a02542","line":45,"range":{"start_line":45,"start_character":17,"end_line":45,"end_character":37},"updated":"2018-01-19 04:13:07.000000000","message":"volumes_client","commit_id":"ac1d84c9a701f7f8a8d0aa8087cf0e7283ae80ab"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"f5edfa06f8c4575c75bde856dba6efc18dd0f097","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    def setup_clients(cls):"},{"line_number":28,"context_line":"        super(VolumesTransfersV3RbacTest, cls).setup_clients()"},{"line_number":29,"context_line":"        cls.transfers_client \u003d cls.os_primary.volume_transfers_v2_client"},{"line_number":30,"context_line":"        cls.volumes_client \u003d cls.os_admin.volumes_client_latest"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @classmethod"},{"line_number":33,"context_line":"    def resource_setup(cls):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_00efb4b0","line":30,"range":{"start_line":30,"start_character":8,"end_line":30,"end_character":63},"updated":"2018-01-19 20:15:36.000000000","message":"We can remove this as well; besides that, this client uses admin credentials, which we don\u0027t want.","commit_id":"f4f923d7c5b536b5cb2289b6da760858fcc081f7"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5517365c581ec73645483bbd4da22c47ae226977","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"7f96bb07_db9c616c","line":97,"updated":"2018-01-19 20:45:12.000000000","message":"May we include:\n\n    waiters.wait_for_volume_resource_status(\n            self.volumes_client, self.volume[\u0027id\u0027], \u0027available\u0027)\n\non L97 as it\u0027s currently missing.","commit_id":"f4f923d7c5b536b5cb2289b6da760858fcc081f7"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"68acdd24bd13ee5c4b3b82f1fff465702917b661","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    @classmethod"},{"line_number":28,"context_line":"    def setup_clients(cls):"},{"line_number":29,"context_line":"        super(VolumesTransfersV3RbacTest, cls).setup_clients()"},{"line_number":30,"context_line":"        cls.transfers_client \u003d cls.os_primary.volume_transfers_v2_client"},{"line_number":31,"context_line":"        cls.admin_volumes_client \u003d cls.os_admin.volumes_client_latest"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f96bb07_16ab7b75","side":"PARENT","line":30,"range":{"start_line":30,"start_character":8,"end_line":30,"end_character":72},"updated":"2018-01-20 00:27:51.000000000","message":"This shouldn\u0027t have been removed. It\u0027s issuing an error here: http://logs.openstack.org/36/532636/7/check/patrole-admin/de8504d/job-output.txt.gz#_2018-01-19_22_57_46_498343","commit_id":"074cb9a0455135e0de5d4950a356639c6501d0b9"}],"patrole_tempest_plugin/tests/api/volume/test_volume_types_access_rbac.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"09119a2a95c9bc033583a03b4d06f545b74f799c","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        rule\u003d\"volume_extension:volume_type_access:addProjectAccess\")"},{"line_number":67,"context_line":"    def test_add_type_access(self):"},{"line_number":68,"context_line":"        with self.rbac_utils.override_role(self):"},{"line_number":69,"context_line":"            self._add_type_access(ignore_not_found\u003dTrue)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @decorators.idempotent_id(\u00278f848aeb-636a-46f1-aeeb-e2a60e9d2bfe\u0027)"},{"line_number":72,"context_line":"    @rbac_rule_validation.action("}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_f01b4818","line":69,"range":{"start_line":69,"start_character":12,"end_line":69,"end_character":56},"updated":"2018-01-12 18:53:56.000000000","message":"This one is OK too. No need to change.","commit_id":"cf1e18c67c8f55202419b16d4885ec5c7ddb9664"}],"patrole_tempest_plugin/tests/api/volume/test_volume_types_extra_specs_rbac.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"09119a2a95c9bc033583a03b4d06f545b74f799c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    @decorators.idempotent_id(\u0027eea40251-990b-49b0-99ae-10e4585b479b\u0027)"},{"line_number":68,"context_line":"    def test_create_volume_type_extra_specs(self):"},{"line_number":69,"context_line":"        with self.rbac_utils.override_role(self):"},{"line_number":70,"context_line":"            self._create_volume_type_extra_specs(ignore_not_found\u003dTrue)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @decorators.idempotent_id(\u0027e2dcc9c6-2fef-431d-afaf-92b45bc76d1a\u0027)"},{"line_number":73,"context_line":"    @rbac_rule_validation.action("}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_1017d4ef","line":70,"range":{"start_line":70,"start_character":11,"end_line":70,"end_character":71},"updated":"2018-01-12 18:53:56.000000000","message":"This one is also OK.","commit_id":"cf1e18c67c8f55202419b16d4885ec5c7ddb9664"}],"patrole_tempest_plugin/tests/api/volume/test_volumes_backup_rbac.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"d6b6a874f1ea3403b9f456b31f25a4d6ac9c9dc1","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class VolumesBackupsV3RbacTest(rbac_base.BaseVolumeRbacTest):"},{"line_number":33,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @classmethod"},{"line_number":36,"context_line":"    def skip_checks(cls):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_3d6c5235","line":33,"range":{"start_line":33,"start_character":4,"end_line":33,"end_character":38},"updated":"2018-01-11 15:55:10.000000000","message":"Remove","commit_id":"3dcf00bdfbc49e641bff2034c2960a6b39ccde35"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"d6b6a874f1ea3403b9f456b31f25a4d6ac9c9dc1","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        if not CONF.volume_feature_enabled.backup:"},{"line_number":39,"context_line":"            raise cls.skipException(\"Cinder backup feature disabled\")"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @classmethod"},{"line_number":42,"context_line":"    def setup_clients(cls):"},{"line_number":43,"context_line":"        super(VolumesBackupsV3RbacTest, cls).setup_clients()"},{"line_number":44,"context_line":"        cls.admin_backups_client \u003d cls.os_admin.backups_v2_client"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @classmethod"},{"line_number":47,"context_line":"    def resource_setup(cls):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_1d739617","line":44,"range":{"start_line":41,"start_character":0,"end_line":44,"end_character":65},"updated":"2018-01-11 15:55:10.000000000","message":"Remove","commit_id":"3dcf00bdfbc49e641bff2034c2960a6b39ccde35"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"d6b6a874f1ea3403b9f456b31f25a4d6ac9c9dc1","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        with self.rbac_utils.override_role(self):"},{"line_number":104,"context_line":"            self.backups_client.reset_backup_status(backup_id\u003dbackup[\u0027id\u0027],"},{"line_number":105,"context_line":"                                                    status\u003d\u0027error\u0027)"},{"line_number":106,"context_line":"        waiters.wait_for_volume_resource_status(self.admin_backups_client,"},{"line_number":107,"context_line":"                                                backup[\u0027id\u0027], \u0027error\u0027)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    @decorators.attr(type\u003d\u0027slow\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_5d24be0d","line":106,"range":{"start_line":106,"start_character":53,"end_line":106,"end_character":73},"updated":"2018-01-11 15:55:10.000000000","message":"backups_client","commit_id":"3dcf00bdfbc49e641bff2034c2960a6b39ccde35"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"d6b6a874f1ea3403b9f456b31f25a4d6ac9c9dc1","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            restore \u003d self.backups_client.restore_backup("},{"line_number":118,"context_line":"                backup[\u0027id\u0027])[\u0027restore\u0027]"},{"line_number":119,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":120,"context_line":"            self.admin_backups_client, restore[\u0027backup_id\u0027], \u0027available\u0027)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    @decorators.attr(type\u003d\u0027slow\u0027)"},{"line_number":123,"context_line":"    @rbac_rule_validation.action(service\u003d\"cinder\","}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_1d1e36ba","line":120,"range":{"start_line":120,"start_character":17,"end_line":120,"end_character":37},"updated":"2018-01-11 15:55:10.000000000","message":"Ditto","commit_id":"3dcf00bdfbc49e641bff2034c2960a6b39ccde35"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"d6b6a874f1ea3403b9f456b31f25a4d6ac9c9dc1","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            volume_id\u003dself.volume[\u0027id\u0027])[\u0027backup\u0027]"},{"line_number":132,"context_line":"        self.addCleanup(test_utils.call_and_ignore_notfound_exc,"},{"line_number":133,"context_line":"                        self.backups_client.delete_backup, backup[\u0027id\u0027])"},{"line_number":134,"context_line":"        waiters.wait_for_volume_resource_status(self.admin_backups_client,"},{"line_number":135,"context_line":"                                                backup[\u0027id\u0027], \u0027available\u0027)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        with self.rbac_utils.override_role(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_dd7d2ee8","line":134,"range":{"start_line":134,"start_character":53,"end_line":134,"end_character":73},"updated":"2018-01-11 15:55:10.000000000","message":"Ditto","commit_id":"3dcf00bdfbc49e641bff2034c2960a6b39ccde35"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"d6b6a874f1ea3403b9f456b31f25a4d6ac9c9dc1","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        with self.rbac_utils.override_role(self):"},{"line_number":138,"context_line":"            self.backups_client.delete_backup(backup[\u0027id\u0027])"},{"line_number":139,"context_line":"        # Wait for deletion so error isn\u0027t thrown during clean up."},{"line_number":140,"context_line":"        self.admin_backups_client.wait_for_resource_deletion(backup[\u0027id\u0027])"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    @decorators.attr(type\u003d\u0027slow\u0027)"},{"line_number":143,"context_line":"    @rbac_rule_validation.action(service\u003d\"cinder\","}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_7d82daca","line":140,"range":{"start_line":140,"start_character":13,"end_line":140,"end_character":33},"updated":"2018-01-11 15:55:10.000000000","message":"Ditto","commit_id":"3dcf00bdfbc49e641bff2034c2960a6b39ccde35"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"09119a2a95c9bc033583a03b4d06f545b74f799c","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        if not CONF.volume_feature_enabled.backup:"},{"line_number":38,"context_line":"            raise cls.skipException(\"Cinder backup feature disabled\")"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @classmethod"},{"line_number":41,"context_line":"    def setup_clients(cls):"},{"line_number":42,"context_line":"        super(VolumesBackupsV3RbacTest, cls).setup_clients()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @classmethod"},{"line_number":45,"context_line":"    def resource_setup(cls):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_30e77015","line":42,"range":{"start_line":40,"start_character":0,"end_line":42,"end_character":60},"updated":"2018-01-12 18:53:56.000000000","message":"We can remove all of this too since this is now just useless. Whenever a method just calls the super class version of the method it can be removed as that is done automatically in the background by Python.","commit_id":"cf1e18c67c8f55202419b16d4885ec5c7ddb9664"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5517365c581ec73645483bbd4da22c47ae226977","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        if not CONF.volume_feature_enabled.backup:"},{"line_number":38,"context_line":"            raise cls.skipException(\"Cinder backup feature disabled\")"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @classmethod"},{"line_number":41,"context_line":"    def setup_clients(cls):"},{"line_number":42,"context_line":"        super(VolumesBackupsV3RbacTest, cls).setup_clients()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @classmethod"},{"line_number":45,"context_line":"    def resource_setup(cls):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_3b79c52e","line":42,"range":{"start_line":40,"start_character":0,"end_line":42,"end_character":60},"updated":"2018-01-19 20:45:12.000000000","message":"We can remove this too.","commit_id":"f4f923d7c5b536b5cb2289b6da760858fcc081f7"}],"patrole_tempest_plugin/tests/api/volume/test_volumes_manage_rbac.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"d6b6a874f1ea3403b9f456b31f25a4d6ac9c9dc1","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class VolumesManageV3RbacTest(rbac_base.BaseVolumeRbacTest):"},{"line_number":29,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @classmethod"},{"line_number":32,"context_line":"    def skip_checks(cls):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_5d735ee8","line":29,"range":{"start_line":29,"start_character":4,"end_line":29,"end_character":38},"updated":"2018-01-11 15:55:10.000000000","message":"Remove","commit_id":"3dcf00bdfbc49e641bff2034c2960a6b39ccde35"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"d6b6a874f1ea3403b9f456b31f25a4d6ac9c9dc1","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def setup_clients(cls):"},{"line_number":44,"context_line":"        super(VolumesManageV3RbacTest, cls).setup_clients()"},{"line_number":45,"context_line":"        cls.volume_manage_client \u003d cls.os_primary.volume_manage_v2_client"},{"line_number":46,"context_line":"        cls.admin_volumes_client \u003d cls.os_admin.volumes_client_latest"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _manage_volume(self, org_volume):"},{"line_number":49,"context_line":"        # Manage volume"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_3d7692da","line":46,"range":{"start_line":46,"start_character":8,"end_line":46,"end_character":69},"updated":"2018-01-11 15:55:10.000000000","message":"Remove","commit_id":"3dcf00bdfbc49e641bff2034c2960a6b39ccde35"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"d6b6a874f1ea3403b9f456b31f25a4d6ac9c9dc1","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        new_volume_id \u003d self.volume_manage_client.manage_volume("},{"line_number":62,"context_line":"            **new_volume_ref)[\u0027volume\u0027][\u0027id\u0027]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        waiters.wait_for_volume_resource_status(self.admin_volumes_client,"},{"line_number":65,"context_line":"                                                new_volume_id, \u0027available\u0027)"},{"line_number":66,"context_line":"        self.addCleanup(self.delete_volume,"},{"line_number":67,"context_line":"                        self.volumes_client, new_volume_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_9d71e6e3","line":64,"range":{"start_line":64,"start_character":53,"end_line":64,"end_character":73},"updated":"2018-01-11 15:55:10.000000000","message":"volumes_client","commit_id":"3dcf00bdfbc49e641bff2034c2960a6b39ccde35"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"d6b6a874f1ea3403b9f456b31f25a4d6ac9c9dc1","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self.addCleanup(self.delete_volume,"},{"line_number":67,"context_line":"                        self.volumes_client, new_volume_id)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _unmanage_volume(self, volume):"},{"line_number":70,"context_line":"        self.volumes_client.unmanage_volume(volume[\u0027id\u0027])"},{"line_number":71,"context_line":"        self.admin_volumes_client.wait_for_resource_deletion(volume[\u0027id\u0027])"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @rbac_rule_validation.action("},{"line_number":74,"context_line":"        service\u003d\"cinder\","}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_7dd09aca","line":71,"range":{"start_line":69,"start_character":0,"end_line":71,"end_character":74},"updated":"2018-01-11 15:55:10.000000000","message":"We can remove this because of comment below.","commit_id":"3dcf00bdfbc49e641bff2034c2960a6b39ccde35"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"d6b6a874f1ea3403b9f456b31f25a4d6ac9c9dc1","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        # unmanage the volume first before testing manage volume."},{"line_number":83,"context_line":"        self._unmanage_volume(volume)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        with self.rbac_utils.override_role(self):"},{"line_number":86,"context_line":"            try:"},{"line_number":87,"context_line":"                self._manage_volume(volume)"},{"line_number":88,"context_line":"            except exceptions.Forbidden as e:"},{"line_number":89,"context_line":"                # Since the test role under test does not have permission to"},{"line_number":90,"context_line":"                # manage the volume, Forbidden exception is thrown and the"},{"line_number":91,"context_line":"                # manageable list will not be cleaned up. Therefore, we need to"},{"line_number":92,"context_line":"                # re-manage the volume at the end of the test case for proper"},{"line_number":93,"context_line":"                # resource clean up."},{"line_number":94,"context_line":"                self.addCleanup(self._manage_volume, volume)"},{"line_number":95,"context_line":"                raise exceptions.Forbidden(e)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @rbac_rule_validation.action("},{"line_number":98,"context_line":"        service\u003d\"cinder\","}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_3d88d2c4","line":95,"range":{"start_line":85,"start_character":0,"end_line":95,"end_character":45},"updated":"2018-01-11 15:55:10.000000000","message":"This will have to be refactored to:\n\n    new_volume_name \u003d data_utils.rand_name(\n        self.__class__.__name__ + \u0027-volume\u0027)\n\n    new_volume_ref \u003d {\n        \u0027name\u0027: new_volume_name,\n        \u0027host\u0027: org_volume[\u0027os-vol-host-attr:host\u0027],\n        \u0027ref\u0027: {CONF.volume.manage_volume_ref[0]:\n                CONF.volume.manage_volume_ref[1] % org_volume[\u0027id\u0027]},\n        \u0027volume_type\u0027: org_volume[\u0027volume_type\u0027],\n        \u0027availability_zone\u0027: org_volume[\u0027availability_zone\u0027]}\n\n     with self.rbac_utils.override_role(self):\n        try:\n            new_volume_id \u003d self.volume_manage_client.manage_volume(\n            **new_volume_ref)[\u0027volume\u0027][\u0027id\u0027]\n         except exceptions.Forbidden as e:\n                # Since the test role under test does not have permission to\n                # manage the volume, Forbidden exception is thrown and the\n                # manageable list will not be cleaned up. Therefore, we need to\n                # re-manage the volume at the end of the test case for proper\n                # resource clean up.\n                self.addCleanup(self._manage_volume, volume)\n                raise exceptions.Forbidden(e)\n\n    \n    waiters.wait_for_volume_resource_status(self.volumes_client,\n                                        new_volume_id, \u0027available\u0027)\n    self.addCleanup(self.delete_volume,\n                        self.volumes_client, new_volume_id)","commit_id":"3dcf00bdfbc49e641bff2034c2960a6b39ccde35"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"d6b6a874f1ea3403b9f456b31f25a4d6ac9c9dc1","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        volume_id \u003d self.create_volume()[\u0027id\u0027]"},{"line_number":103,"context_line":"        volume \u003d self.volumes_client.show_volume(volume_id)[\u0027volume\u0027]"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        with self.rbac_utils.override_role(self):"},{"line_number":106,"context_line":"            self._unmanage_volume(volume)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        # In order to clean up the manageable list, we need to re-manage the"},{"line_number":109,"context_line":"        # volume after the test.  The _manage_volume method will set up the"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_ddcbee1b","line":106,"range":{"start_line":105,"start_character":0,"end_line":106,"end_character":41},"updated":"2018-01-11 15:55:10.000000000","message":"This should be refactored to:\n\nwith self.rbac_utils.override_role(self):\n    self.volumes_client.unmanage_volume(volume[\u0027id\u0027])\nself.volumes_client.wait_for_resource_deletion(volume[\u0027id\u0027])","commit_id":"3dcf00bdfbc49e641bff2034c2960a6b39ccde35"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"fb025310379e8caa9404f7ffcb62444ef7617bab","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        # By default, the volume is managed after creation.  We need to"},{"line_number":76,"context_line":"        # unmanage the volume first before testing manage volume."},{"line_number":77,"context_line":"        self._unmanage_volume(volume)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        new_volume_name \u003d data_utils.rand_name("},{"line_number":80,"context_line":"            self.__class__.__name__ + \u0027-volume\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_53f29171","line":77,"range":{"start_line":77,"start_character":8,"end_line":77,"end_character":37},"updated":"2018-01-19 04:13:07.000000000","message":"This needs to be changed to:\n\n    self.volumes_client.unmanage_volume(volume[\u0027id\u0027])   \n    self.volumes.wait_for_resource_deletion(volume[\u0027id\u0027])\n\nSince you deleted the function.","commit_id":"ac1d84c9a701f7f8a8d0aa8087cf0e7283ae80ab"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"fb025310379e8caa9404f7ffcb62444ef7617bab","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        with self.rbac_utils.override_role(self):"},{"line_number":117,"context_line":"            self.volumes_client.unmanage_volume(volume[\u0027id\u0027])"},{"line_number":118,"context_line":"            self.volumes_client.wait_for_resource_deletion(volume[\u0027id\u0027])"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        # In order to clean up the manageable list, we need to re-manage the"},{"line_number":121,"context_line":"        # volume after the test.  The _manage_volume method will set up the"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_73cc6d34","line":118,"range":{"start_line":118,"start_character":12,"end_line":118,"end_character":72},"updated":"2018-01-19 04:13:07.000000000","message":"Unindent this.","commit_id":"ac1d84c9a701f7f8a8d0aa8087cf0e7283ae80ab"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"f5edfa06f8c4575c75bde856dba6efc18dd0f097","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        # By default, the volume is managed after creation.  We need to"},{"line_number":76,"context_line":"        # unmanage the volume first before testing manage volume."},{"line_number":77,"context_line":"        self.volumes_client.unmanage_volume(volume[\u0027id\u0027])"},{"line_number":78,"context_line":"        self.volumes.wait_for_resource_deletion(volume[\u0027id\u0027])"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        new_volume_name \u003d data_utils.rand_name("},{"line_number":81,"context_line":"            self.__class__.__name__ + \u0027-volume\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_c009cc95","line":78,"range":{"start_line":78,"start_character":13,"end_line":78,"end_character":20},"updated":"2018-01-19 20:15:36.000000000","message":"volumes_client","commit_id":"f4f923d7c5b536b5cb2289b6da760858fcc081f7"}],"patrole_tempest_plugin/tests/api/volume/test_volumes_snapshots_rbac.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"d6b6a874f1ea3403b9f456b31f25a4d6ac9c9dc1","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class VolumesSnapshotV3RbacTest(rbac_base.BaseVolumeRbacTest):"},{"line_number":27,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @classmethod"},{"line_number":30,"context_line":"    def skip_checks(cls):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_fdc4aa42","line":27,"range":{"start_line":27,"start_character":4,"end_line":27,"end_character":38},"updated":"2018-01-11 15:55:10.000000000","message":"We were using admin credentials to avoid calling too many APIs with \"primary\" credentials to isolate the policy action being tested for each test.\n\nBut the credentials should be removed because it\u0027s needlessly confusing and can be abstracted away with the new override_role method.","commit_id":"3dcf00bdfbc49e641bff2034c2960a6b39ccde35"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"d6b6a874f1ea3403b9f456b31f25a4d6ac9c9dc1","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        if not CONF.volume_feature_enabled.snapshot:"},{"line_number":33,"context_line":"            raise cls.skipException(\"Cinder volume snapshots are disabled\")"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @classmethod"},{"line_number":36,"context_line":"    def setup_clients(cls):"},{"line_number":37,"context_line":"        super(VolumesSnapshotV3RbacTest, cls).setup_clients()"},{"line_number":38,"context_line":"        cls.admin_snapshots_client \u003d cls.os_admin.snapshots_v2_client"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @classmethod"},{"line_number":41,"context_line":"    def resource_setup(cls):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_bddce218","line":38,"range":{"start_line":35,"start_character":0,"end_line":38,"end_character":69},"updated":"2018-01-11 15:55:10.000000000","message":"This entire block can be removed.","commit_id":"3dcf00bdfbc49e641bff2034c2960a6b39ccde35"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"d6b6a874f1ea3403b9f456b31f25a4d6ac9c9dc1","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            self.snapshots_client.update_snapshot("},{"line_number":84,"context_line":"                self.snapshot[\u0027id\u0027], **params)[\u0027snapshot\u0027]"},{"line_number":85,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":86,"context_line":"            self.admin_snapshots_client, self.snapshot[\u0027id\u0027], \u0027available\u0027)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    @rbac_rule_validation.action(service\u003d\"cinder\","},{"line_number":89,"context_line":"                                 rule\u003d\"volume:get_all_snapshots\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_9deb26af","line":86,"range":{"start_line":86,"start_character":17,"end_line":86,"end_character":39},"updated":"2018-01-11 15:55:10.000000000","message":"snapshots_client","commit_id":"3dcf00bdfbc49e641bff2034c2960a6b39ccde35"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"d6b6a874f1ea3403b9f456b31f25a4d6ac9c9dc1","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        with self.rbac_utils.override_role(self):"},{"line_number":105,"context_line":"            # Delete the snapshot"},{"line_number":106,"context_line":"            self.snapshots_client.delete_snapshot(temp_snapshot[\u0027id\u0027])"},{"line_number":107,"context_line":"            self.admin_snapshots_client.wait_for_resource_deletion("},{"line_number":108,"context_line":"                temp_snapshot[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_bd05c27c","line":108,"range":{"start_line":107,"start_character":12,"end_line":108,"end_character":36},"updated":"2018-01-11 15:55:10.000000000","message":"Unindent this (place outside `with`) and change admin_snapshots_client to snapshots_client.","commit_id":"3dcf00bdfbc49e641bff2034c2960a6b39ccde35"}]}
