)]}'
{"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":"cf2f7b7bff02f78fb7f3c6313cbfcc689ad2875b","unresolved":true,"context_lines":[{"line_number":488,"context_line":"        return backup.restore(self, volume_id\u003dvolume_id, name\u003dname)"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    def get_capabilities(self, capabilities):"},{"line_number":491,"context_line":"        \"\"\"Get all back-end capabilities"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        :param capabilities: The value can be the ID of a capability or a"},{"line_number":494,"context_line":"            :class:`~openstack.block_storage.v3.capabilities.Capabilities`"}],"source_content_type":"text/x-python","patch_set":3,"id":"32ed021a_b64781aa","line":491,"range":{"start_line":491,"start_character":15,"end_line":491,"end_character":18},"updated":"2021-03-01 16:18:46.000000000","message":"There\u0027s a mismatch here. This is getting all backend capabilities, yet you\u0027re expecting a capabilities parameter that corresponds to a single capability (ID or instance). Are you sure you want this parameter? If you don\u0027t, we usually name list-style methods as e.g. \u0027foos\u0027 where \u0027foo\u0027 is the resource type. So this would be simply \u0027capabilities\u0027, not \u0027get_capabilities\u0027","commit_id":"e49697490e22dc3a2c2d86ea6b992bf10feed9d7"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"2b9339b9ab9f7e90f18282586cb44945a69700ef","unresolved":false,"context_lines":[{"line_number":488,"context_line":"        return backup.restore(self, volume_id\u003dvolume_id, name\u003dname)"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    def get_capabilities(self, capabilities):"},{"line_number":491,"context_line":"        \"\"\"Get all back-end capabilities"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        :param capabilities: The value can be the ID of a capability or a"},{"line_number":494,"context_line":"            :class:`~openstack.block_storage.v3.capabilities.Capabilities`"}],"source_content_type":"text/x-python","patch_set":3,"id":"56a24bd4_b3ac9ead","line":491,"range":{"start_line":491,"start_character":15,"end_line":491,"end_character":18},"in_reply_to":"32ed021a_b64781aa","updated":"2021-03-02 22:24:10.000000000","message":"Thanks for the reply!\nI agree, my parameter makes no sense whatsoever. I believe after looking at [1], my parameter should be a \"Specified backend to obtain volume stats and properties.\"\n\n[1] https://github.com/openstack/python-cinderclient/blob/f1236e09404c52b5eb3d9ba528be91d49487e08a/cinderclient/v2/capabilities.py","commit_id":"e49697490e22dc3a2c2d86ea6b992bf10feed9d7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cf2f7b7bff02f78fb7f3c6313cbfcc689ad2875b","unresolved":true,"context_lines":[{"line_number":499,"context_line":"        :raises: :class:`~openstack.exceptions.ResourceNotFound` when no"},{"line_number":500,"context_line":"            resource can be found."},{"line_number":501,"context_line":"        \"\"\""},{"line_number":502,"context_line":"        return self._get(_capabilities.Capabilities, capabilities)"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"    def availability_zones(self):"},{"line_number":505,"context_line":"        \"\"\"Return a generator of availability zones"}],"source_content_type":"text/x-python","patch_set":3,"id":"c2ba8c4b_793fe199","line":502,"updated":"2021-03-01 16:18:46.000000000","message":"As above, should this be \u0027_get\u0027? If so, why is the resource called Capabilities (plural) instead of Capability (singular)?","commit_id":"e49697490e22dc3a2c2d86ea6b992bf10feed9d7"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"2b9339b9ab9f7e90f18282586cb44945a69700ef","unresolved":true,"context_lines":[{"line_number":499,"context_line":"        :raises: :class:`~openstack.exceptions.ResourceNotFound` when no"},{"line_number":500,"context_line":"            resource can be found."},{"line_number":501,"context_line":"        \"\"\""},{"line_number":502,"context_line":"        return self._get(_capabilities.Capabilities, capabilities)"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"    def availability_zones(self):"},{"line_number":505,"context_line":"        \"\"\"Return a generator of availability zones"}],"source_content_type":"text/x-python","patch_set":3,"id":"6f979a9f_f70a74c9","line":502,"in_reply_to":"c2ba8c4b_793fe199","updated":"2021-03-02 22:24:10.000000000","message":"Thanks for the reply!\n\nI do believe that it still should be \u0027_get\u0027 as it is not performing a list operation. As for the plural question, I am not 100% sure of whether or not it should be plural or not. I agree that \u0027_get\u0027 methods are typically singular, but in this case I think there is a similar exception to the one Artem brought up previously in response to the naming scheme of the \"get_limits\" method [1]. Also, since the object in question in called \u0027capabilities\u0027, wouldn\u0027t it make sense to still have it called \u0027get_capabilities\u0027 in contrast to \u0027get_capability\u0027? \n\n[1] https://review.opendev.org/c/openstack/openstacksdk/+/776318/5/openstack/block_storage/v3/_proxy.py","commit_id":"e49697490e22dc3a2c2d86ea6b992bf10feed9d7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"91a75f286ee9b25f0a0e2429a49e41a63b559dd0","unresolved":false,"context_lines":[{"line_number":497,"context_line":"        :raises: :class:`~openstack.exceptions.ResourceNotFound` when no"},{"line_number":498,"context_line":"            resource can be found."},{"line_number":499,"context_line":"        \"\"\""},{"line_number":500,"context_line":"        return self._get(_capabilities.Capabilities, host)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    def availability_zones(self):"},{"line_number":503,"context_line":"        \"\"\"Return a generator of availability zones"}],"source_content_type":"text/x-python","patch_set":5,"id":"52f5b8bc_d5bc4cbc","line":500,"updated":"2021-03-23 14:48:22.000000000","message":"Works wonderfully. You can identify a host via \u0027openstack volume service list\u0027, e.g.\n\n  +------------------+--------------------------+------+---------+-------+----------------------------+\n  | Binary           | Host                     | Zone | Status  | State | Updated At                 |\n  +------------------+--------------------------+------+---------+-------+----------------------------+\n  | cinder-scheduler | devstack-a-1             | nova | enabled | up    | 2021-03-23T14:45:13.000000 |\n  | cinder-volume    | devstack-a-1@lvmdriver-1 | nova | enabled | down  | 2021-03-23T11:48:11.000000 |\n  | cinder-volume    | devstack-a-2@lvmdriver-1 | nova | enabled | up    | 2021-03-23T14:45:13.000000 |\n  +------------------+--------------------------+------+---------+-------+----------------------------+\n\nWith that done, comparing the output from cinderclient:\n\n  $ cinder get-capabilities devstack-a-2@lvmdriver-1\n  +---------------------+-----------------------------------------------------+\n  | Volume stats        | Value                                               |\n  +---------------------+-----------------------------------------------------+\n  | description         | None                                                |\n  | display_name        | None                                                |\n  | driver_version      | 3.0.0                                               |\n  | namespace           | OS::Storage::Capabilities::devstack-a-2@lvmdriver-1 |\n  | pool_name           | None                                                |\n  | replication_targets | []                                                  |\n  | storage_protocol    | iSCSI                                               |\n  | vendor_name         | Open Source                                         |\n  | visibility          | None                                                |\n  | volume_backend_name | lvmdriver-1                                         |\n  +---------------------+-----------------------------------------------------+\n  +---------------------+---------------------------------------+\n  | Backend properties  | Value                                 |\n  +---------------------+---------------------------------------+\n  | compression         | description : Enables compression.    |\n  |                     | title : Compression                   |\n  |                     | type : boolean                        |\n  | qos                 | description : Enables QoS.            |\n  |                     | title : QoS                           |\n  |                     | type : boolean                        |\n  | replication_enabled | description : Enables replication.    |\n  |                     | title : Replication                   |\n  |                     | type : boolean                        |\n  | thin_provisioning   | description : Sets thin provisioning. |\n  |                     | title : Thin Provisioning             |\n  |                     | type : boolean                        |\n  +---------------------+---------------------------------------+\n\nwith that of openstacksdk (using this patch):\n\n  $ python\n  \u003e\u003e\u003e import openstack\n  \u003e\u003e\u003e import pprint\n  \u003e\u003e\u003e openstack.enable_logging(debug\u003dFalse)\n  \u003e\u003e\u003e conn \u003d openstack.connect()\n  \u003e\u003e\u003e pprint.pprint(conn.block_storage.get_capabilities(\u0027devstack-a-2@lvmdriver-1\u0027).to_dict()\n  {\u0027description\u0027: None,\n   \u0027display_name\u0027: None,\n   \u0027driver_version\u0027: \u00273.0.0\u0027,\n   \u0027id\u0027: \u0027devstack-a-2@lvmdriver-1\u0027,\n   \u0027location\u0027: {\u0027cloud\u0027: \u0027envvars\u0027,\n                \u0027project\u0027: {\u0027domain_id\u0027: \u0027default\u0027,\n                            \u0027domain_name\u0027: None,\n                            \u0027id\u0027: \u0027742ec5fd9b97453ba33643d8306e8a7b\u0027,\n                            \u0027name\u0027: \u0027demo\u0027},\n                \u0027region_name\u0027: \u0027RegionOne\u0027,\n                \u0027zone\u0027: None},\n   \u0027name\u0027: None,\n   \u0027namespace\u0027: \u0027OS::Storage::Capabilities::devstack-a-2@lvmdriver-1\u0027,\n   \u0027pool_name\u0027: None,\n   \u0027properties\u0027: {\u0027compression\u0027: {\u0027description\u0027: \u0027Enables compression.\u0027,\n                                  \u0027title\u0027: \u0027Compression\u0027,\n                                  \u0027type\u0027: \u0027boolean\u0027},\n                  \u0027qos\u0027: {\u0027description\u0027: \u0027Enables QoS.\u0027,\n                          \u0027title\u0027: \u0027QoS\u0027,\n                          \u0027type\u0027: \u0027boolean\u0027},\n                  \u0027replication_enabled\u0027: {\u0027description\u0027: \u0027Enables replication.\u0027,\n                                          \u0027title\u0027: \u0027Replication\u0027,\n                                          \u0027type\u0027: \u0027boolean\u0027},\n                  \u0027thin_provisioning\u0027: {\u0027description\u0027: \u0027Sets thin provisioning.\u0027,\n                                        \u0027title\u0027: \u0027Thin Provisioning\u0027,\n                                        \u0027type\u0027: \u0027boolean\u0027}},\n   \u0027replication_targets\u0027: [],\n   \u0027storage_protocol\u0027: \u0027iSCSI\u0027,\n   \u0027vendor_name\u0027: \u0027Open Source\u0027,\n   \u0027visibility\u0027: None,\n   \u0027volume_backend_name\u0027: \u0027lvmdriver-1\u0027}\n\nEverything in the former is provided in the latter.","commit_id":"004436837cd329fdfb842eab7854a7d8afe46b87"}],"openstack/block_storage/v3/capabilities.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cf2f7b7bff02f78fb7f3c6313cbfcc689ad2875b","unresolved":true,"context_lines":[{"line_number":19,"context_line":"    base_path \u003d \"/capabilities\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    # Capabilities"},{"line_number":22,"context_line":"    allow_fetch \u003d True"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    #: Properties"},{"line_number":25,"context_line":"    #: The capabilities description"}],"source_content_type":"text/x-python","patch_set":3,"id":"a9817e37_86737e23","line":22,"updated":"2021-03-01 16:18:46.000000000","message":"Same comments as [1]\n\n[1] https://review.opendev.org/c/openstack/openstacksdk/+/776318/7/openstack/block_storage/v3/limit.py#73","commit_id":"e49697490e22dc3a2c2d86ea6b992bf10feed9d7"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"2b9339b9ab9f7e90f18282586cb44945a69700ef","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    base_path \u003d \"/capabilities\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    # Capabilities"},{"line_number":22,"context_line":"    allow_fetch \u003d True"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    #: Properties"},{"line_number":25,"context_line":"    #: The capabilities description"}],"source_content_type":"text/x-python","patch_set":3,"id":"f7cb5f56_1f9e3452","line":22,"in_reply_to":"a9817e37_86737e23","updated":"2021-03-02 22:24:10.000000000","message":"Thanks for the response! At the moment, I still believe that we would only allow fetch at the moment. After looking at the only listed operation [1], it looks like it is described as a fetch operation. And since that is the only listed operation, I believe that is the only operation that there should be.\n[1] https://docs.openstack.org/api-ref/block-storage/v3/?expanded\u003d#capabilities-for-storage-back-ends-capabilities","commit_id":"e49697490e22dc3a2c2d86ea6b992bf10feed9d7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cf2f7b7bff02f78fb7f3c6313cbfcc689ad2875b","unresolved":true,"context_lines":[{"line_number":32,"context_line":"    namespace \u003d resource.Body(\"namespace\")"},{"line_number":33,"context_line":"    #: The name of the storage pool."},{"line_number":34,"context_line":"    pool_name \u003d resource.Body(\"pool_name\")"},{"line_number":35,"context_line":"    #: The backend volume capabilites list, which is consisted of cinder"},{"line_number":36,"context_line":"    #: standard capabilities and vendor unique properties."},{"line_number":37,"context_line":"    properties \u003d resource.Body(\"properties\", type\u003ddict)"},{"line_number":38,"context_line":"    #: A list of volume backends used to replicate volumes on this backend."}],"source_content_type":"text/x-python","patch_set":3,"id":"bed0b0a1_bfb22082","line":35,"range":{"start_line":35,"start_character":50,"end_line":35,"end_character":62},"updated":"2021-03-01 16:18:46.000000000","message":"consists\n\n(you can do typo/grammar fixes from original docs)","commit_id":"e49697490e22dc3a2c2d86ea6b992bf10feed9d7"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"2b9339b9ab9f7e90f18282586cb44945a69700ef","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    namespace \u003d resource.Body(\"namespace\")"},{"line_number":33,"context_line":"    #: The name of the storage pool."},{"line_number":34,"context_line":"    pool_name \u003d resource.Body(\"pool_name\")"},{"line_number":35,"context_line":"    #: The backend volume capabilites list, which is consisted of cinder"},{"line_number":36,"context_line":"    #: standard capabilities and vendor unique properties."},{"line_number":37,"context_line":"    properties \u003d resource.Body(\"properties\", type\u003ddict)"},{"line_number":38,"context_line":"    #: A list of volume backends used to replicate volumes on this backend."}],"source_content_type":"text/x-python","patch_set":3,"id":"6743b0ea_43a3e722","line":35,"range":{"start_line":35,"start_character":50,"end_line":35,"end_character":62},"in_reply_to":"bed0b0a1_bfb22082","updated":"2021-03-02 22:24:10.000000000","message":"Done","commit_id":"e49697490e22dc3a2c2d86ea6b992bf10feed9d7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cf2f7b7bff02f78fb7f3c6313cbfcc689ad2875b","unresolved":true,"context_lines":[{"line_number":37,"context_line":"    properties \u003d resource.Body(\"properties\", type\u003ddict)"},{"line_number":38,"context_line":"    #: A list of volume backends used to replicate volumes on this backend."},{"line_number":39,"context_line":"    replication_targets \u003d resource.Body(\"replication_targets\", type\u003dlist)"},{"line_number":40,"context_line":"    #: The storage back end for the back-end volume."},{"line_number":41,"context_line":"    storage_protocol \u003d resource.Body(\"storage_protocol\")"},{"line_number":42,"context_line":"    #: The name of the vendor."},{"line_number":43,"context_line":"    vendor_name \u003d resource.Body(\"vendor_name\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"b8fb405f_c54e9e46","line":40,"range":{"start_line":40,"start_character":36,"end_line":40,"end_character":44},"updated":"2021-03-01 16:18:46.000000000","message":"backend (you\u0027re switching between the two)","commit_id":"e49697490e22dc3a2c2d86ea6b992bf10feed9d7"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"2b9339b9ab9f7e90f18282586cb44945a69700ef","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    properties \u003d resource.Body(\"properties\", type\u003ddict)"},{"line_number":38,"context_line":"    #: A list of volume backends used to replicate volumes on this backend."},{"line_number":39,"context_line":"    replication_targets \u003d resource.Body(\"replication_targets\", type\u003dlist)"},{"line_number":40,"context_line":"    #: The storage back end for the back-end volume."},{"line_number":41,"context_line":"    storage_protocol \u003d resource.Body(\"storage_protocol\")"},{"line_number":42,"context_line":"    #: The name of the vendor."},{"line_number":43,"context_line":"    vendor_name \u003d resource.Body(\"vendor_name\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"4d8fdb34_1ba55106","line":40,"range":{"start_line":40,"start_character":36,"end_line":40,"end_character":44},"in_reply_to":"b8fb405f_c54e9e46","updated":"2021-03-02 22:24:10.000000000","message":"Done","commit_id":"e49697490e22dc3a2c2d86ea6b992bf10feed9d7"}]}
