)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"504a28147eac39badd81e8f79dbf61b4bd726e2f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"8df390f7_02ceff5d","updated":"2023-05-30 15:48:31.000000000","message":"Left some comments. Good start. I\u0027ve suggested some changes inline. It would also be good to add a release note and functional tests, since the functional tests will help you test the feature locally (note: running functional tests is easy against a DevStack deployment. I documented it [here](https://docs.openstack.org/openstacksdk/latest/contributor/testing.html#functional-tests)).","commit_id":"68d212b5d376f88e651007be069703517ad4ac20"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"1bb6f26d3698bce7dcd45e2d36c41d9d5f6c2be9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"bcaa4074_1246b60b","updated":"2023-07-18 11:36:48.000000000","message":"Thanks Stephen!","commit_id":"4b5900702b2315ba721471cbcaa0626eed9c9231"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4201ccfc6f04fdad9d6fcd81a502120cc71eebc3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"bad980f2_1fee8bce","updated":"2023-07-25 10:20:41.000000000","message":"Looking better but still some work to do here","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"b73bcb38_6621f0bd","updated":"2023-08-05 12:42:16.000000000","message":"Thanks Stephen","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ee48f1526204037c24b3c763c27679718b0df52f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"ae42ba8f_a176c43f","updated":"2023-07-19 18:24:17.000000000","message":"recheck networking job failure unrelated","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a737526d0c8cdaee9705a65e61a94e6efa291887","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"0ebe9f3f_5b55560f","updated":"2023-08-28 10:16:20.000000000","message":"One question inline. The rest are nits (though I\u0027ll re-review if you respin)","commit_id":"a1c4daab40910c03b990b0077bf04a499d36164a"}],"doc/source/user/resources/block_storage/v3/attachment.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1f50318284957cc613870767e5dc434b7ddbf596","unresolved":true,"context_lines":[{"line_number":7,"context_line":"---------------------------"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The ``Volume Attachment`` class inherits from"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":":class:`~openstack.resource.Resource`."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":".. autoclass:: openstack.block_storage.v3.attachment.Attachment"}],"source_content_type":"text/x-rst","patch_set":4,"id":"f3437bd1_fd60544c","line":10,"updated":"2023-07-12 17:55:27.000000000","message":"whoops, extra line","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"1bb6f26d3698bce7dcd45e2d36c41d9d5f6c2be9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"---------------------------"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The ``Volume Attachment`` class inherits from"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":":class:`~openstack.resource.Resource`."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":".. autoclass:: openstack.block_storage.v3.attachment.Attachment"}],"source_content_type":"text/x-rst","patch_set":4,"id":"039a20f2_7e9d2d2c","line":10,"in_reply_to":"f3437bd1_fd60544c","updated":"2023-07-18 11:36:48.000000000","message":"Done","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"}],"openstack/block_storage/v3/_proxy.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"504a28147eac39badd81e8f79dbf61b4bd726e2f","unresolved":true,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from openstack.block_storage import _base_proxy"},{"line_number":14,"context_line":"from openstack.block_storage.v3 import availability_zone"},{"line_number":15,"context_line":"from openstack.block_storage.v3 import attachment"},{"line_number":16,"context_line":"from openstack.block_storage.v3 import backup as _backup"},{"line_number":17,"context_line":"from openstack.block_storage.v3 import capabilities as _capabilities"},{"line_number":18,"context_line":"from openstack.block_storage.v3 import extension as _extension"}],"source_content_type":"text/x-python","patch_set":1,"id":"e85e3c7e_0a64181d","line":15,"in_reply_to":"5fedeb81_41d96108","updated":"2023-05-30 15:48:31.000000000","message":"This needs reordering but also we generally prefix these with an underscore so we can use \u0027attachment\u0027 as a variable. Just FYI.","commit_id":"68d212b5d376f88e651007be069703517ad4ac20"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"2727a043270a2a6da9666975107d9bbb052fc084","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from openstack.block_storage import _base_proxy"},{"line_number":14,"context_line":"from openstack.block_storage.v3 import availability_zone"},{"line_number":15,"context_line":"from openstack.block_storage.v3 import attachment"},{"line_number":16,"context_line":"from openstack.block_storage.v3 import backup as _backup"},{"line_number":17,"context_line":"from openstack.block_storage.v3 import capabilities as _capabilities"},{"line_number":18,"context_line":"from openstack.block_storage.v3 import extension as _extension"}],"source_content_type":"text/x-python","patch_set":1,"id":"3dad35d2_af73b8d1","line":15,"in_reply_to":"e85e3c7e_0a64181d","updated":"2023-07-12 15:43:52.000000000","message":"Done\nthanks for updating it","commit_id":"68d212b5d376f88e651007be069703517ad4ac20"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"504a28147eac39badd81e8f79dbf61b4bd726e2f","unresolved":true,"context_lines":[{"line_number":34,"context_line":"class Proxy(_base_proxy.BaseBlockStorageProxy):"},{"line_number":35,"context_line":"    _resource_registry \u003d {"},{"line_number":36,"context_line":"        \"availability_zone\": availability_zone.AvailabilityZone,"},{"line_number":37,"context_line":"        \"attachment\": attachment.Attachment,"},{"line_number":38,"context_line":"        \"backup\": _backup.Backup,"},{"line_number":39,"context_line":"        \"capabilities\": _capabilities.Capabilities,"},{"line_number":40,"context_line":"        \"extension\": _extension.Extension,"}],"source_content_type":"text/x-python","patch_set":1,"id":"d53e50ba_bc778677","line":37,"updated":"2023-05-30 15:48:31.000000000","message":"Can you add proxy methods also? I think you want:\n\n- `create_attachment`\n- `update_attachment`\n- `delete_attachment`\n- `get_attachment`\n- `attachments` (with an optional `details` parameter)\n- `complete_attachment` (look at server actions for inspiration)","commit_id":"68d212b5d376f88e651007be069703517ad4ac20"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"2727a043270a2a6da9666975107d9bbb052fc084","unresolved":false,"context_lines":[{"line_number":34,"context_line":"class Proxy(_base_proxy.BaseBlockStorageProxy):"},{"line_number":35,"context_line":"    _resource_registry \u003d {"},{"line_number":36,"context_line":"        \"availability_zone\": availability_zone.AvailabilityZone,"},{"line_number":37,"context_line":"        \"attachment\": attachment.Attachment,"},{"line_number":38,"context_line":"        \"backup\": _backup.Backup,"},{"line_number":39,"context_line":"        \"capabilities\": _capabilities.Capabilities,"},{"line_number":40,"context_line":"        \"extension\": _extension.Extension,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ed50b1f4_b05d2be4","line":37,"in_reply_to":"d53e50ba_bc778677","updated":"2023-07-12 15:43:52.000000000","message":"Done","commit_id":"68d212b5d376f88e651007be069703517ad4ac20"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1f50318284957cc613870767e5dc434b7ddbf596","unresolved":true,"context_lines":[{"line_number":960,"context_line":""},{"line_number":961,"context_line":"    # \u003d\u003d\u003d\u003d\u003d\u003d ATTACHMENTS \u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":962,"context_line":""},{"line_number":963,"context_line":"    def create_attachment(self, volume_id, connector, instance_id, mode):"},{"line_number":964,"context_line":"        \"\"\"Create a new attachment"},{"line_number":965,"context_line":""},{"line_number":966,"context_line":"        :param volume_id: Name or ID of volume to attach to server."}],"source_content_type":"text/x-python","patch_set":4,"id":"841deefd_296d8185","line":963,"range":{"start_line":963,"start_character":67,"end_line":963,"end_character":71},"updated":"2023-07-12 17:55:27.000000000","message":"Are all of these absolutely required? If any are not, you should simply use `**attrs` kwargs like we do in other `create_foo` proxy APIs.","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"1bb6f26d3698bce7dcd45e2d36c41d9d5f6c2be9","unresolved":false,"context_lines":[{"line_number":960,"context_line":""},{"line_number":961,"context_line":"    # \u003d\u003d\u003d\u003d\u003d\u003d ATTACHMENTS \u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":962,"context_line":""},{"line_number":963,"context_line":"    def create_attachment(self, volume_id, connector, instance_id, mode):"},{"line_number":964,"context_line":"        \"\"\"Create a new attachment"},{"line_number":965,"context_line":""},{"line_number":966,"context_line":"        :param volume_id: Name or ID of volume to attach to server."}],"source_content_type":"text/x-python","patch_set":4,"id":"c64d4d2c_42e71e30","line":963,"range":{"start_line":963,"start_character":67,"end_line":963,"end_character":71},"in_reply_to":"841deefd_296d8185","updated":"2023-07-18 11:36:48.000000000","message":"Done","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1f50318284957cc613870767e5dc434b7ddbf596","unresolved":true,"context_lines":[{"line_number":963,"context_line":"    def create_attachment(self, volume_id, connector, instance_id, mode):"},{"line_number":964,"context_line":"        \"\"\"Create a new attachment"},{"line_number":965,"context_line":""},{"line_number":966,"context_line":"        :param volume_id: Name or ID of volume to attach to server."},{"line_number":967,"context_line":"        :param dict connector: Connection properties of the server host."},{"line_number":968,"context_line":"        :param instance_id: ID of server to attach volume to."},{"line_number":969,"context_line":"        :param mode: Mode of volume attachment, rw, ro and null, where null"}],"source_content_type":"text/x-python","patch_set":4,"id":"213617e4_feb86cbc","line":966,"range":{"start_line":966,"start_character":26,"end_line":966,"end_character":34},"updated":"2023-07-12 17:55:27.000000000","message":"This isn\u0027t true, only an ID is acceptable here (as expected - the name or ID bit would be implemented higher up in e.g. OSC)","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"1bb6f26d3698bce7dcd45e2d36c41d9d5f6c2be9","unresolved":false,"context_lines":[{"line_number":963,"context_line":"    def create_attachment(self, volume_id, connector, instance_id, mode):"},{"line_number":964,"context_line":"        \"\"\"Create a new attachment"},{"line_number":965,"context_line":""},{"line_number":966,"context_line":"        :param volume_id: Name or ID of volume to attach to server."},{"line_number":967,"context_line":"        :param dict connector: Connection properties of the server host."},{"line_number":968,"context_line":"        :param instance_id: ID of server to attach volume to."},{"line_number":969,"context_line":"        :param mode: Mode of volume attachment, rw, ro and null, where null"}],"source_content_type":"text/x-python","patch_set":4,"id":"f15e2b54_c4266795","line":966,"range":{"start_line":966,"start_character":26,"end_line":966,"end_character":34},"in_reply_to":"213617e4_feb86cbc","updated":"2023-07-18 11:36:48.000000000","message":"Done","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1f50318284957cc613870767e5dc434b7ddbf596","unresolved":true,"context_lines":[{"line_number":971,"context_line":"        :returns: The results of attachment creation"},{"line_number":972,"context_line":"        :rtype: :class:`~openstack.block_storage.v3.attachment.Attachment`"},{"line_number":973,"context_line":"        \"\"\""},{"line_number":974,"context_line":"        attachment \u003d self._get_resource(_attachment.Attachment, volume_id)"},{"line_number":975,"context_line":"        return attachment.create(self, volume_id, connector, instance_id, mode)"},{"line_number":976,"context_line":""},{"line_number":977,"context_line":"    def get_attachment(self, attachment):"}],"source_content_type":"text/x-python","patch_set":4,"id":"e277ae5d_baa9114d","line":974,"updated":"2023-07-12 17:55:27.000000000","message":"This is called `volume_id` yet you\u0027re fetching an `Attachment`. Typo?\n\nThis method takes either a string ID or `Resource` object and returns a `Resource`. Normally, you\u0027d actually want to use `_get_resource_id` since that takes a string ID or `Resource` object and returns a string ID.","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"1bb6f26d3698bce7dcd45e2d36c41d9d5f6c2be9","unresolved":false,"context_lines":[{"line_number":971,"context_line":"        :returns: The results of attachment creation"},{"line_number":972,"context_line":"        :rtype: :class:`~openstack.block_storage.v3.attachment.Attachment`"},{"line_number":973,"context_line":"        \"\"\""},{"line_number":974,"context_line":"        attachment \u003d self._get_resource(_attachment.Attachment, volume_id)"},{"line_number":975,"context_line":"        return attachment.create(self, volume_id, connector, instance_id, mode)"},{"line_number":976,"context_line":""},{"line_number":977,"context_line":"    def get_attachment(self, attachment):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3224cf90_d1746e3d","line":974,"in_reply_to":"e277ae5d_baa9114d","updated":"2023-07-18 11:36:48.000000000","message":"I just wanted to get the Attachment resource to call the create method, guess we can do it without passing any ID.","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1f50318284957cc613870767e5dc434b7ddbf596","unresolved":true,"context_lines":[{"line_number":1011,"context_line":"        :returns: ``None``"},{"line_number":1012,"context_line":"        \"\"\""},{"line_number":1013,"context_line":"        self._delete("},{"line_number":1014,"context_line":"            _attachment.Attachment, attachment, ignore_missing\u003dignore_missing"},{"line_number":1015,"context_line":"        )"},{"line_number":1016,"context_line":""},{"line_number":1017,"context_line":"    def update_attachment(self, attachment_id, connector):"}],"source_content_type":"text/x-python","patch_set":4,"id":"8980cfef_3356fa63","line":1014,"updated":"2023-07-12 17:55:27.000000000","message":"nit: can you add a trailing comma here (black will rewrap for you)","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"1bb6f26d3698bce7dcd45e2d36c41d9d5f6c2be9","unresolved":false,"context_lines":[{"line_number":1011,"context_line":"        :returns: ``None``"},{"line_number":1012,"context_line":"        \"\"\""},{"line_number":1013,"context_line":"        self._delete("},{"line_number":1014,"context_line":"            _attachment.Attachment, attachment, ignore_missing\u003dignore_missing"},{"line_number":1015,"context_line":"        )"},{"line_number":1016,"context_line":""},{"line_number":1017,"context_line":"    def update_attachment(self, attachment_id, connector):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1588f147_fab14679","line":1014,"in_reply_to":"8980cfef_3356fa63","updated":"2023-07-18 11:36:48.000000000","message":"Done","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1f50318284957cc613870767e5dc434b7ddbf596","unresolved":true,"context_lines":[{"line_number":1025,"context_line":"        :returns: The updated attachment"},{"line_number":1026,"context_line":"        :rtype: :class:`~openstack.volume.v3.attachment.Attachment`"},{"line_number":1027,"context_line":"        \"\"\""},{"line_number":1028,"context_line":"        attachment \u003d self._get_resource(_attachment.Attachment, attachment_id)"},{"line_number":1029,"context_line":"        return attachment.update(self, attachment_id, connector)"},{"line_number":1030,"context_line":""},{"line_number":1031,"context_line":"    def complete_attachment(self, attachment_id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"c8e1cdb2_da0ef188","line":1028,"updated":"2023-07-12 17:55:27.000000000","message":"Why not simply use `self._update` here?","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6ab53258680d4d8e8bf9ef37b24d861f19d07b36","unresolved":false,"context_lines":[{"line_number":1025,"context_line":"        :returns: The updated attachment"},{"line_number":1026,"context_line":"        :rtype: :class:`~openstack.volume.v3.attachment.Attachment`"},{"line_number":1027,"context_line":"        \"\"\""},{"line_number":1028,"context_line":"        attachment \u003d self._get_resource(_attachment.Attachment, attachment_id)"},{"line_number":1029,"context_line":"        return attachment.update(self, attachment_id, connector)"},{"line_number":1030,"context_line":""},{"line_number":1031,"context_line":"    def complete_attachment(self, attachment_id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"72e87ce6_15559a03","line":1028,"in_reply_to":"874ded3b_9bed57f6","updated":"2023-08-09 22:10:02.000000000","message":"Done","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"1bb6f26d3698bce7dcd45e2d36c41d9d5f6c2be9","unresolved":true,"context_lines":[{"line_number":1025,"context_line":"        :returns: The updated attachment"},{"line_number":1026,"context_line":"        :rtype: :class:`~openstack.volume.v3.attachment.Attachment`"},{"line_number":1027,"context_line":"        \"\"\""},{"line_number":1028,"context_line":"        attachment \u003d self._get_resource(_attachment.Attachment, attachment_id)"},{"line_number":1029,"context_line":"        return attachment.update(self, attachment_id, connector)"},{"line_number":1030,"context_line":""},{"line_number":1031,"context_line":"    def complete_attachment(self, attachment_id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"874ded3b_9bed57f6","line":1028,"in_reply_to":"c8e1cdb2_da0ef188","updated":"2023-07-18 11:36:48.000000000","message":"I tried with self.update but during the commit part, requires_commit[1] doesn\u0027t evaluate to True. I understand either the body, header or allow_empty_commit to be true but I\u0027m not sure why that is not getting included in the request here even i passed the connector info as **attrs from openstackclient till the update method (as done in other update methods).\n\nAlso i tried the same with volume update and it also doesn\u0027t work, maybe some bug in the update code? or maybe I am doing something wrong here.\n\n[1] https://github.com/openstack/openstacksdk/blob/b93ea39ea5c1edff4b59ad0940992b5e4a8c695a/openstack/resource.py#L1778","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4201ccfc6f04fdad9d6fcd81a502120cc71eebc3","unresolved":true,"context_lines":[{"line_number":960,"context_line":""},{"line_number":961,"context_line":"    # \u003d\u003d\u003d\u003d\u003d\u003d ATTACHMENTS \u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":962,"context_line":""},{"line_number":963,"context_line":"    def create_attachment(self, volume_id, **attrs):"},{"line_number":964,"context_line":"        \"\"\"Create a new attachment"},{"line_number":965,"context_line":""},{"line_number":966,"context_line":"        :param volume_id: ID of volume to attach to server."}],"source_content_type":"text/x-python","patch_set":6,"id":"df384c16_e3da93ae","line":963,"range":{"start_line":963,"start_character":32,"end_line":963,"end_character":41},"updated":"2023-07-25 10:20:41.000000000","message":"This should be called `volume` as you can accept either an ID or a `Volume` instance. Also, the docstring needs to be updated to reflect this. See e.g. `init_volume_attachment` above for an example of this.","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":960,"context_line":""},{"line_number":961,"context_line":"    # \u003d\u003d\u003d\u003d\u003d\u003d ATTACHMENTS \u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":962,"context_line":""},{"line_number":963,"context_line":"    def create_attachment(self, volume_id, **attrs):"},{"line_number":964,"context_line":"        \"\"\"Create a new attachment"},{"line_number":965,"context_line":""},{"line_number":966,"context_line":"        :param volume_id: ID of volume to attach to server."}],"source_content_type":"text/x-python","patch_set":6,"id":"b7ae64ae_dc866481","line":963,"range":{"start_line":963,"start_character":32,"end_line":963,"end_character":41},"in_reply_to":"df384c16_e3da93ae","updated":"2023-08-05 12:42:16.000000000","message":"We updated the description to state that it only accepts ID in the previous PS[1], I will assume this will be final and correct parameter, will update in next PS.\n\n[1] https://review.opendev.org/c/openstack/openstacksdk/+/884167/comment/213617e4_feb86cbc/","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1577d1e4f429133e0a2d737448f2eb17c473fcea","unresolved":true,"context_lines":[{"line_number":962,"context_line":""},{"line_number":963,"context_line":"    def create_attachment(self, volume_id, **attrs):"},{"line_number":964,"context_line":"        \"\"\"Create a new attachment"},{"line_number":965,"context_line":""},{"line_number":966,"context_line":"        :param volume_id: ID of volume to attach to server."},{"line_number":967,"context_line":"        :param dict connector: Connection properties of the server host."},{"line_number":968,"context_line":"        :param instance_id: ID of server to attach volume to."}],"source_content_type":"text/x-python","patch_set":6,"id":"d2a2fc8d_36f9d57b","line":965,"updated":"2023-07-25 10:49:29.000000000","message":"We probably want to add a note here and in the other attachment methods that this is an internal API that should only be used by nova, rather than end-users/humans?","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":962,"context_line":""},{"line_number":963,"context_line":"    def create_attachment(self, volume_id, **attrs):"},{"line_number":964,"context_line":"        \"\"\"Create a new attachment"},{"line_number":965,"context_line":""},{"line_number":966,"context_line":"        :param volume_id: ID of volume to attach to server."},{"line_number":967,"context_line":"        :param dict connector: Connection properties of the server host."},{"line_number":968,"context_line":"        :param instance_id: ID of server to attach volume to."}],"source_content_type":"text/x-python","patch_set":6,"id":"72627068_6bb0c971","line":965,"in_reply_to":"d2a2fc8d_36f9d57b","updated":"2023-08-05 12:42:16.000000000","message":"Done","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4201ccfc6f04fdad9d6fcd81a502120cc71eebc3","unresolved":true,"context_lines":[{"line_number":964,"context_line":"        \"\"\"Create a new attachment"},{"line_number":965,"context_line":""},{"line_number":966,"context_line":"        :param volume_id: ID of volume to attach to server."},{"line_number":967,"context_line":"        :param dict connector: Connection properties of the server host."},{"line_number":968,"context_line":"        :param instance_id: ID of server to attach volume to."},{"line_number":969,"context_line":"        :param mode: Mode of volume attachment, rw, ro and null, where null"},{"line_number":970,"context_line":"            indicates we want to honor any existing admin-metadata settings"},{"line_number":971,"context_line":"        :returns: The results of attachment creation"},{"line_number":972,"context_line":"        :rtype: :class:`~openstack.block_storage.v3.attachment.Attachment`"},{"line_number":973,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"352cb6a7_27fc544a","line":970,"range":{"start_line":967,"start_character":0,"end_line":970,"end_character":75},"updated":"2023-07-25 10:20:41.000000000","message":"These are no longer valid. Also, you need to document `attrs`.","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":964,"context_line":"        \"\"\"Create a new attachment"},{"line_number":965,"context_line":""},{"line_number":966,"context_line":"        :param volume_id: ID of volume to attach to server."},{"line_number":967,"context_line":"        :param dict connector: Connection properties of the server host."},{"line_number":968,"context_line":"        :param instance_id: ID of server to attach volume to."},{"line_number":969,"context_line":"        :param mode: Mode of volume attachment, rw, ro and null, where null"},{"line_number":970,"context_line":"            indicates we want to honor any existing admin-metadata settings"},{"line_number":971,"context_line":"        :returns: The results of attachment creation"},{"line_number":972,"context_line":"        :rtype: :class:`~openstack.block_storage.v3.attachment.Attachment`"},{"line_number":973,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"0dfc8a5f_48211a5f","line":970,"range":{"start_line":967,"start_character":0,"end_line":970,"end_character":75},"in_reply_to":"352cb6a7_27fc544a","updated":"2023-08-05 12:42:16.000000000","message":"Done","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4201ccfc6f04fdad9d6fcd81a502120cc71eebc3","unresolved":true,"context_lines":[{"line_number":971,"context_line":"        :returns: The results of attachment creation"},{"line_number":972,"context_line":"        :rtype: :class:`~openstack.block_storage.v3.attachment.Attachment`"},{"line_number":973,"context_line":"        \"\"\""},{"line_number":974,"context_line":"        attachment \u003d self._get_resource(_attachment.Attachment, None)"},{"line_number":975,"context_line":"        return attachment.create(self, volume_id, **attrs)"},{"line_number":976,"context_line":""},{"line_number":977,"context_line":"    def get_attachment(self, attachment):"},{"line_number":978,"context_line":"        \"\"\"Get a single volume"}],"source_content_type":"text/x-python","patch_set":6,"id":"b4d7cf4d_d1de67af","line":975,"range":{"start_line":974,"start_character":0,"end_line":975,"end_character":58},"updated":"2023-07-25 10:20:41.000000000","message":"Rather than doing this, why not use `_create`?\n\n```\nvolume_id \u003d resource.Resource._get_id(volume)\nreturn self._create(_attachment.Attachment, volume_id\u003dvolume_id, **attrs)\n```","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":971,"context_line":"        :returns: The results of attachment creation"},{"line_number":972,"context_line":"        :rtype: :class:`~openstack.block_storage.v3.attachment.Attachment`"},{"line_number":973,"context_line":"        \"\"\""},{"line_number":974,"context_line":"        attachment \u003d self._get_resource(_attachment.Attachment, None)"},{"line_number":975,"context_line":"        return attachment.create(self, volume_id, **attrs)"},{"line_number":976,"context_line":""},{"line_number":977,"context_line":"    def get_attachment(self, attachment):"},{"line_number":978,"context_line":"        \"\"\"Get a single volume"}],"source_content_type":"text/x-python","patch_set":6,"id":"34b8aed7_a0a5757e","line":975,"range":{"start_line":974,"start_character":0,"end_line":975,"end_character":58},"in_reply_to":"b4d7cf4d_d1de67af","updated":"2023-08-05 12:42:16.000000000","message":"Done","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"266d7c5f8e588c29376a6ac003dfd9207f20749a","unresolved":true,"context_lines":[{"line_number":978,"context_line":"        \"\"\"Get a single volume"},{"line_number":979,"context_line":""},{"line_number":980,"context_line":"        :param volume: The value can be the ID of an attachment or a"},{"line_number":981,"context_line":"            :class:`~attachment.Attachment` instance."},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"        :returns: One :class:`~attachment.Attachment`"},{"line_number":984,"context_line":"        :raises: :class:`~openstack.exceptions.ResourceNotFound`"}],"source_content_type":"text/x-python","patch_set":6,"id":"465b7447_2047f04c","line":981,"updated":"2023-07-25 10:23:11.000000000","message":"The parameter is `attachment`, not `volume`","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":978,"context_line":"        \"\"\"Get a single volume"},{"line_number":979,"context_line":""},{"line_number":980,"context_line":"        :param volume: The value can be the ID of an attachment or a"},{"line_number":981,"context_line":"            :class:`~attachment.Attachment` instance."},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"        :returns: One :class:`~attachment.Attachment`"},{"line_number":984,"context_line":"        :raises: :class:`~openstack.exceptions.ResourceNotFound`"}],"source_content_type":"text/x-python","patch_set":6,"id":"010c1b46_e23ccf70","line":981,"in_reply_to":"465b7447_2047f04c","updated":"2023-08-05 12:42:16.000000000","message":"Done","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4201ccfc6f04fdad9d6fcd81a502120cc71eebc3","unresolved":true,"context_lines":[{"line_number":1016,"context_line":"            ignore_missing\u003dignore_missing,"},{"line_number":1017,"context_line":"        )"},{"line_number":1018,"context_line":""},{"line_number":1019,"context_line":"    def update_attachment(self, attachment_id, **attrs):"},{"line_number":1020,"context_line":"        \"\"\"Update an attachment"},{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"        :param attachment: The value can be the ID of an attachment or a"}],"source_content_type":"text/x-python","patch_set":6,"id":"f0a0e843_95fe69da","line":1019,"range":{"start_line":1019,"start_character":32,"end_line":1019,"end_character":45},"updated":"2023-07-25 10:20:41.000000000","message":"This should be `attachment`. The docstring below is correct at least.","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":1016,"context_line":"            ignore_missing\u003dignore_missing,"},{"line_number":1017,"context_line":"        )"},{"line_number":1018,"context_line":""},{"line_number":1019,"context_line":"    def update_attachment(self, attachment_id, **attrs):"},{"line_number":1020,"context_line":"        \"\"\"Update an attachment"},{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"        :param attachment: The value can be the ID of an attachment or a"}],"source_content_type":"text/x-python","patch_set":6,"id":"c18e3a4f_eb14069b","line":1019,"range":{"start_line":1019,"start_character":32,"end_line":1019,"end_character":45},"in_reply_to":"f0a0e843_95fe69da","updated":"2023-08-05 12:42:16.000000000","message":"The reason for changing this to attachment_id was we already have an attachment variable but you are right, this should be attachment. will update in next PS.","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4201ccfc6f04fdad9d6fcd81a502120cc71eebc3","unresolved":true,"context_lines":[{"line_number":1022,"context_line":"        :param attachment: The value can be the ID of an attachment or a"},{"line_number":1023,"context_line":"            :class:`~openstack.block_storage.v3.attachment.Attachment`"},{"line_number":1024,"context_line":"            instance."},{"line_number":1025,"context_line":"        :param dict connector: The connector to update on the attachment."},{"line_number":1026,"context_line":""},{"line_number":1027,"context_line":"        :returns: The updated attachment"},{"line_number":1028,"context_line":"        :rtype: :class:`~openstack.volume.v3.attachment.Attachment`"}],"source_content_type":"text/x-python","patch_set":6,"id":"cc047e11_f4711e00","line":1025,"updated":"2023-07-25 10:20:41.000000000","message":"This needs to be updated: you\u0027ve got an `attrs` parameter now and no (explicit) `connector` parameter.","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":1022,"context_line":"        :param attachment: The value can be the ID of an attachment or a"},{"line_number":1023,"context_line":"            :class:`~openstack.block_storage.v3.attachment.Attachment`"},{"line_number":1024,"context_line":"            instance."},{"line_number":1025,"context_line":"        :param dict connector: The connector to update on the attachment."},{"line_number":1026,"context_line":""},{"line_number":1027,"context_line":"        :returns: The updated attachment"},{"line_number":1028,"context_line":"        :rtype: :class:`~openstack.volume.v3.attachment.Attachment`"}],"source_content_type":"text/x-python","patch_set":6,"id":"2fa9b270_ca4be879","line":1025,"in_reply_to":"cc047e11_f4711e00","updated":"2023-08-05 12:42:16.000000000","message":"Done","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4201ccfc6f04fdad9d6fcd81a502120cc71eebc3","unresolved":true,"context_lines":[{"line_number":1030,"context_line":"        attachment \u003d self._get_resource(_attachment.Attachment, attachment_id)"},{"line_number":1031,"context_line":"        return attachment.update(self, attachment_id, **attrs)"},{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"    def complete_attachment(self, attachment_id):"},{"line_number":1034,"context_line":"        \"\"\"Complete an attachment"},{"line_number":1035,"context_line":""},{"line_number":1036,"context_line":"        :param attachment: The value can be the ID of an attachment or a"}],"source_content_type":"text/x-python","patch_set":6,"id":"cdbfb7d3_0193d87b","line":1033,"range":{"start_line":1033,"start_character":34,"end_line":1033,"end_character":47},"updated":"2023-07-25 10:20:41.000000000","message":"This should be `attachment`","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":1030,"context_line":"        attachment \u003d self._get_resource(_attachment.Attachment, attachment_id)"},{"line_number":1031,"context_line":"        return attachment.update(self, attachment_id, **attrs)"},{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"    def complete_attachment(self, attachment_id):"},{"line_number":1034,"context_line":"        \"\"\"Complete an attachment"},{"line_number":1035,"context_line":""},{"line_number":1036,"context_line":"        :param attachment: The value can be the ID of an attachment or a"}],"source_content_type":"text/x-python","patch_set":6,"id":"e50a80d4_3ec976d4","line":1033,"range":{"start_line":1033,"start_character":34,"end_line":1033,"end_character":47},"in_reply_to":"cdbfb7d3_0193d87b","updated":"2023-08-05 12:42:16.000000000","message":"Done","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4201ccfc6f04fdad9d6fcd81a502120cc71eebc3","unresolved":true,"context_lines":[{"line_number":1041,"context_line":"        :rtype: :class:`~openstack.volume.v3.attachment.Attachment`"},{"line_number":1042,"context_line":"        \"\"\""},{"line_number":1043,"context_line":"        attachment \u003d self._get_resource(_attachment.Attachment, attachment_id)"},{"line_number":1044,"context_line":"        return attachment.complete(self, attachment_id)"},{"line_number":1045,"context_line":""},{"line_number":1046,"context_line":"    # \u003d\u003d\u003d\u003d\u003d\u003d BACKEND POOLS \u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":1047,"context_line":"    def backend_pools(self, **query):"}],"source_content_type":"text/x-python","patch_set":6,"id":"2552b1c8_1c9dc8fe","line":1044,"range":{"start_line":1044,"start_character":41,"end_line":1044,"end_character":54},"updated":"2023-07-25 10:20:41.000000000","message":"You shouldn\u0027t need to pass this to `complete` assuming it\u0027s an instance method and not a class method: the method can simply use `self.id`.","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":1041,"context_line":"        :rtype: :class:`~openstack.volume.v3.attachment.Attachment`"},{"line_number":1042,"context_line":"        \"\"\""},{"line_number":1043,"context_line":"        attachment \u003d self._get_resource(_attachment.Attachment, attachment_id)"},{"line_number":1044,"context_line":"        return attachment.complete(self, attachment_id)"},{"line_number":1045,"context_line":""},{"line_number":1046,"context_line":"    # \u003d\u003d\u003d\u003d\u003d\u003d BACKEND POOLS \u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":1047,"context_line":"    def backend_pools(self, **query):"}],"source_content_type":"text/x-python","patch_set":6,"id":"373d3972_e66737bc","line":1044,"range":{"start_line":1044,"start_character":41,"end_line":1044,"end_character":54},"in_reply_to":"2552b1c8_1c9dc8fe","updated":"2023-08-05 12:42:16.000000000","message":"Done","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"}],"openstack/block_storage/v3/attachment.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"504a28147eac39badd81e8f79dbf61b4bd726e2f","unresolved":true,"context_lines":[{"line_number":54,"context_line":"    source_group_id \u003d resource.Body(\"source_group_id\")"},{"line_number":55,"context_line":"    status \u003d resource.Body(\"status\")"},{"line_number":56,"context_line":"    volumes \u003d resource.Body(\"volumes\", type\u003dlist)"},{"line_number":57,"context_line":"    volume_types \u003d resource.Body(\"volume_types\", type\u003dlist)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    _max_microversion \u003d \"3.54\""},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"d6e8c98a_fae8eaf5","line":57,"updated":"2023-05-30 15:48:31.000000000","message":"Can you group and sort these alphabetically? I appreciate the grouping you\u0027ve done but ultimately someone using the resource directly is going to have to read the API ref anyway and the grouping doesn\u0027t really help.\n\nAlso, could you add docstrings for each variable? We generally copy-paste these from the API ref.","commit_id":"68d212b5d376f88e651007be069703517ad4ac20"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"2727a043270a2a6da9666975107d9bbb052fc084","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    source_group_id \u003d resource.Body(\"source_group_id\")"},{"line_number":55,"context_line":"    status \u003d resource.Body(\"status\")"},{"line_number":56,"context_line":"    volumes \u003d resource.Body(\"volumes\", type\u003dlist)"},{"line_number":57,"context_line":"    volume_types \u003d resource.Body(\"volume_types\", type\u003dlist)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    _max_microversion \u003d \"3.54\""},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"d6f644c5_f49ce83d","line":57,"in_reply_to":"d6e8c98a_fae8eaf5","updated":"2023-07-12 15:43:52.000000000","message":"Done","commit_id":"68d212b5d376f88e651007be069703517ad4ac20"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"504a28147eac39badd81e8f79dbf61b4bd726e2f","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        \"\"\"Create an attachment.\"\"\""},{"line_number":72,"context_line":"        session \u003d self._get_session(session)"},{"line_number":73,"context_line":"        microversion \u003d self._get_microversion(session, action\u003d\u0027create\u0027)"},{"line_number":74,"context_line":"        body \u003d {\u0027attachment\u0027: {\u0027instance_uuid\u0027: instance_uuid, \u0027volume_uuid\u0027: volume_uuid}}"},{"line_number":75,"context_line":"        response \u003d session.post(self.base_path, microversion\u003dmicroversion)"},{"line_number":76,"context_line":"        exceptions.raise_from_response(response)"},{"line_number":77,"context_line":"        return response"}],"source_content_type":"text/x-python","patch_set":1,"id":"a6e8775c_76799e41","line":74,"updated":"2023-05-30 15:48:31.000000000","message":"We don\u0027t generally specify what fields should be sent during resource creation at the Resource layer. We do this at the proxy layer instead, by making these required arguments of the e.g. `create_attachment` proxy method. That being the case, I don\u0027t think you need any of these methods here...","commit_id":"68d212b5d376f88e651007be069703517ad4ac20"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"504a28147eac39badd81e8f79dbf61b4bd726e2f","unresolved":true,"context_lines":[{"line_number":84,"context_line":"        url \u003d utils.urljoin(self.base_path, attachment_id)"},{"line_number":85,"context_line":"        response \u003d session.post(url, microversion\u003dmicroversion)"},{"line_number":86,"context_line":"        exceptions.raise_from_response(response)"},{"line_number":87,"context_line":"        return response"}],"source_content_type":"text/x-python","patch_set":1,"id":"d6c2d49f_1641d742","line":87,"updated":"2023-05-30 15:48:31.000000000","message":"SDK provides its own implementations of `delete`, `create`, `show` etc. on the `Resource` class that you should be able to use. I don\u0027t see anything unusual here so you shouldn\u0027t need to do any of this. Is there a reason you defined them?\n\nYou will need an separate `complete` function here though. The various server actions like `restart` in `openstack.compute.v2.server.Server` should help you figure this out or you can do it separately.","commit_id":"68d212b5d376f88e651007be069703517ad4ac20"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"2727a043270a2a6da9666975107d9bbb052fc084","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        url \u003d utils.urljoin(self.base_path, attachment_id)"},{"line_number":85,"context_line":"        response \u003d session.post(url, microversion\u003dmicroversion)"},{"line_number":86,"context_line":"        exceptions.raise_from_response(response)"},{"line_number":87,"context_line":"        return response"}],"source_content_type":"text/x-python","patch_set":1,"id":"aa5df07d_0782749f","line":87,"in_reply_to":"d6c2d49f_1641d742","updated":"2023-07-12 15:43:52.000000000","message":"Done","commit_id":"68d212b5d376f88e651007be069703517ad4ac20"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1f50318284957cc613870767e5dc434b7ddbf596","unresolved":true,"context_lines":[{"line_number":37,"context_line":"    #: The status of the attachment."},{"line_number":38,"context_line":"    status \u003d resource.Body(\"status\")"},{"line_number":39,"context_line":"    #: The UUID of the attaching instance."},{"line_number":40,"context_line":"    instance \u003d resource.Body(\"instance_uuid\")"},{"line_number":41,"context_line":"    #: The UUID of the volume which the attachment belongs to."},{"line_number":42,"context_line":"    volume_id \u003d resource.Body(\"volume_id\")"},{"line_number":43,"context_line":"    #: The time when attachment is attached."}],"source_content_type":"text/x-python","patch_set":4,"id":"57b278ef_c1cc1a02","line":40,"range":{"start_line":40,"start_character":4,"end_line":40,"end_character":12},"updated":"2023-07-12 17:55:27.000000000","message":"This should be `instance_id`","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"1bb6f26d3698bce7dcd45e2d36c41d9d5f6c2be9","unresolved":true,"context_lines":[{"line_number":37,"context_line":"    #: The status of the attachment."},{"line_number":38,"context_line":"    status \u003d resource.Body(\"status\")"},{"line_number":39,"context_line":"    #: The UUID of the attaching instance."},{"line_number":40,"context_line":"    instance \u003d resource.Body(\"instance_uuid\")"},{"line_number":41,"context_line":"    #: The UUID of the volume which the attachment belongs to."},{"line_number":42,"context_line":"    volume_id \u003d resource.Body(\"volume_id\")"},{"line_number":43,"context_line":"    #: The time when attachment is attached."}],"source_content_type":"text/x-python","patch_set":4,"id":"9d731fd8_219cb2f2","line":40,"range":{"start_line":40,"start_character":4,"end_line":40,"end_character":12},"in_reply_to":"57b278ef_c1cc1a02","updated":"2023-07-18 11:36:48.000000000","message":"OSC expects field name to be instance[1] and errors out on instance_id\nthough instance_id makes more sense, i think it can be a followup since I\u0027m trying to make minimal changes to the existing mechanism of OSC\n\n[1] https://github.com/openstack/python-openstackclient/blob/46431ed2034dd3335527a714ed693d9cf6754c1f/openstackclient/volume/v3/volume_attachment.py#L36","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    #: The status of the attachment."},{"line_number":38,"context_line":"    status \u003d resource.Body(\"status\")"},{"line_number":39,"context_line":"    #: The UUID of the attaching instance."},{"line_number":40,"context_line":"    instance \u003d resource.Body(\"instance_uuid\")"},{"line_number":41,"context_line":"    #: The UUID of the volume which the attachment belongs to."},{"line_number":42,"context_line":"    volume_id \u003d resource.Body(\"volume_id\")"},{"line_number":43,"context_line":"    #: The time when attachment is attached."}],"source_content_type":"text/x-python","patch_set":4,"id":"ee56155f_4c94b450","line":40,"range":{"start_line":40,"start_character":4,"end_line":40,"end_character":12},"in_reply_to":"929bffb9_57920314","updated":"2023-08-05 12:42:16.000000000","message":"Done","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4201ccfc6f04fdad9d6fcd81a502120cc71eebc3","unresolved":true,"context_lines":[{"line_number":37,"context_line":"    #: The status of the attachment."},{"line_number":38,"context_line":"    status \u003d resource.Body(\"status\")"},{"line_number":39,"context_line":"    #: The UUID of the attaching instance."},{"line_number":40,"context_line":"    instance \u003d resource.Body(\"instance_uuid\")"},{"line_number":41,"context_line":"    #: The UUID of the volume which the attachment belongs to."},{"line_number":42,"context_line":"    volume_id \u003d resource.Body(\"volume_id\")"},{"line_number":43,"context_line":"    #: The time when attachment is attached."}],"source_content_type":"text/x-python","patch_set":4,"id":"f7d26448_a599a388","line":40,"range":{"start_line":40,"start_character":4,"end_line":40,"end_character":12},"in_reply_to":"9d731fd8_219cb2f2","updated":"2023-07-25 10:20:41.000000000","message":"So this is a bit complicated. Unfortunately Cinder expects `instance_uuid` for requests but returns `instance` in responses. You\u0027re not going to be able to model this using `resource.Body` instances alone, unfortunately. Instead, you\u0027re going to have to override `_prepare_request_body` here and map `instance` to `instance_uuid`. You should also update this to:\n\n```\ninstance \u003d resource.Body(\"instance\")\n```\n\nIf you look around, you\u0027ll find examples of this method being overridden to guide you. The keystone examples in e.g. `openstack/common/quota_set.py` remove properties but you can use a similar technique to remap them.\n\nI suspect if you fix this, you\u0027ll be able to use the standard `Resource.create` and `Resource.update` methods.","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"fd01362bc809183ba774da486b16fb7ba1ec7735","unresolved":true,"context_lines":[{"line_number":37,"context_line":"    #: The status of the attachment."},{"line_number":38,"context_line":"    status \u003d resource.Body(\"status\")"},{"line_number":39,"context_line":"    #: The UUID of the attaching instance."},{"line_number":40,"context_line":"    instance \u003d resource.Body(\"instance_uuid\")"},{"line_number":41,"context_line":"    #: The UUID of the volume which the attachment belongs to."},{"line_number":42,"context_line":"    volume_id \u003d resource.Body(\"volume_id\")"},{"line_number":43,"context_line":"    #: The time when attachment is attached."}],"source_content_type":"text/x-python","patch_set":4,"id":"929bffb9_57920314","line":40,"range":{"start_line":40,"start_character":4,"end_line":40,"end_character":12},"in_reply_to":"f7d26448_a599a388","updated":"2023-07-25 10:37:40.000000000","message":"Sigh, it seems the same is true of `volume_uuid` (requests) and `volume_id` (responses)","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1f50318284957cc613870767e5dc434b7ddbf596","unresolved":true,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        attachment \u003d Attachment()"},{"line_number":71,"context_line":"        attachment._translate_response(response\u003dresponse)"},{"line_number":72,"context_line":"        return attachment"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def update(self, session, attachment_id, connector):"},{"line_number":75,"context_line":"        body \u003d {\u0027attachment\u0027: {\u0027connector\u0027: connector}}"}],"source_content_type":"text/x-python","patch_set":4,"id":"a71a6dcc_49eaf2a0","line":72,"updated":"2023-07-12 17:55:27.000000000","message":"You shouldn\u0027t need to override this. iirc, if you do:\n\n```\nAttachment.create(\n    conn.block_storage,\n    volume_id\u003dxxx,\n    connector\u003dxxx,\n    instance_id\u003dxxx,\n    mode\u003dmode,\n)\n```\n\nthen it should just do the correct thing. Does it not?","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        attachment \u003d Attachment()"},{"line_number":71,"context_line":"        attachment._translate_response(response\u003dresponse)"},{"line_number":72,"context_line":"        return attachment"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def update(self, session, attachment_id, connector):"},{"line_number":75,"context_line":"        body \u003d {\u0027attachment\u0027: {\u0027connector\u0027: connector}}"}],"source_content_type":"text/x-python","patch_set":4,"id":"2ea33bff_1e4e3c04","line":72,"in_reply_to":"41617fca_7d589a35","updated":"2023-08-05 12:42:16.000000000","message":"Done","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4201ccfc6f04fdad9d6fcd81a502120cc71eebc3","unresolved":true,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        attachment \u003d Attachment()"},{"line_number":71,"context_line":"        attachment._translate_response(response\u003dresponse)"},{"line_number":72,"context_line":"        return attachment"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def update(self, session, attachment_id, connector):"},{"line_number":75,"context_line":"        body \u003d {\u0027attachment\u0027: {\u0027connector\u0027: connector}}"}],"source_content_type":"text/x-python","patch_set":4,"id":"41617fca_7d589a35","line":72,"in_reply_to":"6ebf3c80_0c8e0584","updated":"2023-07-25 10:20:41.000000000","message":"\u003e Not sure if i fully understand this comment. are we saying that to not implement this method in the attachment resource class and let the base resource class create method handle it (called from the _proxy layer)?\n\nYes, exactly.\n\n\u003e I\u0027m not sure how it will handle the microversion where we only include mode in the request body if MV\u003e\u003d3.54, or do we want OSC/cinder API to handle it and not SDK bother with microversion checks?\n\nYup. While we sometimes add explicit checks, we generally leave this to the caller and do it in e.g. OSC.","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"1bb6f26d3698bce7dcd45e2d36c41d9d5f6c2be9","unresolved":true,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        attachment \u003d Attachment()"},{"line_number":71,"context_line":"        attachment._translate_response(response\u003dresponse)"},{"line_number":72,"context_line":"        return attachment"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def update(self, session, attachment_id, connector):"},{"line_number":75,"context_line":"        body \u003d {\u0027attachment\u0027: {\u0027connector\u0027: connector}}"}],"source_content_type":"text/x-python","patch_set":4,"id":"6ebf3c80_0c8e0584","line":72,"in_reply_to":"a71a6dcc_49eaf2a0","updated":"2023-07-18 11:36:48.000000000","message":"Not sure if i fully understand this comment. are we saying that to not implement this method in the attachment resource class and let the base resource class create method handle it (called from the _proxy layer)? I\u0027m not sure how it will handle the microversion where we only include mode in the request body if MV\u003e\u003d3.54, or do we want OSC/cinder API to handle it and not SDK bother with microversion checks?","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1f50318284957cc613870767e5dc434b7ddbf596","unresolved":true,"context_lines":[{"line_number":71,"context_line":"        attachment._translate_response(response\u003dresponse)"},{"line_number":72,"context_line":"        return attachment"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def update(self, session, attachment_id, connector):"},{"line_number":75,"context_line":"        body \u003d {\u0027attachment\u0027: {\u0027connector\u0027: connector}}"},{"line_number":76,"context_line":"        microversion \u003d self._get_microversion(session, action\u003d\u0027create\u0027)"},{"line_number":77,"context_line":"        url \u003d os.path.join(self.base_path, attachment_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"12d2d13f_f7ccc5ec","line":74,"updated":"2023-07-12 17:55:27.000000000","message":"Same comment as above: do you really need a boutique implementation of this method?","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1f50318284957cc613870767e5dc434b7ddbf596","unresolved":true,"context_lines":[{"line_number":71,"context_line":"        attachment._translate_response(response\u003dresponse)"},{"line_number":72,"context_line":"        return attachment"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def update(self, session, attachment_id, connector):"},{"line_number":75,"context_line":"        body \u003d {\u0027attachment\u0027: {\u0027connector\u0027: connector}}"},{"line_number":76,"context_line":"        microversion \u003d self._get_microversion(session, action\u003d\u0027create\u0027)"},{"line_number":77,"context_line":"        url \u003d os.path.join(self.base_path, attachment_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"002eb175_194b6fbb","line":74,"range":{"start_line":74,"start_character":30,"end_line":74,"end_character":43},"updated":"2023-07-12 17:55:27.000000000","message":"You shouldn\u0027t need the `attachment_id` parameter: since this is a method, you can just use `self.id`","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"1bb6f26d3698bce7dcd45e2d36c41d9d5f6c2be9","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        attachment._translate_response(response\u003dresponse)"},{"line_number":72,"context_line":"        return attachment"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def update(self, session, attachment_id, connector):"},{"line_number":75,"context_line":"        body \u003d {\u0027attachment\u0027: {\u0027connector\u0027: connector}}"},{"line_number":76,"context_line":"        microversion \u003d self._get_microversion(session, action\u003d\u0027create\u0027)"},{"line_number":77,"context_line":"        url \u003d os.path.join(self.base_path, attachment_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"a2afe1d6_7a7114b3","line":74,"range":{"start_line":74,"start_character":30,"end_line":74,"end_character":43},"in_reply_to":"002eb175_194b6fbb","updated":"2023-07-18 11:36:48.000000000","message":"Done","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"1bb6f26d3698bce7dcd45e2d36c41d9d5f6c2be9","unresolved":true,"context_lines":[{"line_number":71,"context_line":"        attachment._translate_response(response\u003dresponse)"},{"line_number":72,"context_line":"        return attachment"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def update(self, session, attachment_id, connector):"},{"line_number":75,"context_line":"        body \u003d {\u0027attachment\u0027: {\u0027connector\u0027: connector}}"},{"line_number":76,"context_line":"        microversion \u003d self._get_microversion(session, action\u003d\u0027create\u0027)"},{"line_number":77,"context_line":"        url \u003d os.path.join(self.base_path, attachment_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"c664fa29_1b759b92","line":74,"in_reply_to":"12d2d13f_f7ccc5ec","updated":"2023-07-18 11:36:48.000000000","message":"As stated in the proxy class, I\u0027m not able to make the current update call work, maybe i am missing something here","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        attachment._translate_response(response\u003dresponse)"},{"line_number":72,"context_line":"        return attachment"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def update(self, session, attachment_id, connector):"},{"line_number":75,"context_line":"        body \u003d {\u0027attachment\u0027: {\u0027connector\u0027: connector}}"},{"line_number":76,"context_line":"        microversion \u003d self._get_microversion(session, action\u003d\u0027create\u0027)"},{"line_number":77,"context_line":"        url \u003d os.path.join(self.base_path, attachment_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"a69676a2_32261e41","line":74,"in_reply_to":"aae2ed41_510bd6b6","updated":"2023-08-05 12:42:16.000000000","message":"Done","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4201ccfc6f04fdad9d6fcd81a502120cc71eebc3","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        attachment._translate_response(response\u003dresponse)"},{"line_number":72,"context_line":"        return attachment"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def update(self, session, attachment_id, connector):"},{"line_number":75,"context_line":"        body \u003d {\u0027attachment\u0027: {\u0027connector\u0027: connector}}"},{"line_number":76,"context_line":"        microversion \u003d self._get_microversion(session, action\u003d\u0027create\u0027)"},{"line_number":77,"context_line":"        url \u003d os.path.join(self.base_path, attachment_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"aae2ed41_510bd6b6","line":74,"in_reply_to":"c664fa29_1b759b92","updated":"2023-07-25 10:20:41.000000000","message":"Ack, replied there","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1f50318284957cc613870767e5dc434b7ddbf596","unresolved":true,"context_lines":[{"line_number":82,"context_line":"        attachment._translate_response(response\u003dresponse)"},{"line_number":83,"context_line":"        return attachment"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def complete(self, session, attachment_id):"},{"line_number":86,"context_line":"        body \u003d {\u0027os-complete\u0027: attachment_id}"},{"line_number":87,"context_line":"        microversion \u003d self._get_microversion(session, action\u003d\u0027create\u0027)"},{"line_number":88,"context_line":"        url \u003d \u0027/attachments/%s/action\u0027 % attachment_id"}],"source_content_type":"text/x-python","patch_set":4,"id":"c460af3f_3a28533c","line":85,"range":{"start_line":85,"start_character":32,"end_line":85,"end_character":45},"updated":"2023-07-12 17:55:27.000000000","message":"As above, you shouldn\u0027t need this","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"1bb6f26d3698bce7dcd45e2d36c41d9d5f6c2be9","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        attachment._translate_response(response\u003dresponse)"},{"line_number":83,"context_line":"        return attachment"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def complete(self, session, attachment_id):"},{"line_number":86,"context_line":"        body \u003d {\u0027os-complete\u0027: attachment_id}"},{"line_number":87,"context_line":"        microversion \u003d self._get_microversion(session, action\u003d\u0027create\u0027)"},{"line_number":88,"context_line":"        url \u003d \u0027/attachments/%s/action\u0027 % attachment_id"}],"source_content_type":"text/x-python","patch_set":4,"id":"11485923_08a6d1fd","line":85,"range":{"start_line":85,"start_character":32,"end_line":85,"end_character":45},"in_reply_to":"c460af3f_3a28533c","updated":"2023-07-18 11:36:48.000000000","message":"Done","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1f50318284957cc613870767e5dc434b7ddbf596","unresolved":true,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def complete(self, session, attachment_id):"},{"line_number":86,"context_line":"        body \u003d {\u0027os-complete\u0027: attachment_id}"},{"line_number":87,"context_line":"        microversion \u003d self._get_microversion(session, action\u003d\u0027create\u0027)"},{"line_number":88,"context_line":"        url \u003d \u0027/attachments/%s/action\u0027 % attachment_id"},{"line_number":89,"context_line":"        session.post(url, json\u003dbody, microversion\u003dmicroversion)"}],"source_content_type":"text/x-python","patch_set":4,"id":"c3f07fcc_8fe11ab3","line":87,"updated":"2023-07-12 17:55:27.000000000","message":"nit: Might be helpful to provide a `microversion` kwarg-only argument so users can override this?\n\n```\ndef complete(self, session, *, microversion\u003dNone):\n    body \u003d {\u0027os-complete\u0027: self.id}\n    if microversion is None:\n        microversion \u003d self._get_microversion(session, action\u003d\u0027create\u0027)\n    # ...\n```","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"1bb6f26d3698bce7dcd45e2d36c41d9d5f6c2be9","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def complete(self, session, attachment_id):"},{"line_number":86,"context_line":"        body \u003d {\u0027os-complete\u0027: attachment_id}"},{"line_number":87,"context_line":"        microversion \u003d self._get_microversion(session, action\u003d\u0027create\u0027)"},{"line_number":88,"context_line":"        url \u003d \u0027/attachments/%s/action\u0027 % attachment_id"},{"line_number":89,"context_line":"        session.post(url, json\u003dbody, microversion\u003dmicroversion)"}],"source_content_type":"text/x-python","patch_set":4,"id":"4ea72b2d_0956cf7c","line":87,"in_reply_to":"c3f07fcc_8fe11ab3","updated":"2023-07-18 11:36:48.000000000","message":"Done","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1f50318284957cc613870767e5dc434b7ddbf596","unresolved":true,"context_lines":[{"line_number":85,"context_line":"    def complete(self, session, attachment_id):"},{"line_number":86,"context_line":"        body \u003d {\u0027os-complete\u0027: attachment_id}"},{"line_number":87,"context_line":"        microversion \u003d self._get_microversion(session, action\u003d\u0027create\u0027)"},{"line_number":88,"context_line":"        url \u003d \u0027/attachments/%s/action\u0027 % attachment_id"},{"line_number":89,"context_line":"        session.post(url, json\u003dbody, microversion\u003dmicroversion)"}],"source_content_type":"text/x-python","patch_set":4,"id":"987a360c_9613681c","line":88,"updated":"2023-07-12 17:55:27.000000000","message":"nit: could do\n\n```\nurl \u003d utils.urljoin(Attachment.base_path, self.id, \u0027action\u0027)\n```","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"1bb6f26d3698bce7dcd45e2d36c41d9d5f6c2be9","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    def complete(self, session, attachment_id):"},{"line_number":86,"context_line":"        body \u003d {\u0027os-complete\u0027: attachment_id}"},{"line_number":87,"context_line":"        microversion \u003d self._get_microversion(session, action\u003d\u0027create\u0027)"},{"line_number":88,"context_line":"        url \u003d \u0027/attachments/%s/action\u0027 % attachment_id"},{"line_number":89,"context_line":"        session.post(url, json\u003dbody, microversion\u003dmicroversion)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7133d373_73eb2181","line":88,"in_reply_to":"987a360c_9613681c","updated":"2023-07-18 11:36:48.000000000","message":"Done","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1f50318284957cc613870767e5dc434b7ddbf596","unresolved":true,"context_lines":[{"line_number":86,"context_line":"        body \u003d {\u0027os-complete\u0027: attachment_id}"},{"line_number":87,"context_line":"        microversion \u003d self._get_microversion(session, action\u003d\u0027create\u0027)"},{"line_number":88,"context_line":"        url \u003d \u0027/attachments/%s/action\u0027 % attachment_id"},{"line_number":89,"context_line":"        session.post(url, json\u003dbody, microversion\u003dmicroversion)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5db6cd7b_1f5440e5","line":89,"updated":"2023-07-12 17:55:27.000000000","message":"Anything to return?","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"1bb6f26d3698bce7dcd45e2d36c41d9d5f6c2be9","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        body \u003d {\u0027os-complete\u0027: attachment_id}"},{"line_number":87,"context_line":"        microversion \u003d self._get_microversion(session, action\u003d\u0027create\u0027)"},{"line_number":88,"context_line":"        url \u003d \u0027/attachments/%s/action\u0027 % attachment_id"},{"line_number":89,"context_line":"        session.post(url, json\u003dbody, microversion\u003dmicroversion)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9170054d_f8f31965","line":89,"in_reply_to":"5db6cd7b_1f5440e5","updated":"2023-07-18 11:36:48.000000000","message":"Nope, complete call just updates the DB on cinder side to set volume status from \u0027attaching\u0027 -\u003e \u0027in-use\u0027\n\nhttps://docs.openstack.org/api-ref/block-storage/v3/?expanded\u003dcreate-a-volume-transfer-detail,complete-attachment-detail#complete-attachment","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2b2071a15e511e8e5c2dff444a6a883dbf535535","unresolved":true,"context_lines":[{"line_number":45,"context_line":"    #: The time when attachment is detached."},{"line_number":46,"context_line":"    detached_at \u003d resource.Body(\"detach_time\")"},{"line_number":47,"context_line":"    #: The attach mode of attachment, read-only (‘ro’) or read-and-write"},{"line_number":48,"context_line":"    # (‘rw’), default is ‘rw’."},{"line_number":49,"context_line":"    attach_mode \u003d resource.Body(\"attach_mode\")"},{"line_number":50,"context_line":"    #: The connection info used for server to connect the volume."},{"line_number":51,"context_line":"    connection_info \u003d resource.Body(\"connection_info\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"1d9a141f_c96482e9","line":48,"updated":"2023-07-25 10:27:45.000000000","message":"These are [smart quotes](https://en.wikipedia.org/wiki/Quotation_mark). Can you replace them with ASCII quotes? `s/‘/\u0027/`, `s/’/\u0027/`","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    #: The time when attachment is detached."},{"line_number":46,"context_line":"    detached_at \u003d resource.Body(\"detach_time\")"},{"line_number":47,"context_line":"    #: The attach mode of attachment, read-only (‘ro’) or read-and-write"},{"line_number":48,"context_line":"    # (‘rw’), default is ‘rw’."},{"line_number":49,"context_line":"    attach_mode \u003d resource.Body(\"attach_mode\")"},{"line_number":50,"context_line":"    #: The connection info used for server to connect the volume."},{"line_number":51,"context_line":"    connection_info \u003d resource.Body(\"connection_info\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"5e80d65c_cdc6a260","line":48,"in_reply_to":"1d9a141f_c96482e9","updated":"2023-08-05 12:42:16.000000000","message":"Done","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4201ccfc6f04fdad9d6fcd81a502120cc71eebc3","unresolved":true,"context_lines":[{"line_number":85,"context_line":"    def complete(self, session, *args, microversion\u003dNone):"},{"line_number":86,"context_line":"        body \u003d {\u0027os-complete\u0027: self.id}"},{"line_number":87,"context_line":"        if not microversion:"},{"line_number":88,"context_line":"            microversion \u003d self._get_microversion(session, action\u003d\u0027create\u0027)"},{"line_number":89,"context_line":"        url \u003d os.path.join(Attachment.base_path, self.id, \u0027action\u0027)"},{"line_number":90,"context_line":"        session.post(url, json\u003dbody, microversion\u003dmicroversion)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5cc6541f_9f13559f","line":88,"range":{"start_line":88,"start_character":67,"end_line":88,"end_character":73},"updated":"2023-07-25 10:20:41.000000000","message":"`commit`?","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    def complete(self, session, *args, microversion\u003dNone):"},{"line_number":86,"context_line":"        body \u003d {\u0027os-complete\u0027: self.id}"},{"line_number":87,"context_line":"        if not microversion:"},{"line_number":88,"context_line":"            microversion \u003d self._get_microversion(session, action\u003d\u0027create\u0027)"},{"line_number":89,"context_line":"        url \u003d os.path.join(Attachment.base_path, self.id, \u0027action\u0027)"},{"line_number":90,"context_line":"        session.post(url, json\u003dbody, microversion\u003dmicroversion)"}],"source_content_type":"text/x-python","patch_set":6,"id":"2a46b56b_8ac5ecb4","line":88,"range":{"start_line":88,"start_character":67,"end_line":88,"end_character":73},"in_reply_to":"5cc6541f_9f13559f","updated":"2023-08-05 12:42:16.000000000","message":"Done","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4201ccfc6f04fdad9d6fcd81a502120cc71eebc3","unresolved":true,"context_lines":[{"line_number":87,"context_line":"        if not microversion:"},{"line_number":88,"context_line":"            microversion \u003d self._get_microversion(session, action\u003d\u0027create\u0027)"},{"line_number":89,"context_line":"        url \u003d os.path.join(Attachment.base_path, self.id, \u0027action\u0027)"},{"line_number":90,"context_line":"        session.post(url, json\u003dbody, microversion\u003dmicroversion)"}],"source_content_type":"text/x-python","patch_set":6,"id":"d7115b4f_c8d1ae35","line":90,"updated":"2023-07-25 10:20:41.000000000","message":"You probably want to add a `exceptions.raise_from_response(response)` call also?","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        if not microversion:"},{"line_number":88,"context_line":"            microversion \u003d self._get_microversion(session, action\u003d\u0027create\u0027)"},{"line_number":89,"context_line":"        url \u003d os.path.join(Attachment.base_path, self.id, \u0027action\u0027)"},{"line_number":90,"context_line":"        session.post(url, json\u003dbody, microversion\u003dmicroversion)"}],"source_content_type":"text/x-python","patch_set":6,"id":"8af7cfe2_a6189245","line":90,"in_reply_to":"d7115b4f_c8d1ae35","updated":"2023-08-05 12:42:16.000000000","message":"Done","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a737526d0c8cdaee9705a65e61a94e6efa291887","unresolved":true,"context_lines":[{"line_number":64,"context_line":"        microversion\u003dNone,"},{"line_number":65,"context_line":"        **params,"},{"line_number":66,"context_line":"    ):"},{"line_number":67,"context_line":"        if utils.supports_microversion(session, \u00273.54\u0027):"},{"line_number":68,"context_line":"            if not self.attach_mode or self.attach_mode \u003d\u003d \u0027null\u0027:"},{"line_number":69,"context_line":"                self._body.clean(only\u003d{\u0027mode\u0027})"},{"line_number":70,"context_line":"        return super().create("}],"source_content_type":"text/x-python","patch_set":8,"id":"58f0cc7c_c7b02e02","line":67,"updated":"2023-08-28 10:16:20.000000000","message":"Just to confirm: the `mode` field should *not* be present on 3.54 or later, or it should *only* be present on 3.54 or later. At the moment this says the former.","commit_id":"a1c4daab40910c03b990b0077bf04a499d36164a"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4eed49f0a3561b0999f02a88173f28d69e473823","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        microversion\u003dNone,"},{"line_number":65,"context_line":"        **params,"},{"line_number":66,"context_line":"    ):"},{"line_number":67,"context_line":"        if utils.supports_microversion(session, \u00273.54\u0027):"},{"line_number":68,"context_line":"            if not self.attach_mode or self.attach_mode \u003d\u003d \u0027null\u0027:"},{"line_number":69,"context_line":"                self._body.clean(only\u003d{\u0027mode\u0027})"},{"line_number":70,"context_line":"        return super().create("}],"source_content_type":"text/x-python","patch_set":8,"id":"1c318b72_dadda258","line":67,"in_reply_to":"08c70dab_5e27de38","updated":"2023-08-30 20:53:31.000000000","message":"Done","commit_id":"a1c4daab40910c03b990b0077bf04a499d36164a"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"3dbeeed41aa30cb4b75a281dfeae757354356113","unresolved":true,"context_lines":[{"line_number":64,"context_line":"        microversion\u003dNone,"},{"line_number":65,"context_line":"        **params,"},{"line_number":66,"context_line":"    ):"},{"line_number":67,"context_line":"        if utils.supports_microversion(session, \u00273.54\u0027):"},{"line_number":68,"context_line":"            if not self.attach_mode or self.attach_mode \u003d\u003d \u0027null\u0027:"},{"line_number":69,"context_line":"                self._body.clean(only\u003d{\u0027mode\u0027})"},{"line_number":70,"context_line":"        return super().create("}],"source_content_type":"text/x-python","patch_set":8,"id":"08c70dab_5e27de38","line":67,"in_reply_to":"58f0cc7c_c7b02e02","updated":"2023-08-30 20:53:22.000000000","message":"The mode parameter accepted by cinder API should be a string and one of the two values \u0027rw\u0027 or \u0027ro\u0027\nThe reason for this check is, if we pass MV \u003e\u003d3.54 then the mode argument is also passed as value None which we need to remove else the API request will fail\n\nBadRequestException: 400: Client Error for url: http://127.0.0.1/volume/v3/f8160c32d28845b0ac0790eb26d38d93/attachments, Invalid input for field/attribute mode. Value: None. None is not of type \u0027string\u0027\n\n\nThough the \u0027null\u0027 part seems unnecessary, I think i added it since cinderclient had that syntax but i can\u0027t remember why. It\u0027s working fine without it, will remove that.","commit_id":"a1c4daab40910c03b990b0077bf04a499d36164a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a737526d0c8cdaee9705a65e61a94e6efa291887","unresolved":true,"context_lines":[{"line_number":77,"context_line":"            **params,"},{"line_number":78,"context_line":"        )"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def complete(self, session, *args, microversion\u003dNone):"},{"line_number":81,"context_line":"        body \u003d {\u0027os-complete\u0027: self.id}"},{"line_number":82,"context_line":"        if not microversion:"},{"line_number":83,"context_line":"            microversion \u003d self._get_microversion(session, action\u003d\u0027commit\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"cd8b5db3_10bbc2f5","line":80,"range":{"start_line":80,"start_character":33,"end_line":80,"end_character":37},"updated":"2023-08-28 10:16:20.000000000","message":"Assuming you were going for kwarg-only arguments, this should simply be `*`, not `*args`.","commit_id":"a1c4daab40910c03b990b0077bf04a499d36164a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a737526d0c8cdaee9705a65e61a94e6efa291887","unresolved":true,"context_lines":[{"line_number":77,"context_line":"            **params,"},{"line_number":78,"context_line":"        )"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def complete(self, session, *args, microversion\u003dNone):"},{"line_number":81,"context_line":"        body \u003d {\u0027os-complete\u0027: self.id}"},{"line_number":82,"context_line":"        if not microversion:"},{"line_number":83,"context_line":"            microversion \u003d self._get_microversion(session, action\u003d\u0027commit\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"506a3ad0_91af32a9","line":80,"updated":"2023-08-28 10:16:20.000000000","message":"nit: could do with a docstring.","commit_id":"a1c4daab40910c03b990b0077bf04a499d36164a"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"3dbeeed41aa30cb4b75a281dfeae757354356113","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            **params,"},{"line_number":78,"context_line":"        )"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def complete(self, session, *args, microversion\u003dNone):"},{"line_number":81,"context_line":"        body \u003d {\u0027os-complete\u0027: self.id}"},{"line_number":82,"context_line":"        if not microversion:"},{"line_number":83,"context_line":"            microversion \u003d self._get_microversion(session, action\u003d\u0027commit\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f7988a0_0d594280","line":80,"in_reply_to":"506a3ad0_91af32a9","updated":"2023-08-30 20:53:22.000000000","message":"Done","commit_id":"a1c4daab40910c03b990b0077bf04a499d36164a"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"3dbeeed41aa30cb4b75a281dfeae757354356113","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            **params,"},{"line_number":78,"context_line":"        )"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def complete(self, session, *args, microversion\u003dNone):"},{"line_number":81,"context_line":"        body \u003d {\u0027os-complete\u0027: self.id}"},{"line_number":82,"context_line":"        if not microversion:"},{"line_number":83,"context_line":"            microversion \u003d self._get_microversion(session, action\u003d\u0027commit\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"317b89bd_2b3949c3","line":80,"range":{"start_line":80,"start_character":33,"end_line":80,"end_character":37},"in_reply_to":"cd8b5db3_10bbc2f5","updated":"2023-08-30 20:53:22.000000000","message":"Done","commit_id":"a1c4daab40910c03b990b0077bf04a499d36164a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a737526d0c8cdaee9705a65e61a94e6efa291887","unresolved":true,"context_lines":[{"line_number":85,"context_line":"        response \u003d session.post(url, json\u003dbody, microversion\u003dmicroversion)"},{"line_number":86,"context_line":"        exceptions.raise_from_response(response)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _prepare_request_body(self, patch, prepend_key):"},{"line_number":89,"context_line":"        body \u003d self._body.dirty"},{"line_number":90,"context_line":"        if body.get(\u0027volume_id\u0027):"},{"line_number":91,"context_line":"            body[\u0027volume_uuid\u0027] \u003d body.pop(\u0027volume_id\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"e31eda69_b35eeaad","line":88,"updated":"2023-08-28 10:16:20.000000000","message":"nit: this is missing the `resource_request_key` kwarg. We don\u0027t use it but I assume we should inherit the interface?","commit_id":"a1c4daab40910c03b990b0077bf04a499d36164a"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4eed49f0a3561b0999f02a88173f28d69e473823","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        response \u003d session.post(url, json\u003dbody, microversion\u003dmicroversion)"},{"line_number":86,"context_line":"        exceptions.raise_from_response(response)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _prepare_request_body(self, patch, prepend_key):"},{"line_number":89,"context_line":"        body \u003d self._body.dirty"},{"line_number":90,"context_line":"        if body.get(\u0027volume_id\u0027):"},{"line_number":91,"context_line":"            body[\u0027volume_uuid\u0027] \u003d body.pop(\u0027volume_id\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9d3d187e_b39a2e00","line":88,"in_reply_to":"54dcb84b_94371e31","updated":"2023-08-30 20:53:31.000000000","message":"Done","commit_id":"a1c4daab40910c03b990b0077bf04a499d36164a"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"3dbeeed41aa30cb4b75a281dfeae757354356113","unresolved":true,"context_lines":[{"line_number":85,"context_line":"        response \u003d session.post(url, json\u003dbody, microversion\u003dmicroversion)"},{"line_number":86,"context_line":"        exceptions.raise_from_response(response)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _prepare_request_body(self, patch, prepend_key):"},{"line_number":89,"context_line":"        body \u003d self._body.dirty"},{"line_number":90,"context_line":"        if body.get(\u0027volume_id\u0027):"},{"line_number":91,"context_line":"            body[\u0027volume_uuid\u0027] \u003d body.pop(\u0027volume_id\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"54dcb84b_94371e31","line":88,"in_reply_to":"e31eda69_b35eeaad","updated":"2023-08-30 20:53:22.000000000","message":"I don\u0027t see that being used anywhere in the implementation i referenced to, like\n\nhttps://github.com/openstack/openstacksdk/blob/master/openstack/identity/v3/limit.py#L50\n\nI don\u0027t mind adding it though","commit_id":"a1c4daab40910c03b990b0077bf04a499d36164a"}],"openstack/tests/functional/block_storage/v3/test_attachment.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1f50318284957cc613870767e5dc434b7ddbf596","unresolved":true,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class TestAttachment(base.BaseBlockStorageTest):"},{"line_number":18,"context_line":"    def setUp(self):"},{"line_number":19,"context_line":"        super(TestAttachment, self).setUp()"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"        # Create Volume"},{"line_number":22,"context_line":"        self.VOLUME_NAME \u003d self.getUniqueString()"}],"source_content_type":"text/x-python","patch_set":4,"id":"d1035815_bb6ec9b8","line":19,"range":{"start_line":19,"start_character":14,"end_line":19,"end_character":34},"updated":"2023-07-12 17:55:27.000000000","message":"nit: unnecessary","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"1bb6f26d3698bce7dcd45e2d36c41d9d5f6c2be9","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class TestAttachment(base.BaseBlockStorageTest):"},{"line_number":18,"context_line":"    def setUp(self):"},{"line_number":19,"context_line":"        super(TestAttachment, self).setUp()"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"        # Create Volume"},{"line_number":22,"context_line":"        self.VOLUME_NAME \u003d self.getUniqueString()"}],"source_content_type":"text/x-python","patch_set":4,"id":"4fb2ad92_5722f01e","line":19,"range":{"start_line":19,"start_character":14,"end_line":19,"end_character":34},"in_reply_to":"d1035815_bb6ec9b8","updated":"2023-07-18 11:36:48.000000000","message":"Done","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1f50318284957cc613870767e5dc434b7ddbf596","unresolved":true,"context_lines":[{"line_number":67,"context_line":"            self.server, wait\u003dself._wait_for_timeout"},{"line_number":68,"context_line":"        )"},{"line_number":69,"context_line":"        self.assertIsNone(sot)"},{"line_number":70,"context_line":"        super(TestAttachment, self).tearDown()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def test_create(self):"},{"line_number":73,"context_line":"        sot \u003d self.conn.block_storage.create_attachment("}],"source_content_type":"text/x-python","patch_set":4,"id":"0f7e1507_9530b145","line":70,"range":{"start_line":70,"start_character":14,"end_line":70,"end_character":34},"updated":"2023-07-12 17:55:27.000000000","message":"nit: unnecessary","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"1bb6f26d3698bce7dcd45e2d36c41d9d5f6c2be9","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            self.server, wait\u003dself._wait_for_timeout"},{"line_number":68,"context_line":"        )"},{"line_number":69,"context_line":"        self.assertIsNone(sot)"},{"line_number":70,"context_line":"        super(TestAttachment, self).tearDown()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def test_create(self):"},{"line_number":73,"context_line":"        sot \u003d self.conn.block_storage.create_attachment("}],"source_content_type":"text/x-python","patch_set":4,"id":"b3e176dc_19e9b321","line":70,"range":{"start_line":70,"start_character":14,"end_line":70,"end_character":34},"in_reply_to":"0f7e1507_9530b145","updated":"2023-07-18 11:36:48.000000000","message":"Done","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1f50318284957cc613870767e5dc434b7ddbf596","unresolved":true,"context_lines":[{"line_number":69,"context_line":"        self.assertIsNone(sot)"},{"line_number":70,"context_line":"        super(TestAttachment, self).tearDown()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def test_create(self):"},{"line_number":73,"context_line":"        sot \u003d self.conn.block_storage.create_attachment("},{"line_number":74,"context_line":"            self.VOLUME_ID,"},{"line_number":75,"context_line":"            {},"}],"source_content_type":"text/x-python","patch_set":4,"id":"c616af57_1e054219","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":19},"updated":"2023-07-12 17:55:27.000000000","message":"Could we rename to e.g. `test_attachment` since we\u0027re doing more than deleting here","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"1bb6f26d3698bce7dcd45e2d36c41d9d5f6c2be9","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.assertIsNone(sot)"},{"line_number":70,"context_line":"        super(TestAttachment, self).tearDown()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def test_create(self):"},{"line_number":73,"context_line":"        sot \u003d self.conn.block_storage.create_attachment("},{"line_number":74,"context_line":"            self.VOLUME_ID,"},{"line_number":75,"context_line":"            {},"}],"source_content_type":"text/x-python","patch_set":4,"id":"8819e3c3_030d958d","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":19},"in_reply_to":"c616af57_1e054219","updated":"2023-07-18 11:36:48.000000000","message":"Done","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1f50318284957cc613870767e5dc434b7ddbf596","unresolved":true,"context_lines":[{"line_number":75,"context_line":"            {},"},{"line_number":76,"context_line":"            self.server.id,"},{"line_number":77,"context_line":"            \u0027null\u0027,"},{"line_number":78,"context_line":"        )"},{"line_number":79,"context_line":"        self.assertIn(\u0027id\u0027, sot)"},{"line_number":80,"context_line":"        self.assertIn(\u0027status\u0027, sot)"},{"line_number":81,"context_line":"        self.assertIn(\u0027instance\u0027, sot)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7df5609f_51febd3d","line":78,"updated":"2023-07-12 17:55:27.000000000","message":"Just so I\u0027m sure, this won\u0027t be picked up from nova, right?","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"1bb6f26d3698bce7dcd45e2d36c41d9d5f6c2be9","unresolved":true,"context_lines":[{"line_number":75,"context_line":"            {},"},{"line_number":76,"context_line":"            self.server.id,"},{"line_number":77,"context_line":"            \u0027null\u0027,"},{"line_number":78,"context_line":"        )"},{"line_number":79,"context_line":"        self.assertIn(\u0027id\u0027, sot)"},{"line_number":80,"context_line":"        self.assertIn(\u0027status\u0027, sot)"},{"line_number":81,"context_line":"        self.assertIn(\u0027instance\u0027, sot)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bbdafcf3_9e02b50d","line":78,"in_reply_to":"7df5609f_51febd3d","updated":"2023-07-18 11:36:48.000000000","message":"you mean nova volume attachment API? nope, this is cinder specific API for creating attachment that nova calls internally in it\u0027s attachment workflow. This is just one part of the overall nova operation.","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9d4cc770f1c6fdbef82e1f3c67eb36df4d9b129d","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            {},"},{"line_number":76,"context_line":"            self.server.id,"},{"line_number":77,"context_line":"            \u0027null\u0027,"},{"line_number":78,"context_line":"        )"},{"line_number":79,"context_line":"        self.assertIn(\u0027id\u0027, sot)"},{"line_number":80,"context_line":"        self.assertIn(\u0027status\u0027, sot)"},{"line_number":81,"context_line":"        self.assertIn(\u0027instance\u0027, sot)"}],"source_content_type":"text/x-python","patch_set":4,"id":"24745207_cfa28333","line":78,"in_reply_to":"bbdafcf3_9e02b50d","updated":"2023-07-25 10:47:55.000000000","message":"Ack","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1f50318284957cc613870767e5dc434b7ddbf596","unresolved":true,"context_lines":[{"line_number":83,"context_line":"        self.assertIn(\u0027attached_at\u0027, sot)"},{"line_number":84,"context_line":"        self.assertIn(\u0027detached_at\u0027, sot)"},{"line_number":85,"context_line":"        self.assertIn(\u0027attach_mode\u0027, sot)"},{"line_number":86,"context_line":"        self.assertIn(\u0027connection_info\u0027, sot)"},{"line_number":87,"context_line":"        sot \u003d self.user_cloud.block_storage.delete_attachment("},{"line_number":88,"context_line":"            sot.id, ignore_missing\u003dFalse"},{"line_number":89,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"f5568a68_0039f3c1","line":86,"updated":"2023-07-12 17:55:27.000000000","message":"Do we want to test the update and complete methods?","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"76466e73b3b9599f253a959b56aa40632dd5338b","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        self.assertIn(\u0027attached_at\u0027, sot)"},{"line_number":84,"context_line":"        self.assertIn(\u0027detached_at\u0027, sot)"},{"line_number":85,"context_line":"        self.assertIn(\u0027attach_mode\u0027, sot)"},{"line_number":86,"context_line":"        self.assertIn(\u0027connection_info\u0027, sot)"},{"line_number":87,"context_line":"        sot \u003d self.user_cloud.block_storage.delete_attachment("},{"line_number":88,"context_line":"            sot.id, ignore_missing\u003dFalse"},{"line_number":89,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"c5cd2746_14980b4b","line":86,"in_reply_to":"16ed4d23_02acf393","updated":"2023-08-05 17:35:28.000000000","message":"Forget it, it worked since my volume backend in local env is ceph but it won\u0027t work for iSCSI as we have in our gate jobs, will add a comment instead.\n\nhttps://storage.bhs.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_171/884167/7/check/openstacksdk-functional-devstack-networking-ext/171f72c/testr_results.html","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        self.assertIn(\u0027attached_at\u0027, sot)"},{"line_number":84,"context_line":"        self.assertIn(\u0027detached_at\u0027, sot)"},{"line_number":85,"context_line":"        self.assertIn(\u0027attach_mode\u0027, sot)"},{"line_number":86,"context_line":"        self.assertIn(\u0027connection_info\u0027, sot)"},{"line_number":87,"context_line":"        sot \u003d self.user_cloud.block_storage.delete_attachment("},{"line_number":88,"context_line":"            sot.id, ignore_missing\u003dFalse"},{"line_number":89,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"16ed4d23_02acf393","line":86,"in_reply_to":"2b2a8f15_72f07677","updated":"2023-08-05 12:42:16.000000000","message":"I tried passing all required values as None and it worked, will add the test in next PS","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9d4cc770f1c6fdbef82e1f3c67eb36df4d9b129d","unresolved":true,"context_lines":[{"line_number":83,"context_line":"        self.assertIn(\u0027attached_at\u0027, sot)"},{"line_number":84,"context_line":"        self.assertIn(\u0027detached_at\u0027, sot)"},{"line_number":85,"context_line":"        self.assertIn(\u0027attach_mode\u0027, sot)"},{"line_number":86,"context_line":"        self.assertIn(\u0027connection_info\u0027, sot)"},{"line_number":87,"context_line":"        sot \u003d self.user_cloud.block_storage.delete_attachment("},{"line_number":88,"context_line":"            sot.id, ignore_missing\u003dFalse"},{"line_number":89,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"2b2a8f15_72f07677","line":86,"in_reply_to":"aa4cf348_a6e6204e","updated":"2023-07-25 10:47:55.000000000","message":"Okay, that\u0027s fair. Can you add a comment here indicating why we don\u0027t test these?","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"13cabc5e06cb5fcbbf75867822672c28407495ac","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        self.assertIn(\u0027attached_at\u0027, sot)"},{"line_number":84,"context_line":"        self.assertIn(\u0027detached_at\u0027, sot)"},{"line_number":85,"context_line":"        self.assertIn(\u0027attach_mode\u0027, sot)"},{"line_number":86,"context_line":"        self.assertIn(\u0027connection_info\u0027, sot)"},{"line_number":87,"context_line":"        sot \u003d self.user_cloud.block_storage.delete_attachment("},{"line_number":88,"context_line":"            sot.id, ignore_missing\u003dFalse"},{"line_number":89,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"26bb395f_8010a8b3","line":86,"in_reply_to":"c5cd2746_14980b4b","updated":"2023-08-05 17:52:32.000000000","message":"Done","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"1bb6f26d3698bce7dcd45e2d36c41d9d5f6c2be9","unresolved":true,"context_lines":[{"line_number":83,"context_line":"        self.assertIn(\u0027attached_at\u0027, sot)"},{"line_number":84,"context_line":"        self.assertIn(\u0027detached_at\u0027, sot)"},{"line_number":85,"context_line":"        self.assertIn(\u0027attach_mode\u0027, sot)"},{"line_number":86,"context_line":"        self.assertIn(\u0027connection_info\u0027, sot)"},{"line_number":87,"context_line":"        sot \u003d self.user_cloud.block_storage.delete_attachment("},{"line_number":88,"context_line":"            sot.id, ignore_missing\u003dFalse"},{"line_number":89,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"aa4cf348_a6e6204e","line":86,"in_reply_to":"f5568a68_0039f3c1","updated":"2023-07-18 11:36:48.000000000","message":"This is tricky and quite hard to do. For update method, we require the connector info which we get from nova host, not sure if we will be able to get host values in a functional test.\nFor testing the complete method, we require the attachment in \u0027attaching\u0027 state which again requires attachment create and attachment update calls before the complete call.","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9d4cc770f1c6fdbef82e1f3c67eb36df4d9b129d","unresolved":true,"context_lines":[{"line_number":19,"context_line":"        super().setUp()"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"        # Create Volume"},{"line_number":22,"context_line":"        self.VOLUME_NAME \u003d self.getUniqueString()"},{"line_number":23,"context_line":"        self.VOLUME_ID \u003d None"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        volume \u003d self.user_cloud.block_storage.create_volume("}],"source_content_type":"text/x-python","patch_set":6,"id":"5edde9ae_cac4d69f","line":22,"updated":"2023-07-25 10:47:55.000000000","message":"nit: no real need for this to be upper-case, lower-case would be fine","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":19,"context_line":"        super().setUp()"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"        # Create Volume"},{"line_number":22,"context_line":"        self.VOLUME_NAME \u003d self.getUniqueString()"},{"line_number":23,"context_line":"        self.VOLUME_ID \u003d None"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        volume \u003d self.user_cloud.block_storage.create_volume("}],"source_content_type":"text/x-python","patch_set":6,"id":"9cdeb57d_604abf98","line":22,"in_reply_to":"5edde9ae_cac4d69f","updated":"2023-08-05 12:42:16.000000000","message":"Done","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9d4cc770f1c6fdbef82e1f3c67eb36df4d9b129d","unresolved":true,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"        # Create Volume"},{"line_number":22,"context_line":"        self.VOLUME_NAME \u003d self.getUniqueString()"},{"line_number":23,"context_line":"        self.VOLUME_ID \u003d None"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        volume \u003d self.user_cloud.block_storage.create_volume("},{"line_number":26,"context_line":"            name\u003dself.VOLUME_NAME, size\u003d1"}],"source_content_type":"text/x-python","patch_set":6,"id":"d8eb1f53_ba7d1343","line":23,"updated":"2023-07-25 10:47:55.000000000","message":"You define this below. Probably no need to define it here?","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"        # Create Volume"},{"line_number":22,"context_line":"        self.VOLUME_NAME \u003d self.getUniqueString()"},{"line_number":23,"context_line":"        self.VOLUME_ID \u003d None"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        volume \u003d self.user_cloud.block_storage.create_volume("},{"line_number":26,"context_line":"            name\u003dself.VOLUME_NAME, size\u003d1"}],"source_content_type":"text/x-python","patch_set":6,"id":"c21bea1b_cf2cda32","line":23,"in_reply_to":"d8eb1f53_ba7d1343","updated":"2023-08-05 12:42:16.000000000","message":"Done","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9d4cc770f1c6fdbef82e1f3c67eb36df4d9b129d","unresolved":true,"context_lines":[{"line_number":32,"context_line":"            interval\u003d2,"},{"line_number":33,"context_line":"            wait\u003dself._wait_for_timeout,"},{"line_number":34,"context_line":"        )"},{"line_number":35,"context_line":"        assert isinstance(volume, _volume.Volume)"},{"line_number":36,"context_line":"        self.VOLUME_ID \u003d volume.id"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        # Create Server"}],"source_content_type":"text/x-python","patch_set":6,"id":"4f8f1512_c27c9cf2","line":35,"range":{"start_line":35,"start_character":8,"end_line":35,"end_character":25},"updated":"2023-07-25 10:47:55.000000000","message":"Can you use `self.assertIsInstance` instead? Nicer error messages if it fails.","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":32,"context_line":"            interval\u003d2,"},{"line_number":33,"context_line":"            wait\u003dself._wait_for_timeout,"},{"line_number":34,"context_line":"        )"},{"line_number":35,"context_line":"        assert isinstance(volume, _volume.Volume)"},{"line_number":36,"context_line":"        self.VOLUME_ID \u003d volume.id"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        # Create Server"}],"source_content_type":"text/x-python","patch_set":6,"id":"48d143a6_628e9eca","line":35,"range":{"start_line":35,"start_character":8,"end_line":35,"end_character":25},"in_reply_to":"4f8f1512_c27c9cf2","updated":"2023-08-05 12:42:16.000000000","message":"Done","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9d4cc770f1c6fdbef82e1f3c67eb36df4d9b129d","unresolved":true,"context_lines":[{"line_number":36,"context_line":"        self.VOLUME_ID \u003d volume.id"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        # Create Server"},{"line_number":39,"context_line":"        self._set_operator_cloud(interface\u003d\u0027admin\u0027)"},{"line_number":40,"context_line":"        self.NAME \u003d \u0027needstobeshortandlowercase\u0027"},{"line_number":41,"context_line":"        self.USERDATA \u003d \u0027SSdtIGFjdHVhbGx5IGEgZ29hdC4\u003d\u0027"},{"line_number":42,"context_line":"        sot \u003d self.conn.compute.create_server("}],"source_content_type":"text/x-python","patch_set":6,"id":"087b5bac_6bb8e3f9","line":39,"updated":"2023-07-25 10:47:55.000000000","message":"Rather than calling this and then using `self.conn`, you should now just use `self.operator_cloud`.","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        self.VOLUME_ID \u003d volume.id"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        # Create Server"},{"line_number":39,"context_line":"        self._set_operator_cloud(interface\u003d\u0027admin\u0027)"},{"line_number":40,"context_line":"        self.NAME \u003d \u0027needstobeshortandlowercase\u0027"},{"line_number":41,"context_line":"        self.USERDATA \u003d \u0027SSdtIGFjdHVhbGx5IGEgZ29hdC4\u003d\u0027"},{"line_number":42,"context_line":"        sot \u003d self.conn.compute.create_server("}],"source_content_type":"text/x-python","patch_set":6,"id":"737bb655_3c148574","line":39,"in_reply_to":"087b5bac_6bb8e3f9","updated":"2023-08-05 12:42:16.000000000","message":"Done","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9d4cc770f1c6fdbef82e1f3c67eb36df4d9b129d","unresolved":true,"context_lines":[{"line_number":38,"context_line":"        # Create Server"},{"line_number":39,"context_line":"        self._set_operator_cloud(interface\u003d\u0027admin\u0027)"},{"line_number":40,"context_line":"        self.NAME \u003d \u0027needstobeshortandlowercase\u0027"},{"line_number":41,"context_line":"        self.USERDATA \u003d \u0027SSdtIGFjdHVhbGx5IGEgZ29hdC4\u003d\u0027"},{"line_number":42,"context_line":"        sot \u003d self.conn.compute.create_server("},{"line_number":43,"context_line":"            name\u003dself.NAME,"},{"line_number":44,"context_line":"            flavor_id\u003dself.flavor.id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"6724704d_d290dce1","line":41,"updated":"2023-07-25 10:47:55.000000000","message":"nit: this seems a bit noisy/unnecessary when we\u0027re testing cinder, not nova","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        # Create Server"},{"line_number":39,"context_line":"        self._set_operator_cloud(interface\u003d\u0027admin\u0027)"},{"line_number":40,"context_line":"        self.NAME \u003d \u0027needstobeshortandlowercase\u0027"},{"line_number":41,"context_line":"        self.USERDATA \u003d \u0027SSdtIGFjdHVhbGx5IGEgZ29hdC4\u003d\u0027"},{"line_number":42,"context_line":"        sot \u003d self.conn.compute.create_server("},{"line_number":43,"context_line":"            name\u003dself.NAME,"},{"line_number":44,"context_line":"            flavor_id\u003dself.flavor.id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bcb0400e_be8d6566","line":41,"in_reply_to":"6724704d_d290dce1","updated":"2023-08-05 12:42:16.000000000","message":"Done","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9d4cc770f1c6fdbef82e1f3c67eb36df4d9b129d","unresolved":true,"context_lines":[{"line_number":39,"context_line":"        self._set_operator_cloud(interface\u003d\u0027admin\u0027)"},{"line_number":40,"context_line":"        self.NAME \u003d \u0027needstobeshortandlowercase\u0027"},{"line_number":41,"context_line":"        self.USERDATA \u003d \u0027SSdtIGFjdHVhbGx5IGEgZ29hdC4\u003d\u0027"},{"line_number":42,"context_line":"        sot \u003d self.conn.compute.create_server("},{"line_number":43,"context_line":"            name\u003dself.NAME,"},{"line_number":44,"context_line":"            flavor_id\u003dself.flavor.id,"},{"line_number":45,"context_line":"            image_id\u003dself.image.id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3cda6b9d_d9d089b9","line":42,"range":{"start_line":42,"start_character":8,"end_line":42,"end_character":11},"updated":"2023-07-25 10:47:55.000000000","message":"nit: just assign to `self.server` here?","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        self._set_operator_cloud(interface\u003d\u0027admin\u0027)"},{"line_number":40,"context_line":"        self.NAME \u003d \u0027needstobeshortandlowercase\u0027"},{"line_number":41,"context_line":"        self.USERDATA \u003d \u0027SSdtIGFjdHVhbGx5IGEgZ29hdC4\u003d\u0027"},{"line_number":42,"context_line":"        sot \u003d self.conn.compute.create_server("},{"line_number":43,"context_line":"            name\u003dself.NAME,"},{"line_number":44,"context_line":"            flavor_id\u003dself.flavor.id,"},{"line_number":45,"context_line":"            image_id\u003dself.image.id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"d70806ae_f187dd72","line":42,"range":{"start_line":42,"start_character":8,"end_line":42,"end_character":11},"in_reply_to":"3cda6b9d_d9d089b9","updated":"2023-08-05 12:42:16.000000000","message":"Done","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9d4cc770f1c6fdbef82e1f3c67eb36df4d9b129d","unresolved":true,"context_lines":[{"line_number":62,"context_line":"    def tearDown(self):"},{"line_number":63,"context_line":"        # Since delete_on_termination flag is set to True, we"},{"line_number":64,"context_line":"        # don\u0027t need to cleanup the volume manually"},{"line_number":65,"context_line":"        sot \u003d self.conn.compute.delete_server(self.server.id)"},{"line_number":66,"context_line":"        self.conn.compute.wait_for_delete("},{"line_number":67,"context_line":"            self.server, wait\u003dself._wait_for_timeout"},{"line_number":68,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f9c905e_af2e7016","line":65,"range":{"start_line":65,"start_character":8,"end_line":65,"end_character":11},"updated":"2023-07-25 10:47:55.000000000","message":"nit: `result`?","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    def tearDown(self):"},{"line_number":63,"context_line":"        # Since delete_on_termination flag is set to True, we"},{"line_number":64,"context_line":"        # don\u0027t need to cleanup the volume manually"},{"line_number":65,"context_line":"        sot \u003d self.conn.compute.delete_server(self.server.id)"},{"line_number":66,"context_line":"        self.conn.compute.wait_for_delete("},{"line_number":67,"context_line":"            self.server, wait\u003dself._wait_for_timeout"},{"line_number":68,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":6,"id":"2efc548e_9bd6522c","line":65,"range":{"start_line":65,"start_character":8,"end_line":65,"end_character":11},"in_reply_to":"7f9c905e_af2e7016","updated":"2023-08-05 12:42:16.000000000","message":"Done","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9d4cc770f1c6fdbef82e1f3c67eb36df4d9b129d","unresolved":true,"context_lines":[{"line_number":70,"context_line":"        super().tearDown()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def test_attachment(self):"},{"line_number":73,"context_line":"        sot \u003d self.conn.block_storage.create_attachment("},{"line_number":74,"context_line":"            self.VOLUME_ID,"},{"line_number":75,"context_line":"            connector\u003d{},"},{"line_number":76,"context_line":"            instance_id\u003dself.server.id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"a15edd00_28e8d47d","line":73,"range":{"start_line":73,"start_character":8,"end_line":73,"end_character":11},"updated":"2023-07-25 10:47:55.000000000","message":"nit: `attachment`?","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        super().tearDown()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def test_attachment(self):"},{"line_number":73,"context_line":"        sot \u003d self.conn.block_storage.create_attachment("},{"line_number":74,"context_line":"            self.VOLUME_ID,"},{"line_number":75,"context_line":"            connector\u003d{},"},{"line_number":76,"context_line":"            instance_id\u003dself.server.id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"d5e840e6_a196f05c","line":73,"range":{"start_line":73,"start_character":8,"end_line":73,"end_character":11},"in_reply_to":"a15edd00_28e8d47d","updated":"2023-08-05 12:42:16.000000000","message":"Done","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"}],"openstack/tests/unit/block_storage/v3/test_attachment.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4201ccfc6f04fdad9d6fcd81a502120cc71eebc3","unresolved":true,"context_lines":[{"line_number":113,"context_line":"        self.assertEqual(ATTACHMENT[\"attach_mode\"], sot.attach_mode)"},{"line_number":114,"context_line":"        self.assertEqual(ATTACHMENT[\"connection_info\"], sot.connection_info)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    @mock.patch("},{"line_number":117,"context_line":"        \u0027openstack.utils.supports_microversion\u0027,"},{"line_number":118,"context_line":"        autospec\u003dTrue,"},{"line_number":119,"context_line":"        return_value\u003dTrue,"},{"line_number":120,"context_line":"    )"},{"line_number":121,"context_line":"    @mock.patch.object(resource.Resource, \u0027_translate_response\u0027)"},{"line_number":122,"context_line":"    def test_create_no_mode_no_instance_id(self, mock_translate, mock_mv):"},{"line_number":123,"context_line":"        self.sess.default_microversion \u003d \"3.27\""},{"line_number":124,"context_line":"        mock_mv.return_value \u003d False"},{"line_number":125,"context_line":"        sot \u003d attachment.Attachment()"},{"line_number":126,"context_line":"        FAKE_MODE \u003d \"rw\""},{"line_number":127,"context_line":"        sot.create(self.sess, FAKE_VOL_ID, CONNECTOR, None, FAKE_MODE)"},{"line_number":128,"context_line":"        self.sess.post.assert_called_with("},{"line_number":129,"context_line":"            \u0027/attachments\u0027,"},{"line_number":130,"context_line":"            json\u003d{"},{"line_number":131,"context_line":"                \u0027attachment\u0027: {"},{"line_number":132,"context_line":"                    \u0027volume_uuid\u0027: FAKE_VOL_ID,"},{"line_number":133,"context_line":"                    \u0027connector\u0027: CONNECTOR,"},{"line_number":134,"context_line":"                }"},{"line_number":135,"context_line":"            },"},{"line_number":136,"context_line":"            microversion\u003d\"3.27\","},{"line_number":137,"context_line":"        )"},{"line_number":138,"context_line":"        self.sess.default_microversion \u003d \"3.54\""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    @mock.patch("},{"line_number":141,"context_line":"        \u0027openstack.utils.supports_microversion\u0027,"},{"line_number":142,"context_line":"        autospec\u003dTrue,"},{"line_number":143,"context_line":"        return_value\u003dTrue,"},{"line_number":144,"context_line":"    )"},{"line_number":145,"context_line":"    @mock.patch.object(resource.Resource, \u0027_translate_response\u0027)"},{"line_number":146,"context_line":"    def test_create_with_mode_with_instance_id(self, mock_translate, mock_mv):"},{"line_number":147,"context_line":"        sot \u003d attachment.Attachment()"},{"line_number":148,"context_line":"        FAKE_MODE \u003d \"rw\""},{"line_number":149,"context_line":"        sot.create("},{"line_number":150,"context_line":"            self.sess, FAKE_VOL_ID, CONNECTOR, FAKE_INSTANCE_UUID, FAKE_MODE"},{"line_number":151,"context_line":"        )"},{"line_number":152,"context_line":"        self.sess.post.assert_called_with("},{"line_number":153,"context_line":"            \u0027/attachments\u0027,"},{"line_number":154,"context_line":"            json\u003d{"},{"line_number":155,"context_line":"                \u0027attachment\u0027: {"},{"line_number":156,"context_line":"                    \u0027volume_uuid\u0027: FAKE_VOL_ID,"},{"line_number":157,"context_line":"                    \u0027connector\u0027: CONNECTOR,"},{"line_number":158,"context_line":"                    \u0027instance_uuid\u0027: FAKE_INSTANCE_UUID,"},{"line_number":159,"context_line":"                    \u0027mode\u0027: FAKE_MODE,"},{"line_number":160,"context_line":"                }"},{"line_number":161,"context_line":"            },"},{"line_number":162,"context_line":"            microversion\u003d\"3.54\","},{"line_number":163,"context_line":"        )"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    @mock.patch.object(resource.Resource, \u0027_translate_response\u0027)"},{"line_number":166,"context_line":"    def test_update(self, mock_translate):"},{"line_number":167,"context_line":"        sot \u003d attachment.Attachment()"},{"line_number":168,"context_line":"        sot.id \u003d FAKE_ID"},{"line_number":169,"context_line":"        sot.update(self.sess, FAKE_ID, connector\u003dCONNECTOR)"},{"line_number":170,"context_line":"        self.sess.put.assert_called_with("},{"line_number":171,"context_line":"            \u0027/attachments/%s\u0027 % FAKE_ID,"},{"line_number":172,"context_line":"            json\u003d{"},{"line_number":173,"context_line":"                \u0027attachment\u0027: {"},{"line_number":174,"context_line":"                    \u0027connector\u0027: CONNECTOR,"},{"line_number":175,"context_line":"                }"},{"line_number":176,"context_line":"            },"},{"line_number":177,"context_line":"            microversion\u003d\"3.54\","},{"line_number":178,"context_line":"        )"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    @mock.patch.object(resource.Resource, \u0027_translate_response\u0027)"},{"line_number":181,"context_line":"    def test_complete(self, mock_translate):"}],"source_content_type":"text/x-python","patch_set":6,"id":"25d4eceb_740ae0e9","line":178,"range":{"start_line":116,"start_character":0,"end_line":178,"end_character":9},"updated":"2023-07-25 10:20:41.000000000","message":"All of these can go if you use the standard `Resource.create` and `Resource.update` methods for `Attachment`","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6f66f820b2e15a0112e8586694ac0f444b147da5","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        self.assertEqual(ATTACHMENT[\"attach_mode\"], sot.attach_mode)"},{"line_number":114,"context_line":"        self.assertEqual(ATTACHMENT[\"connection_info\"], sot.connection_info)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    @mock.patch("},{"line_number":117,"context_line":"        \u0027openstack.utils.supports_microversion\u0027,"},{"line_number":118,"context_line":"        autospec\u003dTrue,"},{"line_number":119,"context_line":"        return_value\u003dTrue,"},{"line_number":120,"context_line":"    )"},{"line_number":121,"context_line":"    @mock.patch.object(resource.Resource, \u0027_translate_response\u0027)"},{"line_number":122,"context_line":"    def test_create_no_mode_no_instance_id(self, mock_translate, mock_mv):"},{"line_number":123,"context_line":"        self.sess.default_microversion \u003d \"3.27\""},{"line_number":124,"context_line":"        mock_mv.return_value \u003d False"},{"line_number":125,"context_line":"        sot \u003d attachment.Attachment()"},{"line_number":126,"context_line":"        FAKE_MODE \u003d \"rw\""},{"line_number":127,"context_line":"        sot.create(self.sess, FAKE_VOL_ID, CONNECTOR, None, FAKE_MODE)"},{"line_number":128,"context_line":"        self.sess.post.assert_called_with("},{"line_number":129,"context_line":"            \u0027/attachments\u0027,"},{"line_number":130,"context_line":"            json\u003d{"},{"line_number":131,"context_line":"                \u0027attachment\u0027: {"},{"line_number":132,"context_line":"                    \u0027volume_uuid\u0027: FAKE_VOL_ID,"},{"line_number":133,"context_line":"                    \u0027connector\u0027: CONNECTOR,"},{"line_number":134,"context_line":"                }"},{"line_number":135,"context_line":"            },"},{"line_number":136,"context_line":"            microversion\u003d\"3.27\","},{"line_number":137,"context_line":"        )"},{"line_number":138,"context_line":"        self.sess.default_microversion \u003d \"3.54\""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    @mock.patch("},{"line_number":141,"context_line":"        \u0027openstack.utils.supports_microversion\u0027,"},{"line_number":142,"context_line":"        autospec\u003dTrue,"},{"line_number":143,"context_line":"        return_value\u003dTrue,"},{"line_number":144,"context_line":"    )"},{"line_number":145,"context_line":"    @mock.patch.object(resource.Resource, \u0027_translate_response\u0027)"},{"line_number":146,"context_line":"    def test_create_with_mode_with_instance_id(self, mock_translate, mock_mv):"},{"line_number":147,"context_line":"        sot \u003d attachment.Attachment()"},{"line_number":148,"context_line":"        FAKE_MODE \u003d \"rw\""},{"line_number":149,"context_line":"        sot.create("},{"line_number":150,"context_line":"            self.sess, FAKE_VOL_ID, CONNECTOR, FAKE_INSTANCE_UUID, FAKE_MODE"},{"line_number":151,"context_line":"        )"},{"line_number":152,"context_line":"        self.sess.post.assert_called_with("},{"line_number":153,"context_line":"            \u0027/attachments\u0027,"},{"line_number":154,"context_line":"            json\u003d{"},{"line_number":155,"context_line":"                \u0027attachment\u0027: {"},{"line_number":156,"context_line":"                    \u0027volume_uuid\u0027: FAKE_VOL_ID,"},{"line_number":157,"context_line":"                    \u0027connector\u0027: CONNECTOR,"},{"line_number":158,"context_line":"                    \u0027instance_uuid\u0027: FAKE_INSTANCE_UUID,"},{"line_number":159,"context_line":"                    \u0027mode\u0027: FAKE_MODE,"},{"line_number":160,"context_line":"                }"},{"line_number":161,"context_line":"            },"},{"line_number":162,"context_line":"            microversion\u003d\"3.54\","},{"line_number":163,"context_line":"        )"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    @mock.patch.object(resource.Resource, \u0027_translate_response\u0027)"},{"line_number":166,"context_line":"    def test_update(self, mock_translate):"},{"line_number":167,"context_line":"        sot \u003d attachment.Attachment()"},{"line_number":168,"context_line":"        sot.id \u003d FAKE_ID"},{"line_number":169,"context_line":"        sot.update(self.sess, FAKE_ID, connector\u003dCONNECTOR)"},{"line_number":170,"context_line":"        self.sess.put.assert_called_with("},{"line_number":171,"context_line":"            \u0027/attachments/%s\u0027 % FAKE_ID,"},{"line_number":172,"context_line":"            json\u003d{"},{"line_number":173,"context_line":"                \u0027attachment\u0027: {"},{"line_number":174,"context_line":"                    \u0027connector\u0027: CONNECTOR,"},{"line_number":175,"context_line":"                }"},{"line_number":176,"context_line":"            },"},{"line_number":177,"context_line":"            microversion\u003d\"3.54\","},{"line_number":178,"context_line":"        )"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    @mock.patch.object(resource.Resource, \u0027_translate_response\u0027)"},{"line_number":181,"context_line":"    def test_complete(self, mock_translate):"}],"source_content_type":"text/x-python","patch_set":6,"id":"f0334c99_9639600c","line":178,"range":{"start_line":116,"start_character":0,"end_line":178,"end_character":9},"in_reply_to":"25d4eceb_740ae0e9","updated":"2023-08-05 12:42:16.000000000","message":"removed the update tests but kept the create tests since we are still using custom logic with mode","commit_id":"ea5da7e3c7e731f372029149ac2f86b8b3b9f152"}],"releasenotes/notes/add-volume-attachment-support-b5f9a9e78ba88355.yaml":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1f50318284957cc613870767e5dc434b7ddbf596","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added support for:"},{"line_number":5,"context_line":"    * Create Attachment"},{"line_number":6,"context_line":"    * Update Attachment"},{"line_number":7,"context_line":"    * List Attachment"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"f24779da_de3ddc79","line":4,"updated":"2023-07-12 17:55:27.000000000","message":"nit: add newline under this so it renders properly","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"1bb6f26d3698bce7dcd45e2d36c41d9d5f6c2be9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added support for:"},{"line_number":5,"context_line":"    * Create Attachment"},{"line_number":6,"context_line":"    * Update Attachment"},{"line_number":7,"context_line":"    * List Attachment"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"82287678_d30066c6","line":4,"in_reply_to":"f24779da_de3ddc79","updated":"2023-07-18 11:36:48.000000000","message":"Done","commit_id":"04605b67f11c190060b5c747f6ac973160c231ae"}]}
