)]}'
{"api-ref/source/os-interface.inc":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bcb7565dc42805e2cf6a08e2d4da8a4b3134c53f","unresolved":false,"context_lines":[{"line_number":85,"context_line":".. literalinclude:: ../../doc/api_samples/os-attach-interfaces/attach-interfaces-create-req.json"},{"line_number":86,"context_line":"   :language: javascript"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"**Example Create Interface and tag it (v2.43)**"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":".. literalinclude:: ../../doc/api_samples/os-attach-interfaces/v2.43/attach-interfaces-create-req.json"},{"line_number":91,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":27,"id":"9a30ddce_90da8c15","line":88,"range":{"start_line":88,"start_character":2,"end_line":88,"end_character":37},"updated":"2017-03-13 15:30:44.000000000","message":"Consistency: Do we need to put \u0027JSON request\u0027 after this (superfluous though it may seem)","commit_id":"68e482433387d5bae8fef85ed4faf256fdfe87c9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bcb7565dc42805e2cf6a08e2d4da8a4b3134c53f","unresolved":false,"context_lines":[{"line_number":85,"context_line":".. literalinclude:: ../../doc/api_samples/os-attach-interfaces/attach-interfaces-create-req.json"},{"line_number":86,"context_line":"   :language: javascript"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"**Example Create Interface and tag it (v2.43)**"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":".. literalinclude:: ../../doc/api_samples/os-attach-interfaces/v2.43/attach-interfaces-create-req.json"},{"line_number":91,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":27,"id":"9a30ddce_b0beb0ab","line":88,"range":{"start_line":88,"start_character":38,"end_line":88,"end_character":45},"updated":"2017-03-13 15:30:44.000000000","message":"Consistency: is there a standard way to mark up minimum versions in the docs?","commit_id":"68e482433387d5bae8fef85ed4faf256fdfe87c9"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c38d102d88596ec5633a120844ed9d7c05d9515e","unresolved":false,"context_lines":[{"line_number":85,"context_line":".. literalinclude:: ../../doc/api_samples/os-attach-interfaces/attach-interfaces-create-req.json"},{"line_number":86,"context_line":"   :language: javascript"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"**Example Create Interface and tag it (v2.43)**"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":".. literalinclude:: ../../doc/api_samples/os-attach-interfaces/v2.43/attach-interfaces-create-req.json"},{"line_number":91,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":27,"id":"3a1ff146_0874809a","line":88,"range":{"start_line":88,"start_character":38,"end_line":88,"end_character":45},"in_reply_to":"9a30ddce_b0beb0ab","updated":"2017-03-15 11:03:51.000000000","message":"It\u0027s really all over the place, for both your points:\n\nhttps://github.com/openstack/nova/blob/master/api-ref/source/os-keypairs.inc#L42\n\nhttps://github.com/openstack/nova/blob/master/api-ref/source/servers.inc#L319\n\nhttps://github.com/openstack/nova/blob/master/api-ref/source/os-hypervisors.inc#L202\n\nBut since 2 out of the 3 of the above seem to be sticking with the \"\u003cExample blah\u003e (version): JSON (request|response)\" format, I\u0027ll update my stuff here.","commit_id":"68e482433387d5bae8fef85ed4faf256fdfe87c9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bcb7565dc42805e2cf6a08e2d4da8a4b3134c53f","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":".. literalinclude:: ../../doc/api_samples/os-attach-interfaces/attach-interfaces-create-resp.json"},{"line_number":110,"context_line":"   :language: javascript"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"Show Port Interface Details"},{"line_number":113,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":27,"id":"9a30ddce_1034dc47","line":111,"updated":"2017-03-13 15:30:44.000000000","message":"Shouldn\u0027t you use the sample response here?","commit_id":"68e482433387d5bae8fef85ed4faf256fdfe87c9"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c38d102d88596ec5633a120844ed9d7c05d9515e","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":".. literalinclude:: ../../doc/api_samples/os-attach-interfaces/attach-interfaces-create-resp.json"},{"line_number":110,"context_line":"   :language: javascript"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"Show Port Interface Details"},{"line_number":113,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":27,"id":"3a1ff146_085e40e9","line":111,"in_reply_to":"9a30ddce_1034dc47","updated":"2017-03-15 11:03:51.000000000","message":"The response isn\u0027t changed as we don\u0027t include the new tags in it.","commit_id":"68e482433387d5bae8fef85ed4faf256fdfe87c9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f80a385a2fe34747cd556f2c2dbbe5b433b6893a","unresolved":false,"context_lines":[{"line_number":71,"context_line":"  - net_id: net_id"},{"line_number":72,"context_line":"  - fixed_ips: fixed_ips"},{"line_number":73,"context_line":"  - ip_address: ip_address_req"},{"line_number":74,"context_line":"  - tag: device_tag_nic"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"**Example Create Interface: JSON request**"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":58,"id":"5f201791_c6e8e217","line":74,"range":{"start_line":74,"start_character":9,"end_line":74,"end_character":23},"updated":"2017-06-20 22:41:57.000000000","message":"This needs to be specific to 2.49, so will need to be a new parameter with min_version: 2.49.","commit_id":"34fbcc0681fce830fb92bec47342d4287e3da7d1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"5be47000da207378933bf6c1df3e01a4810938ea","unresolved":false,"context_lines":[{"line_number":71,"context_line":"  - net_id: net_id"},{"line_number":72,"context_line":"  - fixed_ips: fixed_ips"},{"line_number":73,"context_line":"  - ip_address: ip_address_req"},{"line_number":74,"context_line":"  - tag: device_tag_nic"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"**Example Create Interface: JSON request**"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":58,"id":"5f201791_62fd6839","line":74,"range":{"start_line":74,"start_character":9,"end_line":74,"end_character":23},"in_reply_to":"5f201791_c6e8e217","updated":"2017-06-21 12:49:56.000000000","message":"Done","commit_id":"34fbcc0681fce830fb92bec47342d4287e3da7d1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1b43ff77cfbbd74c813b33424dea6b799d8ee87f","unresolved":false,"context_lines":[{"line_number":85,"context_line":".. literalinclude:: ../../doc/api_samples/os-attach-interfaces/attach-interfaces-create-req.json"},{"line_number":86,"context_line":"   :language: javascript"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"**Example Create Interface and tag it (v2.49): JSON request**"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":".. literalinclude:: ../../doc/api_samples/os-attach-interfaces/v2.49/attach-interfaces-create-req.json"},{"line_number":91,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":73,"id":"5f201791_d807d617","line":88,"range":{"start_line":88,"start_character":17,"end_line":88,"end_character":37},"updated":"2017-06-28 02:21:38.000000000","message":"nit: Example Create Tagged Interface","commit_id":"9dd47129d1fa1699446da43f14514bc077a518d5"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"1cb1e487eba32f5de6b978a7e5fdf39ac61e794e","unresolved":false,"context_lines":[{"line_number":85,"context_line":".. literalinclude:: ../../doc/api_samples/os-attach-interfaces/attach-interfaces-create-req.json"},{"line_number":86,"context_line":"   :language: javascript"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"**Example Create Interface and tag it (v2.49): JSON request**"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":".. literalinclude:: ../../doc/api_samples/os-attach-interfaces/v2.49/attach-interfaces-create-req.json"},{"line_number":91,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":73,"id":"5f201791_11be48fe","line":88,"range":{"start_line":88,"start_character":17,"end_line":88,"end_character":37},"in_reply_to":"5f201791_d807d617","updated":"2017-06-28 06:23:56.000000000","message":"Done","commit_id":"9dd47129d1fa1699446da43f14514bc077a518d5"}],"api-ref/source/os-volume-attachments.inc":[{"author":{"_account_id":15293,"name":"Karen Bradshaw","email":"kbhawkey@gmail.com","username":"karenb"},"change_message_id":"7c4db2897cc677e34c3274949685ae1211edb120","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":" Servers with volume attachments (servers, os-volume\\_attachments)"},{"line_number":5,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Attaches volumes that are created through the volume API to server"},{"line_number":8,"context_line":"instances. Also, lists volume attachments for a server instance, shows"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"5a74a57a_4f2fac87","line":5,"updated":"2016-11-28 17:21:53.000000000","message":"Can you clean-up the extra backslash in the header?\nos-volume\\_attachments","commit_id":"8ad6fd33e3c155eb2d5c8f5f388a9988c3b3276f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"27a4a1597396dddbb67ea585bd1f566a3f626dcc","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":" Servers with volume attachments (servers, os-volume\\_attachments)"},{"line_number":5,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Attaches volumes that are created through the volume API to server"},{"line_number":8,"context_line":"instances. Also, lists volume attachments for a server instance, shows"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"da4df55a_24ee83ec","line":5,"in_reply_to":"5a74a57a_4f2fac87","updated":"2016-12-24 08:02:54.000000000","message":"I think that there\u0027s on purpose to escape the underscore, no?","commit_id":"8ad6fd33e3c155eb2d5c8f5f388a9988c3b3276f"},{"author":{"_account_id":15293,"name":"Karen Bradshaw","email":"kbhawkey@gmail.com","username":"karenb"},"change_message_id":"7c4db2897cc677e34c3274949685ae1211edb120","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  - volumeId: volumeId"},{"line_number":67,"context_line":"  - device: device"},{"line_number":68,"context_line":"  - tag: device_tag"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"**Example Attach a volume to an instance: JSON request**"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":".. literalinclude:: ../../doc/api_samples/os-volumes/attach-volume-to-server-req.json"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"5a74a57a_0f121457","line":69,"updated":"2016-11-28 17:21:53.000000000","message":"could you list the parameters as\nvolumeAttachment.tag\nvolumeAttachment.volumeId\nvolumeAttachment.device","commit_id":"8ad6fd33e3c155eb2d5c8f5f388a9988c3b3276f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"27a4a1597396dddbb67ea585bd1f566a3f626dcc","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  - volumeId: volumeId"},{"line_number":67,"context_line":"  - device: device"},{"line_number":68,"context_line":"  - tag: device_tag"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"**Example Attach a volume to an instance: JSON request**"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":".. literalinclude:: ../../doc/api_samples/os-volumes/attach-volume-to-server-req.json"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"da4df55a_e4cabb6d","line":69,"in_reply_to":"5a74a57a_0f121457","updated":"2016-12-24 08:02:54.000000000","message":"I\u0027d rather stay consistent with existing code.","commit_id":"8ad6fd33e3c155eb2d5c8f5f388a9988c3b3276f"},{"author":{"_account_id":15293,"name":"Karen Bradshaw","email":"kbhawkey@gmail.com","username":"karenb"},"change_message_id":"cda87d4480358c435aa42d118381a1bb904e1188","unresolved":false,"context_lines":[{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":" Servers with volume attachments (servers, os-volume_attachments)"},{"line_number":5,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Attaches volumes that are created through the volume API to server"},{"line_number":8,"context_line":"instances. Also, lists volume attachments for a server instance, shows"},{"line_number":9,"context_line":"details for a volume attachment, and detaches a volume."}],"source_content_type":"text/x-c++src","patch_set":4,"id":"da4df55a_2354991f","line":6,"updated":"2016-12-26 18:52:01.000000000","message":"Also, is the resource oddly named os-volume_attachments OR\nshould it be os-volume-attachments?","commit_id":"32e1e59b1adfaf7f66ad6bbb1ff06cd88d7c8d8e"},{"author":{"_account_id":15293,"name":"Karen Bradshaw","email":"kbhawkey@gmail.com","username":"karenb"},"change_message_id":"cda87d4480358c435aa42d118381a1bb904e1188","unresolved":false,"context_lines":[{"line_number":38,"context_line":"  - volumeId: volumeId_resp"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"**Example List volume attachments for an instance: JSON response**"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":".. literalinclude:: ../../doc/api_samples/os-volumes/list-volume-attachments-resp.json"},{"line_number":43,"context_line":"   :language: javascript"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":4,"id":"da4df55a_a315e949","line":41,"updated":"2016-12-26 18:52:01.000000000","message":"Would be good if the Example titles did not contain the extra JSON request|response info. All request and responses are in JSON format.","commit_id":"32e1e59b1adfaf7f66ad6bbb1ff06cd88d7c8d8e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bcb7565dc42805e2cf6a08e2d4da8a4b3134c53f","unresolved":false,"context_lines":[{"line_number":77,"context_line":"**Example Attach a volume to an instance and tag it (v2.43)**"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":".. literalinclude:: ../../doc/api_samples/os-volumes/v2.43/attach-volume-to-server-req.json"},{"line_number":80,"context_line":"   :language: javascript"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Response"},{"line_number":83,"context_line":"--------"}],"source_content_type":"text/x-c++src","patch_set":27,"id":"9a30ddce_50fbb478","line":80,"updated":"2017-03-13 15:30:44.000000000","message":"Same comments as previous page","commit_id":"68e482433387d5bae8fef85ed4faf256fdfe87c9"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c38d102d88596ec5633a120844ed9d7c05d9515e","unresolved":false,"context_lines":[{"line_number":77,"context_line":"**Example Attach a volume to an instance and tag it (v2.43)**"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":".. literalinclude:: ../../doc/api_samples/os-volumes/v2.43/attach-volume-to-server-req.json"},{"line_number":80,"context_line":"   :language: javascript"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Response"},{"line_number":83,"context_line":"--------"}],"source_content_type":"text/x-c++src","patch_set":27,"id":"3a1ff146_c86c289f","line":80,"in_reply_to":"9a30ddce_50fbb478","updated":"2017-03-15 11:03:51.000000000","message":"Done","commit_id":"68e482433387d5bae8fef85ed4faf256fdfe87c9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f80a385a2fe34747cd556f2c2dbbe5b433b6893a","unresolved":false,"context_lines":[{"line_number":67,"context_line":"  - volumeAttachment: volumeAttachment_post"},{"line_number":68,"context_line":"  - volumeId: volumeId"},{"line_number":69,"context_line":"  - device: device"},{"line_number":70,"context_line":"  - tag: device_tag_bdm"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"**Example Attach a volume to an instance: JSON request**"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":58,"id":"5f201791_06913a9a","line":70,"range":{"start_line":70,"start_character":9,"end_line":70,"end_character":23},"updated":"2017-06-20 22:41:57.000000000","message":"You\u0027re going to need a 2.49-specific parameter for this, since this says it\u0027s new on 2.32, but that\u0027s for server create, not volume attach. Also, if we restrict attaching volumes with tags to instances that are not shelved-offloaded, that needs to be mentioned in the description of this parameter.","commit_id":"34fbcc0681fce830fb92bec47342d4287e3da7d1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"5be47000da207378933bf6c1df3e01a4810938ea","unresolved":false,"context_lines":[{"line_number":67,"context_line":"  - volumeAttachment: volumeAttachment_post"},{"line_number":68,"context_line":"  - volumeId: volumeId"},{"line_number":69,"context_line":"  - device: device"},{"line_number":70,"context_line":"  - tag: device_tag_bdm"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"**Example Attach a volume to an instance: JSON request**"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":58,"id":"5f201791_cd746d9c","line":70,"range":{"start_line":70,"start_character":9,"end_line":70,"end_character":23},"in_reply_to":"5f201791_06913a9a","updated":"2017-06-21 12:49:56.000000000","message":"Done for the 2.49 part. Let\u0027s wait for consensus on how we handle shelved/offloaded for the rest.","commit_id":"34fbcc0681fce830fb92bec47342d4287e3da7d1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"220f74590efc9e9896030c9cf08eae2831101e91","unresolved":false,"context_lines":[{"line_number":67,"context_line":"  - volumeAttachment: volumeAttachment_post"},{"line_number":68,"context_line":"  - volumeId: volumeId"},{"line_number":69,"context_line":"  - device: device"},{"line_number":70,"context_line":"  - tag: device_tag_bdm"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"**Example Attach a volume to an instance: JSON request**"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":58,"id":"5f201791_9a9fb24f","line":70,"range":{"start_line":70,"start_character":9,"end_line":70,"end_character":23},"in_reply_to":"5f201791_cd746d9c","updated":"2017-06-22 07:13:31.000000000","message":"Now that we\u0027ve decided to not support tagged attach for shelved offloaded, I\u0027ve adjusted the parameter description.","commit_id":"34fbcc0681fce830fb92bec47342d4287e3da7d1"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":15293,"name":"Karen Bradshaw","email":"kbhawkey@gmail.com","username":"karenb"},"change_message_id":"7c4db2897cc677e34c3274949685ae1211edb120","unresolved":false,"context_lines":[{"line_number":1479,"context_line":"device_tag:"},{"line_number":1480,"context_line":"  description: |"},{"line_number":1481,"context_line":"    An arbitrary string tag used to identify a virtual network interface or block device."},{"line_number":1482,"context_line":"  in: body"},{"line_number":1483,"context_line":"  required: false"},{"line_number":1484,"context_line":"  type: string"},{"line_number":1485,"context_line":"  min_version: 2.32"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"5a74a57a_4c725a12","line":1482,"updated":"2016-11-28 17:21:53.000000000","message":"Do you need `tag`?\nAn arbitrary string used to identify ...\n\nIs the min_version correct?","commit_id":"8ad6fd33e3c155eb2d5c8f5f388a9988c3b3276f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"27a4a1597396dddbb67ea585bd1f566a3f626dcc","unresolved":false,"context_lines":[{"line_number":1479,"context_line":"device_tag:"},{"line_number":1480,"context_line":"  description: |"},{"line_number":1481,"context_line":"    An arbitrary string tag used to identify a virtual network interface or block device."},{"line_number":1482,"context_line":"  in: body"},{"line_number":1483,"context_line":"  required: false"},{"line_number":1484,"context_line":"  type: string"},{"line_number":1485,"context_line":"  min_version: 2.32"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"da4df55a_24c5a35a","line":1482,"in_reply_to":"5a74a57a_4c725a12","updated":"2016-12-24 08:02:54.000000000","message":"Good point on \u0027string tag\u0027, done.\n\n2.32 introduced tags for boot devices, I don\u0027t see what else I can put here.","commit_id":"8ad6fd33e3c155eb2d5c8f5f388a9988c3b3276f"},{"author":{"_account_id":15293,"name":"Karen Bradshaw","email":"kbhawkey@gmail.com","username":"karenb"},"change_message_id":"cda87d4480358c435aa42d118381a1bb904e1188","unresolved":false,"context_lines":[{"line_number":1501,"context_line":"  in: body"},{"line_number":1502,"context_line":"  required: false"},{"line_number":1503,"context_line":"  type: string"},{"line_number":1504,"context_line":"  min_version: 2.32"},{"line_number":1505,"context_line":"disabled_reason_body:"},{"line_number":1506,"context_line":"  description: |"},{"line_number":1507,"context_line":"    The reason for disabling a service."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"da4df55a_9e559cfb","line":1504,"updated":"2016-12-26 18:52:01.000000000","message":"If this min_version is not correct for this instance of device_tag then you could make another device_tag variable, for example, device_tag_volume_attach or some_other_name.\nOtherwise, it seems confusing to see the min_version here for this variable in the table, but the Example says version 2.41?","commit_id":"32e1e59b1adfaf7f66ad6bbb1ff06cd88d7c8d8e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1b43ff77cfbbd74c813b33424dea6b799d8ee87f","unresolved":false,"context_lines":[{"line_number":1804,"context_line":"    .. note:: Tagged volume attachment is not supported for shelved-offloaded"},{"line_number":1805,"context_line":"              instances."},{"line_number":1806,"context_line":""},{"line_number":1807,"context_line":"    .. note:: Tagged volume attachment is not supported in Cells V1"},{"line_number":1808,"context_line":"              deployments."},{"line_number":1809,"context_line":"  in: body"},{"line_number":1810,"context_line":"  required: false"},{"line_number":1811,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":73,"id":"5f201791_5834e6dd","line":1808,"range":{"start_line":1807,"start_character":4,"end_line":1808,"end_character":26},"updated":"2017-06-28 02:21:38.000000000","message":"I don\u0027t think we probably need to explicitly call this out. The end user of the REST API shouldn\u0027t know that they are talking to a cloud using cells v1.","commit_id":"9dd47129d1fa1699446da43f14514bc077a518d5"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"1cb1e487eba32f5de6b978a7e5fdf39ac61e794e","unresolved":false,"context_lines":[{"line_number":1804,"context_line":"    .. note:: Tagged volume attachment is not supported for shelved-offloaded"},{"line_number":1805,"context_line":"              instances."},{"line_number":1806,"context_line":""},{"line_number":1807,"context_line":"    .. note:: Tagged volume attachment is not supported in Cells V1"},{"line_number":1808,"context_line":"              deployments."},{"line_number":1809,"context_line":"  in: body"},{"line_number":1810,"context_line":"  required: false"},{"line_number":1811,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":73,"id":"5f201791_d139f0a3","line":1808,"range":{"start_line":1807,"start_character":4,"end_line":1808,"end_character":26},"in_reply_to":"5f201791_5834e6dd","updated":"2017-06-28 06:23:56.000000000","message":"Done","commit_id":"9dd47129d1fa1699446da43f14514bc077a518d5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1b43ff77cfbbd74c813b33424dea6b799d8ee87f","unresolved":false,"context_lines":[{"line_number":1831,"context_line":"    metadata API and on the config"},{"line_number":1832,"context_line":"    drive, if enabled."},{"line_number":1833,"context_line":""},{"line_number":1834,"context_line":"    .. note:: Tagged network interface attachment is not supported in Cells V1"},{"line_number":1835,"context_line":"              deployments."},{"line_number":1836,"context_line":"  in: body"},{"line_number":1837,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":73,"id":"5f201791_1850ae0a","line":1834,"updated":"2017-06-28 02:21:38.000000000","message":"same as above","commit_id":"9dd47129d1fa1699446da43f14514bc077a518d5"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"1cb1e487eba32f5de6b978a7e5fdf39ac61e794e","unresolved":false,"context_lines":[{"line_number":1831,"context_line":"    metadata API and on the config"},{"line_number":1832,"context_line":"    drive, if enabled."},{"line_number":1833,"context_line":""},{"line_number":1834,"context_line":"    .. note:: Tagged network interface attachment is not supported in Cells V1"},{"line_number":1835,"context_line":"              deployments."},{"line_number":1836,"context_line":"  in: body"},{"line_number":1837,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":73,"id":"5f201791_71421c11","line":1834,"in_reply_to":"5f201791_1850ae0a","updated":"2017-06-28 06:23:56.000000000","message":"Done","commit_id":"9dd47129d1fa1699446da43f14514bc077a518d5"}],"doc/api_samples/os-attach-interfaces/v2.49/attach-interfaces-create-resp-400.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f80a385a2fe34747cd556f2c2dbbe5b433b6893a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"badRequest\": {"},{"line_number":3,"context_line":"        \"code\": 400,"},{"line_number":4,"context_line":"        \"message\": \"Tagged device attachment is not yet available.\""},{"line_number":5,"context_line":"    }"},{"line_number":6,"context_line":"}"}],"source_content_type":"application/json","patch_set":58,"id":"5f201791_86f2ea05","line":4,"updated":"2017-06-20 22:41:57.000000000","message":"We don\u0027t do API samples for negative scenarios, leave that for unit test.","commit_id":"34fbcc0681fce830fb92bec47342d4287e3da7d1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"5be47000da207378933bf6c1df3e01a4810938ea","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"badRequest\": {"},{"line_number":3,"context_line":"        \"code\": 400,"},{"line_number":4,"context_line":"        \"message\": \"Tagged device attachment is not yet available.\""},{"line_number":5,"context_line":"    }"},{"line_number":6,"context_line":"}"}],"source_content_type":"application/json","patch_set":58,"id":"5f201791_2d288184","line":4,"in_reply_to":"5f201791_86f2ea05","updated":"2017-06-21 12:49:56.000000000","message":"Done","commit_id":"34fbcc0681fce830fb92bec47342d4287e3da7d1"}],"doc/api_samples/os-volumes/v2.49/attach-volume-to-server-req.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1b43ff77cfbbd74c813b33424dea6b799d8ee87f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"volumeAttachment\": {"},{"line_number":3,"context_line":"        \"volumeId\": \"a26887c6-c47b-4654-abb5-dfadf7d3f803\","},{"line_number":4,"context_line":"        \"device\": \"/dev/sdd\","},{"line_number":5,"context_line":"        \"tag\": \"foo\""},{"line_number":6,"context_line":"    }"},{"line_number":7,"context_line":"}"}],"source_content_type":"application/json","patch_set":73,"id":"5f201791_d86eb6c7","line":4,"range":{"start_line":4,"start_character":8,"end_line":4,"end_character":29},"updated":"2017-06-28 02:21:38.000000000","message":"I\u0027d like to discourage the use of specifying a device name when attaching a volume, since it\u0027s ignored anyway (at least by the libvirt driver). So let\u0027s drop this from the example please.","commit_id":"9dd47129d1fa1699446da43f14514bc077a518d5"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"1cb1e487eba32f5de6b978a7e5fdf39ac61e794e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"volumeAttachment\": {"},{"line_number":3,"context_line":"        \"volumeId\": \"a26887c6-c47b-4654-abb5-dfadf7d3f803\","},{"line_number":4,"context_line":"        \"device\": \"/dev/sdd\","},{"line_number":5,"context_line":"        \"tag\": \"foo\""},{"line_number":6,"context_line":"    }"},{"line_number":7,"context_line":"}"}],"source_content_type":"application/json","patch_set":73,"id":"5f201791_715b3cf5","line":4,"range":{"start_line":4,"start_character":8,"end_line":4,"end_character":29},"in_reply_to":"5f201791_d86eb6c7","updated":"2017-06-28 06:23:56.000000000","message":"Done","commit_id":"9dd47129d1fa1699446da43f14514bc077a518d5"}],"doc/api_samples/os-volumes/v2.49/attach-volume-to-server-resp-400.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f80a385a2fe34747cd556f2c2dbbe5b433b6893a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"badRequest\": {"},{"line_number":3,"context_line":"        \"code\": 400,"},{"line_number":4,"context_line":"        \"message\": \"Tagged device attachment is not yet available.\""},{"line_number":5,"context_line":"    }"},{"line_number":6,"context_line":"}"}],"source_content_type":"application/json","patch_set":58,"id":"5f201791_46dcd273","line":4,"updated":"2017-06-20 22:41:57.000000000","message":"We don\u0027t do API samples for negative scenarios, leave that for unit test.","commit_id":"34fbcc0681fce830fb92bec47342d4287e3da7d1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"5be47000da207378933bf6c1df3e01a4810938ea","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"badRequest\": {"},{"line_number":3,"context_line":"        \"code\": 400,"},{"line_number":4,"context_line":"        \"message\": \"Tagged device attachment is not yet available.\""},{"line_number":5,"context_line":"    }"},{"line_number":6,"context_line":"}"}],"source_content_type":"application/json","patch_set":58,"id":"5f201791_0da025f4","line":4,"in_reply_to":"5f201791_46dcd273","updated":"2017-06-21 12:49:56.000000000","message":"Done","commit_id":"34fbcc0681fce830fb92bec47342d4287e3da7d1"}],"nova/api/openstack/compute/attach_interfaces.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ea3770a3bb26c166e3f9a992fb4f75b335dfef7d","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            port_id \u003d attachment.get(\u0027port_id\u0027, None)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"            tag \u003d attachment.get(\u0027tag\u0027, None)"},{"line_number":107,"context_line":"            if (tag and not"},{"line_number":108,"context_line":"                api_version_request.is_supported(req, min_version\u003d\u00272.41\u0027)):"},{"line_number":109,"context_line":"                raise webob.exc.HTTPBadRequest("},{"line_number":110,"context_line":"                    explanation\u003d_(\u0027tag is unsupported before microversion \u0027"},{"line_number":111,"context_line":"                                  \u00272.41\u0027))"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"            try:"},{"line_number":114,"context_line":"                req_ip \u003d attachment[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"da4df55a_f0b31598","line":111,"range":{"start_line":107,"start_character":0,"end_line":111,"end_character":42},"updated":"2016-12-28 06:08:32.000000000","message":"It is not necessary.\nIf microversion is less than 2.41 and there is \u0027tag\u0027 in a request body, schema check raises a validation error.","commit_id":"32e1e59b1adfaf7f66ad6bbb1ff06cd88d7c8d8e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a9b3534dff61eb58b077a260c24203835de7be28","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            port_id \u003d attachment.get(\u0027port_id\u0027, None)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"            tag \u003d attachment.get(\u0027tag\u0027, None)"},{"line_number":107,"context_line":"            if (tag and not"},{"line_number":108,"context_line":"                api_version_request.is_supported(req, min_version\u003d\u00272.41\u0027)):"},{"line_number":109,"context_line":"                raise webob.exc.HTTPBadRequest("},{"line_number":110,"context_line":"                    explanation\u003d_(\u0027tag is unsupported before microversion \u0027"},{"line_number":111,"context_line":"                                  \u00272.41\u0027))"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"            try:"},{"line_number":114,"context_line":"                req_ip \u003d attachment[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"da4df55a_d9bd4c69","line":111,"range":{"start_line":107,"start_character":0,"end_line":111,"end_character":42},"in_reply_to":"da4df55a_f0b31598","updated":"2016-12-28 18:06:41.000000000","message":"Err, yeah, don\u0027t know what I was thinking. Fixed!","commit_id":"32e1e59b1adfaf7f66ad6bbb1ff06cd88d7c8d8e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bcb7565dc42805e2cf6a08e2d4da8a4b3134c53f","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                port_info[\u0027port\u0027])}"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    @extensions.expected_errors((400, 404, 409, 500, 501))"},{"line_number":89,"context_line":"    @validation.schema(attach_interfaces.create, \u00272.0\u0027, \u00272.38\u0027)"},{"line_number":90,"context_line":"    @validation.schema(attach_interfaces.create_v243, \u00272.43\u0027)"},{"line_number":91,"context_line":"    def create(self, req, server_id, body):"},{"line_number":92,"context_line":"        \"\"\"Attach an interface to an instance.\"\"\""}],"source_content_type":"text/x-python","patch_set":27,"id":"9a30ddce_b01a30c4","line":89,"range":{"start_line":89,"start_character":56,"end_line":89,"end_character":62},"updated":"2017-03-13 15:30:44.000000000","message":"Shouldn\u0027t this read 2.42?","commit_id":"68e482433387d5bae8fef85ed4faf256fdfe87c9"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c38d102d88596ec5633a120844ed9d7c05d9515e","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                port_info[\u0027port\u0027])}"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    @extensions.expected_errors((400, 404, 409, 500, 501))"},{"line_number":89,"context_line":"    @validation.schema(attach_interfaces.create, \u00272.0\u0027, \u00272.38\u0027)"},{"line_number":90,"context_line":"    @validation.schema(attach_interfaces.create_v243, \u00272.43\u0027)"},{"line_number":91,"context_line":"    def create(self, req, server_id, body):"},{"line_number":92,"context_line":"        \"\"\"Attach an interface to an instance.\"\"\""}],"source_content_type":"text/x-python","patch_set":27,"id":"3a1ff146_a8e44c0d","line":89,"range":{"start_line":89,"start_character":56,"end_line":89,"end_character":62},"in_reply_to":"9a30ddce_b01a30c4","updated":"2017-03-15 11:03:51.000000000","message":"Done","commit_id":"68e482433387d5bae8fef85ed4faf256fdfe87c9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3aca2ed3837dc0711a7ee2970eae2d0bb8156b3d","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                exception.PortNotUsable,"},{"line_number":142,"context_line":"                exception.AttachInterfaceNotSupported,"},{"line_number":143,"context_line":"                exception.SecurityGroupCannotBeApplied,"},{"line_number":144,"context_line":"                exception.TaggedAttachmentNotSupported) as e:"},{"line_number":145,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":146,"context_line":"        except (exception.InstanceIsLocked,"},{"line_number":147,"context_line":"                exception.FixedIpAlreadyInUse,"}],"source_content_type":"text/x-python","patch_set":49,"id":"ff0f0b1f_77e9bc7e","line":144,"updated":"2017-05-17 21:31:59.000000000","message":"Please move the error handling into the plumbing patches that introduced their usage.","commit_id":"161f58bae34f2d5e4e01ee58fdca336ffd64660c"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a6e34864c97f0df61951e601beb191fe45efe93b","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                exception.PortNotUsable,"},{"line_number":142,"context_line":"                exception.AttachInterfaceNotSupported,"},{"line_number":143,"context_line":"                exception.SecurityGroupCannotBeApplied,"},{"line_number":144,"context_line":"                exception.TaggedAttachmentNotSupported) as e:"},{"line_number":145,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":146,"context_line":"        except (exception.InstanceIsLocked,"},{"line_number":147,"context_line":"                exception.FixedIpAlreadyInUse,"}],"source_content_type":"text/x-python","patch_set":49,"id":"ff0f0b1f_b42f47f5","line":144,"in_reply_to":"ff0f0b1f_77e9bc7e","updated":"2017-05-18 06:55:01.000000000","message":"So raise InterfaceAttachFailed from the compute manager, with an appropriate explanation? That would throw a 500 here (continued)","commit_id":"161f58bae34f2d5e4e01ee58fdca336ffd64660c"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a717520e718546082e1bbc4fc171b335dbc6d526","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                exception.PortNotUsable,"},{"line_number":142,"context_line":"                exception.AttachInterfaceNotSupported,"},{"line_number":143,"context_line":"                exception.SecurityGroupCannotBeApplied,"},{"line_number":144,"context_line":"                exception.TaggedAttachmentNotSupported) as e:"},{"line_number":145,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":146,"context_line":"        except (exception.InstanceIsLocked,"},{"line_number":147,"context_line":"                exception.FixedIpAlreadyInUse,"}],"source_content_type":"text/x-python","patch_set":49,"id":"ff0f0b1f_6c70b873","line":144,"in_reply_to":"ff0f0b1f_b42f47f5","updated":"2017-05-18 13:55:06.000000000","message":"OK, I completely misunderstood what you meant. After IRC clarification, done.","commit_id":"161f58bae34f2d5e4e01ee58fdca336ffd64660c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7b7e3abe5de2a00bde9133c7d977fcf209e59ba3","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                port_info[\u0027port\u0027])}"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @extensions.expected_errors((400, 404, 409, 500, 501))"},{"line_number":102,"context_line":"    @validation.schema(attach_interfaces.create, \u00272.1\u0027, \u00272.48\u0027)"},{"line_number":103,"context_line":"    @validation.schema(attach_interfaces.create_v249, \u00272.49\u0027)"},{"line_number":104,"context_line":"    def create(self, req, server_id, body):"},{"line_number":105,"context_line":"        \"\"\"Attach an interface to an instance.\"\"\""}],"source_content_type":"text/x-python","patch_set":76,"id":"3f1d235d_5f692023","line":102,"range":{"start_line":102,"start_character":49,"end_line":102,"end_character":54},"updated":"2017-06-30 05:23:33.000000000","message":"Good point by the Matt, we should use \u00272.0\u0027 or empty for the min_version.\n\nThis is used for the legacy v2 compatible API. When running 2.0 the schema stilll can protect the legacy v2 API, but filter out the extra parameters in the body.\n\nI have bad feeling, I\u0027m going to scan the code, I think I missed this point a lot.","commit_id":"77e1fa6d8820512d015846e3e6295f3c7deeb9f4"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"311b3ae60acedfbb69f3e774e8574bc57383281b","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                port_info[\u0027port\u0027])}"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @extensions.expected_errors((400, 404, 409, 500, 501))"},{"line_number":102,"context_line":"    @validation.schema(attach_interfaces.create, \u00272.1\u0027, \u00272.48\u0027)"},{"line_number":103,"context_line":"    @validation.schema(attach_interfaces.create_v249, \u00272.49\u0027)"},{"line_number":104,"context_line":"    def create(self, req, server_id, body):"},{"line_number":105,"context_line":"        \"\"\"Attach an interface to an instance.\"\"\""}],"source_content_type":"text/x-python","patch_set":76,"id":"3f1d235d_bf9ef404","line":102,"range":{"start_line":102,"start_character":49,"end_line":102,"end_character":54},"in_reply_to":"3f1d235d_5f692023","updated":"2017-06-30 05:28:43.000000000","message":"Is it a problem (other than consistency)? Both 2.0 and 2.1 are used throughout, seemingly arbitrarily. Has it been problematic all along but we haven\u0027t noticed because we don\u0027t test 2.0 anymore?\n\nartom@wash:~/src/nova$ grep -o \u0027validation\\.schema.*2\\.0\u0027 -R nova/api/openstack | wc -l\n13\nartom@wash:~/src/nova$ grep -o \u0027validation\\.schema.*2\\.1\u0027 -R nova/api/openstack | wc -l\n22","commit_id":"77e1fa6d8820512d015846e3e6295f3c7deeb9f4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"16ffdc84de94625e52d3995e16c12264398a4e08","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                port_info[\u0027port\u0027])}"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @extensions.expected_errors((400, 404, 409, 500, 501))"},{"line_number":102,"context_line":"    @validation.schema(attach_interfaces.create, \u00272.1\u0027, \u00272.48\u0027)"},{"line_number":103,"context_line":"    @validation.schema(attach_interfaces.create_v249, \u00272.49\u0027)"},{"line_number":104,"context_line":"    def create(self, req, server_id, body):"},{"line_number":105,"context_line":"        \"\"\"Attach an interface to an instance.\"\"\""}],"source_content_type":"text/x-python","patch_set":76,"id":"3f1d235d_355443ca","line":102,"range":{"start_line":102,"start_character":49,"end_line":102,"end_character":54},"in_reply_to":"3f1d235d_827d1f1e","updated":"2017-06-30 06:33:50.000000000","message":"The fix is at https://review.openstack.org/#/c/479170/","commit_id":"77e1fa6d8820512d015846e3e6295f3c7deeb9f4"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"cafd3a5752d8dd280b35100c4f050501faeae2c0","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                port_info[\u0027port\u0027])}"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @extensions.expected_errors((400, 404, 409, 500, 501))"},{"line_number":102,"context_line":"    @validation.schema(attach_interfaces.create, \u00272.1\u0027, \u00272.48\u0027)"},{"line_number":103,"context_line":"    @validation.schema(attach_interfaces.create_v249, \u00272.49\u0027)"},{"line_number":104,"context_line":"    def create(self, req, server_id, body):"},{"line_number":105,"context_line":"        \"\"\"Attach an interface to an instance.\"\"\""}],"source_content_type":"text/x-python","patch_set":76,"id":"3f1d235d_827d1f1e","line":102,"range":{"start_line":102,"start_character":49,"end_line":102,"end_character":54},"in_reply_to":"3f1d235d_bf9ef404","updated":"2017-06-30 05:55:08.000000000","message":"Anyways, we can sort it out later, I\u0027ve changed it to 2.0.","commit_id":"77e1fa6d8820512d015846e3e6295f3c7deeb9f4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a60fbe876beec47c0fb0ed815ec9ae706542679a","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                port_info[\u0027port\u0027])}"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @extensions.expected_errors((400, 404, 409, 500, 501))"},{"line_number":102,"context_line":"    @validation.schema(attach_interfaces.create, \u00272.1\u0027, \u00272.48\u0027)"},{"line_number":103,"context_line":"    @validation.schema(attach_interfaces.create_v249, \u00272.49\u0027)"},{"line_number":104,"context_line":"    def create(self, req, server_id, body):"},{"line_number":105,"context_line":"        \"\"\"Attach an interface to an instance.\"\"\""}],"source_content_type":"text/x-python","patch_set":76,"id":"3f1d235d_a2affb92","line":102,"range":{"start_line":102,"start_character":49,"end_line":102,"end_character":54},"in_reply_to":"3f1d235d_bf9ef404","updated":"2017-06-30 05:54:31.000000000","message":"we have limit test on the v2.0 compatible API, currently the API sample tests run on it.\n\nhttps://github.com/openstack/nova/blob/master/nova/tests/functional/api_sample_tests/api_sample_base.py#L69","commit_id":"77e1fa6d8820512d015846e3e6295f3c7deeb9f4"}],"nova/api/openstack/compute/rest_api_version_history.rst":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f80a385a2fe34747cd556f2c2dbbe5b433b6893a","unresolved":false,"context_lines":[{"line_number":570,"context_line":""},{"line_number":571,"context_line":"  Continuing from device role tagging at server create time introduced in"},{"line_number":572,"context_line":"  version 2.32 and later fixed in 2.42, microversion 2.49 allows the attachment"},{"line_number":573,"context_line":"  of network interfaces and volumes with an optional \u0027tag\u0027 parameter. This tag"},{"line_number":574,"context_line":"  is used to identify the virtual devices in the guest and is exposed in the"},{"line_number":575,"context_line":"  metadata API and in the config drive, though for the latter to happen the"},{"line_number":576,"context_line":"  instance needs to be rebooted, as the config drive cannot be updated while"}],"source_content_type":"text/x-rst","patch_set":58,"id":"5f201791_66d0ee51","line":573,"range":{"start_line":573,"start_character":28,"end_line":573,"end_character":35},"updated":"2017-06-20 22:41:57.000000000","message":"If we don\u0027t support attaching tagged volumes to shelved-offloaded instances, that should be noted in here somewhere.","commit_id":"34fbcc0681fce830fb92bec47342d4287e3da7d1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"5be47000da207378933bf6c1df3e01a4810938ea","unresolved":false,"context_lines":[{"line_number":570,"context_line":""},{"line_number":571,"context_line":"  Continuing from device role tagging at server create time introduced in"},{"line_number":572,"context_line":"  version 2.32 and later fixed in 2.42, microversion 2.49 allows the attachment"},{"line_number":573,"context_line":"  of network interfaces and volumes with an optional \u0027tag\u0027 parameter. This tag"},{"line_number":574,"context_line":"  is used to identify the virtual devices in the guest and is exposed in the"},{"line_number":575,"context_line":"  metadata API and in the config drive, though for the latter to happen the"},{"line_number":576,"context_line":"  instance needs to be rebooted, as the config drive cannot be updated while"}],"source_content_type":"text/x-rst","patch_set":58,"id":"5f201791_8d94358d","line":573,"range":{"start_line":573,"start_character":28,"end_line":573,"end_character":35},"in_reply_to":"5f201791_66d0ee51","updated":"2017-06-21 12:49:56.000000000","message":"I\u0027ll wait for consensus on how we handle shelved/offloaded before noting it here. Alex suggested we attempt the unshelve, and if it lands on a virt driver that doesn\u0027t support tagging we record it in the instance-action and rollback the instance to offloaded.","commit_id":"34fbcc0681fce830fb92bec47342d4287e3da7d1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"220f74590efc9e9896030c9cf08eae2831101e91","unresolved":false,"context_lines":[{"line_number":570,"context_line":""},{"line_number":571,"context_line":"  Continuing from device role tagging at server create time introduced in"},{"line_number":572,"context_line":"  version 2.32 and later fixed in 2.42, microversion 2.49 allows the attachment"},{"line_number":573,"context_line":"  of network interfaces and volumes with an optional \u0027tag\u0027 parameter. This tag"},{"line_number":574,"context_line":"  is used to identify the virtual devices in the guest and is exposed in the"},{"line_number":575,"context_line":"  metadata API and in the config drive, though for the latter to happen the"},{"line_number":576,"context_line":"  instance needs to be rebooted, as the config drive cannot be updated while"}],"source_content_type":"text/x-rst","patch_set":58,"id":"5f201791_9594258d","line":573,"range":{"start_line":573,"start_character":28,"end_line":573,"end_character":35},"in_reply_to":"5f201791_8d94358d","updated":"2017-06-22 07:13:31.000000000","message":"Done","commit_id":"34fbcc0681fce830fb92bec47342d4287e3da7d1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b0cdd24c06c7d5e7cb11abbf21a2c27849831096","unresolved":false,"context_lines":[{"line_number":570,"context_line":""},{"line_number":571,"context_line":"  Continuing from device role tagging at server create time introduced in"},{"line_number":572,"context_line":"  version 2.32 and later fixed in 2.42, microversion 2.49 allows the attachment"},{"line_number":573,"context_line":"  of network interfaces and volumes with an optional \u0027tag\u0027 parameter. This tag"},{"line_number":574,"context_line":"  is used to identify the virtual devices in the guest and is exposed in the"},{"line_number":575,"context_line":"  metadata API. Because the config drive cannot be updated while the guest is"},{"line_number":576,"context_line":"  running, it will only contain metadata of devices that were tagged at boot"}],"source_content_type":"text/x-rst","patch_set":70,"id":"5f201791_396ef02e","line":573,"range":{"start_line":573,"start_character":54,"end_line":573,"end_character":57},"updated":"2017-06-27 09:36:53.000000000","message":"nit: ``tag``?","commit_id":"d7d7018811abd9efdef88137c9ab9856a927766d"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a5b5618469dd82912607903bd3e149ff0e9909fa","unresolved":false,"context_lines":[{"line_number":570,"context_line":""},{"line_number":571,"context_line":"  Continuing from device role tagging at server create time introduced in"},{"line_number":572,"context_line":"  version 2.32 and later fixed in 2.42, microversion 2.49 allows the attachment"},{"line_number":573,"context_line":"  of network interfaces and volumes with an optional \u0027tag\u0027 parameter. This tag"},{"line_number":574,"context_line":"  is used to identify the virtual devices in the guest and is exposed in the"},{"line_number":575,"context_line":"  metadata API. Because the config drive cannot be updated while the guest is"},{"line_number":576,"context_line":"  running, it will only contain metadata of devices that were tagged at boot"}],"source_content_type":"text/x-rst","patch_set":70,"id":"5f201791_45badb6d","line":573,"range":{"start_line":573,"start_character":54,"end_line":573,"end_character":57},"in_reply_to":"5f201791_396ef02e","updated":"2017-06-27 12:23:42.000000000","message":"Done","commit_id":"d7d7018811abd9efdef88137c9ab9856a927766d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1b43ff77cfbbd74c813b33424dea6b799d8ee87f","unresolved":false,"context_lines":[{"line_number":579,"context_line":"  be reflected in the config drive."},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"  Tagged volume attachment is not supported for shelved-offloaded instances."},{"line_number":582,"context_line":"  Tagged device attachment (both network interfaces and volumes) is not"},{"line_number":583,"context_line":"  supported for Cells V1 deployments."}],"source_content_type":"text/x-rst","patch_set":73,"id":"5f201791_189e6eb8","line":583,"range":{"start_line":582,"start_character":2,"end_line":583,"end_character":37},"updated":"2017-06-28 02:21:38.000000000","message":"I think we can omit this part about cells v1. End users shouldn\u0027t need to know about this. You can mention it in the release notes since operators read those, but the REST API version history and API reference are for users of the cloud and cells v1 is a deployment decision.","commit_id":"9dd47129d1fa1699446da43f14514bc077a518d5"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"1cb1e487eba32f5de6b978a7e5fdf39ac61e794e","unresolved":false,"context_lines":[{"line_number":579,"context_line":"  be reflected in the config drive."},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"  Tagged volume attachment is not supported for shelved-offloaded instances."},{"line_number":582,"context_line":"  Tagged device attachment (both network interfaces and volumes) is not"},{"line_number":583,"context_line":"  supported for Cells V1 deployments."}],"source_content_type":"text/x-rst","patch_set":73,"id":"5f201791_116c089a","line":583,"range":{"start_line":582,"start_character":2,"end_line":583,"end_character":37},"in_reply_to":"5f201791_189e6eb8","updated":"2017-06-28 06:23:56.000000000","message":"Done","commit_id":"9dd47129d1fa1699446da43f14514bc077a518d5"}],"nova/api/openstack/compute/schemas/attach_interfaces.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"520acc7c0ee1980c81971e9212b6e119e1756106","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"create_v249 \u003d copy.deepcopy(create)"},{"line_number":51,"context_line":"create_v249[\u0027properties\u0027][\u0027interfaceAttachment\u0027]["},{"line_number":52,"context_line":"            \u0027properties\u0027][\u0027tag\u0027] \u003d parameter_types.tag"}],"source_content_type":"text/x-python","patch_set":66,"id":"5f201791_0718c67e","line":52,"updated":"2017-06-23 05:51:10.000000000","message":"It would be great to add some unittest to ensure this schema works","commit_id":"7b5ca1b78977fb160d9ff437d9387d34c51d8fd8"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"12c6bfb0ebd9dd59e2d2be6eecbc84499d387902","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"create_v249 \u003d copy.deepcopy(create)"},{"line_number":51,"context_line":"create_v249[\u0027properties\u0027][\u0027interfaceAttachment\u0027]["},{"line_number":52,"context_line":"            \u0027properties\u0027][\u0027tag\u0027] \u003d parameter_types.tag"}],"source_content_type":"text/x-python","patch_set":66,"id":"5f201791_1026beb8","line":52,"in_reply_to":"5f201791_0718c67e","updated":"2017-06-23 08:09:05.000000000","message":"Done","commit_id":"7b5ca1b78977fb160d9ff437d9387d34c51d8fd8"}],"nova/api/openstack/compute/schemas/volumes.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"520acc7c0ee1980c81971e9212b6e119e1756106","unresolved":false,"context_lines":[{"line_number":85,"context_line":"}"},{"line_number":86,"context_line":"create_volume_attachment_v249 \u003d copy.deepcopy(create_volume_attachment)"},{"line_number":87,"context_line":"create_volume_attachment_v249[\u0027properties\u0027][\u0027volumeAttachment\u0027]["},{"line_number":88,"context_line":"                              \u0027properties\u0027][\u0027tag\u0027] \u003d parameter_types.tag"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"update_volume_attachment \u003d copy.deepcopy(create_volume_attachment)"},{"line_number":91,"context_line":"del update_volume_attachment[\u0027properties\u0027][\u0027volumeAttachment\u0027]["}],"source_content_type":"text/x-python","patch_set":66,"id":"5f201791_e70eea39","line":88,"updated":"2017-06-23 05:51:10.000000000","message":"ditto, it is worth to add unittest to ensure this schema works.","commit_id":"7b5ca1b78977fb160d9ff437d9387d34c51d8fd8"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"12c6bfb0ebd9dd59e2d2be6eecbc84499d387902","unresolved":false,"context_lines":[{"line_number":85,"context_line":"}"},{"line_number":86,"context_line":"create_volume_attachment_v249 \u003d copy.deepcopy(create_volume_attachment)"},{"line_number":87,"context_line":"create_volume_attachment_v249[\u0027properties\u0027][\u0027volumeAttachment\u0027]["},{"line_number":88,"context_line":"                              \u0027properties\u0027][\u0027tag\u0027] \u003d parameter_types.tag"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"update_volume_attachment \u003d copy.deepcopy(create_volume_attachment)"},{"line_number":91,"context_line":"del update_volume_attachment[\u0027properties\u0027][\u0027volumeAttachment\u0027]["}],"source_content_type":"text/x-python","patch_set":66,"id":"5f201791_b0ca6a6a","line":88,"in_reply_to":"5f201791_e70eea39","updated":"2017-06-23 08:09:05.000000000","message":"Done","commit_id":"7b5ca1b78977fb160d9ff437d9387d34c51d8fd8"}],"nova/api/openstack/compute/volumes.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"2cef7453f71c0eb015c27d7b5ae416904dd52203","unresolved":false,"context_lines":[{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    # TODO(mriedem): This API should return a 202 instead of a 200 response."},{"line_number":306,"context_line":"    @extensions.expected_errors((400, 404, 409))"},{"line_number":307,"context_line":"    @validation.schema(volumes_schema.create_volume_attachment, \u00272.1\u0027, \u00272.40\u0027)"},{"line_number":308,"context_line":"    @validation.schema(volumes_schema.create_volume_attachment_v243, \u00272.43\u0027)"},{"line_number":309,"context_line":"    def create(self, req, server_id, body):"},{"line_number":310,"context_line":"        \"\"\"Attach a volume to an instance.\"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"fa31d9ce_c316ba54","line":307,"range":{"start_line":307,"start_character":71,"end_line":307,"end_character":77},"updated":"2017-02-17 10:24:33.000000000","message":"should this be changed as well?","commit_id":"400164d452bdd2a32788d64f8f2fa391f407e476"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e7f622766476f16fdfa9d8d799fa75f5078e11c5","unresolved":false,"context_lines":[{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    # TODO(mriedem): This API should return a 202 instead of a 200 response."},{"line_number":306,"context_line":"    @extensions.expected_errors((400, 404, 409))"},{"line_number":307,"context_line":"    @validation.schema(volumes_schema.create_volume_attachment, \u00272.1\u0027, \u00272.40\u0027)"},{"line_number":308,"context_line":"    @validation.schema(volumes_schema.create_volume_attachment_v243, \u00272.43\u0027)"},{"line_number":309,"context_line":"    def create(self, req, server_id, body):"},{"line_number":310,"context_line":"        \"\"\"Attach a volume to an instance.\"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"fa31d9ce_4ee2f1a0","line":307,"range":{"start_line":307,"start_character":71,"end_line":307,"end_character":77},"in_reply_to":"fa31d9ce_c316ba54","updated":"2017-02-17 11:23:03.000000000","message":"Done. Thanks for reviewing a thing that\u0027s failing unit tests :)","commit_id":"400164d452bdd2a32788d64f8f2fa391f407e476"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3aca2ed3837dc0711a7ee2970eae2d0bb8156b3d","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        except (exception.InvalidVolume,"},{"line_number":351,"context_line":"                exception.InvalidDevicePath,"},{"line_number":352,"context_line":"                exception.InvalidInput,"},{"line_number":353,"context_line":"                exception.TaggedAttachmentNotSupported) as e:"},{"line_number":354,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        # The attach is async"}],"source_content_type":"text/x-python","patch_set":49,"id":"ff0f0b1f_17004034","line":353,"updated":"2017-05-17 21:31:59.000000000","message":"Please move the error handling into the plumbing patches that introduced their usage.","commit_id":"161f58bae34f2d5e4e01ee58fdca336ffd64660c"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a6e34864c97f0df61951e601beb191fe45efe93b","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        except (exception.InvalidVolume,"},{"line_number":351,"context_line":"                exception.InvalidDevicePath,"},{"line_number":352,"context_line":"                exception.InvalidInput,"},{"line_number":353,"context_line":"                exception.TaggedAttachmentNotSupported) as e:"},{"line_number":354,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        # The attach is async"}],"source_content_type":"text/x-python","patch_set":49,"id":"ff0f0b1f_9434434c","line":353,"in_reply_to":"ff0f0b1f_17004034","updated":"2017-05-18 06:55:01.000000000","message":"But here we don\u0027t have a way to throw a 500 (without adding a new exception to the list that\u0027s caught here). The only existing exception that\u0027s handled in the API that would make sense is InvalidInput, and that\u0027s a 400.","commit_id":"161f58bae34f2d5e4e01ee58fdca336ffd64660c"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a717520e718546082e1bbc4fc171b335dbc6d526","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        except (exception.InvalidVolume,"},{"line_number":351,"context_line":"                exception.InvalidDevicePath,"},{"line_number":352,"context_line":"                exception.InvalidInput,"},{"line_number":353,"context_line":"                exception.TaggedAttachmentNotSupported) as e:"},{"line_number":354,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        # The attach is async"}],"source_content_type":"text/x-python","patch_set":49,"id":"ff0f0b1f_cc0ea4e4","line":353,"in_reply_to":"ff0f0b1f_9434434c","updated":"2017-05-18 13:55:06.000000000","message":"Done","commit_id":"161f58bae34f2d5e4e01ee58fdca336ffd64660c"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"12fd978c06ee66b5baa692ba112412321b8535ac","unresolved":false,"context_lines":[{"line_number":326,"context_line":""},{"line_number":327,"context_line":"        volume_id \u003d body[\u0027volumeAttachment\u0027][\u0027volumeId\u0027]"},{"line_number":328,"context_line":"        device \u003d body[\u0027volumeAttachment\u0027].get(\u0027device\u0027)"},{"line_number":329,"context_line":"        tag \u003d body[\u0027volumeAttachment\u0027].get(\u0027tag\u0027, None)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"        instance \u003d common.get_instance(self.compute_api, context, server_id)"},{"line_number":332,"context_line":""}],"source_content_type":"text/x-python","patch_set":53,"id":"df140735_be45e119","line":329,"range":{"start_line":329,"start_character":48,"end_line":329,"end_character":54},"updated":"2017-05-30 01:35:56.000000000","message":"this is redundant :D","commit_id":"b6ba32b6990fac653357d144a51b982e39408262"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"8b1d64b4578f6ba8a870f9a0707240661ff1c42a","unresolved":false,"context_lines":[{"line_number":326,"context_line":""},{"line_number":327,"context_line":"        volume_id \u003d body[\u0027volumeAttachment\u0027][\u0027volumeId\u0027]"},{"line_number":328,"context_line":"        device \u003d body[\u0027volumeAttachment\u0027].get(\u0027device\u0027)"},{"line_number":329,"context_line":"        tag \u003d body[\u0027volumeAttachment\u0027].get(\u0027tag\u0027, None)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"        instance \u003d common.get_instance(self.compute_api, context, server_id)"},{"line_number":332,"context_line":""}],"source_content_type":"text/x-python","patch_set":53,"id":"5f201791_cdba2ddd","line":329,"range":{"start_line":329,"start_character":48,"end_line":329,"end_character":54},"in_reply_to":"df140735_be45e119","updated":"2017-06-21 12:49:37.000000000","message":"Done","commit_id":"b6ba32b6990fac653357d144a51b982e39408262"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1b43ff77cfbbd74c813b33424dea6b799d8ee87f","unresolved":false,"context_lines":[{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    # TODO(mriedem): This API should return a 202 instead of a 200 response."},{"line_number":319,"context_line":"    @extensions.expected_errors((400, 404, 409))"},{"line_number":320,"context_line":"    @validation.schema(volumes_schema.create_volume_attachment, \u00272.1\u0027, \u00272.48\u0027)"},{"line_number":321,"context_line":"    @validation.schema(volumes_schema.create_volume_attachment_v249, \u00272.49\u0027)"},{"line_number":322,"context_line":"    def create(self, req, server_id, body):"},{"line_number":323,"context_line":"        \"\"\"Attach a volume to an instance.\"\"\""}],"source_content_type":"text/x-python","patch_set":73,"id":"5f201791_b87f7a64","line":320,"range":{"start_line":320,"start_character":65,"end_line":320,"end_character":68},"updated":"2017-06-28 02:21:38.000000000","message":"For os-interface you used 2.0, but here you\u0027re using 2.1, so which is it?\n\nhttps://review.openstack.org/#/c/376021/73/nova/api/openstack/compute/attach_interfaces.py@102","commit_id":"9dd47129d1fa1699446da43f14514bc077a518d5"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"1cb1e487eba32f5de6b978a7e5fdf39ac61e794e","unresolved":false,"context_lines":[{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    # TODO(mriedem): This API should return a 202 instead of a 200 response."},{"line_number":319,"context_line":"    @extensions.expected_errors((400, 404, 409))"},{"line_number":320,"context_line":"    @validation.schema(volumes_schema.create_volume_attachment, \u00272.1\u0027, \u00272.48\u0027)"},{"line_number":321,"context_line":"    @validation.schema(volumes_schema.create_volume_attachment_v249, \u00272.49\u0027)"},{"line_number":322,"context_line":"    def create(self, req, server_id, body):"},{"line_number":323,"context_line":"        \"\"\"Attach a volume to an instance.\"\"\""}],"source_content_type":"text/x-python","patch_set":73,"id":"5f201791_71b7bcf6","line":320,"range":{"start_line":320,"start_character":65,"end_line":320,"end_character":68},"in_reply_to":"5f201791_b87f7a64","updated":"2017-06-28 06:23:56.000000000","message":"2.1 I guess - there\u0027s no consistency elsewhere either. Fixed in attach_interfaces.py\n\nartom@wash:~/src/nova$ grep -o \u0027validation\\.schema.*2\\.0\u0027 -R nova/api/openstack | wc -l\n13\nartom@wash:~/src/nova$ grep -o \u0027validation\\.schema.*2\\.1\u0027 -R nova/api/openstack | wc -l\n22","commit_id":"9dd47129d1fa1699446da43f14514bc077a518d5"}],"nova/tests/functional/api_sample_tests/api_samples/os-volumes/v2.49/attach-volume-to-server-req.json.tpl":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1b43ff77cfbbd74c813b33424dea6b799d8ee87f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"volumeAttachment\": {"},{"line_number":3,"context_line":"        \"volumeId\": \"%(volume_id)s\","},{"line_number":4,"context_line":"        \"device\": \"%(device)s\","},{"line_number":5,"context_line":"        \"tag\": \"%(tag)s\""},{"line_number":6,"context_line":"    }"},{"line_number":7,"context_line":"}"}],"source_content_type":"text/x-smarty","patch_set":73,"id":"5f201791_58906695","line":4,"updated":"2017-06-28 02:21:38.000000000","message":"Remove \u0027device\u0027.","commit_id":"9dd47129d1fa1699446da43f14514bc077a518d5"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"1cb1e487eba32f5de6b978a7e5fdf39ac61e794e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"volumeAttachment\": {"},{"line_number":3,"context_line":"        \"volumeId\": \"%(volume_id)s\","},{"line_number":4,"context_line":"        \"device\": \"%(device)s\","},{"line_number":5,"context_line":"        \"tag\": \"%(tag)s\""},{"line_number":6,"context_line":"    }"},{"line_number":7,"context_line":"}"}],"source_content_type":"text/x-smarty","patch_set":73,"id":"5f201791_91a93891","line":4,"in_reply_to":"5f201791_58906695","updated":"2017-06-28 06:23:56.000000000","message":"Done","commit_id":"9dd47129d1fa1699446da43f14514bc077a518d5"}],"nova/tests/functional/api_sample_tests/test_attach_interfaces.py":[{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"12fd978c06ee66b5baa692ba112412321b8535ac","unresolved":false,"context_lines":[{"line_number":237,"context_line":"    def test_create_interfaces(self, instance_uuid\u003dNone):"},{"line_number":238,"context_line":"        if instance_uuid is None:"},{"line_number":239,"context_line":"            instance_uuid \u003d self._post_server()"},{"line_number":240,"context_line":"        subs \u003d {"},{"line_number":241,"context_line":"                \u0027net_id\u0027: \u00273cb9bc59-5699-4588-a4b1-b87f96708bc6\u0027,"},{"line_number":242,"context_line":"                \u0027port_id\u0027: \u0027ce531f90-199f-48c0-816c-13e38010b442\u0027,"},{"line_number":243,"context_line":"                \u0027subnet_id\u0027: \u0027f8a6e8f8-c2ec-497c-9f23-da9616de54ef\u0027,"},{"line_number":244,"context_line":"                \u0027ip_address\u0027: \u0027192.168.1.3\u0027,"},{"line_number":245,"context_line":"                \u0027port_state\u0027: \u0027ACTIVE\u0027,"},{"line_number":246,"context_line":"                \u0027mac_addr\u0027: \u0027fa:16:3e:4c:2c:30\u0027,"},{"line_number":247,"context_line":"                }"},{"line_number":248,"context_line":"        self._stub_show_for_instance(instance_uuid, subs[\u0027port_id\u0027])"},{"line_number":249,"context_line":"        response \u003d self._do_post(\u0027servers/%s/os-interface\u0027"},{"line_number":250,"context_line":"                                 % instance_uuid,"}],"source_content_type":"text/x-python","patch_set":53,"id":"df140735_1e604da5","line":247,"range":{"start_line":240,"start_character":0,"end_line":247,"end_character":17},"updated":"2017-05-30 01:35:56.000000000","message":"re-indent like this should be better\n subs \u003d {\n     \u0027net_id\u0027: \u00273cb9bc59-5699-4588-a4b1-b87f96708bc6\u0027,\n     \u0027port_id\u0027: \u0027ce531f90-199f-48c0-816c-13e38010b442\u0027,\n     \u0027subnet_id\u0027: \u0027f8a6e8f8-c2ec-497c-9f23-da9616de54ef\u0027,\n     \u0027ip_address\u0027: \u0027192.168.1.3\u0027,\n     \u0027port_state\u0027: \u0027ACTIVE\u0027,\n     \u0027mac_addr\u0027: \u0027fa:16:3e:4c:2c:30\u0027,\n }","commit_id":"b6ba32b6990fac653357d144a51b982e39408262"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"8b1d64b4578f6ba8a870f9a0707240661ff1c42a","unresolved":false,"context_lines":[{"line_number":237,"context_line":"    def test_create_interfaces(self, instance_uuid\u003dNone):"},{"line_number":238,"context_line":"        if instance_uuid is None:"},{"line_number":239,"context_line":"            instance_uuid \u003d self._post_server()"},{"line_number":240,"context_line":"        subs \u003d {"},{"line_number":241,"context_line":"                \u0027net_id\u0027: \u00273cb9bc59-5699-4588-a4b1-b87f96708bc6\u0027,"},{"line_number":242,"context_line":"                \u0027port_id\u0027: \u0027ce531f90-199f-48c0-816c-13e38010b442\u0027,"},{"line_number":243,"context_line":"                \u0027subnet_id\u0027: \u0027f8a6e8f8-c2ec-497c-9f23-da9616de54ef\u0027,"},{"line_number":244,"context_line":"                \u0027ip_address\u0027: \u0027192.168.1.3\u0027,"},{"line_number":245,"context_line":"                \u0027port_state\u0027: \u0027ACTIVE\u0027,"},{"line_number":246,"context_line":"                \u0027mac_addr\u0027: \u0027fa:16:3e:4c:2c:30\u0027,"},{"line_number":247,"context_line":"                }"},{"line_number":248,"context_line":"        self._stub_show_for_instance(instance_uuid, subs[\u0027port_id\u0027])"},{"line_number":249,"context_line":"        response \u003d self._do_post(\u0027servers/%s/os-interface\u0027"},{"line_number":250,"context_line":"                                 % instance_uuid,"}],"source_content_type":"text/x-python","patch_set":53,"id":"5f201791_0da6e5c2","line":247,"range":{"start_line":240,"start_character":0,"end_line":247,"end_character":17},"in_reply_to":"df140735_1e604da5","updated":"2017-06-21 12:49:37.000000000","message":"Done","commit_id":"b6ba32b6990fac653357d144a51b982e39408262"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"12fd978c06ee66b5baa692ba112412321b8535ac","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    def test_create_interfaces(self, instance_uuid\u003dNone):"},{"line_number":271,"context_line":"        if instance_uuid is None:"},{"line_number":272,"context_line":"            instance_uuid \u003d self._post_server()"},{"line_number":273,"context_line":"        subs \u003d {"},{"line_number":274,"context_line":"                \u0027net_id\u0027: \u00273cb9bc59-5699-4588-a4b1-b87f96708bc6\u0027,"},{"line_number":275,"context_line":"                \u0027port_id\u0027: \u0027ce531f90-199f-48c0-816c-13e38010b442\u0027,"},{"line_number":276,"context_line":"                \u0027subnet_id\u0027: \u0027f8a6e8f8-c2ec-497c-9f23-da9616de54ef\u0027,"},{"line_number":277,"context_line":"                \u0027ip_address\u0027: \u0027192.168.1.3\u0027,"},{"line_number":278,"context_line":"                \u0027port_state\u0027: \u0027ACTIVE\u0027,"},{"line_number":279,"context_line":"                \u0027mac_addr\u0027: \u0027fa:16:3e:4c:2c:30\u0027,"},{"line_number":280,"context_line":"                }"},{"line_number":281,"context_line":"        response \u003d self._do_post(\u0027servers/%s/os-interface\u0027"},{"line_number":282,"context_line":"                                 % instance_uuid,"},{"line_number":283,"context_line":"                                 \u0027attach-interfaces-create-req\u0027, subs)"}],"source_content_type":"text/x-python","patch_set":53,"id":"df140735_de59b5fe","line":280,"range":{"start_line":273,"start_character":0,"end_line":280,"end_character":17},"updated":"2017-05-30 01:35:56.000000000","message":"ditto","commit_id":"b6ba32b6990fac653357d144a51b982e39408262"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"8b1d64b4578f6ba8a870f9a0707240661ff1c42a","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    def test_create_interfaces(self, instance_uuid\u003dNone):"},{"line_number":271,"context_line":"        if instance_uuid is None:"},{"line_number":272,"context_line":"            instance_uuid \u003d self._post_server()"},{"line_number":273,"context_line":"        subs \u003d {"},{"line_number":274,"context_line":"                \u0027net_id\u0027: \u00273cb9bc59-5699-4588-a4b1-b87f96708bc6\u0027,"},{"line_number":275,"context_line":"                \u0027port_id\u0027: \u0027ce531f90-199f-48c0-816c-13e38010b442\u0027,"},{"line_number":276,"context_line":"                \u0027subnet_id\u0027: \u0027f8a6e8f8-c2ec-497c-9f23-da9616de54ef\u0027,"},{"line_number":277,"context_line":"                \u0027ip_address\u0027: \u0027192.168.1.3\u0027,"},{"line_number":278,"context_line":"                \u0027port_state\u0027: \u0027ACTIVE\u0027,"},{"line_number":279,"context_line":"                \u0027mac_addr\u0027: \u0027fa:16:3e:4c:2c:30\u0027,"},{"line_number":280,"context_line":"                }"},{"line_number":281,"context_line":"        response \u003d self._do_post(\u0027servers/%s/os-interface\u0027"},{"line_number":282,"context_line":"                                 % instance_uuid,"},{"line_number":283,"context_line":"                                 \u0027attach-interfaces-create-req\u0027, subs)"}],"source_content_type":"text/x-python","patch_set":53,"id":"5f201791_8d9f954f","line":280,"range":{"start_line":273,"start_character":0,"end_line":280,"end_character":17},"in_reply_to":"df140735_de59b5fe","updated":"2017-06-21 12:49:37.000000000","message":"Removed entirely as per Matt\u0027s comment.","commit_id":"b6ba32b6990fac653357d144a51b982e39408262"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f80a385a2fe34747cd556f2c2dbbe5b433b6893a","unresolved":false,"context_lines":[{"line_number":253,"context_line":"                              response, 200)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"class AttachInterfacesUnsupportedV249JsonTest(test_servers.ServersSampleBase):"},{"line_number":257,"context_line":"    sample_dir \u003d \u0027os-attach-interfaces\u0027"},{"line_number":258,"context_line":"    microversion \u003d \u00272.49\u0027"},{"line_number":259,"context_line":"    scenarios \u003d [(\u0027v2_49\u0027, {\u0027api_major_version\u0027: \u0027v2.1\u0027})]"}],"source_content_type":"text/x-python","patch_set":58,"id":"5f201791_06bffafb","line":256,"range":{"start_line":256,"start_character":6,"end_line":256,"end_character":45},"updated":"2017-06-20 22:41:57.000000000","message":"remove this, we don\u0027t do negative api samples tests - leave it for unit test, or a separate functional test w/o api samples.","commit_id":"34fbcc0681fce830fb92bec47342d4287e3da7d1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"5be47000da207378933bf6c1df3e01a4810938ea","unresolved":false,"context_lines":[{"line_number":253,"context_line":"                              response, 200)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"class AttachInterfacesUnsupportedV249JsonTest(test_servers.ServersSampleBase):"},{"line_number":257,"context_line":"    sample_dir \u003d \u0027os-attach-interfaces\u0027"},{"line_number":258,"context_line":"    microversion \u003d \u00272.49\u0027"},{"line_number":259,"context_line":"    scenarios \u003d [(\u0027v2_49\u0027, {\u0027api_major_version\u0027: \u0027v2.1\u0027})]"}],"source_content_type":"text/x-python","patch_set":58,"id":"5f201791_8dd9d584","line":256,"range":{"start_line":256,"start_character":6,"end_line":256,"end_character":45},"in_reply_to":"5f201791_06bffafb","updated":"2017-06-21 12:49:56.000000000","message":"Done","commit_id":"34fbcc0681fce830fb92bec47342d4287e3da7d1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1b43ff77cfbbd74c813b33424dea6b799d8ee87f","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    def setUp(self):"},{"line_number":191,"context_line":"        super(AttachInterfacesSampleV249JsonTest, self).setUp()"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        def fake_show_port(self, context, port_id\u003dNone):"},{"line_number":194,"context_line":"            if not port_id:"},{"line_number":195,"context_line":"                raise exception.PortNotFound(port_id\u003dNone)"},{"line_number":196,"context_line":"            port_data \u003d {"}],"source_content_type":"text/x-python","patch_set":73,"id":"5f201791_58e50637","line":193,"updated":"2017-06-28 02:21:38.000000000","message":"Can we use the NeutronFixture for this instead of mocking things out? I guess this is how the other tests in here are doing it, so it\u0027s not that big a deal. I just figured that would be better than the stubs. Update or don\u0027t, up to you.","commit_id":"9dd47129d1fa1699446da43f14514bc077a518d5"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"1cb1e487eba32f5de6b978a7e5fdf39ac61e794e","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    def setUp(self):"},{"line_number":191,"context_line":"        super(AttachInterfacesSampleV249JsonTest, self).setUp()"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        def fake_show_port(self, context, port_id\u003dNone):"},{"line_number":194,"context_line":"            if not port_id:"},{"line_number":195,"context_line":"                raise exception.PortNotFound(port_id\u003dNone)"},{"line_number":196,"context_line":"            port_data \u003d {"}],"source_content_type":"text/x-python","patch_set":73,"id":"5f201791_d4331e13","line":193,"in_reply_to":"5f201791_58e50637","updated":"2017-06-28 06:23:56.000000000","message":"It\u0027s a non-obvious change to use NeutronFixture here, so if it\u0027s alright with you I\u0027ll leave it as is for now.\n\nWe could have a larger effort to convert all functional tests to NeutronFixture, sorta like I\u0027ve tried to do with 2.latest in https://review.openstack.org/#/c/430352/","commit_id":"9dd47129d1fa1699446da43f14514bc077a518d5"}],"nova/tests/functional/api_sample_tests/test_volumes.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f80a385a2fe34747cd556f2c2dbbe5b433b6893a","unresolved":false,"context_lines":[{"line_number":348,"context_line":"        self._verify_response(\u0027attach-volume-to-server-resp\u0027, subs,"},{"line_number":349,"context_line":"                              response, 200)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def test_tagged_attach_volume_unsupported(self):"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        def fake_reserve_name(*args, **kwargs):"},{"line_number":354,"context_line":"            raise exception.TaggedAttachmentNotSupported()"}],"source_content_type":"text/x-python","patch_set":58,"id":"5f201791_26f556cc","line":351,"range":{"start_line":351,"start_character":8,"end_line":351,"end_character":45},"updated":"2017-06-20 22:41:57.000000000","message":"ditto on the negative api sample testing","commit_id":"34fbcc0681fce830fb92bec47342d4287e3da7d1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"5be47000da207378933bf6c1df3e01a4810938ea","unresolved":false,"context_lines":[{"line_number":348,"context_line":"        self._verify_response(\u0027attach-volume-to-server-resp\u0027, subs,"},{"line_number":349,"context_line":"                              response, 200)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def test_tagged_attach_volume_unsupported(self):"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        def fake_reserve_name(*args, **kwargs):"},{"line_number":354,"context_line":"            raise exception.TaggedAttachmentNotSupported()"}],"source_content_type":"text/x-python","patch_set":58,"id":"5f201791_4dbcdd04","line":351,"range":{"start_line":351,"start_character":8,"end_line":351,"end_character":45},"in_reply_to":"5f201791_26f556cc","updated":"2017-06-21 12:49:56.000000000","message":"Done","commit_id":"34fbcc0681fce830fb92bec47342d4287e3da7d1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"2d2dea3a7c65c503a4b2abe098b214a322a17761","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        bdm[\u0027device_name\u0027] \u003d device_name"},{"line_number":325,"context_line":"        self.stub_out("},{"line_number":326,"context_line":"            \u0027nova.compute.manager.ComputeManager.reserve_block_device_name\u0027,"},{"line_number":327,"context_line":"            lambda *a, **k: bdm)"},{"line_number":328,"context_line":"        self.stub_out("},{"line_number":329,"context_line":"            \u0027nova.compute.manager.ComputeManager.attach_volume\u0027,"},{"line_number":330,"context_line":"            lambda *a, **k: None)"}],"source_content_type":"text/x-python","patch_set":66,"id":"5f201791_4a2fe3f5","line":327,"updated":"2017-06-23 06:28:59.000000000","message":"You needn\u0027t stub this method out. If you set the capability \u0027supports_tagged_attach_volume\u0027 as True for fake virt dirver, it should work.","commit_id":"7b5ca1b78977fb160d9ff437d9387d34c51d8fd8"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"12c6bfb0ebd9dd59e2d2be6eecbc84499d387902","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        bdm[\u0027device_name\u0027] \u003d device_name"},{"line_number":325,"context_line":"        self.stub_out("},{"line_number":326,"context_line":"            \u0027nova.compute.manager.ComputeManager.reserve_block_device_name\u0027,"},{"line_number":327,"context_line":"            lambda *a, **k: bdm)"},{"line_number":328,"context_line":"        self.stub_out("},{"line_number":329,"context_line":"            \u0027nova.compute.manager.ComputeManager.attach_volume\u0027,"},{"line_number":330,"context_line":"            lambda *a, **k: None)"}],"source_content_type":"text/x-python","patch_set":66,"id":"5f201791_35852c09","line":327,"in_reply_to":"5f201791_4a2fe3f5","updated":"2017-06-23 08:09:05.000000000","message":"Done","commit_id":"7b5ca1b78977fb160d9ff437d9387d34c51d8fd8"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"2d2dea3a7c65c503a4b2abe098b214a322a17761","unresolved":false,"context_lines":[{"line_number":330,"context_line":"            lambda *a, **k: None)"},{"line_number":331,"context_line":"        self.stub_out("},{"line_number":332,"context_line":"            \u0027nova.objects.BlockDeviceMapping.get_by_volume_and_instance\u0027,"},{"line_number":333,"context_line":"            classmethod(lambda *a, **k: None))"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"        volume \u003d fakes.stub_volume_get(None, context.get_admin_context(),"},{"line_number":336,"context_line":"                                       \u0027a26887c6-c47b-4654-abb5-dfadf7d3f803\u0027)"}],"source_content_type":"text/x-python","patch_set":66,"id":"5f201791_0aee8b87","line":333,"updated":"2017-06-23 06:28:59.000000000","message":"I think we needn\u0027t stub out this also.","commit_id":"7b5ca1b78977fb160d9ff437d9387d34c51d8fd8"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"12c6bfb0ebd9dd59e2d2be6eecbc84499d387902","unresolved":false,"context_lines":[{"line_number":330,"context_line":"            lambda *a, **k: None)"},{"line_number":331,"context_line":"        self.stub_out("},{"line_number":332,"context_line":"            \u0027nova.objects.BlockDeviceMapping.get_by_volume_and_instance\u0027,"},{"line_number":333,"context_line":"            classmethod(lambda *a, **k: None))"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"        volume \u003d fakes.stub_volume_get(None, context.get_admin_context(),"},{"line_number":336,"context_line":"                                       \u0027a26887c6-c47b-4654-abb5-dfadf7d3f803\u0027)"}],"source_content_type":"text/x-python","patch_set":66,"id":"5f201791_558e682e","line":333,"in_reply_to":"5f201791_0aee8b87","updated":"2017-06-23 08:09:05.000000000","message":"Done","commit_id":"7b5ca1b78977fb160d9ff437d9387d34c51d8fd8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1b43ff77cfbbd74c813b33424dea6b799d8ee87f","unresolved":false,"context_lines":[{"line_number":314,"context_line":"    scenarios \u003d [(\u0027v2_49\u0027, {\u0027api_major_version\u0027: \u0027v2.1\u0027})]"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    def test_attach_volume_to_server(self):"},{"line_number":317,"context_line":"        self.stub_out(\u0027nova.volume.cinder.API.get\u0027, fakes.stub_volume_get)"},{"line_number":318,"context_line":"        self.stub_out(\u0027nova.volume.cinder.API.check_attach\u0027,"},{"line_number":319,"context_line":"                      lambda *a, **k: None)"},{"line_number":320,"context_line":"        self.stub_out(\u0027nova.volume.cinder.API.reserve_volume\u0027,"},{"line_number":321,"context_line":"                      lambda *a, **k: None)"},{"line_number":322,"context_line":"        device_name \u003d \u0027/dev/sdd\u0027"},{"line_number":323,"context_line":"        bdm \u003d objects.BlockDeviceMapping()"},{"line_number":324,"context_line":"        bdm[\u0027device_name\u0027] \u003d device_name"}],"source_content_type":"text/x-python","patch_set":73,"id":"5f201791_f83cd293","line":321,"range":{"start_line":317,"start_character":8,"end_line":321,"end_character":43},"updated":"2017-06-28 02:21:38.000000000","message":"We have a CinderFixture, can we use that instead?","commit_id":"9dd47129d1fa1699446da43f14514bc077a518d5"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"1cb1e487eba32f5de6b978a7e5fdf39ac61e794e","unresolved":false,"context_lines":[{"line_number":314,"context_line":"    scenarios \u003d [(\u0027v2_49\u0027, {\u0027api_major_version\u0027: \u0027v2.1\u0027})]"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    def test_attach_volume_to_server(self):"},{"line_number":317,"context_line":"        self.stub_out(\u0027nova.volume.cinder.API.get\u0027, fakes.stub_volume_get)"},{"line_number":318,"context_line":"        self.stub_out(\u0027nova.volume.cinder.API.check_attach\u0027,"},{"line_number":319,"context_line":"                      lambda *a, **k: None)"},{"line_number":320,"context_line":"        self.stub_out(\u0027nova.volume.cinder.API.reserve_volume\u0027,"},{"line_number":321,"context_line":"                      lambda *a, **k: None)"},{"line_number":322,"context_line":"        device_name \u003d \u0027/dev/sdd\u0027"},{"line_number":323,"context_line":"        bdm \u003d objects.BlockDeviceMapping()"},{"line_number":324,"context_line":"        bdm[\u0027device_name\u0027] \u003d device_name"}],"source_content_type":"text/x-python","patch_set":73,"id":"5f201791_b7d8a452","line":321,"range":{"start_line":317,"start_character":8,"end_line":321,"end_character":43},"in_reply_to":"5f201791_f83cd293","updated":"2017-06-28 06:23:56.000000000","message":"Done","commit_id":"9dd47129d1fa1699446da43f14514bc077a518d5"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7b7e3abe5de2a00bde9133c7d977fcf209e59ba3","unresolved":false,"context_lines":[{"line_number":326,"context_line":"                                       \u0027a26887c6-c47b-4654-abb5-dfadf7d3f803\u0027)"},{"line_number":327,"context_line":"        subs \u003d {"},{"line_number":328,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":329,"context_line":"            \u0027device\u0027: device_name,"},{"line_number":330,"context_line":"            \u0027tag\u0027: \u0027foo\u0027,"},{"line_number":331,"context_line":"        }"},{"line_number":332,"context_line":"        server_id \u003d self._post_server()"}],"source_content_type":"text/x-python","patch_set":76,"id":"3f1d235d_5f3800d2","line":329,"updated":"2017-06-30 05:23:33.000000000","message":"nit, this can be removed.","commit_id":"77e1fa6d8820512d015846e3e6295f3c7deeb9f4"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"311b3ae60acedfbb69f3e774e8574bc57383281b","unresolved":false,"context_lines":[{"line_number":326,"context_line":"                                       \u0027a26887c6-c47b-4654-abb5-dfadf7d3f803\u0027)"},{"line_number":327,"context_line":"        subs \u003d {"},{"line_number":328,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":329,"context_line":"            \u0027device\u0027: device_name,"},{"line_number":330,"context_line":"            \u0027tag\u0027: \u0027foo\u0027,"},{"line_number":331,"context_line":"        }"},{"line_number":332,"context_line":"        server_id \u003d self._post_server()"}],"source_content_type":"text/x-python","patch_set":76,"id":"3f1d235d_3ffd443a","line":329,"in_reply_to":"3f1d235d_5f3800d2","updated":"2017-06-30 05:28:43.000000000","message":"We don\u0027t need this for the request, but it\u0027s necessary for the response.","commit_id":"77e1fa6d8820512d015846e3e6295f3c7deeb9f4"}],"nova/tests/unit/api/openstack/compute/test_attach_interfaces.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b0cdd24c06c7d5e7cb11abbf21a2c27849831096","unresolved":false,"context_lines":[{"line_number":243,"context_line":"    @mock.patch.object("},{"line_number":244,"context_line":"        compute_api.API, \u0027attach_interface\u0027,"},{"line_number":245,"context_line":"        side_effect\u003dexception.NetworkInterfaceTaggedAttachNotSupported())"},{"line_number":246,"context_line":"    def test_tagged_interface_attach_not_supported(self, mock_attach):"},{"line_number":247,"context_line":"        body \u003d {\u0027interfaceAttachment\u0027: {\u0027net_id\u0027: FAKE_NET_ID2}}"},{"line_number":248,"context_line":"        self.assertRaises(exc.HTTPBadRequest, self.attachments.create,"},{"line_number":249,"context_line":"                          self.req, FAKE_UUID1, body\u003dbody)"}],"source_content_type":"text/x-python","patch_set":70,"id":"5f201791_59a1ac45","line":246,"range":{"start_line":246,"start_character":8,"end_line":246,"end_character":37},"updated":"2017-06-27 09:36:53.000000000","message":"supernit: \u0027test_attach_tagged_interface_xxx\u0027 would probably have been more consistent.\n\nDon\u0027t change it though :)","commit_id":"d7d7018811abd9efdef88137c9ab9856a927766d"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a5b5618469dd82912607903bd3e149ff0e9909fa","unresolved":false,"context_lines":[{"line_number":243,"context_line":"    @mock.patch.object("},{"line_number":244,"context_line":"        compute_api.API, \u0027attach_interface\u0027,"},{"line_number":245,"context_line":"        side_effect\u003dexception.NetworkInterfaceTaggedAttachNotSupported())"},{"line_number":246,"context_line":"    def test_tagged_interface_attach_not_supported(self, mock_attach):"},{"line_number":247,"context_line":"        body \u003d {\u0027interfaceAttachment\u0027: {\u0027net_id\u0027: FAKE_NET_ID2}}"},{"line_number":248,"context_line":"        self.assertRaises(exc.HTTPBadRequest, self.attachments.create,"},{"line_number":249,"context_line":"                          self.req, FAKE_UUID1, body\u003dbody)"}],"source_content_type":"text/x-python","patch_set":70,"id":"5f201791_a5640f23","line":246,"range":{"start_line":246,"start_character":8,"end_line":246,"end_character":37},"in_reply_to":"5f201791_59a1ac45","updated":"2017-06-27 12:23:42.000000000","message":"Ok, I won\u0027t :)","commit_id":"d7d7018811abd9efdef88137c9ab9856a927766d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"37a8d9338718ee9d13da413a5a055d94de271497","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        self.assertRaises(exc.HTTPBadRequest, self.attachments.create,"},{"line_number":249,"context_line":"                          self.req, FAKE_UUID1, body\u003dbody)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    @mock.patch(\u0027nova.compute.api.API.attach_interface\u0027)"},{"line_number":252,"context_line":"    def test_tagged_interface_attach_invalid_tag_caret(self, _):"},{"line_number":253,"context_line":"        body \u003d {\u0027interfaceAttachment\u0027: {\u0027net_id\u0027: FAKE_NET_ID2,"},{"line_number":254,"context_line":"                                        \u0027tag\u0027: \u0027^\u0027}}"}],"source_content_type":"text/x-python","patch_set":71,"id":"5f201791_e5a9e77b","line":251,"updated":"2017-06-27 11:30:43.000000000","message":"Would you mind to move those tests into a new class, called \u0027InterfaceAttachTestsV249\u0027?","commit_id":"71020ca6f6b7ece1a7dd9fb81d76c1cd78903994"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"faddbecfa90dbe4787ffea546771549c7a74acca","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        self.assertRaises(exc.HTTPBadRequest, self.attachments.create,"},{"line_number":249,"context_line":"                          self.req, FAKE_UUID1, body\u003dbody)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    @mock.patch(\u0027nova.compute.api.API.attach_interface\u0027)"},{"line_number":252,"context_line":"    def test_tagged_interface_attach_invalid_tag_caret(self, _):"},{"line_number":253,"context_line":"        body \u003d {\u0027interfaceAttachment\u0027: {\u0027net_id\u0027: FAKE_NET_ID2,"},{"line_number":254,"context_line":"                                        \u0027tag\u0027: \u0027^\u0027}}"}],"source_content_type":"text/x-python","patch_set":71,"id":"5f201791_653837ed","line":251,"in_reply_to":"5f201791_e5a9e77b","updated":"2017-06-27 12:23:38.000000000","message":"Done","commit_id":"71020ca6f6b7ece1a7dd9fb81d76c1cd78903994"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"73118ded19eb3fde2837cfea1725424f26bb6379","unresolved":false,"context_lines":[{"line_number":477,"context_line":"    def setUp(self):"},{"line_number":478,"context_line":"        super(InterfaceAttachTestsV249, self).setUp()"},{"line_number":479,"context_line":"        self.attachments \u003d self.controller_cls()"},{"line_number":480,"context_line":"        self.req \u003d fakes.HTTPRequest.blank(\u0027\u0027)"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"    @mock.patch(\u0027nova.compute.api.API.attach_interface\u0027)"},{"line_number":483,"context_line":"    def test_tagged_interface_attach_invalid_tag_caret(self, _):"}],"source_content_type":"text/x-python","patch_set":72,"id":"5f201791_a739aed7","line":480,"updated":"2017-06-27 13:39:24.000000000","message":"we should test against on the 2.49","commit_id":"7aa29d4e219462d50a0251a82c6caa6a398644ac"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"f91006da201723fb366e54da8590b54da9a3bcde","unresolved":false,"context_lines":[{"line_number":477,"context_line":"    def setUp(self):"},{"line_number":478,"context_line":"        super(InterfaceAttachTestsV249, self).setUp()"},{"line_number":479,"context_line":"        self.attachments \u003d self.controller_cls()"},{"line_number":480,"context_line":"        self.req \u003d fakes.HTTPRequest.blank(\u0027\u0027)"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"    @mock.patch(\u0027nova.compute.api.API.attach_interface\u0027)"},{"line_number":483,"context_line":"    def test_tagged_interface_attach_invalid_tag_caret(self, _):"}],"source_content_type":"text/x-python","patch_set":72,"id":"5f201791_e29af45f","line":480,"in_reply_to":"5f201791_a739aed7","updated":"2017-06-27 14:22:16.000000000","message":"Done","commit_id":"7aa29d4e219462d50a0251a82c6caa6a398644ac"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"73118ded19eb3fde2837cfea1725424f26bb6379","unresolved":false,"context_lines":[{"line_number":479,"context_line":"        self.attachments \u003d self.controller_cls()"},{"line_number":480,"context_line":"        self.req \u003d fakes.HTTPRequest.blank(\u0027\u0027)"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"    @mock.patch(\u0027nova.compute.api.API.attach_interface\u0027)"},{"line_number":483,"context_line":"    def test_tagged_interface_attach_invalid_tag_caret(self, _):"},{"line_number":484,"context_line":"        body \u003d {\u0027interfaceAttachment\u0027: {\u0027net_id\u0027: FAKE_NET_ID2,"},{"line_number":485,"context_line":"                                        \u0027tag\u0027: \u0027^\u0027}}"}],"source_content_type":"text/x-python","patch_set":72,"id":"5f201791_e758c631","line":482,"updated":"2017-06-27 13:39:24.000000000","message":"we can remove all of those \u0027mock.patch\u0027, since the schema validation are done in the very early stage.","commit_id":"7aa29d4e219462d50a0251a82c6caa6a398644ac"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"f91006da201723fb366e54da8590b54da9a3bcde","unresolved":false,"context_lines":[{"line_number":479,"context_line":"        self.attachments \u003d self.controller_cls()"},{"line_number":480,"context_line":"        self.req \u003d fakes.HTTPRequest.blank(\u0027\u0027)"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"    @mock.patch(\u0027nova.compute.api.API.attach_interface\u0027)"},{"line_number":483,"context_line":"    def test_tagged_interface_attach_invalid_tag_caret(self, _):"},{"line_number":484,"context_line":"        body \u003d {\u0027interfaceAttachment\u0027: {\u0027net_id\u0027: FAKE_NET_ID2,"},{"line_number":485,"context_line":"                                        \u0027tag\u0027: \u0027^\u0027}}"}],"source_content_type":"text/x-python","patch_set":72,"id":"5f201791_c2a5b8a3","line":482,"in_reply_to":"5f201791_e758c631","updated":"2017-06-27 14:22:16.000000000","message":"Done","commit_id":"7aa29d4e219462d50a0251a82c6caa6a398644ac"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"73118ded19eb3fde2837cfea1725424f26bb6379","unresolved":false,"context_lines":[{"line_number":513,"context_line":"    def test_tagged_interface_attach_valid_tag(self, _):"},{"line_number":514,"context_line":"        body \u003d {\u0027interfaceAttachment\u0027: {\u0027net_id\u0027: FAKE_NET_ID2,"},{"line_number":515,"context_line":"                                        \u0027tag\u0027: \u0027foo\u0027}}"},{"line_number":516,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027, version\u003d\u00272.49\u0027)"},{"line_number":517,"context_line":"        with mock.patch.object(self.attachments, \u0027show\u0027):"},{"line_number":518,"context_line":"            self.attachments.create(req, FAKE_UUID1, body\u003dbody)"},{"line_number":519,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"5f201791_07a4e206","line":516,"range":{"start_line":516,"start_character":8,"end_line":516,"end_character":57},"updated":"2017-06-27 13:39:24.000000000","message":"we can use self.req.","commit_id":"7aa29d4e219462d50a0251a82c6caa6a398644ac"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"f91006da201723fb366e54da8590b54da9a3bcde","unresolved":false,"context_lines":[{"line_number":513,"context_line":"    def test_tagged_interface_attach_valid_tag(self, _):"},{"line_number":514,"context_line":"        body \u003d {\u0027interfaceAttachment\u0027: {\u0027net_id\u0027: FAKE_NET_ID2,"},{"line_number":515,"context_line":"                                        \u0027tag\u0027: \u0027foo\u0027}}"},{"line_number":516,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027, version\u003d\u00272.49\u0027)"},{"line_number":517,"context_line":"        with mock.patch.object(self.attachments, \u0027show\u0027):"},{"line_number":518,"context_line":"            self.attachments.create(req, FAKE_UUID1, body\u003dbody)"},{"line_number":519,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"5f201791_a2a07c91","line":516,"range":{"start_line":516,"start_character":8,"end_line":516,"end_character":57},"in_reply_to":"5f201791_07a4e206","updated":"2017-06-27 14:22:16.000000000","message":"Done","commit_id":"7aa29d4e219462d50a0251a82c6caa6a398644ac"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1b43ff77cfbbd74c813b33424dea6b799d8ee87f","unresolved":false,"context_lines":[{"line_number":243,"context_line":"    @mock.patch.object("},{"line_number":244,"context_line":"        compute_api.API, \u0027attach_interface\u0027,"},{"line_number":245,"context_line":"        side_effect\u003dexception.NetworkInterfaceTaggedAttachNotSupported())"},{"line_number":246,"context_line":"    def test_tagged_interface_attach_not_supported(self, mock_attach):"},{"line_number":247,"context_line":"        body \u003d {\u0027interfaceAttachment\u0027: {\u0027net_id\u0027: FAKE_NET_ID2}}"},{"line_number":248,"context_line":"        self.assertRaises(exc.HTTPBadRequest, self.attachments.create,"},{"line_number":249,"context_line":"                          self.req, FAKE_UUID1, body\u003dbody)"}],"source_content_type":"text/x-python","patch_set":73,"id":"5f201791_f80a92cf","line":246,"updated":"2017-06-28 02:21:38.000000000","message":"Why did this need to be renamed? Oh I guess because you\u0027re overriding this in the 2.49 test and want to have consistent naming.","commit_id":"9dd47129d1fa1699446da43f14514bc077a518d5"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c001b4189ef021c9b6c3dc689d389b5d24a51973","unresolved":false,"context_lines":[{"line_number":243,"context_line":"    @mock.patch.object("},{"line_number":244,"context_line":"        compute_api.API, \u0027attach_interface\u0027,"},{"line_number":245,"context_line":"        side_effect\u003dexception.NetworkInterfaceTaggedAttachNotSupported())"},{"line_number":246,"context_line":"    def test_tagged_interface_attach_not_supported(self, mock_attach):"},{"line_number":247,"context_line":"        body \u003d {\u0027interfaceAttachment\u0027: {\u0027net_id\u0027: FAKE_NET_ID2}}"},{"line_number":248,"context_line":"        self.assertRaises(exc.HTTPBadRequest, self.attachments.create,"},{"line_number":249,"context_line":"                          self.req, FAKE_UUID1, body\u003dbody)"}],"source_content_type":"text/x-python","patch_set":73,"id":"5f201791_5a8055f5","line":246,"in_reply_to":"5f201791_57103057","updated":"2017-06-28 06:43:06.000000000","message":"Err, what I meant was:\n\nShort answer: no reason.\n\nLong answer: I had first put the schema validation tests that Alex asked for here, and for some reason decided to name them test_tagged_interface_attach, so I renamed this method to be consistent.\n\nAnyways, back to the way it was.","commit_id":"9dd47129d1fa1699446da43f14514bc077a518d5"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"1cb1e487eba32f5de6b978a7e5fdf39ac61e794e","unresolved":false,"context_lines":[{"line_number":243,"context_line":"    @mock.patch.object("},{"line_number":244,"context_line":"        compute_api.API, \u0027attach_interface\u0027,"},{"line_number":245,"context_line":"        side_effect\u003dexception.NetworkInterfaceTaggedAttachNotSupported())"},{"line_number":246,"context_line":"    def test_tagged_interface_attach_not_supported(self, mock_attach):"},{"line_number":247,"context_line":"        body \u003d {\u0027interfaceAttachment\u0027: {\u0027net_id\u0027: FAKE_NET_ID2}}"},{"line_number":248,"context_line":"        self.assertRaises(exc.HTTPBadRequest, self.attachments.create,"},{"line_number":249,"context_line":"                          self.req, FAKE_UUID1, body\u003dbody)"}],"source_content_type":"text/x-python","patch_set":73,"id":"5f201791_57103057","line":246,"in_reply_to":"5f201791_f80a92cf","updated":"2017-06-28 06:23:56.000000000","message":"Done","commit_id":"9dd47129d1fa1699446da43f14514bc077a518d5"}],"nova/tests/unit/api/openstack/compute/test_volumes.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"37a8d9338718ee9d13da413a5a055d94de271497","unresolved":false,"context_lines":[{"line_number":500,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest, self.attachments.create,"},{"line_number":501,"context_line":"                          self.req, FAKE_UUID, body\u003dbody)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"    @mock.patch(\u0027nova.compute.api.API.attach_volume\u0027)"},{"line_number":504,"context_line":"    def test_tagged_volume_attach_invalid_tag_caret(self, _):"},{"line_number":505,"context_line":"        body \u003d {\u0027volumeAttachment\u0027: {\u0027volumeId\u0027: FAKE_UUID_A,"},{"line_number":506,"context_line":"                                     \u0027device\u0027: \u0027/dev/fake\u0027,"}],"source_content_type":"text/x-python","patch_set":71,"id":"5f201791_25cd9f65","line":503,"updated":"2017-06-27 11:30:43.000000000","message":"Would you mind to move those tests into a new class, called \u0027InterfaceAttachTestsV249\u0027?","commit_id":"71020ca6f6b7ece1a7dd9fb81d76c1cd78903994"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"faddbecfa90dbe4787ffea546771549c7a74acca","unresolved":false,"context_lines":[{"line_number":500,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest, self.attachments.create,"},{"line_number":501,"context_line":"                          self.req, FAKE_UUID, body\u003dbody)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"    @mock.patch(\u0027nova.compute.api.API.attach_volume\u0027)"},{"line_number":504,"context_line":"    def test_tagged_volume_attach_invalid_tag_caret(self, _):"},{"line_number":505,"context_line":"        body \u003d {\u0027volumeAttachment\u0027: {\u0027volumeId\u0027: FAKE_UUID_A,"},{"line_number":506,"context_line":"                                     \u0027device\u0027: \u0027/dev/fake\u0027,"}],"source_content_type":"text/x-python","patch_set":71,"id":"5f201791_d03c6ae2","line":503,"in_reply_to":"5f201791_25cd9f65","updated":"2017-06-27 12:23:38.000000000","message":"Done","commit_id":"71020ca6f6b7ece1a7dd9fb81d76c1cd78903994"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"73118ded19eb3fde2837cfea1725424f26bb6379","unresolved":false,"context_lines":[{"line_number":696,"context_line":"        super(VolumeAttachTestsV249, self).setUp()"},{"line_number":697,"context_line":"        self.attachments \u003d volumes_v21.VolumeAttachmentController()"},{"line_number":698,"context_line":"        self.req \u003d fakes.HTTPRequest.blank("},{"line_number":699,"context_line":"                  \u0027/v2/servers/id/os-volume_attachments/uuid\u0027)"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"    @mock.patch(\u0027nova.compute.api.API.attach_volume\u0027)"},{"line_number":702,"context_line":"    def test_tagged_volume_attach_invalid_tag_caret(self, _):"}],"source_content_type":"text/x-python","patch_set":72,"id":"5f201791_a7952e89","line":699,"updated":"2017-06-27 13:39:24.000000000","message":"This should against on 2.49","commit_id":"7aa29d4e219462d50a0251a82c6caa6a398644ac"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"f91006da201723fb366e54da8590b54da9a3bcde","unresolved":false,"context_lines":[{"line_number":696,"context_line":"        super(VolumeAttachTestsV249, self).setUp()"},{"line_number":697,"context_line":"        self.attachments \u003d volumes_v21.VolumeAttachmentController()"},{"line_number":698,"context_line":"        self.req \u003d fakes.HTTPRequest.blank("},{"line_number":699,"context_line":"                  \u0027/v2/servers/id/os-volume_attachments/uuid\u0027)"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"    @mock.patch(\u0027nova.compute.api.API.attach_volume\u0027)"},{"line_number":702,"context_line":"    def test_tagged_volume_attach_invalid_tag_caret(self, _):"}],"source_content_type":"text/x-python","patch_set":72,"id":"5f201791_a2af5c28","line":699,"in_reply_to":"5f201791_a7952e89","updated":"2017-06-27 14:22:16.000000000","message":"Done","commit_id":"7aa29d4e219462d50a0251a82c6caa6a398644ac"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"73118ded19eb3fde2837cfea1725424f26bb6379","unresolved":false,"context_lines":[{"line_number":698,"context_line":"        self.req \u003d fakes.HTTPRequest.blank("},{"line_number":699,"context_line":"                  \u0027/v2/servers/id/os-volume_attachments/uuid\u0027)"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"    @mock.patch(\u0027nova.compute.api.API.attach_volume\u0027)"},{"line_number":702,"context_line":"    def test_tagged_volume_attach_invalid_tag_caret(self, _):"},{"line_number":703,"context_line":"        body \u003d {\u0027volumeAttachment\u0027: {\u0027volumeId\u0027: FAKE_UUID_A,"},{"line_number":704,"context_line":"                                     \u0027device\u0027: \u0027/dev/fake\u0027,"}],"source_content_type":"text/x-python","patch_set":72,"id":"5f201791_27efde1e","line":701,"updated":"2017-06-27 13:39:24.000000000","message":"remove all of those \u0027mock.patch\u0027, they are useless","commit_id":"7aa29d4e219462d50a0251a82c6caa6a398644ac"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"f91006da201723fb366e54da8590b54da9a3bcde","unresolved":false,"context_lines":[{"line_number":698,"context_line":"        self.req \u003d fakes.HTTPRequest.blank("},{"line_number":699,"context_line":"                  \u0027/v2/servers/id/os-volume_attachments/uuid\u0027)"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"    @mock.patch(\u0027nova.compute.api.API.attach_volume\u0027)"},{"line_number":702,"context_line":"    def test_tagged_volume_attach_invalid_tag_caret(self, _):"},{"line_number":703,"context_line":"        body \u003d {\u0027volumeAttachment\u0027: {\u0027volumeId\u0027: FAKE_UUID_A,"},{"line_number":704,"context_line":"                                     \u0027device\u0027: \u0027/dev/fake\u0027,"}],"source_content_type":"text/x-python","patch_set":72,"id":"5f201791_c2b49882","line":701,"in_reply_to":"5f201791_27efde1e","updated":"2017-06-27 14:22:16.000000000","message":"Done","commit_id":"7aa29d4e219462d50a0251a82c6caa6a398644ac"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"73118ded19eb3fde2837cfea1725424f26bb6379","unresolved":false,"context_lines":[{"line_number":737,"context_line":"        body \u003d {\u0027volumeAttachment\u0027: {\u0027volumeId\u0027: FAKE_UUID_A,"},{"line_number":738,"context_line":"                                     \u0027device\u0027: \u0027/dev/fake\u0027,"},{"line_number":739,"context_line":"                                     \u0027tag\u0027: \u0027foo\u0027}}"},{"line_number":740,"context_line":"        req \u003d fakes.HTTPRequest.blank("},{"line_number":741,"context_line":"            \u0027/v2/servers/id/os-volume_attachments/uuid\u0027,"},{"line_number":742,"context_line":"            version\u003d\u00272.49\u0027)"},{"line_number":743,"context_line":"        self.attachments.create(req, FAKE_UUID, body\u003dbody)"},{"line_number":744,"context_line":""},{"line_number":745,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"5f201791_67e03627","line":742,"range":{"start_line":740,"start_character":8,"end_line":742,"end_character":27},"updated":"2017-06-27 13:39:24.000000000","message":"use self.req","commit_id":"7aa29d4e219462d50a0251a82c6caa6a398644ac"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"f91006da201723fb366e54da8590b54da9a3bcde","unresolved":false,"context_lines":[{"line_number":737,"context_line":"        body \u003d {\u0027volumeAttachment\u0027: {\u0027volumeId\u0027: FAKE_UUID_A,"},{"line_number":738,"context_line":"                                     \u0027device\u0027: \u0027/dev/fake\u0027,"},{"line_number":739,"context_line":"                                     \u0027tag\u0027: \u0027foo\u0027}}"},{"line_number":740,"context_line":"        req \u003d fakes.HTTPRequest.blank("},{"line_number":741,"context_line":"            \u0027/v2/servers/id/os-volume_attachments/uuid\u0027,"},{"line_number":742,"context_line":"            version\u003d\u00272.49\u0027)"},{"line_number":743,"context_line":"        self.attachments.create(req, FAKE_UUID, body\u003dbody)"},{"line_number":744,"context_line":""},{"line_number":745,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"5f201791_023a90e5","line":742,"range":{"start_line":740,"start_character":8,"end_line":742,"end_character":27},"in_reply_to":"5f201791_67e03627","updated":"2017-06-27 14:22:16.000000000","message":"Done","commit_id":"7aa29d4e219462d50a0251a82c6caa6a398644ac"}],"nova/virt/fake.py":[{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"12fd978c06ee66b5baa692ba112412321b8535ac","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        \"supports_migrate_to_same_host\": True,"},{"line_number":125,"context_line":"        \"supports_attach_interface\": True,"},{"line_number":126,"context_line":"        \"supports_tagged_attach_interface\": True"},{"line_number":127,"context_line":"        }"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    # Since we don\u0027t have a real hypervisor, pretend we have lots of"},{"line_number":130,"context_line":"    # disk and ram so this driver can be used to test large instances."}],"source_content_type":"text/x-python","patch_set":53,"id":"df140735_9e733d81","line":127,"updated":"2017-05-30 01:35:56.000000000","message":"here too","commit_id":"b6ba32b6990fac653357d144a51b982e39408262"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"8b1d64b4578f6ba8a870f9a0707240661ff1c42a","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        \"supports_migrate_to_same_host\": True,"},{"line_number":125,"context_line":"        \"supports_attach_interface\": True,"},{"line_number":126,"context_line":"        \"supports_tagged_attach_interface\": True"},{"line_number":127,"context_line":"        }"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    # Since we don\u0027t have a real hypervisor, pretend we have lots of"},{"line_number":130,"context_line":"    # disk and ram so this driver can be used to test large instances."}],"source_content_type":"text/x-python","patch_set":53,"id":"5f201791_edb169e3","line":127,"in_reply_to":"df140735_9e733d81","updated":"2017-06-21 12:49:37.000000000","message":"Sure, why not.","commit_id":"b6ba32b6990fac653357d144a51b982e39408262"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"2d2dea3a7c65c503a4b2abe098b214a322a17761","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        \"supports_recreate\": True,"},{"line_number":123,"context_line":"        \"supports_migrate_to_same_host\": True,"},{"line_number":124,"context_line":"        \"supports_attach_interface\": True,"},{"line_number":125,"context_line":"        \"supports_tagged_attach_interface\": True"},{"line_number":126,"context_line":"    }"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    # Since we don\u0027t have a real hypervisor, pretend we have lots of"}],"source_content_type":"text/x-python","patch_set":66,"id":"5f201791_eacc6f6b","line":125,"updated":"2017-06-23 06:28:59.000000000","message":"you also need to add \u0027supports_tagged_attach_volume\u0027?","commit_id":"7b5ca1b78977fb160d9ff437d9387d34c51d8fd8"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"12c6bfb0ebd9dd59e2d2be6eecbc84499d387902","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        \"supports_recreate\": True,"},{"line_number":123,"context_line":"        \"supports_migrate_to_same_host\": True,"},{"line_number":124,"context_line":"        \"supports_attach_interface\": True,"},{"line_number":125,"context_line":"        \"supports_tagged_attach_interface\": True"},{"line_number":126,"context_line":"    }"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    # Since we don\u0027t have a real hypervisor, pretend we have lots of"}],"source_content_type":"text/x-python","patch_set":66,"id":"5f201791_1588f01c","line":125,"in_reply_to":"5f201791_eacc6f6b","updated":"2017-06-23 08:09:05.000000000","message":"Done","commit_id":"7b5ca1b78977fb160d9ff437d9387d34c51d8fd8"}],"releasenotes/notes/virt-device-tagged-attach-53e214d3b3fdd183.yaml":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bcb7565dc42805e2cf6a08e2d4da8a4b3134c53f","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Microversion 2.43 brings device role tagging to the attach operation of"},{"line_number":5,"context_line":"    volumes and network interfaces. Both network interfaces and volumes can now"},{"line_number":6,"context_line":"    be attached with an optional \u0027tag\u0027 parameter. The tag is then exposed to"},{"line_number":7,"context_line":"    the guest operating system through the metadata API. Unlike the original"},{"line_number":8,"context_line":"    device role tagging feature, tagged attach does not support the config"},{"line_number":9,"context_line":"    drive. Because the config drive was never designed to be dynamic, it only"}],"source_content_type":"text/x-yaml","patch_set":27,"id":"9a30ddce_824a3e53","line":6,"range":{"start_line":6,"start_character":34,"end_line":6,"end_character":37},"updated":"2017-03-13 15:30:44.000000000","message":"this might make more sense as ``code``","commit_id":"68e482433387d5bae8fef85ed4faf256fdfe87c9"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c38d102d88596ec5633a120844ed9d7c05d9515e","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Microversion 2.43 brings device role tagging to the attach operation of"},{"line_number":5,"context_line":"    volumes and network interfaces. Both network interfaces and volumes can now"},{"line_number":6,"context_line":"    be attached with an optional \u0027tag\u0027 parameter. The tag is then exposed to"},{"line_number":7,"context_line":"    the guest operating system through the metadata API. Unlike the original"},{"line_number":8,"context_line":"    device role tagging feature, tagged attach does not support the config"},{"line_number":9,"context_line":"    drive. Because the config drive was never designed to be dynamic, it only"}],"source_content_type":"text/x-yaml","patch_set":27,"id":"3a1ff146_288dbc31","line":6,"range":{"start_line":6,"start_character":34,"end_line":6,"end_character":37},"in_reply_to":"9a30ddce_824a3e53","updated":"2017-03-15 11:03:51.000000000","message":"Done","commit_id":"68e482433387d5bae8fef85ed4faf256fdfe87c9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f80a385a2fe34747cd556f2c2dbbe5b433b6893a","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Microversion 2.49 brings device role tagging to the attach operation of"},{"line_number":5,"context_line":"    volumes and network interfaces. Both network interfaces and volumes can now"},{"line_number":6,"context_line":"    be attached with an optional ``tag`` parameter. The tag is then exposed to"},{"line_number":7,"context_line":"    the guest operating system through the metadata API. Unlike the original"},{"line_number":8,"context_line":"    device role tagging feature, tagged attach does not support the config"}],"source_content_type":"text/x-yaml","patch_set":58,"id":"5f201791_06025ab5","line":5,"range":{"start_line":5,"start_character":64,"end_line":5,"end_character":71},"updated":"2017-06-20 22:41:57.000000000","message":"except shelved-offloaded volumes...","commit_id":"34fbcc0681fce830fb92bec47342d4287e3da7d1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"5be47000da207378933bf6c1df3e01a4810938ea","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Microversion 2.49 brings device role tagging to the attach operation of"},{"line_number":5,"context_line":"    volumes and network interfaces. Both network interfaces and volumes can now"},{"line_number":6,"context_line":"    be attached with an optional ``tag`` parameter. The tag is then exposed to"},{"line_number":7,"context_line":"    the guest operating system through the metadata API. Unlike the original"},{"line_number":8,"context_line":"    device role tagging feature, tagged attach does not support the config"}],"source_content_type":"text/x-yaml","patch_set":58,"id":"5f201791_8d47951e","line":5,"range":{"start_line":5,"start_character":64,"end_line":5,"end_character":71},"in_reply_to":"5f201791_06025ab5","updated":"2017-06-21 12:49:56.000000000","message":"See previous two comments about consensus around how we handle shelved-offloaded :)","commit_id":"34fbcc0681fce830fb92bec47342d4287e3da7d1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"220f74590efc9e9896030c9cf08eae2831101e91","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Microversion 2.49 brings device role tagging to the attach operation of"},{"line_number":5,"context_line":"    volumes and network interfaces. Both network interfaces and volumes can now"},{"line_number":6,"context_line":"    be attached with an optional ``tag`` parameter. The tag is then exposed to"},{"line_number":7,"context_line":"    the guest operating system through the metadata API. Unlike the original"},{"line_number":8,"context_line":"    device role tagging feature, tagged attach does not support the config"}],"source_content_type":"text/x-yaml","patch_set":58,"id":"5f201791_55bc4d04","line":5,"range":{"start_line":5,"start_character":64,"end_line":5,"end_character":71},"in_reply_to":"5f201791_8d47951e","updated":"2017-06-22 07:13:31.000000000","message":"Done","commit_id":"34fbcc0681fce830fb92bec47342d4287e3da7d1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f80a385a2fe34747cd556f2c2dbbe5b433b6893a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    the guest operating system through the metadata API. Unlike the original"},{"line_number":8,"context_line":"    device role tagging feature, tagged attach does not support the config"},{"line_number":9,"context_line":"    drive. Because the config drive was never designed to be dynamic, it only"},{"line_number":10,"context_line":"    contains device tags that were set at boot time with API 2.32. Any changes"},{"line_number":11,"context_line":"    made to tagged devices with API 2.49 while the server is running will only"},{"line_number":12,"context_line":"    be reflected in the metadata obtained from the metadata API. Because of"},{"line_number":13,"context_line":"    metadata caching, changes may take up to ``metadata_cache_expiration`` to"},{"line_number":14,"context_line":"    appear in the metadata API. The default value for"},{"line_number":15,"context_line":"    ``metadata_cache_expiration`` is 15 seconds."}],"source_content_type":"text/x-yaml","patch_set":58,"id":"5f201791_061b7a1b","line":12,"range":{"start_line":10,"start_character":67,"end_line":12,"end_character":65},"updated":"2017-06-20 22:41:57.000000000","message":"This is confusing because in the REST API version history document you said you can get it in the config drive if you reboot the instance:\n\nhttps://review.openstack.org/#/c/376021/58/nova/api/openstack/compute/rest_api_version_history.rst","commit_id":"34fbcc0681fce830fb92bec47342d4287e3da7d1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"5be47000da207378933bf6c1df3e01a4810938ea","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    the guest operating system through the metadata API. Unlike the original"},{"line_number":8,"context_line":"    device role tagging feature, tagged attach does not support the config"},{"line_number":9,"context_line":"    drive. Because the config drive was never designed to be dynamic, it only"},{"line_number":10,"context_line":"    contains device tags that were set at boot time with API 2.32. Any changes"},{"line_number":11,"context_line":"    made to tagged devices with API 2.49 while the server is running will only"},{"line_number":12,"context_line":"    be reflected in the metadata obtained from the metadata API. Because of"},{"line_number":13,"context_line":"    metadata caching, changes may take up to ``metadata_cache_expiration`` to"},{"line_number":14,"context_line":"    appear in the metadata API. The default value for"},{"line_number":15,"context_line":"    ``metadata_cache_expiration`` is 15 seconds."}],"source_content_type":"text/x-yaml","patch_set":58,"id":"5f201791_ade6d115","line":12,"range":{"start_line":10,"start_character":67,"end_line":12,"end_character":65},"in_reply_to":"5f201791_061b7a1b","updated":"2017-06-21 12:49:56.000000000","message":"Done","commit_id":"34fbcc0681fce830fb92bec47342d4287e3da7d1"}]}
