)]}'
{"tempest/lib/api_schema/response/volume/capabilities.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9b241d346a5a13859cb695600dd670e38ed6e53c","unresolved":false,"context_lines":[{"line_number":15,"context_line":"property_info \u003d {"},{"line_number":16,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":17,"context_line":"    \u0027properties\u0027: {"},{"line_number":18,"context_line":"        \u0027type\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":19,"context_line":"        \u0027description\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":20,"context_line":"        \u0027title\u0027: {\u0027type\u0027: \u0027string\u0027}"},{"line_number":21,"context_line":"    },"},{"line_number":22,"context_line":"    \u0027additionalProperties\u0027: False,"},{"line_number":23,"context_line":"    \u0027required\u0027: [\u0027type\u0027, \u0027description\u0027, \u0027title\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_55a3bb9b","line":20,"range":{"start_line":18,"start_character":0,"end_line":20,"end_character":35},"updated":"2018-09-28 23:17:53.000000000","message":"This does not seem correct for 2 reasons:\n\n1) The example lists many more possible properties: https://developer.openstack.org/api-ref/block-storage/v3/index.html#id438\n2) The description indicates: \"The backend volume capabilities list, which is consisted of cinder standard capabilities and vendor unique properties.\" Vendor unique properties means that this would have to be extensible, i.e. support many key-value pairs.","commit_id":"225212a8641c64fc7164bcbedaa39b025ac1f662"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"69bcde8972edb75920e9c9dc81ddaa6b22a230bf","unresolved":false,"context_lines":[{"line_number":15,"context_line":"property_info \u003d {"},{"line_number":16,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":17,"context_line":"    \u0027properties\u0027: {"},{"line_number":18,"context_line":"        \u0027type\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":19,"context_line":"        \u0027description\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":20,"context_line":"        \u0027title\u0027: {\u0027type\u0027: \u0027string\u0027}"},{"line_number":21,"context_line":"    },"},{"line_number":22,"context_line":"    \u0027additionalProperties\u0027: False,"},{"line_number":23,"context_line":"    \u0027required\u0027: [\u0027type\u0027, \u0027description\u0027, \u0027title\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_07a42b06","line":20,"range":{"start_line":18,"start_character":0,"end_line":20,"end_character":35},"in_reply_to":"3f79a3b5_55a3bb9b","updated":"2018-09-30 01:26:06.000000000","message":"I can\u0027t access https://developer.openstack.org/api-ref/block-storage/v3/index.html#id438\n\nEach value in key-value pairs contains 3 fields(type, description, title).\n\n\"properties\": {\n\t\t\"replication_enabled\": {\n\t\t\t\"type\": \"boolean\",\n\t\t\t\"description\": \"Enables replication.\",\n\t\t\t\"title\": \"Replication\"\n\t\t},\n\t\t\"qos\": {\n\t\t\t\"type\": \"boolean\",\n\t\t\t\"description\": \"Enables QoS.\",\n\t\t\t\"title\": \"QoS\"\n\t\t},","commit_id":"225212a8641c64fc7164bcbedaa39b025ac1f662"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9b241d346a5a13859cb695600dd670e38ed6e53c","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \u0027response_body\u0027: {"},{"line_number":29,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":30,"context_line":"        \u0027properties\u0027: {"},{"line_number":31,"context_line":"            \u0027pool_name\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":32,"context_line":"            \u0027description\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":33,"context_line":"            \u0027volume_backend_name\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":34,"context_line":"            \u0027namespace\u0027: {\u0027type\u0027: \u0027string\u0027},"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_55bc1bb4","line":31,"updated":"2018-09-28 23:17:53.000000000","message":"This shows the formatting: https://github.com/openstack/cinder/blob/7f7716d584cd955162cab988c49c6fa3ac08f2e0/cinder/api/views/capabilities.py#L30\n\nIt is called here: https://github.com/openstack/cinder/blob/7f7716d584cd955162cab988c49c6fa3ac08f2e0/cinder/api/contrib/capabilities.py#L56\n\nNote that because of .get(field_name) I\u0027m not sure if all of the ones below can be \u0027string\u0027, \u0027null\u0027 for the \u0027type\u0027 (except for properies and replication_targets).","commit_id":"225212a8641c64fc7164bcbedaa39b025ac1f662"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"69bcde8972edb75920e9c9dc81ddaa6b22a230bf","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \u0027response_body\u0027: {"},{"line_number":29,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":30,"context_line":"        \u0027properties\u0027: {"},{"line_number":31,"context_line":"            \u0027pool_name\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":32,"context_line":"            \u0027description\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":33,"context_line":"            \u0027volume_backend_name\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":34,"context_line":"            \u0027namespace\u0027: {\u0027type\u0027: \u0027string\u0027},"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_e777af8d","line":31,"in_reply_to":"3f79a3b5_55bc1bb4","updated":"2018-09-30 01:26:06.000000000","message":".get(field_name) means the field is not optional, but not necessarily means its value can\u0027t be null?","commit_id":"225212a8641c64fc7164bcbedaa39b025ac1f662"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"fde415c843080938dc52a18e49fa63e1625ac9a6","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \u0027response_body\u0027: {"},{"line_number":29,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":30,"context_line":"        \u0027properties\u0027: {"},{"line_number":31,"context_line":"            \u0027pool_name\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":32,"context_line":"            \u0027description\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":33,"context_line":"            \u0027volume_backend_name\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":34,"context_line":"            \u0027namespace\u0027: {\u0027type\u0027: \u0027string\u0027},"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_eee30705","line":31,"in_reply_to":"3f79a3b5_e777af8d","updated":"2018-09-30 14:35:01.000000000","message":"You\u0027re right. .get() means the field is \"required\" but not necessarily populated with a non-null value. If a dict or something doesn\u0027t have a key then .get(key) will return None by default so it could be null but this isn\u0027t easy to tell from code.","commit_id":"225212a8641c64fc7164bcbedaa39b025ac1f662"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9b241d346a5a13859cb695600dd670e38ed6e53c","unresolved":false,"context_lines":[{"line_number":31,"context_line":"            \u0027pool_name\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":32,"context_line":"            \u0027description\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":33,"context_line":"            \u0027volume_backend_name\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":34,"context_line":"            \u0027namespace\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":35,"context_line":"            \u0027visibility\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":36,"context_line":"            \u0027driver_version\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":37,"context_line":"            \u0027vendor_name\u0027: {\u0027type\u0027: \u0027string\u0027},"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_f5da071b","line":34,"range":{"start_line":34,"start_character":35,"end_line":34,"end_character":41},"updated":"2018-09-28 23:17:53.000000000","message":"This one can be: regex\u003d\u0027^OS::Storage::Capabilities::.+$\u0027 (see: \u0027OS::Storage::Capabilities::%s\u0027 % id)","commit_id":"225212a8641c64fc7164bcbedaa39b025ac1f662"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"69bcde8972edb75920e9c9dc81ddaa6b22a230bf","unresolved":false,"context_lines":[{"line_number":31,"context_line":"            \u0027pool_name\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":32,"context_line":"            \u0027description\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":33,"context_line":"            \u0027volume_backend_name\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":34,"context_line":"            \u0027namespace\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":35,"context_line":"            \u0027visibility\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]},"},{"line_number":36,"context_line":"            \u0027driver_version\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":37,"context_line":"            \u0027vendor_name\u0027: {\u0027type\u0027: \u0027string\u0027},"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_67b2bf4c","line":34,"range":{"start_line":34,"start_character":35,"end_line":34,"end_character":41},"in_reply_to":"3f79a3b5_f5da071b","updated":"2018-09-30 01:26:06.000000000","message":"Done","commit_id":"225212a8641c64fc7164bcbedaa39b025ac1f662"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9b241d346a5a13859cb695600dd670e38ed6e53c","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        \u0027required\u0027: [\u0027pool_name\u0027, \u0027volume_backend_name\u0027, \u0027namespace\u0027,"},{"line_number":50,"context_line":"                     \u0027visibility\u0027, \u0027driver_version\u0027, \u0027vendor_name\u0027,"},{"line_number":51,"context_line":"                     \u0027properties\u0027, \u0027storage_protocol\u0027, \u0027replication_targets\u0027,"},{"line_number":52,"context_line":"                     \u0027display_name\u0027]"},{"line_number":53,"context_line":"    }"},{"line_number":54,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_35eddfb7","line":52,"updated":"2018-09-28 23:17:53.000000000","message":"This one should have 11 fields as per code above, missing: \u0027description\u0027","commit_id":"225212a8641c64fc7164bcbedaa39b025ac1f662"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"69bcde8972edb75920e9c9dc81ddaa6b22a230bf","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        \u0027required\u0027: [\u0027pool_name\u0027, \u0027volume_backend_name\u0027, \u0027namespace\u0027,"},{"line_number":50,"context_line":"                     \u0027visibility\u0027, \u0027driver_version\u0027, \u0027vendor_name\u0027,"},{"line_number":51,"context_line":"                     \u0027properties\u0027, \u0027storage_protocol\u0027, \u0027replication_targets\u0027,"},{"line_number":52,"context_line":"                     \u0027display_name\u0027]"},{"line_number":53,"context_line":"    }"},{"line_number":54,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_27828753","line":52,"in_reply_to":"3f79a3b5_35eddfb7","updated":"2018-09-30 01:26:06.000000000","message":"Done","commit_id":"225212a8641c64fc7164bcbedaa39b025ac1f662"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"6a433907070efe70041c9fd0c93a7ee2bda4e467","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                },"},{"line_number":44,"context_line":"            },"},{"line_number":45,"context_line":"            \u0027storage_protocol\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":46,"context_line":"            \u0027replication_targets\u0027: {\u0027type\u0027: \u0027array\u0027},"},{"line_number":47,"context_line":"            \u0027display_name\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]}"},{"line_number":48,"context_line":"        },"},{"line_number":49,"context_line":"        \u0027additionalProperties\u0027: False,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_ae8a3f17","line":46,"range":{"start_line":46,"start_character":12,"end_line":46,"end_character":53},"updated":"2019-08-26 21:03:45.000000000","message":"nit: May be good to expand on this with more schema definition here with a TODO comment. The docs don\u0027t make it clear what goes into this array.","commit_id":"d4f40a418ebec5e996c026d8ffa8de4c2aa67a06"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"e43b153c1afab48dd41d66d43e6cf23b8ce68279","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            \u0027display_name\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]}"},{"line_number":48,"context_line":"        },"},{"line_number":49,"context_line":"        \u0027additionalProperties\u0027: False,"},{"line_number":50,"context_line":"        \u0027required\u0027: [\u0027pool_name\u0027, \u0027volume_backend_name\u0027, \u0027namespace\u0027,"},{"line_number":51,"context_line":"                     \u0027visibility\u0027, \u0027driver_version\u0027, \u0027vendor_name\u0027,"},{"line_number":52,"context_line":"                     \u0027properties\u0027, \u0027storage_protocol\u0027, \u0027replication_targets\u0027,"},{"line_number":53,"context_line":"                     \u0027display_name\u0027, \u0027description\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_47993c78","line":50,"range":{"start_line":50,"start_character":58,"end_line":50,"end_character":67},"updated":"2018-10-06 04:25:45.000000000","message":"\u0027namespace\u0027 is optional according to API docs: https://developer.openstack.org/api-ref/block-storage/v3/index.html#id440 but according to https://github.com/openstack/cinder/blob/7f7716d584cd955162cab988c49c6fa3ac08f2e0/cinder/api/views/capabilities.py#L31 it is always returned so API docs need to be fixed Cinder side.","commit_id":"d4f40a418ebec5e996c026d8ffa8de4c2aa67a06"},{"author":{"_account_id":17887,"name":"Doug Schveninger","email":"ds6901@att.com","username":"Doug.Schveninger"},"change_message_id":"e77707bc455ae832b6fc71a5d45346f6467e0066","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            \u0027display_name\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]}"},{"line_number":48,"context_line":"        },"},{"line_number":49,"context_line":"        \u0027additionalProperties\u0027: False,"},{"line_number":50,"context_line":"        \u0027required\u0027: [\u0027pool_name\u0027, \u0027volume_backend_name\u0027, \u0027namespace\u0027,"},{"line_number":51,"context_line":"                     \u0027visibility\u0027, \u0027driver_version\u0027, \u0027vendor_name\u0027,"},{"line_number":52,"context_line":"                     \u0027properties\u0027, \u0027storage_protocol\u0027, \u0027replication_targets\u0027,"},{"line_number":53,"context_line":"                     \u0027display_name\u0027, \u0027description\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_5d95b131","line":50,"range":{"start_line":50,"start_character":58,"end_line":50,"end_character":67},"in_reply_to":"3f79a3b5_47993c78","updated":"2019-08-23 01:33:05.000000000","message":"Looks like the Docs are up to date\nhttps://docs.openstack.org/api-ref/block-storage/v3/?expanded\u003dupdate-quotas-for-a-project-detail,get-default-quotas-for-a-project-detail,validate-setup-for-nested-quota-detail,delete-quotas-for-a-project-detail,update-quota-classes-for-a-project-detail,show-group-snapshot-details-detail,list-group-snapshots-with-details-detail,list-group-snapshots-detail,update-an-encryption-type-detail,list-all-hosts-for-a-project-detail,export-a-backup-detail,import-a-backup-detail,reset-a-backup-s-status-detail,list-snapshots-and-details-detail,id361-detail,show-attachment-details-detail,get-volumes-summary-detail,show-all-back-end-capabilities-detail#show-all-back-end-capabilities","commit_id":"d4f40a418ebec5e996c026d8ffa8de4c2aa67a06"}]}
