)]}'
{"specs/ocata/approved/expose-bdm-tags-in-rest-api.rst":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d47b4b242417797d6695ad86008754d7aa783d19","unresolved":false,"context_lines":[{"line_number":49,"context_line":"REST API impact"},{"line_number":50,"context_line":"---------------"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"There would be two API extensions that would change in a microversion:"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"#. The ``os-extended-volumes`` extension would add a \u0027tag\u0027 key to each object"},{"line_number":55,"context_line":"   in the ``os-extended-volumes:volumes_attached`` list in the server GET"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba5da102_1a1d870f","line":52,"range":{"start_line":52,"start_character":23,"end_line":52,"end_character":33},"updated":"2016-11-07 02:27:16.000000000","message":"exactly to say, we haven\u0027t extension any more :)","commit_id":"6291a447ad090a5f44821dabefdbb039cdc7eb28"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"aeeb7092735b13a7ead16df96b24a133e7be2c34","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"There would be two API extensions that would change in a microversion:"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"#. The ``os-extended-volumes`` extension would add a \u0027tag\u0027 key to each object"},{"line_number":55,"context_line":"   in the ``os-extended-volumes:volumes_attached`` list in the server GET"},{"line_number":56,"context_line":"   response. If the block device mapping does not have a tag value, the value"},{"line_number":57,"context_line":"   in the response would be None."}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba5da102_74822cca","line":54,"updated":"2016-11-04 21:32:44.000000000","message":"In the metadata API we exposed them as a \u0027tags\u0027 array [1]. This was done in the interest of future-proofness if we ever decide to allow multiple tags per device. In the interest of consistency, should we have a tags array here as well, composed of the single tag set at boot time?\n\nOn the other hand, when we set it in the REST API, it\u0027s singular, so maybe keep it singular here as well...\n\n[1] https://github.com/openstack/nova/blob/master/nova/api/metadata/base.py#L432","commit_id":"6291a447ad090a5f44821dabefdbb039cdc7eb28"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"174d38c25c480b7461b040149f6ebb9f42a55274","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"There would be two API extensions that would change in a microversion:"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"#. The ``os-extended-volumes`` extension would add a \u0027tag\u0027 key to each object"},{"line_number":55,"context_line":"   in the ``os-extended-volumes:volumes_attached`` list in the server GET"},{"line_number":56,"context_line":"   response. If the block device mapping does not have a tag value, the value"},{"line_number":57,"context_line":"   in the response would be None."}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba5da102_9aa9a9e2","line":54,"in_reply_to":"ba5da102_1a3119ed","updated":"2016-11-04 22:56:15.000000000","message":"Yeah, I think you\u0027re right, GET \u003c-\u003e POST consistency \u003e api \u003c-\u003e metadata API consistency","commit_id":"6291a447ad090a5f44821dabefdbb039cdc7eb28"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4a1a8e9c0c169c4d53ec41780ea6ca17949e0808","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"There would be two API extensions that would change in a microversion:"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"#. The ``os-extended-volumes`` extension would add a \u0027tag\u0027 key to each object"},{"line_number":55,"context_line":"   in the ``os-extended-volumes:volumes_attached`` list in the server GET"},{"line_number":56,"context_line":"   response. If the block device mapping does not have a tag value, the value"},{"line_number":57,"context_line":"   in the response would be None."}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba5da102_1a3119ed","line":54,"in_reply_to":"ba5da102_74822cca","updated":"2016-11-04 22:50:41.000000000","message":"I wanted the GET to reflect the POST so it wouldn\u0027t be an array.","commit_id":"6291a447ad090a5f44821dabefdbb039cdc7eb28"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"aeeb7092735b13a7ead16df96b24a133e7be2c34","unresolved":false,"context_lines":[{"line_number":55,"context_line":"   in the ``os-extended-volumes:volumes_attached`` list in the server GET"},{"line_number":56,"context_line":"   response. If the block device mapping does not have a tag value, the value"},{"line_number":57,"context_line":"   in the response would be None."},{"line_number":58,"context_line":"#. Similarly, the ``os-volume_attachments`` extension would add a \u0027tag\u0027 key"},{"line_number":59,"context_line":"   in the response for each volume attachment."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba5da102_b46cc437","line":58,"updated":"2016-11-04 21:32:44.000000000","message":"Same thought as above.","commit_id":"6291a447ad090a5f44821dabefdbb039cdc7eb28"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4a1a8e9c0c169c4d53ec41780ea6ca17949e0808","unresolved":false,"context_lines":[{"line_number":55,"context_line":"   in the ``os-extended-volumes:volumes_attached`` list in the server GET"},{"line_number":56,"context_line":"   response. If the block device mapping does not have a tag value, the value"},{"line_number":57,"context_line":"   in the response would be None."},{"line_number":58,"context_line":"#. Similarly, the ``os-volume_attachments`` extension would add a \u0027tag\u0027 key"},{"line_number":59,"context_line":"   in the response for each volume attachment."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba5da102_3a4c1d76","line":58,"in_reply_to":"ba5da102_b46cc437","updated":"2016-11-04 22:50:41.000000000","message":"ditto","commit_id":"6291a447ad090a5f44821dabefdbb039cdc7eb28"}],"specs/pike/approved/expose-bdm-tags-in-rest-api.rst":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a9a9377418b721e9de09b4fc58eadd28aa6bec93","unresolved":false,"context_lines":[{"line_number":40,"context_line":"The block device tags are stored in the config drive when the server is created"},{"line_number":41,"context_line":"and they can be retrieved via the metadata API, but that\u0027s done from within"},{"line_number":42,"context_line":"the guest rather than also being able to get them out of the REST API."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Data model impact"},{"line_number":45,"context_line":"-----------------"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9a30ddce_7576cb3f","line":43,"updated":"2017-03-07 06:39:23.000000000","message":"A question: so we can attach a tag to an ephemeral type device. So we still have no way to look up the tag for those devices. Did we say before that in the future we plan to expose all the BDM through the REST API? then that expose all the BDMs and all the tags.\n\nTry to memory what we discuss before.","commit_id":"7ae8dc6839f13aa01a7c27357c8f8bac6fa1955e"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ecbb3acc8faf6d7c69653f207f4da3f04663f2b6","unresolved":false,"context_lines":[{"line_number":40,"context_line":"The block device tags are stored in the config drive when the server is created"},{"line_number":41,"context_line":"and they can be retrieved via the metadata API, but that\u0027s done from within"},{"line_number":42,"context_line":"the guest rather than also being able to get them out of the REST API."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Data model impact"},{"line_number":45,"context_line":"-----------------"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"dfeb2761_9aec0190","line":43,"in_reply_to":"9a30ddce_33859d06","updated":"2017-04-04 13:28:37.000000000","message":"We only expose volume BDMs from os-volume_attachments, we don\u0027t expose local disks AFAIK.\n\nHow do we expose the tags on non-volumes?","commit_id":"7ae8dc6839f13aa01a7c27357c8f8bac6fa1955e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3b8efe667cb0387c7d17b65d1146f2d604714884","unresolved":false,"context_lines":[{"line_number":40,"context_line":"The block device tags are stored in the config drive when the server is created"},{"line_number":41,"context_line":"and they can be retrieved via the metadata API, but that\u0027s done from within"},{"line_number":42,"context_line":"the guest rather than also being able to get them out of the REST API."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Data model impact"},{"line_number":45,"context_line":"-----------------"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9a30ddce_33859d06","line":43,"in_reply_to":"9a30ddce_7576cb3f","updated":"2017-03-10 15:45:28.000000000","message":"We already expose BDMs out of the os-volume_attachments API so as long as there is a BDM related to a server then we\u0027ll show them, and their tags via this spec.\n\nUnless I\u0027m misunderstanding your question?","commit_id":"7ae8dc6839f13aa01a7c27357c8f8bac6fa1955e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9642c0184d8358c5d6766fbc8ec4b00047f209bd","unresolved":false,"context_lines":[{"line_number":40,"context_line":"The block device tags are stored in the config drive when the server is created"},{"line_number":41,"context_line":"and they can be retrieved via the metadata API, but that\u0027s done from within"},{"line_number":42,"context_line":"the guest rather than also being able to get them out of the REST API."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Data model impact"},{"line_number":45,"context_line":"-----------------"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"dfeb2761_68d4c048","line":43,"in_reply_to":"dfeb2761_9aec0190","updated":"2017-04-04 22:47:30.000000000","message":"Oh good point:\n\nhttps://github.com/openstack/nova/blob/master/nova/api/openstack/compute/extended_volumes.py#L29\n\n\u003e How do we expose the tags on non-volumes?\n\nI guess we don\u0027t? We don\u0027t expose ephemeral or swap devices out of the API at all today anywhere? I\u0027m drawing a blank if we do.","commit_id":"7ae8dc6839f13aa01a7c27357c8f8bac6fa1955e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"310d779d611a66b26fabbdd192da4d9191374ad7","unresolved":false,"context_lines":[{"line_number":49,"context_line":"REST API impact"},{"line_number":50,"context_line":"---------------"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"There would be two API extensions that would change in a microversion:"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"#. The ``os-extended-volumes`` extension would add a \u0027tag\u0027 key to each object"},{"line_number":55,"context_line":"   in the ``os-extended-volumes:volumes_attached`` list in the server GET"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_fd3f1d84","line":52,"range":{"start_line":52,"start_character":15,"end_line":52,"end_character":33},"updated":"2017-03-06 12:23:05.000000000","message":"or just say- two APIs (no extensions actually )","commit_id":"7ae8dc6839f13aa01a7c27357c8f8bac6fa1955e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3b8efe667cb0387c7d17b65d1146f2d604714884","unresolved":false,"context_lines":[{"line_number":49,"context_line":"REST API impact"},{"line_number":50,"context_line":"---------------"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"There would be two API extensions that would change in a microversion:"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"#. The ``os-extended-volumes`` extension would add a \u0027tag\u0027 key to each object"},{"line_number":55,"context_line":"   in the ``os-extended-volumes:volumes_attached`` list in the server GET"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9a30ddce_d390c145","line":52,"range":{"start_line":52,"start_character":15,"end_line":52,"end_character":33},"in_reply_to":"ba2be162_fd3f1d84","updated":"2017-03-10 15:45:28.000000000","message":"Done","commit_id":"7ae8dc6839f13aa01a7c27357c8f8bac6fa1955e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"310d779d611a66b26fabbdd192da4d9191374ad7","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"There would be two API extensions that would change in a microversion:"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"#. The ``os-extended-volumes`` extension would add a \u0027tag\u0027 key to each object"},{"line_number":55,"context_line":"   in the ``os-extended-volumes:volumes_attached`` list in the server GET"},{"line_number":56,"context_line":"   response. If the block device mapping does not have a tag value, the value"},{"line_number":57,"context_line":"   in the response would be None."}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_dd0a59d1","line":54,"range":{"start_line":54,"start_character":7,"end_line":54,"end_character":40},"updated":"2017-03-06 12:23:05.000000000","message":"server GET","commit_id":"7ae8dc6839f13aa01a7c27357c8f8bac6fa1955e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3b8efe667cb0387c7d17b65d1146f2d604714884","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"There would be two API extensions that would change in a microversion:"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"#. The ``os-extended-volumes`` extension would add a \u0027tag\u0027 key to each object"},{"line_number":55,"context_line":"   in the ``os-extended-volumes:volumes_attached`` list in the server GET"},{"line_number":56,"context_line":"   response. If the block device mapping does not have a tag value, the value"},{"line_number":57,"context_line":"   in the response would be None."}],"source_content_type":"text/x-rst","patch_set":2,"id":"9a30ddce_f395c532","line":54,"range":{"start_line":54,"start_character":7,"end_line":54,"end_character":40},"in_reply_to":"ba2be162_dd0a59d1","updated":"2017-03-10 15:45:28.000000000","message":"Done","commit_id":"7ae8dc6839f13aa01a7c27357c8f8bac6fa1955e"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ecbb3acc8faf6d7c69653f207f4da3f04663f2b6","unresolved":false,"context_lines":[{"line_number":54,"context_line":"#. The ``os-extended-volumes`` extension would add a \u0027tag\u0027 key to each object"},{"line_number":55,"context_line":"   in the ``os-extended-volumes:volumes_attached`` list in the server GET"},{"line_number":56,"context_line":"   response. If the block device mapping does not have a tag value, the value"},{"line_number":57,"context_line":"   in the response would be None."},{"line_number":58,"context_line":"#. Similarly, the ``os-volume_attachments`` extension would add a \u0027tag\u0027 key"},{"line_number":59,"context_line":"   in the response for each volume attachment."},{"line_number":60,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"dfeb2761_ba6a25ea","line":57,"range":{"start_line":57,"start_character":28,"end_line":57,"end_character":32},"updated":"2017-04-04 13:28:37.000000000","message":"do you mean \"null\" in the json? I guess examples are easier here.","commit_id":"7ae8dc6839f13aa01a7c27357c8f8bac6fa1955e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9642c0184d8358c5d6766fbc8ec4b00047f209bd","unresolved":false,"context_lines":[{"line_number":54,"context_line":"#. The ``os-extended-volumes`` extension would add a \u0027tag\u0027 key to each object"},{"line_number":55,"context_line":"   in the ``os-extended-volumes:volumes_attached`` list in the server GET"},{"line_number":56,"context_line":"   response. If the block device mapping does not have a tag value, the value"},{"line_number":57,"context_line":"   in the response would be None."},{"line_number":58,"context_line":"#. Similarly, the ``os-volume_attachments`` extension would add a \u0027tag\u0027 key"},{"line_number":59,"context_line":"   in the response for each volume attachment."},{"line_number":60,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"dfeb2761_c8c4ec93","line":57,"range":{"start_line":57,"start_character":28,"end_line":57,"end_character":32},"in_reply_to":"dfeb2761_ba6a25ea","updated":"2017-04-04 22:47:30.000000000","message":"Yeah I suppose.","commit_id":"7ae8dc6839f13aa01a7c27357c8f8bac6fa1955e"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ecbb3acc8faf6d7c69653f207f4da3f04663f2b6","unresolved":false,"context_lines":[{"line_number":57,"context_line":"   in the response would be None."},{"line_number":58,"context_line":"#. Similarly, the ``os-volume_attachments`` extension would add a \u0027tag\u0027 key"},{"line_number":59,"context_line":"   in the response for each volume attachment."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Security impact"},{"line_number":62,"context_line":"---------------"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"dfeb2761_bab58580","line":60,"updated":"2017-04-04 13:28:37.000000000","message":"Its nice to show the new API returns with the additional attributes in there, just to get the general idea.","commit_id":"7ae8dc6839f13aa01a7c27357c8f8bac6fa1955e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"310d779d611a66b26fabbdd192da4d9191374ad7","unresolved":false,"context_lines":[{"line_number":102,"context_line":"----------"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"Implement a new microversion and use that to toggle adding the block device"},{"line_number":105,"context_line":"mapping tag key to the response in the ``os-extended-volumes`` and"},{"line_number":106,"context_line":"``os-volume_attachments`` extensions."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_fdb2bd04","line":105,"range":{"start_line":105,"start_character":39,"end_line":105,"end_character":61},"updated":"2017-03-06 12:23:05.000000000","message":"server GET","commit_id":"7ae8dc6839f13aa01a7c27357c8f8bac6fa1955e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3b8efe667cb0387c7d17b65d1146f2d604714884","unresolved":false,"context_lines":[{"line_number":102,"context_line":"----------"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"Implement a new microversion and use that to toggle adding the block device"},{"line_number":105,"context_line":"mapping tag key to the response in the ``os-extended-volumes`` and"},{"line_number":106,"context_line":"``os-volume_attachments`` extensions."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9a30ddce_339cbd5c","line":105,"range":{"start_line":105,"start_character":39,"end_line":105,"end_character":61},"in_reply_to":"ba2be162_fdb2bd04","updated":"2017-03-10 15:45:28.000000000","message":"Done","commit_id":"7ae8dc6839f13aa01a7c27357c8f8bac6fa1955e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"310d779d611a66b26fabbdd192da4d9191374ad7","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"Implement a new microversion and use that to toggle adding the block device"},{"line_number":105,"context_line":"mapping tag key to the response in the ``os-extended-volumes`` and"},{"line_number":106,"context_line":"``os-volume_attachments`` extensions."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba2be162_5dcca988","line":106,"range":{"start_line":106,"start_character":26,"end_line":106,"end_character":36},"updated":"2017-03-06 12:23:05.000000000","message":"APIs","commit_id":"7ae8dc6839f13aa01a7c27357c8f8bac6fa1955e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3b8efe667cb0387c7d17b65d1146f2d604714884","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"Implement a new microversion and use that to toggle adding the block device"},{"line_number":105,"context_line":"mapping tag key to the response in the ``os-extended-volumes`` and"},{"line_number":106,"context_line":"``os-volume_attachments`` extensions."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9a30ddce_53a5b19f","line":106,"range":{"start_line":106,"start_character":26,"end_line":106,"end_character":36},"in_reply_to":"ba2be162_5dcca988","updated":"2017-03-10 15:45:28.000000000","message":"Done","commit_id":"7ae8dc6839f13aa01a7c27357c8f8bac6fa1955e"}],"specs/stein/approved/expose-virtual-device-tags-in-rest-api.rst":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0bbe2fac3a574f5998f2ee4ef023b22e040150c3","unresolved":false,"context_lines":[{"line_number":27,"context_line":"metadata API service, but not the front-end compute REST API."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Furthermore, correlating volume attachments to BlockDeviceMapping objects"},{"line_number":30,"context_line":"via tag has come up in the `Remove device from volume attach requests`_ spec"},{"line_number":31,"context_line":"as a way to replace reliance on the otherwise unused ``device`` field to"},{"line_number":32,"context_line":"determine ordering of block devices within the guest."},{"line_number":33,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_48a43a4c","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":7},"updated":"2018-10-27 00:43:03.000000000","message":"Not all attachments have tags, so I\u0027m not sure how that would work, but I haven\u0027t read that spec yet.","commit_id":"112431c707bbe39933d6db85706cf375c9639747"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3e2c9dea6651251fab3ad2bd1231f6f973631d49","unresolved":false,"context_lines":[{"line_number":29,"context_line":"Furthermore, correlating volume attachments to BlockDeviceMapping objects"},{"line_number":30,"context_line":"via tag has come up in the `Remove device from volume attach requests`_ spec"},{"line_number":31,"context_line":"as a way to replace reliance on the otherwise unused ``device`` field to"},{"line_number":32,"context_line":"determine ordering of block devices within the guest."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Using volume attachment tags was also an option discussed in the"},{"line_number":35,"context_line":"`Detach and attach boot volumes`_ spec as a way to indicate which volume"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_94ae0e9e","line":32,"updated":"2018-12-20 14:44:39.000000000","message":"I\u0027d tend to keep this spec as simplistic as possible and not tell about other related specs but meh.","commit_id":"112431c707bbe39933d6db85706cf375c9639747"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3e2c9dea6651251fab3ad2bd1231f6f973631d49","unresolved":false,"context_lines":[{"line_number":66,"context_line":"and show details about a port attached to an instance, respectively."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"The device tag for a port attached to an instance is not stored in neutron,"},{"line_number":69,"context_line":"it is stored in the nova cell database ``virtual_interfaces`` table. So the"},{"line_number":70,"context_line":"problem we have is one of performance when listing ports attached to a server"},{"line_number":71,"context_line":"and we want to show tags because we would have to query both the neutron API"},{"line_number":72,"context_line":"to list ports and then the ``virtual_interfaces`` table for the instance to"},{"line_number":73,"context_line":"get the tags. We have two options:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_947cce21","line":70,"range":{"start_line":69,"start_character":68,"end_line":70,"end_character":77},"updated":"2018-12-20 14:44:39.000000000","message":"good catch","commit_id":"112431c707bbe39933d6db85706cf375c9639747"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"88c4a10ccffd7fd95b8e1dec9613097284538005","unresolved":false,"context_lines":[{"line_number":73,"context_line":"get the tags. We have two options:"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"1. Accept that when listing ports for a single instance, doing one more DB"},{"line_number":76,"context_line":"   query to get the tags is not that big of an issue."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"2. Rather than proxy the calls to neutron, we could rely on the instance"},{"line_number":79,"context_line":"   network info cache to provide the details. That might be OK except we"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_f2b81d78","line":76,"updated":"2018-12-03 19:12:11.000000000","message":"What is the extra db query? We can fetch all the instance device tags at once, right? Would we not include device_metadata in expected_attrs\u003d when we\u0027re fetching an instance for the os-interfaces api?","commit_id":"112431c707bbe39933d6db85706cf375c9639747"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e6a29ac1947de37f46696ddf148dcb9cd33193a6","unresolved":false,"context_lines":[{"line_number":73,"context_line":"get the tags. We have two options:"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"1. Accept that when listing ports for a single instance, doing one more DB"},{"line_number":76,"context_line":"   query to get the tags is not that big of an issue."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"2. Rather than proxy the calls to neutron, we could rely on the instance"},{"line_number":79,"context_line":"   network info cache to provide the details. That might be OK except we"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_0db01e41","line":76,"in_reply_to":"3f79a3b5_f2b81d78","updated":"2018-12-03 19:28:29.000000000","message":"\u003e What is the extra db query?\n\nI was thinking of this:\n\nhttps://github.com/openstack/nova/blob/1e8c2c0dcb3ff9225407b890a6c99658b35764bc/nova/objects/virtual_interface.py#L140\n\n\u003e We can fetch all the instance device tags at once, right? Would we not include device_metadata in expected_attrs\u003d when we\u0027re fetching an instance for the os-interfaces api?\n\nI wasn\u0027t thinking about that, but it looks like it could work yeah if the devices are filtered by type:\n\nhttps://github.com/openstack/nova/blob/1e8c2c0dcb3ff9225407b890a6c99658b35764bc/nova/objects/virt_device_metadata.py#L84\n\nI would still have to correlate the ports to that list, but that should be possible by keying off the mac.\n\nI didn\u0027t really think about device_metadata most likely because it\u0027s constructed and saved in the virt driver rather than in the neutronv2.api code like the virtual_interfaces records. And the libvirt driver is the only one that supports tagged attach (hyperv and xenapi also support booting a server with tagged devices, just not attaching them with tags).","commit_id":"112431c707bbe39933d6db85706cf375c9639747"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"88c4a10ccffd7fd95b8e1dec9613097284538005","unresolved":false,"context_lines":[{"line_number":80,"context_line":"   currently do not store the tags in the info cache, so for any existing"},{"line_number":81,"context_line":"   instance the tags would not be shown, unless we did a DB query to look"},{"line_number":82,"context_line":"   for them and heal the cache."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"Given the complications with option 2, this spec will just use option 1."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"**Non-volume BDMs**"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_12f59952","line":83,"updated":"2018-12-03 19:12:11.000000000","message":"Note that we could parallelize calling neutron and collecting the tag info for the instance. I\u0027m sure the call to neutron will take longer, which would make this take no longer than it does today.","commit_id":"112431c707bbe39933d6db85706cf375c9639747"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e6a29ac1947de37f46696ddf148dcb9cd33193a6","unresolved":false,"context_lines":[{"line_number":80,"context_line":"   currently do not store the tags in the info cache, so for any existing"},{"line_number":81,"context_line":"   instance the tags would not be shown, unless we did a DB query to look"},{"line_number":82,"context_line":"   for them and heal the cache."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"Given the complications with option 2, this spec will just use option 1."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"**Non-volume BDMs**"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_4d8ff676","line":83,"in_reply_to":"3f79a3b5_12f59952","updated":"2018-12-03 19:28:29.000000000","message":"I\u0027m not sure introducing parallel calls is worth it for this since it\u0027s scoped to a single instance. If instance.device_metadata works, I\u0027ll just do that and we can join that field when loading the instance as you noted.","commit_id":"112431c707bbe39933d6db85706cf375c9639747"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"57df3013d2743ee06637600ad293acaaf703dea7","unresolved":false,"context_lines":[{"line_number":80,"context_line":"   currently do not store the tags in the info cache, so for any existing"},{"line_number":81,"context_line":"   instance the tags would not be shown, unless we did a DB query to look"},{"line_number":82,"context_line":"   for them and heal the cache."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"Given the complications with option 2, this spec will just use option 1."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"**Non-volume BDMs**"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_cd2ea65a","line":83,"in_reply_to":"3f79a3b5_4d8ff676","updated":"2018-12-03 19:35:38.000000000","message":"Well, I\u0027m thinking about this from an edge perspective, or even the way CERN\u0027s cloud is oriented, where cells are geographic and thus the added call to the DB isn\u0027t as low-cost as it conventionally has been.\n\nAnyway, it\u0027s probably easy to do that after the fact if we decide to do it, but it\u0027s really not that much work to do. I understand the danger of pre-optimization, but knowing the new geographically-distributed future we have, the more things we defer to later, the more likely it is that making measurable progress on performance will be \"death by a thousand cuts.\"","commit_id":"112431c707bbe39933d6db85706cf375c9639747"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0bbe2fac3a574f5998f2ee4ef023b22e040150c3","unresolved":false,"context_lines":[{"line_number":81,"context_line":"   instance the tags would not be shown, unless we did a DB query to look"},{"line_number":82,"context_line":"   for them and heal the cache."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"Given the complications with option 2, this spec will just use option 1."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"**Non-volume BDMs**"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_7bf69e92","line":84,"updated":"2018-10-27 00:43:03.000000000","message":"+1 on that from me. For a thing that already does a HTTP(S) query, adding a DB query doens\u0027t change much.","commit_id":"112431c707bbe39933d6db85706cf375c9639747"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3e2c9dea6651251fab3ad2bd1231f6f973631d49","unresolved":false,"context_lines":[{"line_number":82,"context_line":"   for them and heal the cache."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"Given the complications with option 2, this spec will just use option 1."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"**Non-volume BDMs**"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"It should be noted that swap and ephemeral block devices can also have"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_54c5d633","line":85,"updated":"2018-12-20 14:44:39.000000000","message":"Given all the discussion above, I feel we somehow decided on a reasonable path that needs to be checked during the implementation phase. I\u0027m all good with the approach.","commit_id":"112431c707bbe39933d6db85706cf375c9639747"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3e2c9dea6651251fab3ad2bd1231f6f973631d49","unresolved":false,"context_lines":[{"line_number":98,"context_line":"------------"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"In addition to showing the tags in the ``os-volume_attachments`` and"},{"line_number":101,"context_line":"``os-interface`` APIs, we could also modify the server show/list view builder"},{"line_number":102,"context_line":"to provide tags in the server resource ``os-extended-volumes:volumes_attached``"},{"line_number":103,"context_line":"and ``addresses`` fields. This would be trivial to do for showing attached"},{"line_number":104,"context_line":"volume tags since we already query the DB per instance to get the BDMs, but as"},{"line_number":105,"context_line":"noted in the `Proposed change`_ section, it would be non-trivial for port tags"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_b4222a0d","line":102,"range":{"start_line":101,"start_character":44,"end_line":102,"end_character":37},"updated":"2018-12-20 14:44:39.000000000","message":"no, multiple times no. We already have a large view of a server resource, I just don\u0027t want to inflate more server details for things that are purely optional and more oriented to be on the related resource instead of the main server.","commit_id":"112431c707bbe39933d6db85706cf375c9639747"},{"author":{"_account_id":16137,"name":"Tobias Urdin","email":"tobias.urdin@binero.com","username":"tobasco"},"change_message_id":"caddbc84c75ce0159f2139a1c4785cf271a37672","unresolved":false,"context_lines":[{"line_number":111,"context_line":"way to get the tag information for all volumes/ports attached to a given"},{"line_number":112,"context_line":"server resource."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"We could also take this opportunity to expose other fields on the"},{"line_number":115,"context_line":"BlockDeviceMapping which are inputs when creating a server, like"},{"line_number":116,"context_line":"``boot_index``, ``volume_type``, ``source_type``, ``destination_type``,"},{"line_number":117,"context_line":"``guest_format``, etc. For simplicity, that is omitted from the proposed"},{"line_number":118,"context_line":"change since it\u0027s simpler to just focus on tag exposure for multiple types"},{"line_number":119,"context_line":"of resources."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Data model impact"},{"line_number":122,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_2f9a3dc3","line":119,"range":{"start_line":114,"start_character":0,"end_line":119,"end_character":13},"updated":"2018-11-08 11:11:19.000000000","message":"This is something of high importance to me, especially boot_index because I have a use-case where I need to be able to obtain the boot_index through the API.\n\nCould this be changed to be included in this spec or could should we move it out of this spec to it\u0027s own to make it faster/easier to implement?\n\nI would like to learn more about the internal workings of Nova so I would be up for working on it if it\u0027s somewhat suitable for a new contributor.","commit_id":"112431c707bbe39933d6db85706cf375c9639747"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c3e5ecd9e179fc0bf1ffb155a3cea275db8e935","unresolved":false,"context_lines":[{"line_number":111,"context_line":"way to get the tag information for all volumes/ports attached to a given"},{"line_number":112,"context_line":"server resource."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"We could also take this opportunity to expose other fields on the"},{"line_number":115,"context_line":"BlockDeviceMapping which are inputs when creating a server, like"},{"line_number":116,"context_line":"``boot_index``, ``volume_type``, ``source_type``, ``destination_type``,"},{"line_number":117,"context_line":"``guest_format``, etc. For simplicity, that is omitted from the proposed"},{"line_number":118,"context_line":"change since it\u0027s simpler to just focus on tag exposure for multiple types"},{"line_number":119,"context_line":"of resources."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Data model impact"},{"line_number":122,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_599e4afa","line":119,"range":{"start_line":114,"start_character":0,"end_line":119,"end_character":13},"in_reply_to":"3f79a3b5_2f9a3dc3","updated":"2018-11-09 14:24:36.000000000","message":"I think we could make an exception for boot_index so we don\u0027t have to \"burn\" another microversion on that. In thinking about volume_type, that is probably not great in case the volume that is attached gets retyped and triggers a swap volume. In that case we probably don\u0027t want to be on the hook for mirroring the volume type for all volumes attached to the server. The guest_format is for non-volume BDMs so that doesn\u0027t really make sense here since we don\u0027t expose those out of the REST API. And source/destination type is probably less useful as well, since the destination_type would always be \u0027volume\u0027 and it probably doesn\u0027t matter what the source type is (blank/image/volume). So of all of these other fields, boot_index would be the most useful.\n\nI\u0027ll try to get feedback from the room during this Forum session next week:\n\nhttps://etherpad.openstack.org/p/BER-bfv-improvements","commit_id":"112431c707bbe39933d6db85706cf375c9639747"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"12b8531bfac9b0eb5ea4e37a066e586efad18f04","unresolved":false,"context_lines":[{"line_number":111,"context_line":"way to get the tag information for all volumes/ports attached to a given"},{"line_number":112,"context_line":"server resource."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"We could also take this opportunity to expose other fields on the"},{"line_number":115,"context_line":"BlockDeviceMapping which are inputs when creating a server, like"},{"line_number":116,"context_line":"``boot_index``, ``volume_type``, ``source_type``, ``destination_type``,"},{"line_number":117,"context_line":"``guest_format``, etc. For simplicity, that is omitted from the proposed"},{"line_number":118,"context_line":"change since it\u0027s simpler to just focus on tag exposure for multiple types"},{"line_number":119,"context_line":"of resources."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Data model impact"},{"line_number":122,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_d5a4e1a6","line":119,"range":{"start_line":114,"start_character":0,"end_line":119,"end_character":13},"in_reply_to":"3f79a3b5_599e4afa","updated":"2018-11-19 14:31:45.000000000","message":"We discussed adding boot_index to the os-volume_attachments API at the summit and agreed to do it, but the thought was we should do it in the detach/attach root volume blueprint:\n\nhttps://specs.openstack.org/openstack/nova-specs/specs/stein/approved/detach-boot-volume.html\n\nSince that needs to add an is_root parameter to the volume attach API anyway, and it would be useful to know which volume is the root volume as part of that spec instead of this one.","commit_id":"112431c707bbe39933d6db85706cf375c9639747"},{"author":{"_account_id":16137,"name":"Tobias Urdin","email":"tobias.urdin@binero.com","username":"tobasco"},"change_message_id":"93a9243ed2e16725ab3ae695f137175927a108f0","unresolved":false,"context_lines":[{"line_number":111,"context_line":"way to get the tag information for all volumes/ports attached to a given"},{"line_number":112,"context_line":"server resource."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"We could also take this opportunity to expose other fields on the"},{"line_number":115,"context_line":"BlockDeviceMapping which are inputs when creating a server, like"},{"line_number":116,"context_line":"``boot_index``, ``volume_type``, ``source_type``, ``destination_type``,"},{"line_number":117,"context_line":"``guest_format``, etc. For simplicity, that is omitted from the proposed"},{"line_number":118,"context_line":"change since it\u0027s simpler to just focus on tag exposure for multiple types"},{"line_number":119,"context_line":"of resources."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Data model impact"},{"line_number":122,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_3518b585","line":119,"range":{"start_line":114,"start_character":0,"end_line":119,"end_character":13},"in_reply_to":"3f79a3b5_d5a4e1a6","updated":"2018-11-19 14:53:15.000000000","message":"Awesome, super thanks for bringing it up! Maybe next time I\u0027ll be able to attend some events.","commit_id":"112431c707bbe39933d6db85706cf375c9639747"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0bbe2fac3a574f5998f2ee4ef023b22e040150c3","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"There are two API resource routes which would be changed. In all cases,"},{"line_number":130,"context_line":"if the block device mapping or virtual interface record does not have a tag"},{"line_number":131,"context_line":"specified, the response value for the ``tag`` key will be ``None``."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"os-volume_attachments"},{"line_number":134,"context_line":"~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_fb106ead","line":131,"range":{"start_line":131,"start_character":40,"end_line":131,"end_character":43},"updated":"2018-10-27 00:43:03.000000000","message":"I may have asked this on a previous revision, but in the metadata API/config drive, we expose tags plural, as a list. That plural exists pretty much only in the metadata API - everything else inside Nova works with a single tag per device. So sticking to a single tag in the REST API is definitely closer to reality, but it does introduce this weird inconsistency.","commit_id":"112431c707bbe39933d6db85706cf375c9639747"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d860a0863c69bd10a6f1717f295b9acf88832019","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"There are two API resource routes which would be changed. In all cases,"},{"line_number":130,"context_line":"if the block device mapping or virtual interface record does not have a tag"},{"line_number":131,"context_line":"specified, the response value for the ``tag`` key will be ``None``."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"os-volume_attachments"},{"line_number":134,"context_line":"~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_0bfb8a15","line":131,"range":{"start_line":131,"start_character":40,"end_line":131,"end_character":43},"in_reply_to":"3f79a3b5_fb106ead","updated":"2018-10-29 13:59:01.000000000","message":"I don\u0027t know why it is a list in the metadata API. You can only create an attachment with a single tag so I think the response body should reflect the request body and the data model we have, not what we might exist in the future (which is I\u0027m guessing why it\u0027s a list in the metadata API).","commit_id":"112431c707bbe39933d6db85706cf375c9639747"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b67ed7b0e5dcdd2e0ab539709556d07d12f9c73a","unresolved":false,"context_lines":[{"line_number":133,"context_line":"os-volume_attachments"},{"line_number":134,"context_line":"~~~~~~~~~~~~~~~~~~~~~"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"A ``tag`` field will be added to the response for each of the following APIs."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"* ``GET /servers/{server_id}/os-volume_attachments (list)``"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_9b64da4e","line":136,"range":{"start_line":136,"start_character":37,"end_line":136,"end_character":45},"updated":"2018-10-27 00:45:42.000000000","message":"\u003cLater\u003e Doh, just realised you meant POST response body, not request body.","commit_id":"112431c707bbe39933d6db85706cf375c9639747"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0bbe2fac3a574f5998f2ee4ef023b22e040150c3","unresolved":false,"context_lines":[{"line_number":163,"context_line":"       }"},{"line_number":164,"context_line":"     }"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"* ``POST /servers/{server_id}/os-volume_attachments (attach)``"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"  .. code-block:: json"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"     {"},{"line_number":171,"context_line":"       \"volumeAttachment\": {"},{"line_number":172,"context_line":"         \"device\": \"/dev/vdb\","},{"line_number":173,"context_line":"         \"id\": \"c996dd74-44a0-4fd1-a582-a14a4007cc94\","},{"line_number":174,"context_line":"         \"serverId\": \"2390fb4d-1693-45d7-b309-e29c4af16538\","},{"line_number":175,"context_line":"         \"volumeId\": \"c996dd74-44a0-4fd1-a582-a14a4007cc94\","},{"line_number":176,"context_line":"         \"tag\": \"data\""},{"line_number":177,"context_line":"       }"},{"line_number":178,"context_line":"     }"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"os-interface"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_bb067673","line":178,"range":{"start_line":166,"start_character":0,"end_line":178,"end_character":6},"updated":"2018-10-27 00:43:03.000000000","message":"Tags for POST were added in 2.49 ;)","commit_id":"112431c707bbe39933d6db85706cf375c9639747"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0bbe2fac3a574f5998f2ee4ef023b22e040150c3","unresolved":false,"context_lines":[{"line_number":219,"context_line":"       }"},{"line_number":220,"context_line":"     }"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"* ``POST /servers/{server_id}/os-interface (attach)``"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"  .. code-block:: json"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"     {"},{"line_number":227,"context_line":"       \"interfaceAttachment\": {"},{"line_number":228,"context_line":"         \"fixed_ips\": [{"},{"line_number":229,"context_line":"           \"ip_address\": \"192.168.1.4\","},{"line_number":230,"context_line":"           \"subnet_id\": \"f8a6e8f8-c2ec-497c-9f23-da9616de54ef\""},{"line_number":231,"context_line":"         }],"},{"line_number":232,"context_line":"         \"mac_addr\": \"fa:16:3e:4c:2c:31\","},{"line_number":233,"context_line":"         \"net_id\": \"3cb9bc59-5699-4588-a4b1-b87f96708bc6\","},{"line_number":234,"context_line":"         \"port_id\": \"ce531f90-199f-48c0-816c-13e38010b443\","},{"line_number":235,"context_line":"         \"port_state\": \"ACTIVE\","},{"line_number":236,"context_line":"         \"tag\": \"management\""},{"line_number":237,"context_line":"       }"},{"line_number":238,"context_line":"     }"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_db09f282","line":238,"range":{"start_line":222,"start_character":0,"end_line":238,"end_character":6},"updated":"2018-10-27 00:43:03.000000000","message":"Ditto re 2.49","commit_id":"112431c707bbe39933d6db85706cf375c9639747"}]}
