)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"9f90fb42298b505e0d02e37abd855511e841620e","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch allows the user to specify a tag for a virtual network"},{"line_number":10,"context_line":"interface and/or block device mapping when booting an instance."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I89247200f4cf1f644daf476727b4a6acb22b0cf6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5a18252c_6511adac","line":11,"updated":"2016-04-12 15:46:45.000000000","message":"nit: please add\n\nImplements: blueprint virt-device-role-tagging","commit_id":"174923e4192eff080da55c57e9cf7be713605b4d"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1eef5de55035d74495ab40ba490862bba499829","unresolved":false,"context_lines":[{"line_number":1009,"context_line":"            \"delete_on_termination\": true,"},{"line_number":1010,"context_line":"            \"tag\": \"disk1\" }"},{"line_number":1011,"context_line":""},{"line_number":1012,"context_line":"    The tag is an optional, arbitrary attribute that can be used to assign a tag to the"},{"line_number":1013,"context_line":"    block device. This tag is then exposed to the guest in the metadata API and the config"},{"line_number":1014,"context_line":"    drive and is associated to hardware metadata for that block device, such as bus (ex:"},{"line_number":1015,"context_line":"    SCSI), bus address (ex: 1:0:2:0), and serial."}],"source_content_type":"text/x-yaml","patch_set":45,"id":"3aaa91ec_fa9ef261","line":1012,"updated":"2016-06-28 02:01:36.000000000","message":"Need to point out this is only supported in a given microversion.","commit_id":"c93032bd7dc77d31024c383d3135f9bf18a65a62"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a276acb67254b721a11b91f59e9d637b0927ffa2","unresolved":false,"context_lines":[{"line_number":1009,"context_line":"            \"delete_on_termination\": true,"},{"line_number":1010,"context_line":"            \"tag\": \"disk1\" }"},{"line_number":1011,"context_line":""},{"line_number":1012,"context_line":"    The tag is an optional, arbitrary attribute that can be used to assign a tag to the"},{"line_number":1013,"context_line":"    block device. This tag is then exposed to the guest in the metadata API and the config"},{"line_number":1014,"context_line":"    drive and is associated to hardware metadata for that block device, such as bus (ex:"},{"line_number":1015,"context_line":"    SCSI), bus address (ex: 1:0:2:0), and serial."}],"source_content_type":"text/x-yaml","patch_set":45,"id":"3aaa91ec_1a165ea7","line":1012,"in_reply_to":"3aaa91ec_fa9ef261","updated":"2016-06-28 02:20:23.000000000","message":"Done","commit_id":"c93032bd7dc77d31024c383d3135f9bf18a65a62"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1eef5de55035d74495ab40ba490862bba499829","unresolved":false,"context_lines":[{"line_number":2621,"context_line":"    a network, specify the UUID of the network in the ``uuid`` attribute in a ``networks``"},{"line_number":2622,"context_line":"    object.  To provision the server instance with a NIC for an already existing port,"},{"line_number":2623,"context_line":"    specify the port-id in the ``port`` attribute in a ``networks`` object. To optinally"},{"line_number":2624,"context_line":"    assign an arbitrary tag to a virtual network interface, specify the tag attribute in"},{"line_number":2625,"context_line":"    the ``network`` object. An interface\u0027s tag is exposed to the guest in the metadata API"},{"line_number":2626,"context_line":"    and the config drive and is associated to hardware metadata for that network interface,"},{"line_number":2627,"context_line":"      such as bus (ex: PCI), bus address (ex: 0000:00:02.0), and MAC address."}],"source_content_type":"text/x-yaml","patch_set":45,"id":"3aaa91ec_9a788e2d","line":2624,"updated":"2016-06-28 02:01:36.000000000","message":"Let\u0027s throw this into a new paragraph and make a note about the minimum required microversion support for this.","commit_id":"c93032bd7dc77d31024c383d3135f9bf18a65a62"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a276acb67254b721a11b91f59e9d637b0927ffa2","unresolved":false,"context_lines":[{"line_number":2621,"context_line":"    a network, specify the UUID of the network in the ``uuid`` attribute in a ``networks``"},{"line_number":2622,"context_line":"    object.  To provision the server instance with a NIC for an already existing port,"},{"line_number":2623,"context_line":"    specify the port-id in the ``port`` attribute in a ``networks`` object. To optinally"},{"line_number":2624,"context_line":"    assign an arbitrary tag to a virtual network interface, specify the tag attribute in"},{"line_number":2625,"context_line":"    the ``network`` object. An interface\u0027s tag is exposed to the guest in the metadata API"},{"line_number":2626,"context_line":"    and the config drive and is associated to hardware metadata for that network interface,"},{"line_number":2627,"context_line":"      such as bus (ex: PCI), bus address (ex: 0000:00:02.0), and MAC address."}],"source_content_type":"text/x-yaml","patch_set":45,"id":"3aaa91ec_fa4d52c5","line":2624,"in_reply_to":"3aaa91ec_9a788e2d","updated":"2016-06-28 02:20:23.000000000","message":"Done","commit_id":"c93032bd7dc77d31024c383d3135f9bf18a65a62"}],"api-ref/source/servers.inc":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1eef5de55035d74495ab40ba490862bba499829","unresolved":false,"context_lines":[{"line_number":292,"context_line":"  - networks: networks"},{"line_number":293,"context_line":"  - networks.uuid: network_uuid"},{"line_number":294,"context_line":"  - networks.port: port"},{"line_number":295,"context_line":"  - networks.fixed_ip: fixed_ip"},{"line_number":296,"context_line":"  - personality: personality"},{"line_number":297,"context_line":"  - block_device_mapping_v2: block_device_mapping_v2"},{"line_number":298,"context_line":"  - block_device_mapping_v2.device_name: device_name"}],"source_content_type":"text/x-c++src","patch_set":45,"id":"3aaa91ec_9a9fee4f","line":295,"updated":"2016-06-28 02:01:36.000000000","message":"Need a networks.tag parameter with a minversion attribute on it.","commit_id":"c93032bd7dc77d31024c383d3135f9bf18a65a62"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a276acb67254b721a11b91f59e9d637b0927ffa2","unresolved":false,"context_lines":[{"line_number":292,"context_line":"  - networks: networks"},{"line_number":293,"context_line":"  - networks.uuid: network_uuid"},{"line_number":294,"context_line":"  - networks.port: port"},{"line_number":295,"context_line":"  - networks.fixed_ip: fixed_ip"},{"line_number":296,"context_line":"  - personality: personality"},{"line_number":297,"context_line":"  - block_device_mapping_v2: block_device_mapping_v2"},{"line_number":298,"context_line":"  - block_device_mapping_v2.device_name: device_name"}],"source_content_type":"text/x-c++src","patch_set":45,"id":"3aaa91ec_ba010a3c","line":295,"in_reply_to":"3aaa91ec_9a9fee4f","updated":"2016-06-28 02:20:23.000000000","message":"Done","commit_id":"c93032bd7dc77d31024c383d3135f9bf18a65a62"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1eef5de55035d74495ab40ba490862bba499829","unresolved":false,"context_lines":[{"line_number":300,"context_line":"  - block_device_mapping_v2.destination_type: destination_type"},{"line_number":301,"context_line":"  - block_device_mapping_v2.delete_on_termination: delete_on_termination"},{"line_number":302,"context_line":"  - block_device_mapping_v2.guest_format: guest_format"},{"line_number":303,"context_line":"  - block_device_mapping_v2.boot_index: boot_index"},{"line_number":304,"context_line":"  - config_drive: config_drive"},{"line_number":305,"context_line":"  - key_name: key_name"},{"line_number":306,"context_line":"  - os:scheduler_hints: os:scheduler_hints"}],"source_content_type":"text/x-c++src","patch_set":45,"id":"3aaa91ec_3a8eba27","line":303,"updated":"2016-06-28 02:01:36.000000000","message":"We should have a parameter for tag in here. The parameter will have a minversion attribute on it.","commit_id":"c93032bd7dc77d31024c383d3135f9bf18a65a62"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a276acb67254b721a11b91f59e9d637b0927ffa2","unresolved":false,"context_lines":[{"line_number":300,"context_line":"  - block_device_mapping_v2.destination_type: destination_type"},{"line_number":301,"context_line":"  - block_device_mapping_v2.delete_on_termination: delete_on_termination"},{"line_number":302,"context_line":"  - block_device_mapping_v2.guest_format: guest_format"},{"line_number":303,"context_line":"  - block_device_mapping_v2.boot_index: boot_index"},{"line_number":304,"context_line":"  - config_drive: config_drive"},{"line_number":305,"context_line":"  - key_name: key_name"},{"line_number":306,"context_line":"  - os:scheduler_hints: os:scheduler_hints"}],"source_content_type":"text/x-c++src","patch_set":45,"id":"3aaa91ec_ba88eac7","line":303,"in_reply_to":"3aaa91ec_3a8eba27","updated":"2016-06-28 02:20:23.000000000","message":"Done","commit_id":"c93032bd7dc77d31024c383d3135f9bf18a65a62"}],"doc/api_samples/servers/v2.32/server-create-req.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4b041c7df5e27809e945d068322d5e2a1d11ab5f","unresolved":false,"context_lines":[{"line_number":5,"context_line":"        \"flavorRef\" : \"http://openstack.example.com/flavors/1\","},{"line_number":6,"context_line":"        \"networks\" : [{"},{"line_number":7,"context_line":"            \"uuid\" : \"ff608d40-75e9-48cb-b745-77bb55b5eaf2\","},{"line_number":8,"context_line":"            \"tag\": \"nic1\""},{"line_number":9,"context_line":"        }],"},{"line_number":10,"context_line":"        \"block_device_mapping_v2\": [{"},{"line_number":11,"context_line":"            \"uuid\": \"6b5538b4-3a3e-4dcb-bf47-1f03a4c51be0\","}],"source_content_type":"application/json","patch_set":45,"id":"3aaa91ec_9ac6ce47","line":8,"updated":"2016-06-28 02:04:50.000000000","message":"Is this applied to the network or the port that is created on this network? I think it\u0027s the latter but I haven\u0027t reviewed this entire series so I\u0027m coming in late.","commit_id":"c93032bd7dc77d31024c383d3135f9bf18a65a62"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a276acb67254b721a11b91f59e9d637b0927ffa2","unresolved":false,"context_lines":[{"line_number":5,"context_line":"        \"flavorRef\" : \"http://openstack.example.com/flavors/1\","},{"line_number":6,"context_line":"        \"networks\" : [{"},{"line_number":7,"context_line":"            \"uuid\" : \"ff608d40-75e9-48cb-b745-77bb55b5eaf2\","},{"line_number":8,"context_line":"            \"tag\": \"nic1\""},{"line_number":9,"context_line":"        }],"},{"line_number":10,"context_line":"        \"block_device_mapping_v2\": [{"},{"line_number":11,"context_line":"            \"uuid\": \"6b5538b4-3a3e-4dcb-bf47-1f03a4c51be0\","}],"source_content_type":"application/json","patch_set":45,"id":"3aaa91ec_9aac0e37","line":8,"in_reply_to":"3aaa91ec_9ac6ce47","updated":"2016-06-28 02:20:23.000000000","message":"It\u0027s applied to the virtual network interface and is only used as a user-given identifier when exposing hardware metadata about said vnic to the guest in the metadata API and the config drive.","commit_id":"c93032bd7dc77d31024c383d3135f9bf18a65a62"}],"nova/api/openstack/api_version_request.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fb75fde6c00b7ca5325727f8df9fc60dbd1f88e2","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    * 2.30 - Add a force flag in live-migrate request body and change the"},{"line_number":81,"context_line":"             behaviour for the host flag by calling the scheduler."},{"line_number":82,"context_line":"    * 2.31 - Fix os-console-auth-tokens to work for all console types."},{"line_number":83,"context_line":"    * 2.32 - Add tag to networks in server boot request body"},{"line_number":84,"context_line":"\"\"\""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":43,"id":"3aaa91ec_f04a9cab","line":83,"range":{"start_line":83,"start_character":24,"end_line":83,"end_character":32},"updated":"2016-06-27 21:18:16.000000000","message":"And block_device_mapping_v2.","commit_id":"a60d6d6a8cf96e31aa8967703f6515640cc530b9"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c85e3235053dc88b586bb8f3394e0f0d50ccab68","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    * 2.30 - Add a force flag in live-migrate request body and change the"},{"line_number":81,"context_line":"             behaviour for the host flag by calling the scheduler."},{"line_number":82,"context_line":"    * 2.31 - Fix os-console-auth-tokens to work for all console types."},{"line_number":83,"context_line":"    * 2.32 - Add tag to networks in server boot request body"},{"line_number":84,"context_line":"\"\"\""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":43,"id":"3aaa91ec_56d28835","line":83,"range":{"start_line":83,"start_character":24,"end_line":83,"end_character":32},"in_reply_to":"3aaa91ec_f04a9cab","updated":"2016-06-27 23:31:46.000000000","message":"Done","commit_id":"a60d6d6a8cf96e31aa8967703f6515640cc530b9"}],"nova/api/openstack/compute/schemas/block_device_mapping.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fb75fde6c00b7ca5325727f8df9fc60dbd1f88e2","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        \u0027type\u0027: [\u0027integer\u0027, \u0027string\u0027],"},{"line_number":60,"context_line":"        \u0027pattern\u0027: \u0027^-?[0-9]+$\u0027,"},{"line_number":61,"context_line":"    },"},{"line_number":62,"context_line":"    \u0027tag\u0027: {"},{"line_number":63,"context_line":"        \u0027type\u0027: \u0027string\u0027,"},{"line_number":64,"context_line":"    },"},{"line_number":65,"context_line":"}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"block_device_mapping \u003d copy.deepcopy("}],"source_content_type":"text/x-python","patch_set":43,"id":"3aaa91ec_307d44e8","line":64,"range":{"start_line":62,"start_character":4,"end_line":64,"end_character":6},"updated":"2016-06-27 21:18:16.000000000","message":"This changes the bdm schema for every version request, not just 2.32, I think. I\u0027d think you\u0027d need to modify this method:\n\nhttps://github.com/openstack/nova/blob/master/nova/api/openstack/compute/block_device_mapping.py#L76","commit_id":"a60d6d6a8cf96e31aa8967703f6515640cc530b9"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c85e3235053dc88b586bb8f3394e0f0d50ccab68","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        \u0027type\u0027: [\u0027integer\u0027, \u0027string\u0027],"},{"line_number":60,"context_line":"        \u0027pattern\u0027: \u0027^-?[0-9]+$\u0027,"},{"line_number":61,"context_line":"    },"},{"line_number":62,"context_line":"    \u0027tag\u0027: {"},{"line_number":63,"context_line":"        \u0027type\u0027: \u0027string\u0027,"},{"line_number":64,"context_line":"    },"},{"line_number":65,"context_line":"}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"block_device_mapping \u003d copy.deepcopy("}],"source_content_type":"text/x-python","patch_set":43,"id":"3aaa91ec_5630c807","line":64,"range":{"start_line":62,"start_character":4,"end_line":64,"end_character":6},"in_reply_to":"3aaa91ec_307d44e8","updated":"2016-06-27 23:31:46.000000000","message":"Done","commit_id":"a60d6d6a8cf96e31aa8967703f6515640cc530b9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5e68b26eaaff1585251706489aa74a1d3555061a","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        \u0027type\u0027: [\u0027integer\u0027, \u0027string\u0027],"},{"line_number":60,"context_line":"        \u0027pattern\u0027: \u0027^-?[0-9]+$\u0027,"},{"line_number":61,"context_line":"    },"},{"line_number":62,"context_line":"    \u0027tag\u0027: {"},{"line_number":63,"context_line":"        \u0027type\u0027: \u0027string\u0027,"},{"line_number":64,"context_line":"    },"},{"line_number":65,"context_line":"}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"block_device_mapping \u003d copy.deepcopy("}],"source_content_type":"text/x-python","patch_set":43,"id":"3aaa91ec_b3d93e86","line":64,"range":{"start_line":62,"start_character":4,"end_line":64,"end_character":6},"in_reply_to":"3aaa91ec_307d44e8","updated":"2016-06-27 21:24:07.000000000","message":"I assume you\u0027ll also need to update https://github.com/openstack/nova/blob/master/nova/block_device.py#L176 which is called from the REST API to populate the bdm dict which eventually gets turned into the bdm object.","commit_id":"a60d6d6a8cf96e31aa8967703f6515640cc530b9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6b01e9a552576c94886ba6eba67bfd712de25f02","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        \u0027type\u0027: [\u0027integer\u0027, \u0027string\u0027],"},{"line_number":60,"context_line":"        \u0027pattern\u0027: \u0027^-?[0-9]+$\u0027,"},{"line_number":61,"context_line":"    },"},{"line_number":62,"context_line":"    \u0027tag\u0027: {"},{"line_number":63,"context_line":"        \u0027type\u0027: \u0027string\u0027,"},{"line_number":64,"context_line":"    },"},{"line_number":65,"context_line":"}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"block_device_mapping \u003d copy.deepcopy("}],"source_content_type":"text/x-python","patch_set":43,"id":"3aaa91ec_337d4ee8","line":64,"range":{"start_line":62,"start_character":4,"end_line":64,"end_character":6},"in_reply_to":"3aaa91ec_b3d93e86","updated":"2016-06-27 21:36:57.000000000","message":"Ignore the last comment, you don\u0027t need to modify https://github.com/openstack/nova/blob/master/nova/block_device.py#L176 - it just does special validation and passes the rest back so should be fine.","commit_id":"a60d6d6a8cf96e31aa8967703f6515640cc530b9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9690bba74dd2bc02803934a78bd1909837918913","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"block_device_mapping_v232_new_item \u003d {"},{"line_number":76,"context_line":"    \u0027tag\u0027: {"},{"line_number":77,"context_line":"        \u0027type\u0027: \u0027string\u0027,"},{"line_number":78,"context_line":"    },"},{"line_number":79,"context_line":"}"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":60,"id":"3aaa91ec_0f0b4525","line":77,"range":{"start_line":77,"start_character":8,"end_line":77,"end_character":25},"updated":"2016-06-30 00:33:07.000000000","message":"This is not consistent with the server request schema for networks.","commit_id":"fe48d3ec9fa82e3c75773e128c2fe2fc69f547da"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"38721f6e2289b92312b1ed267f72639901b30e86","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"block_device_mapping_v232_new_item \u003d {"},{"line_number":76,"context_line":"    \u0027tag\u0027: {"},{"line_number":77,"context_line":"        \u0027type\u0027: \u0027string\u0027,"},{"line_number":78,"context_line":"    },"},{"line_number":79,"context_line":"}"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":60,"id":"3aaa91ec_3a963d3e","line":77,"range":{"start_line":77,"start_character":8,"end_line":77,"end_character":25},"in_reply_to":"3aaa91ec_0f0b4525","updated":"2016-06-30 01:55:05.000000000","message":"Done","commit_id":"fe48d3ec9fa82e3c75773e128c2fe2fc69f547da"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6276f946c394d291919ab566a2220308ae48289b","unresolved":false,"context_lines":[{"line_number":74,"context_line":"}"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"block_device_mapping_v232_new_item \u003d {"},{"line_number":77,"context_line":"    \u0027tag\u0027: server_tags.tag"},{"line_number":78,"context_line":"}"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"block_device_mapping_v232 \u003d copy.deepcopy(block_device_mapping)"}],"source_content_type":"text/x-python","patch_set":63,"id":"3aaa91ec_4a737880","line":77,"updated":"2016-06-30 03:46:03.000000000","message":"We probably need to ask Alex Xu or Ken\u0027ichi about this, but I looked at how the server tags extension handles this schema and it\u0027s not actually part of the body validation from what I can tell, it\u0027s explicitly validated in the REST method, e.g.:\n\nhttps://github.com/openstack/nova/blob/master/nova/api/openstack/compute/server_tags.py#L95\n\nI\u0027m not really sure why, but I\u0027m not comfortable landing this without hearing from one of the guys that are more knowledgeable about this.","commit_id":"e3213c87d4a57cbbacba93741819508e4dcdb72a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6a406305b5c133482804723f090c8aa981436b23","unresolved":false,"context_lines":[{"line_number":74,"context_line":"}"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"block_device_mapping_v232_new_item \u003d {"},{"line_number":77,"context_line":"    \u0027tag\u0027: server_tags.tag"},{"line_number":78,"context_line":"}"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"block_device_mapping_v232 \u003d copy.deepcopy(block_device_mapping)"}],"source_content_type":"text/x-python","patch_set":63,"id":"3aaa91ec_80efffaf","line":77,"in_reply_to":"3aaa91ec_4a737880","updated":"2016-06-30 05:50:58.000000000","message":"It is ok at here. For server-tags, it needs validate the id which in the URL. The json-schema only can validate the request body, can\u0027t validate the parameter from the URL.","commit_id":"e3213c87d4a57cbbacba93741819508e4dcdb72a"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"cd7a43fb75e0f1e0bcd16500582d11246c9cd338","unresolved":false,"context_lines":[{"line_number":74,"context_line":"}"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"block_device_mapping_v232_new_item \u003d {"},{"line_number":77,"context_line":"    \u0027tag\u0027: server_tags.tag"},{"line_number":78,"context_line":"}"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"block_device_mapping_v232 \u003d copy.deepcopy(block_device_mapping)"}],"source_content_type":"text/x-python","patch_set":63,"id":"3aaa91ec_fbe95480","line":77,"in_reply_to":"3aaa91ec_80efffaf","updated":"2016-06-30 07:17:47.000000000","message":"Yea that\u0027s fine as Alex mentioned. even we had some TODO on server-tag API validation but those are not related/effect this one.","commit_id":"e3213c87d4a57cbbacba93741819508e4dcdb72a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c2d85bcd7178b3121ad511027055d1aea37a75d3","unresolved":false,"context_lines":[{"line_number":74,"context_line":"}"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"block_device_mapping_v232_new_item \u003d {"},{"line_number":77,"context_line":"    \u0027tag\u0027: server_tags.tag"},{"line_number":78,"context_line":"}"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"block_device_mapping_v232 \u003d copy.deepcopy(block_device_mapping)"}],"source_content_type":"text/x-python","patch_set":64,"id":"3aaa91ec_9ba7704f","line":77,"updated":"2016-06-30 06:40:31.000000000","message":"nit, we can move the \u0027server_tags.tag\u0027 to nova.api.validation.parameter_types.py. And this is something we can do in the later cleanup patch.","commit_id":"e83e114e1b00ec882276380be2331bebc79c833b"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"7d00c993b37d8869d61aeea11cfb0330b987d619","unresolved":false,"context_lines":[{"line_number":74,"context_line":"}"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"block_device_mapping_v232_new_item \u003d {"},{"line_number":77,"context_line":"    \u0027tag\u0027: server_tags.tag"},{"line_number":78,"context_line":"}"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"block_device_mapping_v232 \u003d copy.deepcopy(block_device_mapping)"}],"source_content_type":"text/x-python","patch_set":64,"id":"3aaa91ec_f5fad841","line":77,"in_reply_to":"3aaa91ec_9ba7704f","updated":"2016-06-30 18:54:59.000000000","message":"Yeah, nice point. agree with Alex.","commit_id":"e83e114e1b00ec882276380be2331bebc79c833b"}],"nova/api/openstack/compute/schemas/servers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9690bba74dd2bc02803934a78bd1909837918913","unresolved":false,"context_lines":[{"line_number":70,"context_line":"base_create_v232 \u003d copy.deepcopy(base_create_v219)"},{"line_number":71,"context_line":"base_create_v232[\u0027properties\u0027][\u0027server\u0027]["},{"line_number":72,"context_line":"    \u0027properties\u0027][\u0027networks\u0027][\u0027items\u0027]["},{"line_number":73,"context_line":"    \u0027properties\u0027][\u0027tag\u0027] \u003d parameter_types.name_with_leading_trailing_spaces"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"base_update \u003d {"}],"source_content_type":"text/x-python","patch_set":60,"id":"3aaa91ec_efffd9fe","line":73,"range":{"start_line":73,"start_character":27,"end_line":73,"end_character":76},"updated":"2016-06-30 00:33:07.000000000","message":"Do we want to use the same schema as the server tags API?\n\nhttps://github.com/openstack/nova/blob/master/nova/api/openstack/compute/schemas/server_tags.py#L13","commit_id":"fe48d3ec9fa82e3c75773e128c2fe2fc69f547da"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"38721f6e2289b92312b1ed267f72639901b30e86","unresolved":false,"context_lines":[{"line_number":70,"context_line":"base_create_v232 \u003d copy.deepcopy(base_create_v219)"},{"line_number":71,"context_line":"base_create_v232[\u0027properties\u0027][\u0027server\u0027]["},{"line_number":72,"context_line":"    \u0027properties\u0027][\u0027networks\u0027][\u0027items\u0027]["},{"line_number":73,"context_line":"    \u0027properties\u0027][\u0027tag\u0027] \u003d parameter_types.name_with_leading_trailing_spaces"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"base_update \u003d {"}],"source_content_type":"text/x-python","patch_set":60,"id":"3aaa91ec_fa7955fd","line":73,"range":{"start_line":73,"start_character":27,"end_line":73,"end_character":76},"in_reply_to":"3aaa91ec_efffd9fe","updated":"2016-06-30 01:55:05.000000000","message":"Done","commit_id":"fe48d3ec9fa82e3c75773e128c2fe2fc69f547da"}],"nova/api/openstack/compute/servers.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d05430e0e0525b2562ee6387a65e7f476ccd39a9","unresolved":false,"context_lines":[{"line_number":531,"context_line":"    @validation.schema(schema_server_create, \u00272.1\u0027, \u00272.18\u0027)"},{"line_number":532,"context_line":"    @validation.schema(schema_server_create_v219, \u00272.19\u0027, \u00272.31\u0027)"},{"line_number":533,"context_line":"    @validation.schema(schema_server_create_v232, \u00272.32\u0027)"},{"line_number":534,"context_line":"    def create(self, req, body):"},{"line_number":535,"context_line":"        \"\"\"Creates a new server for a given user.\"\"\""},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":43,"id":"3aaa91ec_d350540d","line":534,"updated":"2016-06-27 17:49:24.000000000","message":"We should fail this with some sane code if the SERVICE_VERSION does not indicate that all computes support tagging, for during an upgrade. We\u0027ll need to do it for any/all devices with tags, so maybe do a callout to a helper here that examines the request?","commit_id":"a60d6d6a8cf96e31aa8967703f6515640cc530b9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d112d5694574da52bb9e0367ed9bce5a7d0ef88e","unresolved":false,"context_lines":[{"line_number":531,"context_line":"    @validation.schema(schema_server_create, \u00272.1\u0027, \u00272.18\u0027)"},{"line_number":532,"context_line":"    @validation.schema(schema_server_create_v219, \u00272.19\u0027, \u00272.31\u0027)"},{"line_number":533,"context_line":"    @validation.schema(schema_server_create_v232, \u00272.32\u0027)"},{"line_number":534,"context_line":"    def create(self, req, body):"},{"line_number":535,"context_line":"        \"\"\"Creates a new server for a given user.\"\"\""},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":43,"id":"3aaa91ec_13b9322f","line":534,"in_reply_to":"3aaa91ec_d350540d","updated":"2016-06-27 21:22:14.000000000","message":"Yeah. Before you start on that, you can copy some of the stuff I\u0027ve done here:\n\nhttps://review.openstack.org/#/c/316398/27/nova/cmd/api.py\n\nand here:\n\nhttps://review.openstack.org/#/c/316398/27/nova/tests/unit/cmd/test_nova_api.py\n\nThe test one threw me for a loop at first.","commit_id":"a60d6d6a8cf96e31aa8967703f6515640cc530b9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0dfd4af38148d849c32fe93e5c9be2182af96fd1","unresolved":false,"context_lines":[{"line_number":389,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        # duplicate networks are allowed only for neutron v2.0"},{"line_number":392,"context_line":"        if net_id in network_uuids and not utils.is_neutron():"},{"line_number":393,"context_line":"            expl \u003d _(\"Duplicate networks (%s) are not allowed\") % net_id"},{"line_number":394,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dexpl)"},{"line_number":395,"context_line":""}],"source_content_type":"text/x-python","patch_set":51,"id":"3aaa91ec_d2775d39","line":392,"updated":"2016-06-29 02:22:02.000000000","message":"What happens if I request the same network id more than once, but only request the tag on one of them? I think artom was saying that if the tag is first in the first nic in the list, then the tag isn\u0027t applied or something...? I\u0027m having a hard time following that right now, but it probably has something to do with the compute manager code that creates the tagged VirtualInterface objects.\n\nWhat we could do is fail a request like that, i.e. this would fail:\n\nnova boot --nic net_id\u003d1234,tag\u003dfoo --nic net_id\u003d1234\n\nSo basically you can\u0027t request duplicate networks with a tag.","commit_id":"26db651f9b49b808c5261c8a9c2bcb51c25fbbd7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e6e186b36758f812bbf6a30edd1eabc89f4dccbf","unresolved":false,"context_lines":[{"line_number":389,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        # duplicate networks are allowed only for neutron v2.0"},{"line_number":392,"context_line":"        if net_id in network_uuids and not utils.is_neutron():"},{"line_number":393,"context_line":"            expl \u003d _(\"Duplicate networks (%s) are not allowed\") % net_id"},{"line_number":394,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dexpl)"},{"line_number":395,"context_line":""}],"source_content_type":"text/x-python","patch_set":51,"id":"3aaa91ec_520a298b","line":392,"in_reply_to":"3aaa91ec_d2775d39","updated":"2016-06-29 15:25:19.000000000","message":"Dan has alternative suggestions for this here:\n\nhttps://review.openstack.org/#/c/264017/63/nova/compute/manager.py","commit_id":"26db651f9b49b808c5261c8a9c2bcb51c25fbbd7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d037431e7db095abec1bee58017da91f47374b18","unresolved":false,"context_lines":[{"line_number":393,"context_line":"            expl \u003d _(\"Duplicate networks (%s) are not allowed\") % net_id"},{"line_number":394,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dexpl)"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"    def _get_requested_networks(self, requested_networks, min_compute_version):"},{"line_number":397,"context_line":"        \"\"\"Create a list of requested networks from the networks attribute.\"\"\""},{"line_number":398,"context_line":"        networks \u003d []"},{"line_number":399,"context_line":"        network_uuids \u003d []"}],"source_content_type":"text/x-python","patch_set":51,"id":"3aaa91ec_cffdfa3c","line":396,"range":{"start_line":396,"start_character":58,"end_line":396,"end_character":77},"updated":"2016-06-29 02:00:53.000000000","message":"This needs to be more descriptive I think since in my microversion change I\u0027m doing it based on a minimum compute version but for something different:\n\nhttps://review.openstack.org/#/c/316398/27/nova/api/openstack/compute/servers.py@700\n\nSee how supports_auto_alloc is used there.","commit_id":"26db651f9b49b808c5261c8a9c2bcb51c25fbbd7"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"619a2b4402c79685e76c8686efa6a636e5e5b5ec","unresolved":false,"context_lines":[{"line_number":393,"context_line":"            expl \u003d _(\"Duplicate networks (%s) are not allowed\") % net_id"},{"line_number":394,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dexpl)"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"    def _get_requested_networks(self, requested_networks, min_compute_version):"},{"line_number":397,"context_line":"        \"\"\"Create a list of requested networks from the networks attribute.\"\"\""},{"line_number":398,"context_line":"        networks \u003d []"},{"line_number":399,"context_line":"        network_uuids \u003d []"}],"source_content_type":"text/x-python","patch_set":51,"id":"3aaa91ec_2b2c5598","line":396,"range":{"start_line":396,"start_character":58,"end_line":396,"end_character":77},"in_reply_to":"3aaa91ec_32f221d3","updated":"2016-06-29 13:20:38.000000000","message":"Actually now that I\u0027m looking at it this morning, I have no idea what I was thinking last night, this is definitely not done.","commit_id":"26db651f9b49b808c5261c8a9c2bcb51c25fbbd7"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"4ca08d2e421b1c1687f3cb5cd779b3b534ffa4a4","unresolved":false,"context_lines":[{"line_number":393,"context_line":"            expl \u003d _(\"Duplicate networks (%s) are not allowed\") % net_id"},{"line_number":394,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dexpl)"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"    def _get_requested_networks(self, requested_networks, min_compute_version):"},{"line_number":397,"context_line":"        \"\"\"Create a list of requested networks from the networks attribute.\"\"\""},{"line_number":398,"context_line":"        networks \u003d []"},{"line_number":399,"context_line":"        network_uuids \u003d []"}],"source_content_type":"text/x-python","patch_set":51,"id":"3aaa91ec_32f221d3","line":396,"range":{"start_line":396,"start_character":58,"end_line":396,"end_character":77},"in_reply_to":"3aaa91ec_cffdfa3c","updated":"2016-06-29 02:30:24.000000000","message":"Definitely clearer and smarter, done.","commit_id":"26db651f9b49b808c5261c8a9c2bcb51c25fbbd7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9007d38e33123e38b008916d05034b6915b43fe6","unresolved":false,"context_lines":[{"line_number":533,"context_line":"            context.can(server_policies.SERVERS % \u0027create:attach_volume\u0027,"},{"line_number":534,"context_line":"                        target)"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        min_compute_version \u003d objects.Service.get_minimum_version("},{"line_number":537,"context_line":"            nova_context.get_admin_context(), \u0027nova-compute\u0027)"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"        for bdm in block_device_mapping:"}],"source_content_type":"text/x-python","patch_set":51,"id":"3aaa91ec_125e0512","line":536,"updated":"2016-06-29 02:06:14.000000000","message":"We need to cache this in the API worker, see what I do here:\n\nhttps://review.openstack.org/#/c/316398/27/nova/cmd/api.py","commit_id":"26db651f9b49b808c5261c8a9c2bcb51c25fbbd7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d037431e7db095abec1bee58017da91f47374b18","unresolved":false,"context_lines":[{"line_number":536,"context_line":"        min_compute_version \u003d objects.Service.get_minimum_version("},{"line_number":537,"context_line":"            nova_context.get_admin_context(), \u0027nova-compute\u0027)"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"        for bdm in block_device_mapping:"},{"line_number":540,"context_line":"            if (bdm.get(\u0027tag\u0027, None) and"},{"line_number":541,"context_line":"                min_compute_version \u003c DEVICE_TAGGING_MIN_COMPUTE_VERSION):"},{"line_number":542,"context_line":"                    msg \u003d _(\u0027Compute min_version is too old for block device \u0027"}],"source_content_type":"text/x-python","patch_set":51,"id":"3aaa91ec_4fbf4a60","line":539,"range":{"start_line":539,"start_character":19,"end_line":539,"end_character":39},"updated":"2016-06-29 02:00:53.000000000","message":"This might be None, you should fold this under the conditional above.","commit_id":"26db651f9b49b808c5261c8a9c2bcb51c25fbbd7"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"4ca08d2e421b1c1687f3cb5cd779b3b534ffa4a4","unresolved":false,"context_lines":[{"line_number":536,"context_line":"        min_compute_version \u003d objects.Service.get_minimum_version("},{"line_number":537,"context_line":"            nova_context.get_admin_context(), \u0027nova-compute\u0027)"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"        for bdm in block_device_mapping:"},{"line_number":540,"context_line":"            if (bdm.get(\u0027tag\u0027, None) and"},{"line_number":541,"context_line":"                min_compute_version \u003c DEVICE_TAGGING_MIN_COMPUTE_VERSION):"},{"line_number":542,"context_line":"                    msg \u003d _(\u0027Compute min_version is too old for block device \u0027"}],"source_content_type":"text/x-python","patch_set":51,"id":"3aaa91ec_32c98179","line":539,"range":{"start_line":539,"start_character":19,"end_line":539,"end_character":39},"in_reply_to":"3aaa91ec_4fbf4a60","updated":"2016-06-29 02:30:24.000000000","message":"Done","commit_id":"26db651f9b49b808c5261c8a9c2bcb51c25fbbd7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d037431e7db095abec1bee58017da91f47374b18","unresolved":false,"context_lines":[{"line_number":539,"context_line":"        for bdm in block_device_mapping:"},{"line_number":540,"context_line":"            if (bdm.get(\u0027tag\u0027, None) and"},{"line_number":541,"context_line":"                min_compute_version \u003c DEVICE_TAGGING_MIN_COMPUTE_VERSION):"},{"line_number":542,"context_line":"                    msg \u003d _(\u0027Compute min_version is too old for block device \u0027"},{"line_number":543,"context_line":"                            \u0027tags\u0027)"},{"line_number":544,"context_line":"                    raise exc.HTTPBadReqest(explanation\u003dmsg)"},{"line_number":545,"context_line":""}],"source_content_type":"text/x-python","patch_set":51,"id":"3aaa91ec_ef5ef643","line":542,"updated":"2016-06-29 02:00:53.000000000","message":"This isn\u0027t a very user-friendly error message. I\u0027d probably say something like \"Block device tags are not yet supported.\" or something like that.","commit_id":"26db651f9b49b808c5261c8a9c2bcb51c25fbbd7"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"4ca08d2e421b1c1687f3cb5cd779b3b534ffa4a4","unresolved":false,"context_lines":[{"line_number":539,"context_line":"        for bdm in block_device_mapping:"},{"line_number":540,"context_line":"            if (bdm.get(\u0027tag\u0027, None) and"},{"line_number":541,"context_line":"                min_compute_version \u003c DEVICE_TAGGING_MIN_COMPUTE_VERSION):"},{"line_number":542,"context_line":"                    msg \u003d _(\u0027Compute min_version is too old for block device \u0027"},{"line_number":543,"context_line":"                            \u0027tags\u0027)"},{"line_number":544,"context_line":"                    raise exc.HTTPBadReqest(explanation\u003dmsg)"},{"line_number":545,"context_line":""}],"source_content_type":"text/x-python","patch_set":51,"id":"3aaa91ec_128c457e","line":542,"in_reply_to":"3aaa91ec_ef5ef643","updated":"2016-06-29 02:30:24.000000000","message":"Grah, thanks! I was fighting with what to write here and couldn\u0027t come up with anything that I liked.","commit_id":"26db651f9b49b808c5261c8a9c2bcb51c25fbbd7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"db6c98c5a93618cc790c689d962551560f9e1e61","unresolved":false,"context_lines":[{"line_number":408,"context_line":"                request.port_id \u003d network.get(\u0027port\u0027, None)"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"                request.tag \u003d network.get(\u0027tag\u0027, None)"},{"line_number":411,"context_line":"                if request.tag and not supports_device_tagging:"},{"line_number":412,"context_line":"                    msg \u003d _(\u0027Network interface tags are not yet supported.\u0027)"},{"line_number":413,"context_line":"                    raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":414,"context_line":""}],"source_content_type":"text/x-python","patch_set":60,"id":"3aaa91ec_cf793d95","line":411,"updated":"2016-06-30 00:38:02.000000000","message":"I don\u0027t think you actually need this, the jsonschema validation should catch this before microversion 2.32 and fail since we have additionalProperties: False in the schema. The unit test for this should fail with a ValidationError.\n\nWe probably just don\u0027t want to set request.tag unless the microversion supports it.","commit_id":"fe48d3ec9fa82e3c75773e128c2fe2fc69f547da"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a29db295a26988b28730afef089ac02450ea639e","unresolved":false,"context_lines":[{"line_number":408,"context_line":"                request.port_id \u003d network.get(\u0027port\u0027, None)"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"                request.tag \u003d network.get(\u0027tag\u0027, None)"},{"line_number":411,"context_line":"                if request.tag and not supports_device_tagging:"},{"line_number":412,"context_line":"                    msg \u003d _(\u0027Network interface tags are not yet supported.\u0027)"},{"line_number":413,"context_line":"                    raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":414,"context_line":""}],"source_content_type":"text/x-python","patch_set":60,"id":"3aaa91ec_cf3c9d95","line":411,"in_reply_to":"3aaa91ec_cf793d95","updated":"2016-06-30 00:42:57.000000000","message":"Oh nevermind, this is for the minimum compute service check, not the request validation.","commit_id":"fe48d3ec9fa82e3c75773e128c2fe2fc69f547da"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"db6c98c5a93618cc790c689d962551560f9e1e61","unresolved":false,"context_lines":[{"line_number":537,"context_line":"            context.can(server_policies.SERVERS % \u0027create:attach_volume\u0027,"},{"line_number":538,"context_line":"                        target)"},{"line_number":539,"context_line":"            for bdm in block_device_mapping:"},{"line_number":540,"context_line":"                if bdm.get(\u0027tag\u0027, None) and not supports_device_tagging:"},{"line_number":541,"context_line":"                    msg \u003d _(\u0027Block device tags are not yet supported.\u0027)"},{"line_number":542,"context_line":"                    raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":543,"context_line":""}],"source_content_type":"text/x-python","patch_set":60,"id":"3aaa91ec_0fa7c50b","line":540,"updated":"2016-06-30 00:38:02.000000000","message":"Same as above, the schema validation should catch this.","commit_id":"fe48d3ec9fa82e3c75773e128c2fe2fc69f547da"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a29db295a26988b28730afef089ac02450ea639e","unresolved":false,"context_lines":[{"line_number":537,"context_line":"            context.can(server_policies.SERVERS % \u0027create:attach_volume\u0027,"},{"line_number":538,"context_line":"                        target)"},{"line_number":539,"context_line":"            for bdm in block_device_mapping:"},{"line_number":540,"context_line":"                if bdm.get(\u0027tag\u0027, None) and not supports_device_tagging:"},{"line_number":541,"context_line":"                    msg \u003d _(\u0027Block device tags are not yet supported.\u0027)"},{"line_number":542,"context_line":"                    raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":543,"context_line":""}],"source_content_type":"text/x-python","patch_set":60,"id":"3aaa91ec_2f3e018b","line":540,"in_reply_to":"3aaa91ec_0fa7c50b","updated":"2016-06-30 00:42:57.000000000","message":"Nevermind, this is the min compute version check.","commit_id":"fe48d3ec9fa82e3c75773e128c2fe2fc69f547da"}],"nova/api/openstack/rest_api_version_history.rst":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"9f90fb42298b505e0d02e37abd855511e841620e","unresolved":false,"context_lines":[{"line_number":287,"context_line":"2.27"},{"line_number":288,"context_line":"----"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"  Add device tagging support."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a18252c_c50c0145","line":290,"updated":"2016-04-12 15:46:45.000000000","message":"nit: I think it\u0027s worth to elaborate a bit more on this, e.g. which API endpoints are being changed and how","commit_id":"174923e4192eff080da55c57e9cf7be713605b4d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fb75fde6c00b7ca5325727f8df9fc60dbd1f88e2","unresolved":false,"context_lines":[{"line_number":328,"context_line":"2.32"},{"line_number":329,"context_line":"----"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"  Add device tagging support."}],"source_content_type":"text/x-rst","patch_set":43,"id":"3aaa91ec_50bbb075","line":331,"updated":"2016-06-27 21:18:16.000000000","message":"You should give more detail here. This is an optional tag attribute in the block_device_mapping_v2 and networks section of the server create request. And the tag is applied to what? ports?","commit_id":"a60d6d6a8cf96e31aa8967703f6515640cc530b9"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c85e3235053dc88b586bb8f3394e0f0d50ccab68","unresolved":false,"context_lines":[{"line_number":328,"context_line":"2.32"},{"line_number":329,"context_line":"----"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"  Add device tagging support."}],"source_content_type":"text/x-rst","patch_set":43,"id":"3aaa91ec_19e5d3a7","line":331,"in_reply_to":"3aaa91ec_50bbb075","updated":"2016-06-27 23:31:46.000000000","message":"Done","commit_id":"a60d6d6a8cf96e31aa8967703f6515640cc530b9"}],"nova/objects/service.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8cd5f3ce2925aa9b55317a33c63eb3b2a0f003bc","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    # Version 12: The network APIs and compute manager support a NetworkRequest"},{"line_number":80,"context_line":"    # object where the network_id value is \u0027auto\u0027 or \u0027none\u0027."},{"line_number":81,"context_line":"    {\u0027compute_rpc\u0027: \u00274.12\u0027},"},{"line_number":82,"context_line":"    # Version 13: Through a newer libvirt driver, the compute manager supports"},{"line_number":83,"context_line":"    # setting device tags."},{"line_number":84,"context_line":"    {\u0027compute_rpc\u0027: \u00274.12\u0027},"},{"line_number":85,"context_line":")"}],"source_content_type":"text/x-python","patch_set":48,"id":"3aaa91ec_f09d4dbc","line":82,"range":{"start_line":82,"start_character":18,"end_line":82,"end_character":48},"updated":"2016-06-28 15:25:51.000000000","message":"Like we discussed this morning, the libvirtness isn\u0027t really the thing here it\u0027s the compute node check of local capabilities that matters. So if/when you respin this, I\u0027d just nuke the libvirt wording.","commit_id":"5e2510752b2db318769087d88ea295e9cb868ecf"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"fab8ed4d8b2f2e0c3522b0d87f7cce9e5c7244b1","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    # Version 12: The network APIs and compute manager support a NetworkRequest"},{"line_number":80,"context_line":"    # object where the network_id value is \u0027auto\u0027 or \u0027none\u0027."},{"line_number":81,"context_line":"    {\u0027compute_rpc\u0027: \u00274.12\u0027},"},{"line_number":82,"context_line":"    # Version 13: Through a newer libvirt driver, the compute manager supports"},{"line_number":83,"context_line":"    # setting device tags."},{"line_number":84,"context_line":"    {\u0027compute_rpc\u0027: \u00274.12\u0027},"},{"line_number":85,"context_line":")"}],"source_content_type":"text/x-python","patch_set":48,"id":"3aaa91ec_d2847db2","line":82,"range":{"start_line":82,"start_character":18,"end_line":82,"end_character":48},"in_reply_to":"3aaa91ec_f09d4dbc","updated":"2016-06-29 02:37:26.000000000","message":"Done","commit_id":"5e2510752b2db318769087d88ea295e9cb868ecf"}],"nova/tests/unit/api/openstack/compute/test_serversV21.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b66a16a66cf1a3bc8b06c9306d221718668131c4","unresolved":false,"context_lines":[{"line_number":3481,"context_line":"            mock.patch.object(nova.compute.flavors, \u0027get_flavor_by_flavor_id\u0027,"},{"line_number":3482,"context_line":"                              return_value\u003dobjects.Flavor()),"},{"line_number":3483,"context_line":"            mock.patch.object(compute_api.API, \u0027create\u0027,"},{"line_number":3484,"context_line":"                              return_value\u003d([{}], 1)),"},{"line_number":3485,"context_line":"            mock.patch.object(self.req, \u0027cache_db_instances\u0027),"},{"line_number":3486,"context_line":"            mock.patch.object(self.controller._view_builder, \u0027create\u0027,"},{"line_number":3487,"context_line":"                              return_value\u003d{"}],"source_content_type":"text/x-python","patch_set":60,"id":"3aaa91ec_ef0519c2","line":3484,"range":{"start_line":3484,"start_character":45,"end_line":3484,"end_character":47},"updated":"2016-06-30 00:48:32.000000000","message":"If this has a uuid entry in it, then you don\u0027t need to mock out self.controller._view_builder.create.","commit_id":"fe48d3ec9fa82e3c75773e128c2fe2fc69f547da"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"38721f6e2289b92312b1ed267f72639901b30e86","unresolved":false,"context_lines":[{"line_number":3481,"context_line":"            mock.patch.object(nova.compute.flavors, \u0027get_flavor_by_flavor_id\u0027,"},{"line_number":3482,"context_line":"                              return_value\u003dobjects.Flavor()),"},{"line_number":3483,"context_line":"            mock.patch.object(compute_api.API, \u0027create\u0027,"},{"line_number":3484,"context_line":"                              return_value\u003d([{}], 1)),"},{"line_number":3485,"context_line":"            mock.patch.object(self.req, \u0027cache_db_instances\u0027),"},{"line_number":3486,"context_line":"            mock.patch.object(self.controller._view_builder, \u0027create\u0027,"},{"line_number":3487,"context_line":"                              return_value\u003d{"}],"source_content_type":"text/x-python","patch_set":60,"id":"3aaa91ec_7a2605cf","line":3484,"range":{"start_line":3484,"start_character":45,"end_line":3484,"end_character":47},"in_reply_to":"3aaa91ec_ef0519c2","updated":"2016-06-30 01:55:05.000000000","message":"Done","commit_id":"fe48d3ec9fa82e3c75773e128c2fe2fc69f547da"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b66a16a66cf1a3bc8b06c9306d221718668131c4","unresolved":false,"context_lines":[{"line_number":3482,"context_line":"                              return_value\u003dobjects.Flavor()),"},{"line_number":3483,"context_line":"            mock.patch.object(compute_api.API, \u0027create\u0027,"},{"line_number":3484,"context_line":"                              return_value\u003d([{}], 1)),"},{"line_number":3485,"context_line":"            mock.patch.object(self.req, \u0027cache_db_instances\u0027),"},{"line_number":3486,"context_line":"            mock.patch.object(self.controller._view_builder, \u0027create\u0027,"},{"line_number":3487,"context_line":"                              return_value\u003d{"},{"line_number":3488,"context_line":"                                  \u0027server\u0027: {"}],"source_content_type":"text/x-python","patch_set":60,"id":"3aaa91ec_8f6615b9","line":3485,"updated":"2016-06-30 00:48:32.000000000","message":"I don\u0027t think you need to mock this out.","commit_id":"fe48d3ec9fa82e3c75773e128c2fe2fc69f547da"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"38721f6e2289b92312b1ed267f72639901b30e86","unresolved":false,"context_lines":[{"line_number":3482,"context_line":"                              return_value\u003dobjects.Flavor()),"},{"line_number":3483,"context_line":"            mock.patch.object(compute_api.API, \u0027create\u0027,"},{"line_number":3484,"context_line":"                              return_value\u003d([{}], 1)),"},{"line_number":3485,"context_line":"            mock.patch.object(self.req, \u0027cache_db_instances\u0027),"},{"line_number":3486,"context_line":"            mock.patch.object(self.controller._view_builder, \u0027create\u0027,"},{"line_number":3487,"context_line":"                              return_value\u003d{"},{"line_number":3488,"context_line":"                                  \u0027server\u0027: {"}],"source_content_type":"text/x-python","patch_set":60,"id":"3aaa91ec_faee7589","line":3485,"in_reply_to":"3aaa91ec_8f6615b9","updated":"2016-06-30 01:55:05.000000000","message":"In my tests [1] tried to run and failed if this wasn\u0027t mocked.\n\n[1] https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/servers.py#L648","commit_id":"fe48d3ec9fa82e3c75773e128c2fe2fc69f547da"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7434192772a85f6dba66b19d7f8556449aeac150","unresolved":false,"context_lines":[{"line_number":3482,"context_line":"                              return_value\u003dobjects.Flavor()),"},{"line_number":3483,"context_line":"            mock.patch.object(compute_api.API, \u0027create\u0027,"},{"line_number":3484,"context_line":"                              return_value\u003d([{}], 1)),"},{"line_number":3485,"context_line":"            mock.patch.object(self.req, \u0027cache_db_instances\u0027),"},{"line_number":3486,"context_line":"            mock.patch.object(self.controller._view_builder, \u0027create\u0027,"},{"line_number":3487,"context_line":"                              return_value\u003d{"},{"line_number":3488,"context_line":"                                  \u0027server\u0027: {"}],"source_content_type":"text/x-python","patch_set":60,"id":"3aaa91ec_75b0d643","line":3485,"in_reply_to":"3aaa91ec_faee7589","updated":"2016-06-30 02:01:43.000000000","message":"Because the dict returned from compute_api.create didn\u0027t have a uuid field in it.","commit_id":"fe48d3ec9fa82e3c75773e128c2fe2fc69f547da"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b66a16a66cf1a3bc8b06c9306d221718668131c4","unresolved":false,"context_lines":[{"line_number":3489,"context_line":"                                      \u0027adminPass\u0027: \u0027fake-pass\u0027"},{"line_number":3490,"context_line":"                                    }"},{"line_number":3491,"context_line":"                              }),"},{"line_number":3492,"context_line":"            mock.patch.object(self.controller, \u0027_add_location\u0027,"},{"line_number":3493,"context_line":"                              return_value\u003dNone)"},{"line_number":3494,"context_line":"        ):"},{"line_number":3495,"context_line":"            self._create_server()"}],"source_content_type":"text/x-python","patch_set":60,"id":"3aaa91ec_af0031ac","line":3492,"updated":"2016-06-30 00:48:32.000000000","message":"I\u0027m not sure why mocking this is necessary.","commit_id":"fe48d3ec9fa82e3c75773e128c2fe2fc69f547da"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"38721f6e2289b92312b1ed267f72639901b30e86","unresolved":false,"context_lines":[{"line_number":3489,"context_line":"                                      \u0027adminPass\u0027: \u0027fake-pass\u0027"},{"line_number":3490,"context_line":"                                    }"},{"line_number":3491,"context_line":"                              }),"},{"line_number":3492,"context_line":"            mock.patch.object(self.controller, \u0027_add_location\u0027,"},{"line_number":3493,"context_line":"                              return_value\u003dNone)"},{"line_number":3494,"context_line":"        ):"},{"line_number":3495,"context_line":"            self._create_server()"}],"source_content_type":"text/x-python","patch_set":60,"id":"3aaa91ec_dacc5937","line":3492,"in_reply_to":"3aaa91ec_af0031ac","updated":"2016-06-30 01:55:05.000000000","message":"I did this because without it, in my test runs, [1] tries to run and throws an error.\n\n[1] https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/servers.py#L656","commit_id":"fe48d3ec9fa82e3c75773e128c2fe2fc69f547da"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7434192772a85f6dba66b19d7f8556449aeac150","unresolved":false,"context_lines":[{"line_number":3489,"context_line":"                                      \u0027adminPass\u0027: \u0027fake-pass\u0027"},{"line_number":3490,"context_line":"                                    }"},{"line_number":3491,"context_line":"                              }),"},{"line_number":3492,"context_line":"            mock.patch.object(self.controller, \u0027_add_location\u0027,"},{"line_number":3493,"context_line":"                              return_value\u003dNone)"},{"line_number":3494,"context_line":"        ):"},{"line_number":3495,"context_line":"            self._create_server()"}],"source_content_type":"text/x-python","patch_set":60,"id":"3aaa91ec_55667aed","line":3492,"in_reply_to":"3aaa91ec_dacc5937","updated":"2016-06-30 02:01:43.000000000","message":"Probably because the viewbuilder would put links in the response, which you don\u0027t have b/c you\u0027re faking it out.","commit_id":"fe48d3ec9fa82e3c75773e128c2fe2fc69f547da"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f4b485e44740a3bde8b1f60f919078e159b6270e","unresolved":false,"context_lines":[{"line_number":3485,"context_line":"                return_value\u003d("},{"line_number":3486,"context_line":"                    [{\u0027uuid\u0027: \u0027f60012d9-5ba4-4547-ab48-f94ff7e62d4e\u0027}],"},{"line_number":3487,"context_line":"                    1)),"},{"line_number":3488,"context_line":"            mock.patch.object(self.req, \u0027cache_db_instances\u0027),"},{"line_number":3489,"context_line":"            mock.patch.object(self.controller, \u0027_add_location\u0027,"},{"line_number":3490,"context_line":"                              return_value\u003dNone)"},{"line_number":3491,"context_line":"        ):"}],"source_content_type":"text/x-python","patch_set":62,"id":"3aaa91ec_07ce892c","line":3488,"updated":"2016-06-30 03:16:38.000000000","message":"nit: I don\u0027t think this is needed now that the fake instance you\u0027re returning from create has a uuid. But meh.","commit_id":"c408eafb89bb0ea98fac8ba1bf0162c590d9a354"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f4b485e44740a3bde8b1f60f919078e159b6270e","unresolved":false,"context_lines":[{"line_number":3486,"context_line":"                    [{\u0027uuid\u0027: \u0027f60012d9-5ba4-4547-ab48-f94ff7e62d4e\u0027}],"},{"line_number":3487,"context_line":"                    1)),"},{"line_number":3488,"context_line":"            mock.patch.object(self.req, \u0027cache_db_instances\u0027),"},{"line_number":3489,"context_line":"            mock.patch.object(self.controller, \u0027_add_location\u0027,"},{"line_number":3490,"context_line":"                              return_value\u003dNone)"},{"line_number":3491,"context_line":"        ):"},{"line_number":3492,"context_line":"            self._create_server()"}],"source_content_type":"text/x-python","patch_set":62,"id":"3aaa91ec_67df8dd6","line":3489,"updated":"2016-06-30 03:16:38.000000000","message":"If you\u0027re not faking out the viewbuilder you might not need this anymore either.","commit_id":"c408eafb89bb0ea98fac8ba1bf0162c590d9a354"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f4b485e44740a3bde8b1f60f919078e159b6270e","unresolved":false,"context_lines":[{"line_number":3514,"context_line":"                return_value\u003d("},{"line_number":3515,"context_line":"                    [{\u0027uuid\u0027: \u0027f60012d9-5ba4-4547-ab48-f94ff7e62d4e\u0027}],"},{"line_number":3516,"context_line":"                    1)),"},{"line_number":3517,"context_line":"            mock.patch.object(self.req, \u0027cache_db_instances\u0027),"},{"line_number":3518,"context_line":"            mock.patch.object(self.controller, \u0027_add_location\u0027,"},{"line_number":3519,"context_line":"                              return_value\u003dNone)"},{"line_number":3520,"context_line":"        ):"}],"source_content_type":"text/x-python","patch_set":62,"id":"3aaa91ec_47dc11e4","line":3517,"updated":"2016-06-30 03:16:38.000000000","message":"same","commit_id":"c408eafb89bb0ea98fac8ba1bf0162c590d9a354"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"556a8f83663660df36081e93ebdf242313d32f9b","unresolved":false,"context_lines":[{"line_number":3526,"context_line":"                return_value\u003d("},{"line_number":3527,"context_line":"                    [{\u0027uuid\u0027: \u0027f60012d9-5ba4-4547-ab48-f94ff7e62d4e\u0027}],"},{"line_number":3528,"context_line":"                    1)),"},{"line_number":3529,"context_line":"            mock.patch.object(self.req, \u0027cache_db_instances\u0027),"},{"line_number":3530,"context_line":"            mock.patch.object(self.controller, \u0027_add_location\u0027,"},{"line_number":3531,"context_line":"                              return_value\u003dNone)"},{"line_number":3532,"context_line":"        ):"},{"line_number":3533,"context_line":"            self.body[\u0027server\u0027][\u0027block_device_mapping_v2\u0027][0][\u0027tag\u0027] \u003d \u0027foo\u0027"},{"line_number":3534,"context_line":"            self._create_server()"}],"source_content_type":"text/x-python","patch_set":64,"id":"3aaa91ec_bae691ad","line":3531,"range":{"start_line":3529,"start_character":12,"end_line":3531,"end_character":48},"updated":"2016-06-30 13:39:41.000000000","message":"These probably aren\u0027t needed, but we could cleanup in a separate patch.","commit_id":"e83e114e1b00ec882276380be2331bebc79c833b"}],"releasenotes/notes/virtual-device-role-tagging-ec0c36226a3f2e4d.yaml":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8cd5f3ce2925aa9b55317a33c63eb3b2a0f003bc","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    network interface is detached from the instance, its tag"},{"line_number":22,"context_line":"    remains in the metadata on the config drive. This is due"},{"line_number":23,"context_line":"    to the nature of the config drive, which, once written,"},{"line_number":24,"context_line":"    cannot be easily updated by Nova."}],"source_content_type":"text/x-yaml","patch_set":48,"id":"3aaa91ec_10829952","line":24,"updated":"2016-06-28 15:25:51.000000000","message":"Cool.","commit_id":"5e2510752b2db318769087d88ea295e9cb868ecf"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f4b485e44740a3bde8b1f60f919078e159b6270e","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    hardware metadata includes the bus (ex: SCSI), bus"},{"line_number":16,"context_line":"    address (ex: 1:0:2:0) and serial number."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    The 2.32 microversion also adds the 2016-06-30 version"},{"line_number":19,"context_line":"    to the user-data metadata. Starting with 2016-06-30, the"},{"line_number":20,"context_line":"    metadata contains a \u0027devices\u0027 sections which lists any"},{"line_number":21,"context_line":"    devices that are tagged as described in the previous"}],"source_content_type":"text/x-yaml","patch_set":62,"id":"3aaa91ec_47037142","line":18,"updated":"2016-06-30 03:16:38.000000000","message":"This should go in the metadata API change, not the REST API change.","commit_id":"c408eafb89bb0ea98fac8ba1bf0162c590d9a354"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"556a8f83663660df36081e93ebdf242313d32f9b","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    hardware metadata includes the bus (ex: SCSI), bus"},{"line_number":16,"context_line":"    address (ex: 1:0:2:0) and serial number."},{"line_number":17,"context_line":"issues:"},{"line_number":18,"context_line":"  - When using virtual device role tagging, the metadata on"},{"line_number":19,"context_line":"    the config drive lags behind the metadata obtained from"},{"line_number":20,"context_line":"    the metadata API. For example, if a tagged virtual"},{"line_number":21,"context_line":"    network interface is detached from the instance, its tag"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"3aaa91ec_3a80e18a","line":18,"updated":"2016-06-30 13:39:41.000000000","message":"This could probably go in the following metadata api change, but that change updates this same release note anyway so meh.","commit_id":"e83e114e1b00ec882276380be2331bebc79c833b"}],"releasenotes/notes/virtual-interface-tagging-58b50cf69093785c.yaml":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"9f90fb42298b505e0d02e37abd855511e841620e","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    on one or more network interfaces. These tags are then"},{"line_number":5,"context_line":"    exposed through the metadata API. Technical limitations"},{"line_number":6,"context_line":"    prevents the tags from being made available through the"},{"line_number":7,"context_line":"    config drive as well."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"5a18252c_78a5d402","line":7,"updated":"2016-04-12 15:46:45.000000000","message":"nit: not sure if we do this in any other reno notes, but I think, it would be useful to have a link to the spec here, so that anyone going through the release notes could easily get more details on this","commit_id":"174923e4192eff080da55c57e9cf7be713605b4d"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"67ad047532fb063fadfe611870e1806bebdf11e4","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    on one or more network interfaces. These tags are then"},{"line_number":5,"context_line":"    exposed through the metadata API. Technical limitations"},{"line_number":6,"context_line":"    prevents the tags from being made available through the"},{"line_number":7,"context_line":"    config drive as well."}],"source_content_type":"text/x-yaml","patch_set":28,"id":"7aa08908_46aaba1b","line":7,"updated":"2016-06-16 09:02:50.000000000","message":"Isn\u0027t this note about config drive obsolete.\n\nAlso what about disk BDM  support","commit_id":"17ae7ab40429c3cf57b689f0774e019b969ddd96"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"14521c1e8149b2ca99efd4b2278038d23b1b7085","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    on one or more network interfaces. These tags are then"},{"line_number":5,"context_line":"    exposed through the metadata API. Technical limitations"},{"line_number":6,"context_line":"    prevents the tags from being made available through the"},{"line_number":7,"context_line":"    config drive as well."}],"source_content_type":"text/x-yaml","patch_set":28,"id":"5a9d85d2_431726ed","line":7,"in_reply_to":"7aa08908_46aaba1b","updated":"2016-06-21 15:23:20.000000000","message":"Done","commit_id":"17ae7ab40429c3cf57b689f0774e019b969ddd96"}]}
