)]}'
{"api-ref/source/parameters.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5ca00d5d7a553bbe0faa8b183b7e3294ff773d4e","unresolved":false,"context_lines":[{"line_number":2271,"context_line":"  type: string"},{"line_number":2272,"context_line":"device_volume_type:"},{"line_number":2273,"context_line":"  description: |"},{"line_number":2274,"context_line":"    The device ``volume_type``, a volume type that you want to use to boot"},{"line_number":2275,"context_line":"    the server."},{"line_number":2276,"context_line":"  in: body"},{"line_number":2277,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3f79a3b5_fde96de3","line":2274,"updated":"2018-10-01 16:46:20.000000000","message":"Should mention the restrictions on this:\n\n1. It can be a volume type ID or name.\n2. It is only supported with source_type of blank, image or snapshot.\n3. It is only supported with destination_type\u003d\"volume\".","commit_id":"eab971aaa38d77d633c8aafa9d552933d4cac394"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"74fde4d91d339ee9d0271a418c1c21ea28f21835","unresolved":false,"context_lines":[{"line_number":2271,"context_line":"  type: string"},{"line_number":2272,"context_line":"device_volume_type:"},{"line_number":2273,"context_line":"  description: |"},{"line_number":2274,"context_line":"    The device ``volume_type``, a volume type that you want to use to boot"},{"line_number":2275,"context_line":"    the server."},{"line_number":2276,"context_line":"  in: body"},{"line_number":2277,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3f79a3b5_30cb7f4a","line":2274,"in_reply_to":"3f79a3b5_fde96de3","updated":"2018-10-02 06:39:57.000000000","message":"Done","commit_id":"eab971aaa38d77d633c8aafa9d552933d4cac394"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df241fe9f993b10b32e54387248f48ba51ec4e6e","unresolved":false,"context_lines":[{"line_number":2271,"context_line":"  type: string"},{"line_number":2272,"context_line":"device_volume_type:"},{"line_number":2273,"context_line":"  description: |"},{"line_number":2274,"context_line":"    The device ``volume_type``, a volume type that you want to use to boot"},{"line_number":2275,"context_line":"    the server."},{"line_number":2276,"context_line":"    There are some restrictions on ``volume_type``:"},{"line_number":2277,"context_line":""},{"line_number":2278,"context_line":"    - It can be a volume type ID or name."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3f79a3b5_f102620c","line":2275,"range":{"start_line":2274,"start_character":30,"end_line":2275,"end_character":15},"updated":"2018-10-08 23:54:23.000000000","message":"Hmm, this is a bit confusing. Maybe:\n\n\"The device ``volume_type``. This can be used to specify the type of volume which the compute service will create and attach to the server. If not specified, the block storage service will provide a default volume type. See the `block storage volume types API \u003chttps://developer.openstack.org/api-ref/block-storage/v3/#volume-types-types\u003e`_ for more details.\"","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"9c127834db97485b2ae13101d3b11075384a73e5","unresolved":false,"context_lines":[{"line_number":2271,"context_line":"  type: string"},{"line_number":2272,"context_line":"device_volume_type:"},{"line_number":2273,"context_line":"  description: |"},{"line_number":2274,"context_line":"    The device ``volume_type``, a volume type that you want to use to boot"},{"line_number":2275,"context_line":"    the server."},{"line_number":2276,"context_line":"    There are some restrictions on ``volume_type``:"},{"line_number":2277,"context_line":""},{"line_number":2278,"context_line":"    - It can be a volume type ID or name."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3f79a3b5_d1dcfc72","line":2275,"range":{"start_line":2274,"start_character":30,"end_line":2275,"end_character":15},"in_reply_to":"3f79a3b5_f102620c","updated":"2018-10-09 11:20:39.000000000","message":"Done","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df241fe9f993b10b32e54387248f48ba51ec4e6e","unresolved":false,"context_lines":[{"line_number":2276,"context_line":"    There are some restrictions on ``volume_type``:"},{"line_number":2277,"context_line":""},{"line_number":2278,"context_line":"    - It can be a volume type ID or name."},{"line_number":2279,"context_line":"    - It is only supported with source_type of blank, image or snapshot."},{"line_number":2280,"context_line":"    - It is only supported with destination_type\u003d\"volume\"."},{"line_number":2281,"context_line":"  in: body"},{"line_number":2282,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3f79a3b5_b1470a7b","line":2279,"range":{"start_line":2279,"start_character":47,"end_line":2279,"end_character":52},"updated":"2018-10-08 23:54:23.000000000","message":"``blank``","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df241fe9f993b10b32e54387248f48ba51ec4e6e","unresolved":false,"context_lines":[{"line_number":2276,"context_line":"    There are some restrictions on ``volume_type``:"},{"line_number":2277,"context_line":""},{"line_number":2278,"context_line":"    - It can be a volume type ID or name."},{"line_number":2279,"context_line":"    - It is only supported with source_type of blank, image or snapshot."},{"line_number":2280,"context_line":"    - It is only supported with destination_type\u003d\"volume\"."},{"line_number":2281,"context_line":"  in: body"},{"line_number":2282,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3f79a3b5_d14ac680","line":2279,"range":{"start_line":2279,"start_character":54,"end_line":2279,"end_character":59},"updated":"2018-10-08 23:54:23.000000000","message":"``image``","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df241fe9f993b10b32e54387248f48ba51ec4e6e","unresolved":false,"context_lines":[{"line_number":2276,"context_line":"    There are some restrictions on ``volume_type``:"},{"line_number":2277,"context_line":""},{"line_number":2278,"context_line":"    - It can be a volume type ID or name."},{"line_number":2279,"context_line":"    - It is only supported with source_type of blank, image or snapshot."},{"line_number":2280,"context_line":"    - It is only supported with destination_type\u003d\"volume\"."},{"line_number":2281,"context_line":"  in: body"},{"line_number":2282,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3f79a3b5_71417263","line":2279,"range":{"start_line":2279,"start_character":63,"end_line":2279,"end_character":71},"updated":"2018-10-08 23:54:23.000000000","message":"``snapshot``","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df241fe9f993b10b32e54387248f48ba51ec4e6e","unresolved":false,"context_lines":[{"line_number":2276,"context_line":"    There are some restrictions on ``volume_type``:"},{"line_number":2277,"context_line":""},{"line_number":2278,"context_line":"    - It can be a volume type ID or name."},{"line_number":2279,"context_line":"    - It is only supported with source_type of blank, image or snapshot."},{"line_number":2280,"context_line":"    - It is only supported with destination_type\u003d\"volume\"."},{"line_number":2281,"context_line":"  in: body"},{"line_number":2282,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3f79a3b5_1177ded3","line":2279,"range":{"start_line":2279,"start_character":32,"end_line":2279,"end_character":43},"updated":"2018-10-08 23:54:23.000000000","message":"``source_type``","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"9c127834db97485b2ae13101d3b11075384a73e5","unresolved":false,"context_lines":[{"line_number":2276,"context_line":"    There are some restrictions on ``volume_type``:"},{"line_number":2277,"context_line":""},{"line_number":2278,"context_line":"    - It can be a volume type ID or name."},{"line_number":2279,"context_line":"    - It is only supported with source_type of blank, image or snapshot."},{"line_number":2280,"context_line":"    - It is only supported with destination_type\u003d\"volume\"."},{"line_number":2281,"context_line":"  in: body"},{"line_number":2282,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3f79a3b5_71cde8b8","line":2279,"range":{"start_line":2279,"start_character":32,"end_line":2279,"end_character":43},"in_reply_to":"3f79a3b5_1177ded3","updated":"2018-10-09 11:20:39.000000000","message":"Done","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"9c127834db97485b2ae13101d3b11075384a73e5","unresolved":false,"context_lines":[{"line_number":2276,"context_line":"    There are some restrictions on ``volume_type``:"},{"line_number":2277,"context_line":""},{"line_number":2278,"context_line":"    - It can be a volume type ID or name."},{"line_number":2279,"context_line":"    - It is only supported with source_type of blank, image or snapshot."},{"line_number":2280,"context_line":"    - It is only supported with destination_type\u003d\"volume\"."},{"line_number":2281,"context_line":"  in: body"},{"line_number":2282,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3f79a3b5_31c7709b","line":2279,"range":{"start_line":2279,"start_character":63,"end_line":2279,"end_character":71},"in_reply_to":"3f79a3b5_71417263","updated":"2018-10-09 11:20:39.000000000","message":"Done","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"9c127834db97485b2ae13101d3b11075384a73e5","unresolved":false,"context_lines":[{"line_number":2276,"context_line":"    There are some restrictions on ``volume_type``:"},{"line_number":2277,"context_line":""},{"line_number":2278,"context_line":"    - It can be a volume type ID or name."},{"line_number":2279,"context_line":"    - It is only supported with source_type of blank, image or snapshot."},{"line_number":2280,"context_line":"    - It is only supported with destination_type\u003d\"volume\"."},{"line_number":2281,"context_line":"  in: body"},{"line_number":2282,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3f79a3b5_11bcb405","line":2279,"range":{"start_line":2279,"start_character":47,"end_line":2279,"end_character":52},"in_reply_to":"3f79a3b5_b1470a7b","updated":"2018-10-09 11:20:39.000000000","message":"Done","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"9c127834db97485b2ae13101d3b11075384a73e5","unresolved":false,"context_lines":[{"line_number":2276,"context_line":"    There are some restrictions on ``volume_type``:"},{"line_number":2277,"context_line":""},{"line_number":2278,"context_line":"    - It can be a volume type ID or name."},{"line_number":2279,"context_line":"    - It is only supported with source_type of blank, image or snapshot."},{"line_number":2280,"context_line":"    - It is only supported with destination_type\u003d\"volume\"."},{"line_number":2281,"context_line":"  in: body"},{"line_number":2282,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3f79a3b5_b1baa008","line":2279,"range":{"start_line":2279,"start_character":54,"end_line":2279,"end_character":59},"in_reply_to":"3f79a3b5_d14ac680","updated":"2018-10-09 11:20:39.000000000","message":"Done","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df241fe9f993b10b32e54387248f48ba51ec4e6e","unresolved":false,"context_lines":[{"line_number":2277,"context_line":""},{"line_number":2278,"context_line":"    - It can be a volume type ID or name."},{"line_number":2279,"context_line":"    - It is only supported with source_type of blank, image or snapshot."},{"line_number":2280,"context_line":"    - It is only supported with destination_type\u003d\"volume\"."},{"line_number":2281,"context_line":"  in: body"},{"line_number":2282,"context_line":"  required: false"},{"line_number":2283,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3f79a3b5_91444e75","line":2280,"range":{"start_line":2280,"start_character":32,"end_line":2280,"end_character":58},"updated":"2018-10-08 23:54:23.000000000","message":"``destination_type`` of ``volume``.","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"9c127834db97485b2ae13101d3b11075384a73e5","unresolved":false,"context_lines":[{"line_number":2277,"context_line":""},{"line_number":2278,"context_line":"    - It can be a volume type ID or name."},{"line_number":2279,"context_line":"    - It is only supported with source_type of blank, image or snapshot."},{"line_number":2280,"context_line":"    - It is only supported with destination_type\u003d\"volume\"."},{"line_number":2281,"context_line":"  in: body"},{"line_number":2282,"context_line":"  required: false"},{"line_number":2283,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3f79a3b5_f1457817","line":2280,"range":{"start_line":2280,"start_character":32,"end_line":2280,"end_character":58},"in_reply_to":"3f79a3b5_91444e75","updated":"2018-10-09 11:20:39.000000000","message":"Done","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"}],"api-ref/source/servers.inc":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c19fd4910b4d0377fceee225fb37bb3139c363a3","unresolved":false,"context_lines":[{"line_number":390,"context_line":".. literalinclude:: ../../doc/api_samples/servers/server-create-req.json"},{"line_number":391,"context_line":"   :language: javascript"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"**Example Create Server With Networks(array) and Block Device Mapping V2 (v2.32)**"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":".. literalinclude:: ../../doc/api_samples/servers/v2.32/server-create-req.json"},{"line_number":396,"context_line":"   :language: javascript"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"**Example Create Server With Automatic Networking (v2.37)**"},{"line_number":399,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":4,"id":"3f79a3b5_1c71d9de","line":396,"range":{"start_line":393,"start_character":0,"end_line":396,"end_character":24},"updated":"2018-10-01 02:33:22.000000000","message":"This example should be replaced with new one (example for 2.67).\nThe example for microversion 2.67 should be after line 406.","commit_id":"022ee18870ca48418437c1a21062aca3af9a0318"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"c90eedfc05c0a2d574382430981050249421ff00","unresolved":false,"context_lines":[{"line_number":390,"context_line":".. literalinclude:: ../../doc/api_samples/servers/server-create-req.json"},{"line_number":391,"context_line":"   :language: javascript"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"**Example Create Server With Networks(array) and Block Device Mapping V2 (v2.32)**"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":".. literalinclude:: ../../doc/api_samples/servers/v2.32/server-create-req.json"},{"line_number":396,"context_line":"   :language: javascript"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"**Example Create Server With Automatic Networking (v2.37)**"},{"line_number":399,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":4,"id":"3f79a3b5_1739b23d","line":396,"range":{"start_line":393,"start_character":0,"end_line":396,"end_character":24},"in_reply_to":"3f79a3b5_1c71d9de","updated":"2018-10-01 05:43:17.000000000","message":"Good point.","commit_id":"022ee18870ca48418437c1a21062aca3af9a0318"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"1aca62b789dd07a18d58a9d00063521002846795","unresolved":false,"context_lines":[{"line_number":390,"context_line":".. literalinclude:: ../../doc/api_samples/servers/server-create-req.json"},{"line_number":391,"context_line":"   :language: javascript"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"**Example Create Server With Networks(array) and Block Device Mapping V2 (v2.67)**"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":".. literalinclude:: ../../doc/api_samples/servers/v2.67/server-create-req.json"},{"line_number":396,"context_line":"   :language: javascript"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"**Example Create Server With Automatic Networking (v2.37)**"},{"line_number":399,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":5,"id":"3f79a3b5_e2e9d6aa","line":396,"range":{"start_line":393,"start_character":0,"end_line":396,"end_character":24},"updated":"2018-10-01 07:37:28.000000000","message":"Remove it.","commit_id":"b845a640331203e34117b254e833117a161cdec2"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"23a6044c749405bffc7b01bbe6c616ce7aa8d11f","unresolved":false,"context_lines":[{"line_number":390,"context_line":".. literalinclude:: ../../doc/api_samples/servers/server-create-req.json"},{"line_number":391,"context_line":"   :language: javascript"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"**Example Create Server With Networks(array) and Block Device Mapping V2 (v2.67)**"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":".. literalinclude:: ../../doc/api_samples/servers/v2.67/server-create-req.json"},{"line_number":396,"context_line":"   :language: javascript"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"**Example Create Server With Automatic Networking (v2.37)**"},{"line_number":399,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":5,"id":"3f79a3b5_625aa682","line":396,"range":{"start_line":393,"start_character":0,"end_line":396,"end_character":24},"in_reply_to":"3f79a3b5_e2e9d6aa","updated":"2018-10-01 07:47:22.000000000","message":"Done","commit_id":"b845a640331203e34117b254e833117a161cdec2"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"1aca62b789dd07a18d58a9d00063521002846795","unresolved":false,"context_lines":[{"line_number":405,"context_line":".. literalinclude:: ../../doc/api_samples/servers/v2.63/server-create-req.json"},{"line_number":406,"context_line":"   :language: javascript"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"**Example Create Server With Specify Volume Type (v2.67)**"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":".. literalinclude:: ../../doc/api_samples/servers/v2.67/server-create-req.json"},{"line_number":411,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":5,"id":"3f79a3b5_c2ecdabd","line":408,"range":{"start_line":408,"start_character":2,"end_line":408,"end_character":48},"updated":"2018-10-01 07:37:28.000000000","message":"Example Create Server With Networks(array) and Block Device Mapping V2","commit_id":"b845a640331203e34117b254e833117a161cdec2"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"23a6044c749405bffc7b01bbe6c616ce7aa8d11f","unresolved":false,"context_lines":[{"line_number":405,"context_line":".. literalinclude:: ../../doc/api_samples/servers/v2.63/server-create-req.json"},{"line_number":406,"context_line":"   :language: javascript"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"**Example Create Server With Specify Volume Type (v2.67)**"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":".. literalinclude:: ../../doc/api_samples/servers/v2.67/server-create-req.json"},{"line_number":411,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":5,"id":"3f79a3b5_0253b26d","line":408,"range":{"start_line":408,"start_character":2,"end_line":408,"end_character":48},"in_reply_to":"3f79a3b5_c2ecdabd","updated":"2018-10-01 07:47:22.000000000","message":"Done","commit_id":"b845a640331203e34117b254e833117a161cdec2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5ca00d5d7a553bbe0faa8b183b7e3294ff773d4e","unresolved":false,"context_lines":[{"line_number":389,"context_line":".. literalinclude:: ../../doc/api_samples/servers/server-create-req.json"},{"line_number":390,"context_line":"   :language: javascript"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"**Example Create Server With Networks(array) and Block Device Mapping V2 (v2.32)**"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":".. literalinclude:: ../../doc/api_samples/servers/v2.32/server-create-req.json"},{"line_number":395,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":6,"id":"3f79a3b5_dd3031a1","side":"PARENT","line":392,"updated":"2018-10-01 16:46:20.000000000","message":"I don\u0027t think we should remove this - the point of this is to show networks being created before 2.37 as an array. Starting in 2.37, the networks parameter can be an array or an enum with value \u0027auto\u0027 or \u0027none\u0027 which was a pretty big change in 2.37.","commit_id":"b8b726f66a0dabfd88ae0c7d0654c6ce3adc1e3b"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"74fde4d91d339ee9d0271a418c1c21ea28f21835","unresolved":false,"context_lines":[{"line_number":389,"context_line":".. literalinclude:: ../../doc/api_samples/servers/server-create-req.json"},{"line_number":390,"context_line":"   :language: javascript"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"**Example Create Server With Networks(array) and Block Device Mapping V2 (v2.32)**"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":".. literalinclude:: ../../doc/api_samples/servers/v2.32/server-create-req.json"},{"line_number":395,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":6,"id":"3f79a3b5_10f7638e","side":"PARENT","line":392,"in_reply_to":"3f79a3b5_dd3031a1","updated":"2018-10-02 06:39:57.000000000","message":"Emm...Sorry, I am not particularly familiar with this piece.","commit_id":"b8b726f66a0dabfd88ae0c7d0654c6ce3adc1e3b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5ca00d5d7a553bbe0faa8b183b7e3294ff773d4e","unresolved":false,"context_lines":[{"line_number":362,"context_line":"  - block_device_mapping_v2.source_type: source_type"},{"line_number":363,"context_line":"  - block_device_mapping_v2.uuid: block_device_uuid"},{"line_number":364,"context_line":"  - block_device_mapping_v2.volume_size: volume_size"},{"line_number":365,"context_line":"  - block_device_mapping_v2.volume_type: device_volume_type"},{"line_number":366,"context_line":"  - block_device_mapping_v2.tag: device_tag_bdm"},{"line_number":367,"context_line":"  - config_drive: config_drive"},{"line_number":368,"context_line":"  - imageRef: imageRef"}],"source_content_type":"text/x-c++src","patch_set":6,"id":"3f79a3b5_bdd0d52c","line":365,"updated":"2018-10-01 16:46:20.000000000","message":"This should go after block_device_mapping_v2.tag because we sort by microversion:\n\nhttps://docs.openstack.org/nova/latest/contributor/api-ref-guideline.html#parameters","commit_id":"eab971aaa38d77d633c8aafa9d552933d4cac394"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"74fde4d91d339ee9d0271a418c1c21ea28f21835","unresolved":false,"context_lines":[{"line_number":362,"context_line":"  - block_device_mapping_v2.source_type: source_type"},{"line_number":363,"context_line":"  - block_device_mapping_v2.uuid: block_device_uuid"},{"line_number":364,"context_line":"  - block_device_mapping_v2.volume_size: volume_size"},{"line_number":365,"context_line":"  - block_device_mapping_v2.volume_type: device_volume_type"},{"line_number":366,"context_line":"  - block_device_mapping_v2.tag: device_tag_bdm"},{"line_number":367,"context_line":"  - config_drive: config_drive"},{"line_number":368,"context_line":"  - imageRef: imageRef"}],"source_content_type":"text/x-c++src","patch_set":6,"id":"3f79a3b5_d01a4bc5","line":365,"in_reply_to":"3f79a3b5_bdd0d52c","updated":"2018-10-02 06:39:57.000000000","message":"Yes.\n-- Parameters added in microversions (by the microversion they were added)","commit_id":"eab971aaa38d77d633c8aafa9d552933d4cac394"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5ca00d5d7a553bbe0faa8b183b7e3294ff773d4e","unresolved":false,"context_lines":[{"line_number":400,"context_line":".. literalinclude:: ../../doc/api_samples/servers/v2.63/server-create-req.json"},{"line_number":401,"context_line":"   :language: javascript"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"**Example Create Server With Networks(array) and Block Device Mapping V2 (v2.67)**"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":".. literalinclude:: ../../doc/api_samples/servers/v2.67/server-create-req.json"},{"line_number":406,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":6,"id":"3f79a3b5_9d263967","line":403,"updated":"2018-10-01 16:46:20.000000000","message":"I don\u0027t think we need a new sample in the docs for this. The API reference parameter description is good enough.","commit_id":"eab971aaa38d77d633c8aafa9d552933d4cac394"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"74fde4d91d339ee9d0271a418c1c21ea28f21835","unresolved":false,"context_lines":[{"line_number":400,"context_line":".. literalinclude:: ../../doc/api_samples/servers/v2.63/server-create-req.json"},{"line_number":401,"context_line":"   :language: javascript"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"**Example Create Server With Networks(array) and Block Device Mapping V2 (v2.67)**"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":".. literalinclude:: ../../doc/api_samples/servers/v2.67/server-create-req.json"},{"line_number":406,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":6,"id":"3f79a3b5_f0e987aa","line":403,"in_reply_to":"3f79a3b5_9d263967","updated":"2018-10-02 06:39:57.000000000","message":"Remove it.","commit_id":"eab971aaa38d77d633c8aafa9d552933d4cac394"}],"doc/api_samples/servers/v2.67/server-create-req.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8670038a7f6b759517463f479953864afa96664e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"server\" : {"},{"line_number":3,"context_line":"        \"name\" : \"device-tagging-server\","},{"line_number":4,"context_line":"        \"flavorRef\" : \"http://openstack.example.com/flavors/1\","},{"line_number":5,"context_line":"        \"networks\" : [{"},{"line_number":6,"context_line":"            \"uuid\" : \"ff608d40-75e9-48cb-b745-77bb55b5eaf2\","}],"source_content_type":"application/json","patch_set":10,"id":"3f79a3b5_206b55f0","line":3,"range":{"start_line":3,"start_character":18,"end_line":3,"end_character":39},"updated":"2018-10-11 19:31:08.000000000","message":"bfv-server-with-volume-type","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"672d6e5caf0479a102e9759bf277762dec8c1674","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"server\" : {"},{"line_number":3,"context_line":"        \"name\" : \"device-tagging-server\","},{"line_number":4,"context_line":"        \"flavorRef\" : \"http://openstack.example.com/flavors/1\","},{"line_number":5,"context_line":"        \"networks\" : [{"},{"line_number":6,"context_line":"            \"uuid\" : \"ff608d40-75e9-48cb-b745-77bb55b5eaf2\","}],"source_content_type":"application/json","patch_set":10,"id":"3f79a3b5_33116db0","line":3,"range":{"start_line":3,"start_character":18,"end_line":3,"end_character":39},"in_reply_to":"3f79a3b5_206b55f0","updated":"2018-10-11 20:13:10.000000000","message":"Done","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"}],"doc/source/user/block-device-mapping.rst":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df241fe9f993b10b32e54387248f48ba51ec4e6e","unresolved":false,"context_lines":[{"line_number":167,"context_line":"  include the volume_type from the BDM record so if the user then creates"},{"line_number":168,"context_line":"  another server from that snapshot, the volume that nova creates from that"},{"line_number":169,"context_line":"  snapshot will use the same volume_type. If a user wishes to change that"},{"line_number":170,"context_line":"  volume type in the image metadata, they can via the image API."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"Valid source / dest combinations"},{"line_number":173,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3f79a3b5_c3fafd0f","line":170,"range":{"start_line":170,"start_character":42,"end_line":170,"end_character":45},"updated":"2018-10-08 23:54:23.000000000","message":"can do so","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"9c127834db97485b2ae13101d3b11075384a73e5","unresolved":false,"context_lines":[{"line_number":167,"context_line":"  include the volume_type from the BDM record so if the user then creates"},{"line_number":168,"context_line":"  another server from that snapshot, the volume that nova creates from that"},{"line_number":169,"context_line":"  snapshot will use the same volume_type. If a user wishes to change that"},{"line_number":170,"context_line":"  volume type in the image metadata, they can via the image API."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"Valid source / dest combinations"},{"line_number":173,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3f79a3b5_d1f87cc2","line":170,"range":{"start_line":170,"start_character":42,"end_line":170,"end_character":45},"in_reply_to":"3f79a3b5_c3fafd0f","updated":"2018-10-09 11:20:39.000000000","message":"Done","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"}],"nova/api/openstack/common.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df241fe9f993b10b32e54387248f48ba51ec4e6e","unresolved":false,"context_lines":[{"line_number":535,"context_line":"    return api_version_request.is_supported(req, \u00272.60\u0027)"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"def supports_volume_type(req):"},{"line_number":539,"context_line":"    \"\"\"Check to see if the requested API version is high enough for volume_type"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"    Microversion 2.67 adds support for specifying a volume_type when booting a"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_6309a927","line":538,"updated":"2018-10-08 23:54:23.000000000","message":"nit: this is probably excessive for this microversion; this method is only going to be called in one place. The supports_multiattach_volume method above was written in this common module because it is used in a couple of different APIs.","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"9c127834db97485b2ae13101d3b11075384a73e5","unresolved":false,"context_lines":[{"line_number":535,"context_line":"    return api_version_request.is_supported(req, \u00272.60\u0027)"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"def supports_volume_type(req):"},{"line_number":539,"context_line":"    \"\"\"Check to see if the requested API version is high enough for volume_type"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"    Microversion 2.67 adds support for specifying a volume_type when booting a"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_31e210d6","line":538,"in_reply_to":"3f79a3b5_6309a927","updated":"2018-10-09 11:20:39.000000000","message":"Yeah, this is not make sense in this changes of volume_type, so remove this method and the invalid parameter \"supports_volume_type\" in compute api.","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"}],"nova/api/openstack/compute/servers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df241fe9f993b10b32e54387248f48ba51ec4e6e","unresolved":false,"context_lines":[{"line_number":581,"context_line":"                    flavor_id, ctxt\u003dcontext, read_deleted\u003d\"no\")"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"            supports_multiattach \u003d common.supports_multiattach_volume(req)"},{"line_number":584,"context_line":"            supports_volume_type \u003d common.supports_volume_type(req)"},{"line_number":585,"context_line":"            (instances, resv_id) \u003d self.compute_api.create(context,"},{"line_number":586,"context_line":"                            inst_type,"},{"line_number":587,"context_line":"                            image_uuid,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_0318f573","line":584,"updated":"2018-10-08 23:54:23.000000000","message":"As noted in the change before this in the series, I don\u0027t think we need this variable passed down.","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"9c127834db97485b2ae13101d3b11075384a73e5","unresolved":false,"context_lines":[{"line_number":581,"context_line":"                    flavor_id, ctxt\u003dcontext, read_deleted\u003d\"no\")"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"            supports_multiattach \u003d common.supports_multiattach_volume(req)"},{"line_number":584,"context_line":"            supports_volume_type \u003d common.supports_volume_type(req)"},{"line_number":585,"context_line":"            (instances, resv_id) \u003d self.compute_api.create(context,"},{"line_number":586,"context_line":"                            inst_type,"},{"line_number":587,"context_line":"                            image_uuid,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_f139f83f","line":584,"in_reply_to":"3f79a3b5_0318f573","updated":"2018-10-09 11:20:39.000000000","message":"Yes, remove it.","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df241fe9f993b10b32e54387248f48ba51ec4e6e","unresolved":false,"context_lines":[{"line_number":639,"context_line":"                exception.PortRequiresFixedIP,"},{"line_number":640,"context_line":"                exception.NetworkRequiresSubnet,"},{"line_number":641,"context_line":"                exception.NetworkNotFound,"},{"line_number":642,"context_line":"                exception.InvalidBDM,"},{"line_number":643,"context_line":"                exception.InvalidBDMSnapshot,"},{"line_number":644,"context_line":"                exception.InvalidBDMVolume,"},{"line_number":645,"context_line":"                exception.InvalidBDMImage,"},{"line_number":646,"context_line":"                exception.InvalidBDMBootSequence,"},{"line_number":647,"context_line":"                exception.InvalidBDMLocalsLimit,"},{"line_number":648,"context_line":"                exception.InvalidBDMVolumeNotBootable,"},{"line_number":649,"context_line":"                exception.InvalidBDMEphemeralSize,"},{"line_number":650,"context_line":"                exception.InvalidBDMFormat,"},{"line_number":651,"context_line":"                exception.InvalidBDMSwapSize,"},{"line_number":652,"context_line":"                exception.AutoDiskConfigDisabledByImage,"},{"line_number":653,"context_line":"                exception.ImageCPUPinningForbidden,"},{"line_number":654,"context_line":"                exception.ImageCPUThreadPolicyForbidden,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_d193a6fe","line":651,"range":{"start_line":642,"start_character":16,"end_line":651,"end_character":45},"updated":"2018-10-08 23:54:23.000000000","message":"VolumeTypeNotFound needs to be in this list as well:\n\nhttps://review.openstack.org/#/c/605573/13/nova/exception.py\n\nSo that we return a 400 rather than a 404 or 500. That means we\u0027re also missing a test case for that exception being handled here.","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"9c127834db97485b2ae13101d3b11075384a73e5","unresolved":false,"context_lines":[{"line_number":639,"context_line":"                exception.PortRequiresFixedIP,"},{"line_number":640,"context_line":"                exception.NetworkRequiresSubnet,"},{"line_number":641,"context_line":"                exception.NetworkNotFound,"},{"line_number":642,"context_line":"                exception.InvalidBDM,"},{"line_number":643,"context_line":"                exception.InvalidBDMSnapshot,"},{"line_number":644,"context_line":"                exception.InvalidBDMVolume,"},{"line_number":645,"context_line":"                exception.InvalidBDMImage,"},{"line_number":646,"context_line":"                exception.InvalidBDMBootSequence,"},{"line_number":647,"context_line":"                exception.InvalidBDMLocalsLimit,"},{"line_number":648,"context_line":"                exception.InvalidBDMVolumeNotBootable,"},{"line_number":649,"context_line":"                exception.InvalidBDMEphemeralSize,"},{"line_number":650,"context_line":"                exception.InvalidBDMFormat,"},{"line_number":651,"context_line":"                exception.InvalidBDMSwapSize,"},{"line_number":652,"context_line":"                exception.AutoDiskConfigDisabledByImage,"},{"line_number":653,"context_line":"                exception.ImageCPUPinningForbidden,"},{"line_number":654,"context_line":"                exception.ImageCPUThreadPolicyForbidden,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_91776408","line":651,"range":{"start_line":642,"start_character":16,"end_line":651,"end_character":45},"in_reply_to":"3f79a3b5_d193a6fe","updated":"2018-10-09 11:20:39.000000000","message":"Done","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df241fe9f993b10b32e54387248f48ba51ec4e6e","unresolved":false,"context_lines":[{"line_number":676,"context_line":"                exception.NetworkAmbiguous,"},{"line_number":677,"context_line":"                exception.NoUniqueMatch,"},{"line_number":678,"context_line":"                exception.MultiattachSupportNotYetAvailable,"},{"line_number":679,"context_line":"                exception.VolumeTypeSupportNotYetAvailable,"},{"line_number":680,"context_line":"                exception.CertificateValidationNotYetAvailable) as error:"},{"line_number":681,"context_line":"            raise exc.HTTPConflict(explanation\u003derror.format_message())"},{"line_number":682,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_43658de1","line":679,"updated":"2018-10-08 23:54:23.000000000","message":"I don\u0027t see a test for this.","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"94f096a4361d9599e5e3f106c15f9f16d9dec39f","unresolved":false,"context_lines":[{"line_number":676,"context_line":"                exception.NetworkAmbiguous,"},{"line_number":677,"context_line":"                exception.NoUniqueMatch,"},{"line_number":678,"context_line":"                exception.MultiattachSupportNotYetAvailable,"},{"line_number":679,"context_line":"                exception.VolumeTypeSupportNotYetAvailable,"},{"line_number":680,"context_line":"                exception.CertificateValidationNotYetAvailable) as error:"},{"line_number":681,"context_line":"            raise exc.HTTPConflict(explanation\u003derror.format_message())"},{"line_number":682,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_4ad10056","line":679,"in_reply_to":"3f79a3b5_093c84be","updated":"2018-10-10 08:08:53.000000000","message":"Yeah, it\u0027s necessary.","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"9c127834db97485b2ae13101d3b11075384a73e5","unresolved":false,"context_lines":[{"line_number":676,"context_line":"                exception.NetworkAmbiguous,"},{"line_number":677,"context_line":"                exception.NoUniqueMatch,"},{"line_number":678,"context_line":"                exception.MultiattachSupportNotYetAvailable,"},{"line_number":679,"context_line":"                exception.VolumeTypeSupportNotYetAvailable,"},{"line_number":680,"context_line":"                exception.CertificateValidationNotYetAvailable) as error:"},{"line_number":681,"context_line":"            raise exc.HTTPConflict(explanation\u003derror.format_message())"},{"line_number":682,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_b1714010","line":679,"in_reply_to":"3f79a3b5_43658de1","updated":"2018-10-09 11:20:39.000000000","message":"It\u0027s test in compute api https://review.openstack.org/#/c/605573/14/nova/tests/unit/compute/test_compute_api.py. Line 6255.","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"158d468efeb80da459fe9f84fbdd1a1f0d4026f7","unresolved":false,"context_lines":[{"line_number":676,"context_line":"                exception.NetworkAmbiguous,"},{"line_number":677,"context_line":"                exception.NoUniqueMatch,"},{"line_number":678,"context_line":"                exception.MultiattachSupportNotYetAvailable,"},{"line_number":679,"context_line":"                exception.VolumeTypeSupportNotYetAvailable,"},{"line_number":680,"context_line":"                exception.CertificateValidationNotYetAvailable) as error:"},{"line_number":681,"context_line":"            raise exc.HTTPConflict(explanation\u003derror.format_message())"},{"line_number":682,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_093c84be","line":679,"in_reply_to":"3f79a3b5_b1714010","updated":"2018-10-09 16:36:56.000000000","message":"No, that tests the compute API code in the nova.compute.api.API class, it doesn\u0027t test that *this* code handles that exception being raised can handled here.","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1a8c2c3a270ba992ee3006f1ce280ef9bfbf4811","unresolved":false,"context_lines":[{"line_number":647,"context_line":"                exception.InvalidBDMEphemeralSize,"},{"line_number":648,"context_line":"                exception.InvalidBDMFormat,"},{"line_number":649,"context_line":"                exception.InvalidBDMSwapSize,"},{"line_number":650,"context_line":"                exception.VolumeTypeNotFound,"},{"line_number":651,"context_line":"                exception.AutoDiskConfigDisabledByImage,"},{"line_number":652,"context_line":"                exception.ImageCPUPinningForbidden,"},{"line_number":653,"context_line":"                exception.ImageCPUThreadPolicyForbidden,"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_91e959ac","line":650,"updated":"2018-10-11 21:53:04.000000000","message":"Feels like these should be added when we add the code that can raise them, although I know technically we can\u0027t hit those raises until this patch.","commit_id":"981f396fd79b4abf6b0036402896856f0ac1e842"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bd6253c614c3adf8b0c2788955dcc904d6c295ef","unresolved":false,"context_lines":[{"line_number":647,"context_line":"                exception.InvalidBDMEphemeralSize,"},{"line_number":648,"context_line":"                exception.InvalidBDMFormat,"},{"line_number":649,"context_line":"                exception.InvalidBDMSwapSize,"},{"line_number":650,"context_line":"                exception.VolumeTypeNotFound,"},{"line_number":651,"context_line":"                exception.AutoDiskConfigDisabledByImage,"},{"line_number":652,"context_line":"                exception.ImageCPUPinningForbidden,"},{"line_number":653,"context_line":"                exception.ImageCPUThreadPolicyForbidden,"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_4cbecad4","line":650,"in_reply_to":"3f79a3b5_91e959ac","updated":"2018-10-11 22:16:45.000000000","message":"Yeah I always struggle with that a bit when we split the changes up like this.","commit_id":"981f396fd79b4abf6b0036402896856f0ac1e842"}],"nova/api/validation/parameter_types.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df241fe9f993b10b32e54387248f48ba51ec4e6e","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"volume_type \u003d {"},{"line_number":378,"context_line":"    \u0027anyOf\u0027: ["},{"line_number":379,"context_line":"        {\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027uuid\u0027},"},{"line_number":380,"context_line":"        {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027minLength\u0027: 0, \u0027maxLength\u0027: 255}"},{"line_number":381,"context_line":"    ]"},{"line_number":382,"context_line":"}"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_633209f6","line":381,"range":{"start_line":378,"start_character":4,"end_line":381,"end_character":5},"updated":"2018-10-08 23:54:23.000000000","message":"Couldn\u0027t this just be simplified to:\n\n\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027minLength\u0027: 0, \u0027maxLength\u0027: 255\n\nBecause we can\u0027t really tell if a uuid or not since we can get a volume type ID or name...so the anyOf OR check is kind of useless.","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"9c127834db97485b2ae13101d3b11075384a73e5","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"volume_type \u003d {"},{"line_number":378,"context_line":"    \u0027anyOf\u0027: ["},{"line_number":379,"context_line":"        {\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027uuid\u0027},"},{"line_number":380,"context_line":"        {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027minLength\u0027: 0, \u0027maxLength\u0027: 255}"},{"line_number":381,"context_line":"    ]"},{"line_number":382,"context_line":"}"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_f4cb2648","line":381,"range":{"start_line":378,"start_character":4,"end_line":381,"end_character":5},"in_reply_to":"3f79a3b5_633209f6","updated":"2018-10-09 11:20:39.000000000","message":"Done","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d5aa8aa3aee1c4843e311833ce9ce8d0dc443bf8","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"volume_type \u003d {"},{"line_number":378,"context_line":"    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027minLength\u0027: 0, \u0027maxLength\u0027: 255"},{"line_number":379,"context_line":"}"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_89e41444","line":378,"updated":"2018-10-09 16:41:39.000000000","message":"We should probably have a unit test that specifies volume_type\u003dNone to makes sure that doesn\u0027t blow up.\n\nWhat about volume_type\u003d\u0027\u0027? Will that be accepted by the schema because it probably shouldn\u0027t. Therefore, shouldn\u0027t minLength be 1? Let\u0027s have a test for that. And a test for maxLength as well - make sure we fail validation if the volume_type length is greater than 255.","commit_id":"73dedd16d5fbce8e71c801d10c7a02b3ac14a965"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"94f096a4361d9599e5e3f106c15f9f16d9dec39f","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"volume_type \u003d {"},{"line_number":378,"context_line":"    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027minLength\u0027: 0, \u0027maxLength\u0027: 255"},{"line_number":379,"context_line":"}"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_1b835805","line":378,"in_reply_to":"3f79a3b5_89e41444","updated":"2018-10-10 08:08:53.000000000","message":"Yeah, I can add a test case to this, but here I need to explain that volume_type only supports null of \"\", does not support \u0027\u0027, and None does not.\n\nThis is consistent with cinder\u0027s validation rules of volume_type. https://github.com/openstack/cinder/blob/master/cinder/api/validation/parameter_types.py#L179","commit_id":"73dedd16d5fbce8e71c801d10c7a02b3ac14a965"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4f5244d157c7430840d7c9eb27a4e1bc0cb599e5","unresolved":false,"context_lines":[{"line_number":333,"context_line":""},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"description \u003d {"},{"line_number":336,"context_line":"    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027minLength\u0027: 0, \u0027maxLength\u0027: 255,"},{"line_number":337,"context_line":"    \u0027pattern\u0027: valid_description_regex,"},{"line_number":338,"context_line":"}"},{"line_number":339,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_408c512d","line":336,"range":{"start_line":336,"start_character":4,"end_line":336,"end_character":65},"updated":"2018-10-11 19:11:41.000000000","message":"This is the same and I\u0027m able to create a server with a null description:\n\n$ curl -g -i -X POST http://199.204.45.149/compute/v2.1/servers -H \"Accept: application/json\" -H \"Content-Type: application/json\" -H \"OpenStack-API-Version: compute 2.67\" -H \"X-Auth-Token: $token\" -H \"X-OpenStack-Nova-API-Version: 2.67\" -d \u0027{\"server\": {\"name\": \"test-null-desc\", \"description\": null, \"imageRef\": \"b9cdd407-14fc-42fb-beb9-d53988d866e3\", \"flavorRef\": \"1\", \"max_count\": 1, \"min_count\": 1, \"networks\": \"none\"}}\u0027\nHTTP/1.1 202 Accepted","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7a9816e00d9a33e572ba4ce513983a8d2df19b1b","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"volume_type \u003d {"},{"line_number":378,"context_line":"    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027minLength\u0027: 0, \u0027maxLength\u0027: 255"},{"line_number":379,"context_line":"}"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_ae5bcf20","line":378,"range":{"start_line":378,"start_character":33,"end_line":378,"end_character":46},"updated":"2018-10-12 04:41:01.000000000","message":"Also, the minLength should be \u00271\u0027 I think. https://github.com/openstack/cinder/blob/master/cinder/api/validation/parameter_types.py#L123","commit_id":"981f396fd79b4abf6b0036402896856f0ac1e842"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4e4c5e13e13fa43e8475eeb980ac7cfc2cbe9c25","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"volume_type \u003d {"},{"line_number":378,"context_line":"    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027minLength\u0027: 0, \u0027maxLength\u0027: 255"},{"line_number":379,"context_line":"}"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_a78537b0","line":378,"range":{"start_line":378,"start_character":23,"end_line":378,"end_character":29},"updated":"2018-10-11 23:44:43.000000000","message":"If volume_type is optional, I\u0027m not sure why we want to allow null. That is, what\u0027s the utility in sending \u0027volume_type\u0027: null vs not sending \u0027volume_type\u0027 at all? I don\u0027t see mention about it in the spec of previous PS.","commit_id":"981f396fd79b4abf6b0036402896856f0ac1e842"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"85f060e8766730cee9b6f9bb33798432ba4b914c","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"volume_type \u003d {"},{"line_number":378,"context_line":"    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027minLength\u0027: 0, \u0027maxLength\u0027: 255"},{"line_number":379,"context_line":"}"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_8e07f381","line":378,"range":{"start_line":378,"start_character":33,"end_line":378,"end_character":46},"in_reply_to":"3f79a3b5_0e8e8331","updated":"2018-10-12 05:45:13.000000000","message":"IMHO we only need consider keeping parity with the cinder volume create API\u0027s treatment of the \u0027volume_type\u0027 parameter, since that is the API we are calling from nova (we are not dealing with the volume type create or update API). You already have parity with the volume create API here with regard to the \u0027volume_type\u0027 parameter, so I don\u0027t think there is any more necessary to do.","commit_id":"981f396fd79b4abf6b0036402896856f0ac1e842"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0710371cb5f18661c7fac8b1a56465f06cbfac02","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"volume_type \u003d {"},{"line_number":378,"context_line":"    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027minLength\u0027: 0, \u0027maxLength\u0027: 255"},{"line_number":379,"context_line":"}"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_b561c1aa","line":378,"range":{"start_line":378,"start_character":33,"end_line":378,"end_character":46},"in_reply_to":"3f79a3b5_61b0538e","updated":"2018-10-13 11:22:19.000000000","message":"proxy point is good and justifiable. I am ok with this. consistency of existing user make sense here.","commit_id":"981f396fd79b4abf6b0036402896856f0ac1e842"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"a31776fce5aee033b4464ad4e0412190c91b4157","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"volume_type \u003d {"},{"line_number":378,"context_line":"    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027minLength\u0027: 0, \u0027maxLength\u0027: 255"},{"line_number":379,"context_line":"}"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_d9e28802","line":378,"range":{"start_line":378,"start_character":33,"end_line":378,"end_character":46},"in_reply_to":"3f79a3b5_83002102","updated":"2018-10-12 14:39:46.000000000","message":"Same here. I think if we\u0027re proxying a request to cinder, it makes sense to use consistency with the cinder API schema. IMHO it wouldn\u0027t be a great user experience if a user has to do something different to call the nova proxy API to cinder vs calling the cinder API.","commit_id":"981f396fd79b4abf6b0036402896856f0ac1e842"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"edb531e10185aa54cb1ab259beeaafe2a352208a","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"volume_type \u003d {"},{"line_number":378,"context_line":"    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027minLength\u0027: 0, \u0027maxLength\u0027: 255"},{"line_number":379,"context_line":"}"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_b7479ea4","line":378,"range":{"start_line":378,"start_character":33,"end_line":378,"end_character":46},"in_reply_to":"3f79a3b5_8e07f381","updated":"2018-10-12 08:36:41.000000000","message":"If we restrict the \u0027null\u0027 or 0 length, there is no harm because that will be no extra things we allowed than what cinder support.  It will be more that nova restricting the invalid/unused values to pass to cinder. \n\nCinder is ignoring the null or empty string [1]. Cinder APIs are not best in that case but we can improve in this new API changes.\n\nI feel we can restrict those ignored value in our API. \n\n[1] https://github.com/openstack/cinder/blob/c1007ed82760851d0bd1ad60a8b5351e1958e000/cinder/api/v3/volumes.py#L275","commit_id":"981f396fd79b4abf6b0036402896856f0ac1e842"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"5eb5e199224f5f8c3f6408a16809eb59d18707e3","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"volume_type \u003d {"},{"line_number":378,"context_line":"    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027minLength\u0027: 0, \u0027maxLength\u0027: 255"},{"line_number":379,"context_line":"}"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_c27061dd","line":378,"range":{"start_line":378,"start_character":23,"end_line":378,"end_character":29},"in_reply_to":"3f79a3b5_a78537b0","updated":"2018-10-12 01:21:57.000000000","message":"Yeah, I am not mention about \u0027volume_type\u0027 can be null in the spec. When writing the spec, it is only an initial consideration. However, when the research function is implemented, it is found that the \u0027volume_type\u0027 can have optional characteristics, which can be null. If you do not pass, use the default volume type of cinder.","commit_id":"981f396fd79b4abf6b0036402896856f0ac1e842"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"69614297d6310f65748eab22922a88f2a2082ef7","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"volume_type \u003d {"},{"line_number":378,"context_line":"    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027minLength\u0027: 0, \u0027maxLength\u0027: 255"},{"line_number":379,"context_line":"}"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_0e8e8331","line":378,"range":{"start_line":378,"start_character":33,"end_line":378,"end_character":46},"in_reply_to":"3f79a3b5_ae5bcf20","updated":"2018-10-12 05:34:25.000000000","message":"Here I am very confused about the processing logic of the cinder volume type on the name.\nWhen we create the volume type, the volume type name\u0027s validation rule is [1], and when we update volume type, the volume type name validation rule is [2].\n\n[1]https://github.com/openstack/cinder/blob/master/cinder/api/contrib/types_manage.py#L54\nhttps://github.com/openstack/cinder/blob/master/cinder/api/validation/parameter_types.py#L123\n[2]https://github.com/openstack/cinder/blob/master/cinder/api/contrib/types_manage.py#L89\nhttps://github.com/openstack/cinder/blob/master/cinder/api/validation/parameter_types.py#L179\n\n\nIf I use [1] above, this is need to change the minLength\u003d1, and remove the type\u003dnull, but if I use [2] above, I should keep current state related to verify \u0027volume_type\u0027 (null vs not sending \u0027volume_type\u0027 at all), and maybe need to add the unit test for volume_type\u003d\u0027null\u0027.","commit_id":"981f396fd79b4abf6b0036402896856f0ac1e842"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"512525eb7f0f8b899cc0b731eed8cebfcadbb14e","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"volume_type \u003d {"},{"line_number":378,"context_line":"    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027minLength\u0027: 0, \u0027maxLength\u0027: 255"},{"line_number":379,"context_line":"}"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_83002102","line":378,"range":{"start_line":378,"start_character":33,"end_line":378,"end_character":46},"in_reply_to":"3f79a3b5_b7479ea4","updated":"2018-10-12 13:06:18.000000000","message":"I\u0027m personally fine with just keeping parity with the cinder volume create API since people really just want a proxy here in the compute API. If this weren\u0027t a proxy, then I\u0027d tend to agree with gmann, but as its a proxy then being consistent is arguably better for users of the existing volume create API.","commit_id":"981f396fd79b4abf6b0036402896856f0ac1e842"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"85f4235d0fe318253d878fb1e15e5177c60d4d92","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"volume_type \u003d {"},{"line_number":378,"context_line":"    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027minLength\u0027: 0, \u0027maxLength\u0027: 255"},{"line_number":379,"context_line":"}"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_081e7b73","line":378,"range":{"start_line":378,"start_character":23,"end_line":378,"end_character":29},"in_reply_to":"3f79a3b5_c27061dd","updated":"2018-10-12 02:19:02.000000000","message":"Sorry, I do not understand here, what is the different of null and not provide in your usecase? I can understand default type for not providing, but what is null?","commit_id":"981f396fd79b4abf6b0036402896856f0ac1e842"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"ffc64b5107a5faff4023ed0d0e7dd6cf3de7306d","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"volume_type \u003d {"},{"line_number":378,"context_line":"    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027minLength\u0027: 0, \u0027maxLength\u0027: 255"},{"line_number":379,"context_line":"}"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_ce496b2f","line":378,"range":{"start_line":378,"start_character":23,"end_line":378,"end_character":29},"in_reply_to":"3f79a3b5_c27061dd","updated":"2018-10-12 05:15:39.000000000","message":"Thanks for the explanation, Brin. I see now in the cinder api-ref [1] that the optional volume_type parameter for the create volume API accepts a value of null/None. So, in order for us to allow users to specify the same allowed values that cinder allows, we should support null as well.\n\nI also see in the code that cinder allows [\u0027string\u0027, \u0027null\u0027] and also allows zero min length [2][3] for the volume_type in volume create API.\n\nI think all is OK in this patch.\n\n[1] https://developer.openstack.org/api-ref/block-storage/v3/#create-a-volume\n[2] https://github.com/openstack/cinder/blob/a2d4a9569e0feba086ac996cb6d17f33e76c2eb8/cinder/api/schemas/volumes.py#L45\n[3] https://github.com/openstack/cinder/blob/a2d4a9569e0feba086ac996cb6d17f33e76c2eb8/cinder/api/validation/parameter_types.py#L179-L181","commit_id":"981f396fd79b4abf6b0036402896856f0ac1e842"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ff9be1e5f61c551ab7daa5191b608c8d4de6f382","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"volume_type \u003d {"},{"line_number":378,"context_line":"    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027minLength\u0027: 0, \u0027maxLength\u0027: 255"},{"line_number":379,"context_line":"}"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_61b0538e","line":378,"range":{"start_line":378,"start_character":33,"end_line":378,"end_character":46},"in_reply_to":"3f79a3b5_d9e28802","updated":"2018-10-12 23:21:31.000000000","message":"yes, not sure whether the user really using null or empty string at here. But if some user uses it, I probably hope that is same with cinder API, we don\u0027t want the user to have different code in their client.","commit_id":"981f396fd79b4abf6b0036402896856f0ac1e842"}],"nova/block_device.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df241fe9f993b10b32e54387248f48ba51ec4e6e","unresolved":false,"context_lines":[{"line_number":198,"context_line":"                    raise exception.InvalidBDMFormat("},{"line_number":199,"context_line":"                        details\u003d_(\"Mapping image to local is not supported.\"))"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"            if destination_type \u003d\u003d \u0027local\u0027 and volume_type:"},{"line_number":202,"context_line":"                raise exception.InvalidBDMFormat(details\u003d_(\"Mapping volume \""},{"line_number":203,"context_line":"                        \"type to local is not supported.\"))"},{"line_number":204,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_a36ee1c5","line":201,"updated":"2018-10-08 23:54:23.000000000","message":"I don\u0027t see any testing for this or the check below.","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"9c127834db97485b2ae13101d3b11075384a73e5","unresolved":false,"context_lines":[{"line_number":198,"context_line":"                    raise exception.InvalidBDMFormat("},{"line_number":199,"context_line":"                        details\u003d_(\"Mapping image to local is not supported.\"))"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"            if destination_type \u003d\u003d \u0027local\u0027 and volume_type:"},{"line_number":202,"context_line":"                raise exception.InvalidBDMFormat(details\u003d_(\"Mapping volume \""},{"line_number":203,"context_line":"                        \"type to local is not supported.\"))"},{"line_number":204,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_94619213","line":201,"in_reply_to":"3f79a3b5_a36ee1c5","updated":"2018-10-09 11:20:39.000000000","message":"Add test cases for the check of destination_type \u003d\u003d \u0027local\u0027 and source_type \u003d\u003d \u0027volume\u0027.","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df241fe9f993b10b32e54387248f48ba51ec4e6e","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                        details\u003d_(\"Mapping image to local is not supported.\"))"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"            if destination_type \u003d\u003d \u0027local\u0027 and volume_type:"},{"line_number":202,"context_line":"                raise exception.InvalidBDMFormat(details\u003d_(\"Mapping volume \""},{"line_number":203,"context_line":"                        \"type to local is not supported.\"))"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"            # if this bdm is generated from --volume, use the type of this"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_e34b795b","line":202,"range":{"start_line":202,"start_character":49,"end_line":202,"end_character":56},"updated":"2018-10-08 23:54:23.000000000","message":"nit: drop this a line to align the formatting of the string, like you did below.","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"9c127834db97485b2ae13101d3b11075384a73e5","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                        details\u003d_(\"Mapping image to local is not supported.\"))"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"            if destination_type \u003d\u003d \u0027local\u0027 and volume_type:"},{"line_number":202,"context_line":"                raise exception.InvalidBDMFormat(details\u003d_(\"Mapping volume \""},{"line_number":203,"context_line":"                        \"type to local is not supported.\"))"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"            # if this bdm is generated from --volume, use the type of this"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_942992f2","line":202,"range":{"start_line":202,"start_character":49,"end_line":202,"end_character":56},"in_reply_to":"3f79a3b5_e34b795b","updated":"2018-10-09 11:20:39.000000000","message":"Done","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df241fe9f993b10b32e54387248f48ba51ec4e6e","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                        details\u003d_(\"Mapping image to local is not supported.\"))"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"            if destination_type \u003d\u003d \u0027local\u0027 and volume_type:"},{"line_number":202,"context_line":"                raise exception.InvalidBDMFormat(details\u003d_(\"Mapping volume \""},{"line_number":203,"context_line":"                        \"type to local is not supported.\"))"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"            # if this bdm is generated from --volume, use the type of this"},{"line_number":206,"context_line":"            # this volume."}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_633769dd","line":203,"range":{"start_line":202,"start_character":60,"end_line":203,"end_character":56},"updated":"2018-10-08 23:54:23.000000000","message":"I\u0027d re-word this as, \"Specifying a volume_type with destination_type\u003dlocal is not supported.\"","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"9c127834db97485b2ae13101d3b11075384a73e5","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                        details\u003d_(\"Mapping image to local is not supported.\"))"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"            if destination_type \u003d\u003d \u0027local\u0027 and volume_type:"},{"line_number":202,"context_line":"                raise exception.InvalidBDMFormat(details\u003d_(\"Mapping volume \""},{"line_number":203,"context_line":"                        \"type to local is not supported.\"))"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"            # if this bdm is generated from --volume, use the type of this"},{"line_number":206,"context_line":"            # this volume."}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_3430be55","line":203,"range":{"start_line":202,"start_character":60,"end_line":203,"end_character":56},"in_reply_to":"3f79a3b5_633769dd","updated":"2018-10-09 11:20:39.000000000","message":"Done","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df241fe9f993b10b32e54387248f48ba51ec4e6e","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                raise exception.InvalidBDMFormat(details\u003d_(\"Mapping volume \""},{"line_number":203,"context_line":"                        \"type to local is not supported.\"))"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"            # if this bdm is generated from --volume, use the type of this"},{"line_number":206,"context_line":"            # this volume."},{"line_number":207,"context_line":"            if source_type \u003d\u003d \u0027volume\u0027 and volume_type:"},{"line_number":208,"context_line":"                raise exception.InvalidBDMFormat("}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_c3719dad","line":205,"range":{"start_line":205,"start_character":44,"end_line":205,"end_character":52},"updated":"2018-10-08 23:54:23.000000000","message":"This is confusing to mention in the API when you\u0027re talking about a CLI option. Just say that specifying a volume_type with a pre-existing source volume is not supported.","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"9c127834db97485b2ae13101d3b11075384a73e5","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                raise exception.InvalidBDMFormat(details\u003d_(\"Mapping volume \""},{"line_number":203,"context_line":"                        \"type to local is not supported.\"))"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"            # if this bdm is generated from --volume, use the type of this"},{"line_number":206,"context_line":"            # this volume."},{"line_number":207,"context_line":"            if source_type \u003d\u003d \u0027volume\u0027 and volume_type:"},{"line_number":208,"context_line":"                raise exception.InvalidBDMFormat("}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_7474f604","line":205,"range":{"start_line":205,"start_character":44,"end_line":205,"end_character":52},"in_reply_to":"3f79a3b5_c3719dad","updated":"2018-10-09 11:20:39.000000000","message":"Done","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7a9816e00d9a33e572ba4ce513983a8d2df19b1b","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                    details\u003d_(\"Specifying a volume_type with destination_type\u003d\""},{"line_number":204,"context_line":"                              \"local is not supported.\"))"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"            # Specifying a volume_type with a pre-existing source volume is"},{"line_number":207,"context_line":"            # not supported."},{"line_number":208,"context_line":"            if source_type \u003d\u003d \u0027volume\u0027 and volume_type:"},{"line_number":209,"context_line":"                raise exception.InvalidBDMFormat("},{"line_number":210,"context_line":"                    details\u003d_(\"Specifying volume type to existing volume is \""},{"line_number":211,"context_line":"                              \"not supported.\"))"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        api_dict.pop(\u0027uuid\u0027, None)"},{"line_number":214,"context_line":"        return cls(api_dict)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_2e4fbf69","line":211,"range":{"start_line":206,"start_character":0,"end_line":211,"end_character":48},"updated":"2018-10-12 04:41:01.000000000","message":"I didn\u0027t see a unittest for this case.","commit_id":"981f396fd79b4abf6b0036402896856f0ac1e842"}],"nova/compute/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5ca00d5d7a553bbe0faa8b183b7e3294ff773d4e","unresolved":false,"context_lines":[{"line_number":1374,"context_line":"        if volume_type and min_compute_version \u003c MIN_COMPUTE_VOLUME_TYPE:"},{"line_number":1375,"context_line":"            raise exception.VolumeTypeSupportNotYetAvailable()"},{"line_number":1376,"context_line":""},{"line_number":1377,"context_line":"    def _check_requested_volume_type(self, context, bdm, volume_type):"},{"line_number":1378,"context_line":"        \"\"\"If we are specifying a volume type, we need to get the"},{"line_number":1379,"context_line":"        volume type details from Cinder and make sure the ``volume_type``"},{"line_number":1380,"context_line":"        is available."}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_5d3bc1c6","line":1377,"updated":"2018-10-01 16:46:20.000000000","message":"I expected to see this in the patch before this one in the series, i.e. the compute API \"plumbing\" patch.","commit_id":"eab971aaa38d77d633c8aafa9d552933d4cac394"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"74fde4d91d339ee9d0271a418c1c21ea28f21835","unresolved":false,"context_lines":[{"line_number":1374,"context_line":"        if volume_type and min_compute_version \u003c MIN_COMPUTE_VOLUME_TYPE:"},{"line_number":1375,"context_line":"            raise exception.VolumeTypeSupportNotYetAvailable()"},{"line_number":1376,"context_line":""},{"line_number":1377,"context_line":"    def _check_requested_volume_type(self, context, bdm, volume_type):"},{"line_number":1378,"context_line":"        \"\"\"If we are specifying a volume type, we need to get the"},{"line_number":1379,"context_line":"        volume type details from Cinder and make sure the ``volume_type``"},{"line_number":1380,"context_line":"        is available."}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_106a031a","line":1377,"in_reply_to":"3f79a3b5_5d3bc1c6","updated":"2018-10-02 06:39:57.000000000","message":"Done","commit_id":"eab971aaa38d77d633c8aafa9d552933d4cac394"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5ca00d5d7a553bbe0faa8b183b7e3294ff773d4e","unresolved":false,"context_lines":[{"line_number":1379,"context_line":"        volume type details from Cinder and make sure the ``volume_type``"},{"line_number":1380,"context_line":"        is available."},{"line_number":1381,"context_line":"        \"\"\""},{"line_number":1382,"context_line":"        def _get_volume_type_by_name(context, volume_type):"},{"line_number":1383,"context_line":"            volume_types \u003d self.volume_api.get_all_volume_types(context)"},{"line_number":1384,"context_line":"            for vol_type in volume_types:"},{"line_number":1385,"context_line":"                if volume_type \u003d\u003d vol_type[\u0027name\u0027]:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_bd98d5cb","line":1382,"updated":"2018-10-01 16:46:20.000000000","message":"We should cache the results so we don\u0027t need to hit the cinder API for each requested volume type. It might even just be faster to list all volumes types available to the user once we process the first request for a volume type, and then create a dict to map the volume types to their ID or name for faster lookup.\n\nThis probably means passing a list or dict by reference to this method from _validate_bdm.","commit_id":"eab971aaa38d77d633c8aafa9d552933d4cac394"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"74fde4d91d339ee9d0271a418c1c21ea28f21835","unresolved":false,"context_lines":[{"line_number":1379,"context_line":"        volume type details from Cinder and make sure the ``volume_type``"},{"line_number":1380,"context_line":"        is available."},{"line_number":1381,"context_line":"        \"\"\""},{"line_number":1382,"context_line":"        def _get_volume_type_by_name(context, volume_type):"},{"line_number":1383,"context_line":"            volume_types \u003d self.volume_api.get_all_volume_types(context)"},{"line_number":1384,"context_line":"            for vol_type in volume_types:"},{"line_number":1385,"context_line":"                if volume_type \u003d\u003d vol_type[\u0027name\u0027]:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_3067ff53","line":1382,"in_reply_to":"3f79a3b5_bd98d5cb","updated":"2018-10-02 06:39:57.000000000","message":"Done","commit_id":"eab971aaa38d77d633c8aafa9d552933d4cac394"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5ca00d5d7a553bbe0faa8b183b7e3294ff773d4e","unresolved":false,"context_lines":[{"line_number":1433,"context_line":"            volume_type \u003d bdm.get(\u0027volume_type\u0027)"},{"line_number":1434,"context_line":"            if volume_type:"},{"line_number":1435,"context_line":"                # NOTE(Brin Zhang): Ensure the validity of volume_type"},{"line_number":1436,"context_line":"                self._check_requested_volume_type(context, bdm, volume_type)"},{"line_number":1437,"context_line":""},{"line_number":1438,"context_line":"                # NOTE(Brin Zhang): Just make sure the volume type can be"},{"line_number":1439,"context_line":"                # supported when the bdm.volume_type is not None in request."}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_bd73f5b3","line":1436,"updated":"2018-10-01 16:46:20.000000000","message":"This should probably go after _check_supports_volume_type because there is no point in validating the requested volume type if we can\u0027t support it yet.\n\n--\n\nAs noted above, for the first BDM with a requested volume_type, I\u0027d build a list or dict and pass it into the validation method. The list/dict should be defined above the for loop above on L1432 so we only initialize it once, e.g.:\n\nvolume_types \u003d None\nfor bdm in ...:\n  if volume_type:\n    self._check_requested_volume_type(...)\n    if not volume_types:\n      # initialize our cache of volume types\n      volume_types \u003d self.volume_api.get_all_volume_types(context)\n    self._check_supports_volume_type(..., volume_types)\n  ...","commit_id":"eab971aaa38d77d633c8aafa9d552933d4cac394"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"74fde4d91d339ee9d0271a418c1c21ea28f21835","unresolved":false,"context_lines":[{"line_number":1433,"context_line":"            volume_type \u003d bdm.get(\u0027volume_type\u0027)"},{"line_number":1434,"context_line":"            if volume_type:"},{"line_number":1435,"context_line":"                # NOTE(Brin Zhang): Ensure the validity of volume_type"},{"line_number":1436,"context_line":"                self._check_requested_volume_type(context, bdm, volume_type)"},{"line_number":1437,"context_line":""},{"line_number":1438,"context_line":"                # NOTE(Brin Zhang): Just make sure the volume type can be"},{"line_number":1439,"context_line":"                # supported when the bdm.volume_type is not None in request."}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_15daf577","line":1436,"in_reply_to":"3f79a3b5_bd73f5b3","updated":"2018-10-02 06:39:57.000000000","message":"Thanks Matt, I will optimize this.","commit_id":"eab971aaa38d77d633c8aafa9d552933d4cac394"}],"nova/tests/functional/api_sample_tests/api_samples/servers/v2.67/server-create-req.json.tpl":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df241fe9f993b10b32e54387248f48ba51ec4e6e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"server\" : {"},{"line_number":3,"context_line":"        \"name\" : \"device-tagging-server\","},{"line_number":4,"context_line":"        \"flavorRef\" : \"%(host)s/flavors/1\","}],"source_content_type":"text/x-smarty","patch_set":8,"id":"3f79a3b5_836ba5b7","line":1,"updated":"2018-10-08 23:54:23.000000000","message":"This API sample isn\u0027t being used in functional API samples tests anywhere. See nova/tests/functional/api_sample_tests/test_servers.py","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"9c127834db97485b2ae13101d3b11075384a73e5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"server\" : {"},{"line_number":3,"context_line":"        \"name\" : \"device-tagging-server\","},{"line_number":4,"context_line":"        \"flavorRef\" : \"%(host)s/flavors/1\","}],"source_content_type":"text/x-smarty","patch_set":8,"id":"3f79a3b5_f71c8815","line":1,"in_reply_to":"3f79a3b5_836ba5b7","updated":"2018-10-09 11:20:39.000000000","message":"Yeah, add the ServersSampleJson267Test in test_servers to run this API sample.","commit_id":"d5c4787a5c41a91fd86cc6658fa7c58ff0d69838"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8670038a7f6b759517463f479953864afa96664e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"server\" : {"},{"line_number":3,"context_line":"        \"name\" : \"device-tagging-server\","},{"line_number":4,"context_line":"        \"flavorRef\" : \"%(host)s/flavors/1\","},{"line_number":5,"context_line":"        \"networks\" : [{"},{"line_number":6,"context_line":"            \"uuid\" : \"ff608d40-75e9-48cb-b745-77bb55b5eaf2\","}],"source_content_type":"text/x-smarty","patch_set":10,"id":"3f79a3b5_c0ae212e","line":3,"range":{"start_line":3,"start_character":18,"end_line":3,"end_character":39},"updated":"2018-10-11 19:31:08.000000000","message":"Let\u0027s use a name more specific to the test, like bfv-server-with-volume-type.","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8670038a7f6b759517463f479953864afa96664e","unresolved":false,"context_lines":[{"line_number":8,"context_line":"        }],"},{"line_number":9,"context_line":"        \"block_device_mapping_v2\": [{"},{"line_number":10,"context_line":"            \"uuid\": \"%(image_id)s\","},{"line_number":11,"context_line":"            \"source_type\": \"image\","},{"line_number":12,"context_line":"            \"destination_type\": \"volume\","},{"line_number":13,"context_line":"            \"boot_index\": 0,"},{"line_number":14,"context_line":"            \"volume_size\": \"1\","},{"line_number":15,"context_line":"            \"tag\": \"disk1\","}],"source_content_type":"text/x-smarty","patch_set":10,"id":"3f79a3b5_20b6f58a","line":12,"range":{"start_line":11,"start_character":12,"end_line":12,"end_character":41},"updated":"2018-10-11 19:31:08.000000000","message":"I don\u0027t know how this is working when the API samples tests aren\u0027t using the cinder fixture...","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"672d6e5caf0479a102e9759bf277762dec8c1674","unresolved":false,"context_lines":[{"line_number":8,"context_line":"        }],"},{"line_number":9,"context_line":"        \"block_device_mapping_v2\": [{"},{"line_number":10,"context_line":"            \"uuid\": \"%(image_id)s\","},{"line_number":11,"context_line":"            \"source_type\": \"image\","},{"line_number":12,"context_line":"            \"destination_type\": \"volume\","},{"line_number":13,"context_line":"            \"boot_index\": 0,"},{"line_number":14,"context_line":"            \"volume_size\": \"1\","},{"line_number":15,"context_line":"            \"tag\": \"disk1\","}],"source_content_type":"text/x-smarty","patch_set":10,"id":"3f79a3b5_734845b3","line":12,"range":{"start_line":11,"start_character":12,"end_line":12,"end_character":41},"in_reply_to":"3f79a3b5_20b6f58a","updated":"2018-10-11 20:13:10.000000000","message":"The functional test isn\u0027t using the 2.67 samples because of this:\n\nhttps://github.com/openstack/nova/blob/7a5d7db7fc6ccfbd97508a1e8cd353ec25cf8ca2/nova/tests/functional/api_sample_tests/test_servers.py#L38","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"}],"nova/tests/functional/api_sample_tests/test_servers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"672d6e5caf0479a102e9759bf277762dec8c1674","unresolved":false,"context_lines":[{"line_number":353,"context_line":"            \u0027servers-details-with-changes-before\u0027, subs, response, 200)"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"class ServersSampleJson267Test(ServersSampleBase):"},{"line_number":357,"context_line":"    microversion \u003d \u00272.67\u0027"},{"line_number":358,"context_line":"    scenarios \u003d [(\u0027v2_67\u0027, {\u0027api_major_version\u0027: \u0027v2.1\u0027})]"},{"line_number":359,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_003f39df","line":356,"updated":"2018-10-11 20:13:10.000000000","message":"I don\u0027t understand how this is working without the cinder fixture...","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"88dc314607fb4253a56d4734a732f7daeed9b30a","unresolved":false,"context_lines":[{"line_number":353,"context_line":"            \u0027servers-details-with-changes-before\u0027, subs, response, 200)"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"class ServersSampleJson267Test(ServersSampleBase):"},{"line_number":357,"context_line":"    microversion \u003d \u00272.67\u0027"},{"line_number":358,"context_line":"    scenarios \u003d [(\u0027v2_67\u0027, {\u0027api_major_version\u0027: \u0027v2.1\u0027})]"},{"line_number":359,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_222835ec","line":356,"in_reply_to":"3f79a3b5_003f39df","updated":"2018-10-12 01:03:09.000000000","message":"Due to the lack of understanding of the logic of the function test, it is not covered by the test, I think I will do better next time.","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d44df3c3d5ddecc78804caccae6a410c1646c2d2","unresolved":false,"context_lines":[{"line_number":358,"context_line":"    scenarios \u003d [(\u0027v2_67\u0027, {\u0027api_major_version\u0027: \u0027v2.1\u0027})]"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    def test_servers_post(self):"},{"line_number":361,"context_line":"        return self._post_server(use_common_server_api_samples\u003dTrue)"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"class ServersUpdateSampleJsonTest(ServersSampleBase):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_b321fdb7","line":361,"range":{"start_line":361,"start_character":63,"end_line":361,"end_character":67},"updated":"2018-10-11 20:25:58.000000000","message":"Run with False and you\u0027ll see this blow up as I suspected.","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"88dc314607fb4253a56d4734a732f7daeed9b30a","unresolved":false,"context_lines":[{"line_number":358,"context_line":"    scenarios \u003d [(\u0027v2_67\u0027, {\u0027api_major_version\u0027: \u0027v2.1\u0027})]"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    def test_servers_post(self):"},{"line_number":361,"context_line":"        return self._post_server(use_common_server_api_samples\u003dTrue)"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"class ServersUpdateSampleJsonTest(ServersSampleBase):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_4208d18f","line":361,"range":{"start_line":361,"start_character":63,"end_line":361,"end_character":67},"in_reply_to":"3f79a3b5_b321fdb7","updated":"2018-10-12 01:03:09.000000000","message":"Yes, I will have a test by myself.","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"}],"nova/tests/unit/api/openstack/compute/test_serversV21.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d5aa8aa3aee1c4843e311833ce9ce8d0dc443bf8","unresolved":false,"context_lines":[{"line_number":6432,"context_line":"        self.assertIn(\u0027is not of type\u0027, six.text_type(ex))"},{"line_number":6433,"context_line":""},{"line_number":6434,"context_line":"    @mock.patch.object(compute_api.API, \u0027create\u0027,"},{"line_number":6435,"context_line":"                       side_effect\u003dexception.VolumeTypeNotFound("},{"line_number":6436,"context_line":"                           id_or_name\u003d\u0027fake-lvm-1\u0027))"},{"line_number":6437,"context_line":"    def test_create_instance_with_volume_type_not_found(self, mock_create):"},{"line_number":6438,"context_line":"        bdm_v2 \u003d [{"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_69a3b800","line":6435,"range":{"start_line":6435,"start_character":45,"end_line":6435,"end_character":63},"updated":"2018-10-09 16:41:39.000000000","message":"You need a similar test for VolumeTypeSupportNotYetAvailable.","commit_id":"73dedd16d5fbce8e71c801d10c7a02b3ac14a965"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"94f096a4361d9599e5e3f106c15f9f16d9dec39f","unresolved":false,"context_lines":[{"line_number":6432,"context_line":"        self.assertIn(\u0027is not of type\u0027, six.text_type(ex))"},{"line_number":6433,"context_line":""},{"line_number":6434,"context_line":"    @mock.patch.object(compute_api.API, \u0027create\u0027,"},{"line_number":6435,"context_line":"                       side_effect\u003dexception.VolumeTypeNotFound("},{"line_number":6436,"context_line":"                           id_or_name\u003d\u0027fake-lvm-1\u0027))"},{"line_number":6437,"context_line":"    def test_create_instance_with_volume_type_not_found(self, mock_create):"},{"line_number":6438,"context_line":"        bdm_v2 \u003d [{"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_55c3e206","line":6435,"range":{"start_line":6435,"start_character":45,"end_line":6435,"end_character":63},"in_reply_to":"3f79a3b5_69a3b800","updated":"2018-10-10 08:08:53.000000000","message":"Done","commit_id":"73dedd16d5fbce8e71c801d10c7a02b3ac14a965"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d412a54ff86a8ae82a38ff13201ed6b73e4e6aa2","unresolved":false,"context_lines":[{"line_number":6440,"context_line":"            api_version_request.APIVersionRequest(\u00272.66\u0027)"},{"line_number":6441,"context_line":"        ex \u003d self.assertRaises("},{"line_number":6442,"context_line":"            exception.ValidationError, self.controller.create, self.req,"},{"line_number":6443,"context_line":"            body\u003dself.block_device_mapping_v2)"},{"line_number":6444,"context_line":"        self.assertIn(\u0027is not of type\u0027, six.text_type(ex))"},{"line_number":6445,"context_line":""},{"line_number":6446,"context_line":"    @mock.patch.object(compute_api.API, \u0027create\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_76527338","line":6443,"range":{"start_line":6443,"start_character":12,"end_line":6443,"end_character":45},"updated":"2018-10-11 21:19:04.000000000","message":"wrong","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5d1214584700382258239ffa8434baff8d2075a8","unresolved":false,"context_lines":[{"line_number":6447,"context_line":"                       side_effect\u003dexception.VolumeTypeNotFound("},{"line_number":6448,"context_line":"                           id_or_name\u003d\u0027fake-lvm-1\u0027))"},{"line_number":6449,"context_line":"    def test_create_instance_with_volume_type_not_found(self, mock_create):"},{"line_number":6450,"context_line":"        self.req.api_version_request \u003d \\"},{"line_number":6451,"context_line":"            api_version_request.APIVersionRequest(\u00272.67\u0027)"},{"line_number":6452,"context_line":""},{"line_number":6453,"context_line":"        params \u003d {\u0027block_device_mapping_v2\u0027: self.block_device_mapping_v2}"},{"line_number":6454,"context_line":"        ex \u003d self.assertRaises(webob.exc.HTTPBadRequest,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_80434940","line":6451,"range":{"start_line":6450,"start_character":8,"end_line":6451,"end_character":57},"updated":"2018-10-11 18:55:29.000000000","message":"If you use self._create_instance_req(volume_type) then you don\u0027t need this.","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f5941a2f5dabb148ca261b37221ecc207dc265a9","unresolved":false,"context_lines":[{"line_number":6447,"context_line":"                       side_effect\u003dexception.VolumeTypeNotFound("},{"line_number":6448,"context_line":"                           id_or_name\u003d\u0027fake-lvm-1\u0027))"},{"line_number":6449,"context_line":"    def test_create_instance_with_volume_type_not_found(self, mock_create):"},{"line_number":6450,"context_line":"        self.req.api_version_request \u003d \\"},{"line_number":6451,"context_line":"            api_version_request.APIVersionRequest(\u00272.67\u0027)"},{"line_number":6452,"context_line":""},{"line_number":6453,"context_line":"        params \u003d {\u0027block_device_mapping_v2\u0027: self.block_device_mapping_v2}"},{"line_number":6454,"context_line":"        ex \u003d self.assertRaises(webob.exc.HTTPBadRequest,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_f6ae839f","line":6451,"range":{"start_line":6450,"start_character":8,"end_line":6451,"end_character":57},"in_reply_to":"3f79a3b5_80434940","updated":"2018-10-11 20:59:30.000000000","message":"Oh I guess _test_create_extra will just overwrite the request body created in _create_instance_req...it\u0027s a bit confusing.","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5d1214584700382258239ffa8434baff8d2075a8","unresolved":false,"context_lines":[{"line_number":6459,"context_line":"    @mock.patch(\u0027nova.objects.service.get_minimum_version_all_cells\u0027,"},{"line_number":6460,"context_line":"                return_value\u003dcompute_api.MIN_COMPUTE_VOLUME_TYPE - 1)"},{"line_number":6461,"context_line":"    def test_check_volume_type_new_inst_old_compute(self, get_min_version):"},{"line_number":6462,"context_line":"        self.req.api_version_request \u003d \\"},{"line_number":6463,"context_line":"            api_version_request.APIVersionRequest(\u00272.67\u0027)"},{"line_number":6464,"context_line":""},{"line_number":6465,"context_line":"        params \u003d {\u0027block_device_mapping_v2\u0027: self.block_device_mapping_v2}"},{"line_number":6466,"context_line":"        ex \u003d self.assertRaises(webob.exc.HTTPConflict,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_a040c533","line":6463,"range":{"start_line":6462,"start_character":8,"end_line":6463,"end_character":57},"updated":"2018-10-11 18:55:29.000000000","message":"same","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5d1214584700382258239ffa8434baff8d2075a8","unresolved":false,"context_lines":[{"line_number":6472,"context_line":"        volume_type \u003d \u0027\u0027"},{"line_number":6473,"context_line":"        self._create_instance_req(volume_type)"},{"line_number":6474,"context_line":""},{"line_number":6475,"context_line":"        self.req.api_version_request \u003d \\"},{"line_number":6476,"context_line":"            api_version_request.APIVersionRequest(\u00272.67\u0027)"},{"line_number":6477,"context_line":"        ex \u003d self.assertRaises(exception.ValidationError,"},{"line_number":6478,"context_line":"                               self.controller.create,"},{"line_number":6479,"context_line":"                               self.req, body\u003dself.block_device_mapping_v2)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_206ef5c7","line":6476,"range":{"start_line":6475,"start_character":8,"end_line":6476,"end_character":57},"updated":"2018-10-11 18:55:29.000000000","message":"_create_instance_req already does this","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f5941a2f5dabb148ca261b37221ecc207dc265a9","unresolved":false,"context_lines":[{"line_number":6476,"context_line":"            api_version_request.APIVersionRequest(\u00272.67\u0027)"},{"line_number":6477,"context_line":"        ex \u003d self.assertRaises(exception.ValidationError,"},{"line_number":6478,"context_line":"                               self.controller.create,"},{"line_number":6479,"context_line":"                               self.req, body\u003dself.block_device_mapping_v2)"},{"line_number":6480,"context_line":"        self.assertIn(\u0027is not of type\u0027, six.text_type(ex))"},{"line_number":6481,"context_line":""},{"line_number":6482,"context_line":"    def test_create_instance_with_none_volume_type(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_76ecb3bb","line":6479,"range":{"start_line":6479,"start_character":41,"end_line":6479,"end_character":74},"updated":"2018-10-11 20:59:30.000000000","message":"This is wrong, and why it fails when I wouldn\u0027t expect it to - this should be a server body, not a bdm.","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f5941a2f5dabb148ca261b37221ecc207dc265a9","unresolved":false,"context_lines":[{"line_number":6483,"context_line":"        self._create_instance_req()"},{"line_number":6484,"context_line":"        ex \u003d self.assertRaises("},{"line_number":6485,"context_line":"            exception.ValidationError, self.controller.create, self.req,"},{"line_number":6486,"context_line":"            body\u003dself.block_device_mapping_v2)"},{"line_number":6487,"context_line":"        self.assertIn(\u0027is not of type\u0027, six.text_type(ex))"},{"line_number":6488,"context_line":""},{"line_number":6489,"context_line":"    def test_create_instance_with_volume_type_too_long(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_562df7fa","line":6486,"range":{"start_line":6486,"start_character":12,"end_line":6486,"end_character":45},"updated":"2018-10-11 20:59:30.000000000","message":"same","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5d1214584700382258239ffa8434baff8d2075a8","unresolved":false,"context_lines":[{"line_number":6484,"context_line":"        ex \u003d self.assertRaises("},{"line_number":6485,"context_line":"            exception.ValidationError, self.controller.create, self.req,"},{"line_number":6486,"context_line":"            body\u003dself.block_device_mapping_v2)"},{"line_number":6487,"context_line":"        self.assertIn(\u0027is not of type\u0027, six.text_type(ex))"},{"line_number":6488,"context_line":""},{"line_number":6489,"context_line":"    def test_create_instance_with_volume_type_too_long(self):"},{"line_number":6490,"context_line":"        self._create_instance_req(\u0027X\u0027 * 256)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_609dcdb9","line":6487,"updated":"2018-10-11 18:55:29.000000000","message":"I don\u0027t understand why this fails, the schema allows string or null? Why doesn\u0027t the null part allow this?","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6d3ab101e1e363aa7be9908341934966fc2ac59d","unresolved":false,"context_lines":[{"line_number":6484,"context_line":"        ex \u003d self.assertRaises("},{"line_number":6485,"context_line":"            exception.ValidationError, self.controller.create, self.req,"},{"line_number":6486,"context_line":"            body\u003dself.block_device_mapping_v2)"},{"line_number":6487,"context_line":"        self.assertIn(\u0027is not of type\u0027, six.text_type(ex))"},{"line_number":6488,"context_line":""},{"line_number":6489,"context_line":"    def test_create_instance_with_volume_type_too_long(self):"},{"line_number":6490,"context_line":"        self._create_instance_req(\u0027X\u0027 * 256)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_20b035dc","line":6487,"in_reply_to":"3f79a3b5_609dcdb9","updated":"2018-10-11 19:15:40.000000000","message":"I\u0027m able to create a server with a null volume_type bdm:\n\ncurl -g -i -X POST http://199.204.45.149/compute/v2.1/servers -H \"Accept: application/json\" -H \"Content-Type: application/json\" -H \"OpenStack-API-Version: compute 2.67\" -H \"X-Auth-Token: $token\" -H \"X-OpenStack-Nova-API-Version: 2.67\" -d \u0027{\"server\": {\"name\": \"bfv-server-null-vol-type\", \"imageRef\": \"\", \"block_device_mapping_v2\": [{\"boot_index\": \"0\", \"uuid\": \"b9cdd407-14fc-42fb-beb9-d53988d866e3\", \"volume_size\": \"1\", \"volume_type\": null, \"source_type\": \"image\", \"destination_type\": \"volume\", \"delete_on_termination\": true}], \"flavorRef\": \"1\", \"max_count\": 1, \"min_count\": 1, \"networks\": \"none\"}}\u0027\nHTTP/1.1 202 Accepted\n\nSomething must be wrong with the test?","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f5941a2f5dabb148ca261b37221ecc207dc265a9","unresolved":false,"context_lines":[{"line_number":6490,"context_line":"        self._create_instance_req(\u0027X\u0027 * 256)"},{"line_number":6491,"context_line":"        ex \u003d self.assertRaises(exception.ValidationError,"},{"line_number":6492,"context_line":"                               self.controller.create,"},{"line_number":6493,"context_line":"                               self.req, body\u003dself.block_device_mapping_v2)"},{"line_number":6494,"context_line":"        self.assertIn(\u0027is not of type\u0027, six.text_type(ex))"},{"line_number":6495,"context_line":""},{"line_number":6496,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_96e94fac","line":6493,"range":{"start_line":6493,"start_character":41,"end_line":6493,"end_character":74},"updated":"2018-10-11 20:59:30.000000000","message":"same","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5d1214584700382258239ffa8434baff8d2075a8","unresolved":false,"context_lines":[{"line_number":6491,"context_line":"        ex \u003d self.assertRaises(exception.ValidationError,"},{"line_number":6492,"context_line":"                               self.controller.create,"},{"line_number":6493,"context_line":"                               self.req, body\u003dself.block_device_mapping_v2)"},{"line_number":6494,"context_line":"        self.assertIn(\u0027is not of type\u0027, six.text_type(ex))"},{"line_number":6495,"context_line":""},{"line_number":6496,"context_line":""},{"line_number":6497,"context_line":"class ServersControllerCreateTestWithMock(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_80dfc965","line":6494,"range":{"start_line":6494,"start_character":23,"end_line":6494,"end_character":37},"updated":"2018-10-11 18:55:29.000000000","message":"Hmm, this doesn\u0027t look right, it shouldn\u0027t be a type violation, it should be a length violation. Is the schema correct?","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1a8c2c3a270ba992ee3006f1ce280ef9bfbf4811","unresolved":false,"context_lines":[{"line_number":6488,"context_line":"                               self._test_create_extra, params)"},{"line_number":6489,"context_line":"        self.assertIn(\u0027is too long\u0027, six.text_type(ex))"},{"line_number":6490,"context_line":""},{"line_number":6491,"context_line":""},{"line_number":6492,"context_line":"class ServersControllerCreateTestWithMock(test.TestCase):"},{"line_number":6493,"context_line":"    image_uuid \u003d \u002776fa36fc-c930-4bf3-8c8a-ea2a2420deb6\u0027"},{"line_number":6494,"context_line":"    flavor_ref \u003d \u0027http://localhost/123/flavors/3\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_913e3924","line":6491,"updated":"2018-10-11 21:53:04.000000000","message":"No test for local?","commit_id":"981f396fd79b4abf6b0036402896856f0ac1e842"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bd6253c614c3adf8b0c2788955dcc904d6c295ef","unresolved":false,"context_lines":[{"line_number":6488,"context_line":"                               self._test_create_extra, params)"},{"line_number":6489,"context_line":"        self.assertIn(\u0027is too long\u0027, six.text_type(ex))"},{"line_number":6490,"context_line":""},{"line_number":6491,"context_line":""},{"line_number":6492,"context_line":"class ServersControllerCreateTestWithMock(test.TestCase):"},{"line_number":6493,"context_line":"    image_uuid \u003d \u002776fa36fc-c930-4bf3-8c8a-ea2a2420deb6\u0027"},{"line_number":6494,"context_line":"    flavor_ref \u003d \u0027http://localhost/123/flavors/3\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_6ce946e2","line":6491,"in_reply_to":"3f79a3b5_913e3924","updated":"2018-10-11 22:16:45.000000000","message":"It\u0027s in the next module.","commit_id":"981f396fd79b4abf6b0036402896856f0ac1e842"}],"nova/tests/unit/test_block_device.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d5aa8aa3aee1c4843e311833ce9ce8d0dc443bf8","unresolved":false,"context_lines":[{"line_number":605,"context_line":"                    \u0027destination_type\u0027: \u0027local\u0027,"},{"line_number":606,"context_line":"                    \u0027uuid\u0027: \u0027fake-volume-id-1\u0027,"},{"line_number":607,"context_line":"                    \u0027volume_type\u0027: \u0027fake-lvm-1\u0027}"},{"line_number":608,"context_line":"        self.assertRaises(exception.InvalidBDMFormat,"},{"line_number":609,"context_line":"                          block_device.BlockDeviceDict.from_api, api_dict,"},{"line_number":610,"context_line":"                          False)"},{"line_number":611,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_49c7dc99","line":608,"updated":"2018-10-09 16:41:39.000000000","message":"Please assert the exception is what we expect by doing something like this:\n\nex \u003d self.assertRaises(exception.InvalidBDMFormat,...)\nself.assertIn(\u0027something in the expected error message\u0027, six.text_type(ex))","commit_id":"73dedd16d5fbce8e71c801d10c7a02b3ac14a965"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"94f096a4361d9599e5e3f106c15f9f16d9dec39f","unresolved":false,"context_lines":[{"line_number":605,"context_line":"                    \u0027destination_type\u0027: \u0027local\u0027,"},{"line_number":606,"context_line":"                    \u0027uuid\u0027: \u0027fake-volume-id-1\u0027,"},{"line_number":607,"context_line":"                    \u0027volume_type\u0027: \u0027fake-lvm-1\u0027}"},{"line_number":608,"context_line":"        self.assertRaises(exception.InvalidBDMFormat,"},{"line_number":609,"context_line":"                          block_device.BlockDeviceDict.from_api, api_dict,"},{"line_number":610,"context_line":"                          False)"},{"line_number":611,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_6a1ddcbc","line":608,"in_reply_to":"3f79a3b5_49c7dc99","updated":"2018-10-10 08:08:53.000000000","message":"Done","commit_id":"73dedd16d5fbce8e71c801d10c7a02b3ac14a965"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d5aa8aa3aee1c4843e311833ce9ce8d0dc443bf8","unresolved":false,"context_lines":[{"line_number":615,"context_line":"                    \u0027destination_type\u0027: \u0027local\u0027,"},{"line_number":616,"context_line":"                    \u0027uuid\u0027: \u0027fake-volume-id-1\u0027,"},{"line_number":617,"context_line":"                    \u0027volume_type\u0027: \u0027fake-lvm-1\u0027}"},{"line_number":618,"context_line":"        self.assertRaises(exception.InvalidBDMFormat,"},{"line_number":619,"context_line":"                          block_device.BlockDeviceDict.from_api, api_dict,"},{"line_number":620,"context_line":"                          False)"},{"line_number":621,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_69cad8a0","line":618,"updated":"2018-10-09 16:41:39.000000000","message":"same","commit_id":"73dedd16d5fbce8e71c801d10c7a02b3ac14a965"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"94f096a4361d9599e5e3f106c15f9f16d9dec39f","unresolved":false,"context_lines":[{"line_number":615,"context_line":"                    \u0027destination_type\u0027: \u0027local\u0027,"},{"line_number":616,"context_line":"                    \u0027uuid\u0027: \u0027fake-volume-id-1\u0027,"},{"line_number":617,"context_line":"                    \u0027volume_type\u0027: \u0027fake-lvm-1\u0027}"},{"line_number":618,"context_line":"        self.assertRaises(exception.InvalidBDMFormat,"},{"line_number":619,"context_line":"                          block_device.BlockDeviceDict.from_api, api_dict,"},{"line_number":620,"context_line":"                          False)"},{"line_number":621,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_8a1878cd","line":618,"in_reply_to":"3f79a3b5_69cad8a0","updated":"2018-10-10 08:08:53.000000000","message":"Done","commit_id":"73dedd16d5fbce8e71c801d10c7a02b3ac14a965"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"a31776fce5aee033b4464ad4e0412190c91b4157","unresolved":false,"context_lines":[{"line_number":600,"context_line":"        self.assertEqual(retexp,"},{"line_number":601,"context_line":"                         block_device.BlockDeviceDict.from_api(api_dict, True))"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"    def test_from_api_invalid_oneof_image_id_or_destination_local_mapping("},{"line_number":604,"context_line":"            self):"},{"line_number":605,"context_line":"        api_dict \u003d {\u0027id\u0027: 1,"},{"line_number":606,"context_line":"                    \u0027source_type\u0027: \u0027image\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_d9460823","line":603,"updated":"2018-10-12 14:39:46.000000000","message":"I don\u0027t think I understand this new method name. Did you mean to make it \u0027test_from_api_invalid_image_to_destination_local_mapping\u0027 instead?","commit_id":"c7f4190af26ad106bea29f66770b9569ab3fc4e1"}],"releasenotes/notes/boot-instance-specific-storage-backend-c34ee0a871efec3b.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5ca00d5d7a553bbe0faa8b183b7e3294ff773d4e","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    to ``nova-compute`` (via the BlockDeviceMapping object) where the volume"},{"line_number":10,"context_line":"    gets created and then attached to the new server."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    In compute rpc version 5.0, add ``nova-compute`` service version 36 to"},{"line_number":13,"context_line":"    support ``volume_type``. When you upgrade to ``nova-compute`` you need"},{"line_number":14,"context_line":"    a version greater than or equal to this ``nova-compute`` service version"},{"line_number":15,"context_line":"    to use the ``volume_type`` parameter."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3f79a3b5_1d6469b2","line":15,"range":{"start_line":12,"start_character":4,"end_line":15,"end_character":41},"updated":"2018-10-01 16:46:20.000000000","message":"This won\u0027t mean anything to operators. Re-word this as,\n\n\"The nova-api service will reject server create requests with a specified ``volume_type`` until all nova-compute services are upgraded to Stein.\"","commit_id":"eab971aaa38d77d633c8aafa9d552933d4cac394"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"74fde4d91d339ee9d0271a418c1c21ea28f21835","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    to ``nova-compute`` (via the BlockDeviceMapping object) where the volume"},{"line_number":10,"context_line":"    gets created and then attached to the new server."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    In compute rpc version 5.0, add ``nova-compute`` service version 36 to"},{"line_number":13,"context_line":"    support ``volume_type``. When you upgrade to ``nova-compute`` you need"},{"line_number":14,"context_line":"    a version greater than or equal to this ``nova-compute`` service version"},{"line_number":15,"context_line":"    to use the ``volume_type`` parameter."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3f79a3b5_5055db50","line":15,"range":{"start_line":12,"start_character":4,"end_line":15,"end_character":41},"in_reply_to":"3f79a3b5_1d6469b2","updated":"2018-10-02 06:39:57.000000000","message":"Done","commit_id":"eab971aaa38d77d633c8aafa9d552933d4cac394"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f9b68f38276a8653e8d0039ba647b24f91e2337b","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Microversion 2.67 adds the optional parameter ``volume_type`` to"},{"line_number":4,"context_line":"    block_device_mapping_v2, which can be used to specify ``volume_type``"},{"line_number":5,"context_line":"    when booting a server."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    This would only apply to BDMs with ``source_type`` of blank, image and"},{"line_number":8,"context_line":"    snapshot. The ``volume_type`` will be passed from ``nova-api`` through"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"3f79a3b5_5c48c3b2","line":5,"range":{"start_line":5,"start_character":9,"end_line":5,"end_character":16},"updated":"2018-10-11 14:32:10.000000000","message":"creating (boot is the nova CLI term)","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f9b68f38276a8653e8d0039ba647b24f91e2337b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    block_device_mapping_v2, which can be used to specify ``volume_type``"},{"line_number":5,"context_line":"    when booting a server."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    This would only apply to BDMs with ``source_type`` of blank, image and"},{"line_number":8,"context_line":"    snapshot. The ``volume_type`` will be passed from ``nova-api`` through"},{"line_number":9,"context_line":"    to ``nova-compute`` (via the BlockDeviceMapping object) where the volume"},{"line_number":10,"context_line":"    gets created and then attached to the new server."},{"line_number":11,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":10,"id":"3f79a3b5_dc54d358","line":8,"range":{"start_line":7,"start_character":4,"end_line":8,"end_character":13},"updated":"2018-10-11 14:32:10.000000000","message":"and ``destination_type`` of ``volume``.","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f9b68f38276a8653e8d0039ba647b24f91e2337b","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    when booting a server."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    This would only apply to BDMs with ``source_type`` of blank, image and"},{"line_number":8,"context_line":"    snapshot. The ``volume_type`` will be passed from ``nova-api`` through"},{"line_number":9,"context_line":"    to ``nova-compute`` (via the BlockDeviceMapping object) where the volume"},{"line_number":10,"context_line":"    gets created and then attached to the new server."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    The nova-api service will reject server create requests with a specified"},{"line_number":13,"context_line":"    ``volume_type`` until all nova-compute services are upgraded to Stein."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"3f79a3b5_fc598f8c","line":10,"range":{"start_line":8,"start_character":14,"end_line":10,"end_character":53},"updated":"2018-10-11 14:32:10.000000000","message":"I think we can drop the second sentence here. The internal mechanics don\u0027t really matter to people reading the release note.","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f9b68f38276a8653e8d0039ba647b24f91e2337b","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    to ``nova-compute`` (via the BlockDeviceMapping object) where the volume"},{"line_number":10,"context_line":"    gets created and then attached to the new server."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    The nova-api service will reject server create requests with a specified"},{"line_number":13,"context_line":"    ``volume_type`` until all nova-compute services are upgraded to Stein."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"3f79a3b5_1cc48b0d","line":12,"range":{"start_line":12,"start_character":8,"end_line":12,"end_character":24},"updated":"2018-10-11 14:32:10.000000000","message":"compute API","commit_id":"2f03ff89af55abd2b87fbafdd93c9cf8b0763ec0"}]}
