)]}'
{"nova/api/metadata/base.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ab4ae54080ea2d316179e679ced0f32285b5b594","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        self.route_configuration \u003d None"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        compute_api \u003d compute.API()"},{"line_number":200,"context_line":"        self.devices \u003d compute_api.get_device_metadata(ctxt, instance)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def _route_configuration(self):"},{"line_number":203,"context_line":"        if self.route_configuration:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a18252c_56ba69e2","line":200,"updated":"2016-04-12 16:12:56.000000000","message":"As discussed on IRC, I do not think that making a bocking RPC call from the metadata server is a reasonable approach. This information doesn\u0027t change much in the lifetime of an instance and should be in the DB instead.","commit_id":"039cebaea5a2ce6ea31b2bd459a81960723b1119"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"18756d9e0e72a2841531cbd0855a48cbc0604113","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        self.route_configuration \u003d None"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        compute_api \u003d compute.API()"},{"line_number":200,"context_line":"        self.devices \u003d compute_api.get_device_metadata(ctxt, instance)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def _route_configuration(self):"},{"line_number":203,"context_line":"        if self.route_configuration:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a18252c_f726e5b8","line":200,"in_reply_to":"5a18252c_56ba69e2","updated":"2016-04-13 12:14:41.000000000","message":"Yes, all virt drivers may not have a way to persistently store relation between tags and devices in their guests as libvirt has with domain XML. But that also means we should to keep in mind to update this metadata when we rebuild, migrate or even though power off/on an instance (at least for libvirt) since during all of this cases we destroy the domain XML and devices might have changed, right?","commit_id":"039cebaea5a2ce6ea31b2bd459a81960723b1119"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0b4138fed0a87e13443202fb86351a8e43b5977b","unresolved":false,"context_lines":[{"line_number":61,"context_line":"CONF \u003d nova.conf.CONF"},{"line_number":62,"context_line":"CONF.register_opts(metadata_opts)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"VERSIONS \u003d ["},{"line_number":65,"context_line":"    \u00271.0\u0027,"},{"line_number":66,"context_line":"    \u00272007-01-19\u0027,"},{"line_number":67,"context_line":"    \u00272007-03-01\u0027,"},{"line_number":68,"context_line":"    \u00272007-08-29\u0027,"},{"line_number":69,"context_line":"    \u00272007-10-10\u0027,"},{"line_number":70,"context_line":"    \u00272007-12-15\u0027,"},{"line_number":71,"context_line":"    \u00272008-02-01\u0027,"},{"line_number":72,"context_line":"    \u00272008-09-01\u0027,"},{"line_number":73,"context_line":"    \u00272009-04-04\u0027,"},{"line_number":74,"context_line":"]"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"FOLSOM \u003d \u00272012-08-10\u0027"},{"line_number":77,"context_line":"GRIZZLY \u003d \u00272013-04-04\u0027"},{"line_number":78,"context_line":"HAVANA \u003d \u00272013-10-17\u0027"},{"line_number":79,"context_line":"LIBERTY \u003d \u00272015-10-15\u0027"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"OPENSTACK_VERSIONS \u003d ["},{"line_number":82,"context_line":"    FOLSOM,"},{"line_number":83,"context_line":"    GRIZZLY,"},{"line_number":84,"context_line":"    HAVANA,"},{"line_number":85,"context_line":"    LIBERTY,"},{"line_number":86,"context_line":"]"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"VERSION \u003d \"version\""},{"line_number":89,"context_line":"CONTENT \u003d \"content\""}],"source_content_type":"text/x-python","patch_set":16,"id":"1a122d0e_001687f0","line":86,"range":{"start_line":64,"start_character":0,"end_line":86,"end_character":1},"updated":"2016-04-19 14:38:04.000000000","message":"This is an API change so you should have a version change in here to indicate that.","commit_id":"4d6e66bb66683a6f06b4e93c2efdcc52e59e972d"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"feaf0a27bf00d670feb1e84809fc83a40adcf863","unresolved":false,"context_lines":[{"line_number":370,"context_line":"                              \u0027not been included in the \u0027"},{"line_number":371,"context_line":"                              \u0027output\u0027 % device.bus.__class__.__name__)"},{"line_number":372,"context_line":"                    continue"},{"line_number":373,"context_line":"                if device.bus.address:"},{"line_number":374,"context_line":"                    address \u003d device.bus.address"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"            if isinstance(device, metadata_obj.NetworkInterfaceMetadata):"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_090ba525","line":373,"updated":"2016-06-16 09:06:40.000000000","message":"You\u0027ll need   device.bus.obj_attr_is_set(\"address\")","commit_id":"22daaa1d3e79beb02cb8751d033477569cc27b87"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"63cd28af70cb075326e6cff16f4409e17e3bb1ec","unresolved":false,"context_lines":[{"line_number":370,"context_line":"                              \u0027not been included in the \u0027"},{"line_number":371,"context_line":"                              \u0027output\u0027 % device.bus.__class__.__name__)"},{"line_number":372,"context_line":"                    continue"},{"line_number":373,"context_line":"                if device.bus.address:"},{"line_number":374,"context_line":"                    address \u003d device.bus.address"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"            if isinstance(device, metadata_obj.NetworkInterfaceMetadata):"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_fd231a03","line":373,"in_reply_to":"7aa08908_090ba525","updated":"2016-06-17 19:06:01.000000000","message":"Done","commit_id":"22daaa1d3e79beb02cb8751d033477569cc27b87"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e470bcfd274cd52d7dd8a98f83c573a31d967b3f","unresolved":false,"context_lines":[{"line_number":601,"context_line":"    instance \u003d objects.Instance.get_by_uuid("},{"line_number":602,"context_line":"        ctxt, instance_id, expected_attrs\u003d[\u0027ec2_ids\u0027, \u0027flavor\u0027, \u0027info_cache\u0027,"},{"line_number":603,"context_line":"                                           \u0027metadata\u0027, \u0027system_metadata\u0027,"},{"line_number":604,"context_line":"                                           \u0027security_groups\u0027, \u0027keypairs\u0027])"},{"line_number":605,"context_line":"    return InstanceMetadata(instance, address)"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":""}],"source_content_type":"text/x-python","patch_set":54,"id":"3aaa91ec_b58e17ce","line":604,"updated":"2016-06-28 15:20:26.000000000","message":"Need to add device_metadata to this list so we pre-query it and don\u0027t have to lazy-load it on every hit.","commit_id":"ad84d602258d748c71365a4b4aaea1b17b9f7582"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"9b3c24ab674a57b3360f4c296874eeff22000637","unresolved":false,"context_lines":[{"line_number":601,"context_line":"    instance \u003d objects.Instance.get_by_uuid("},{"line_number":602,"context_line":"        ctxt, instance_id, expected_attrs\u003d[\u0027ec2_ids\u0027, \u0027flavor\u0027, \u0027info_cache\u0027,"},{"line_number":603,"context_line":"                                           \u0027metadata\u0027, \u0027system_metadata\u0027,"},{"line_number":604,"context_line":"                                           \u0027security_groups\u0027, \u0027keypairs\u0027])"},{"line_number":605,"context_line":"    return InstanceMetadata(instance, address)"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":""}],"source_content_type":"text/x-python","patch_set":54,"id":"3aaa91ec_b0bbbe74","line":604,"in_reply_to":"3aaa91ec_b58e17ce","updated":"2016-06-28 17:26:06.000000000","message":"Done","commit_id":"ad84d602258d748c71365a4b4aaea1b17b9f7582"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8711bc0f26f53bf9ebd585d6908d5077d2b38f08","unresolved":false,"context_lines":[{"line_number":60,"context_line":"GRIZZLY \u003d \u00272013-04-04\u0027"},{"line_number":61,"context_line":"HAVANA \u003d \u00272013-10-17\u0027"},{"line_number":62,"context_line":"LIBERTY \u003d \u00272015-10-15\u0027"},{"line_number":63,"context_line":"NEWTON \u003d \u00272016-06-30\u0027"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"OPENSTACK_VERSIONS \u003d ["},{"line_number":66,"context_line":"    FOLSOM,"}],"source_content_type":"text/x-python","patch_set":67,"id":"3aaa91ec_3ab11d02","line":63,"updated":"2016-06-30 01:46:46.000000000","message":"Maybe we should note this in the existing features section of the release note you have for the REST API microversion, like another paragraph about \u0027devices\u0027 being in the user-data metadata starting with version 2016-06-30.","commit_id":"e85579fb089269efe5ce972891e5c8dcd50f7efa"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"11aa5c37dd870ea5e68dad7f600686c0a4122ba4","unresolved":false,"context_lines":[{"line_number":60,"context_line":"GRIZZLY \u003d \u00272013-04-04\u0027"},{"line_number":61,"context_line":"HAVANA \u003d \u00272013-10-17\u0027"},{"line_number":62,"context_line":"LIBERTY \u003d \u00272015-10-15\u0027"},{"line_number":63,"context_line":"NEWTON \u003d \u00272016-06-30\u0027"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"OPENSTACK_VERSIONS \u003d ["},{"line_number":66,"context_line":"    FOLSOM,"}],"source_content_type":"text/x-python","patch_set":67,"id":"3aaa91ec_553f9ab3","line":63,"in_reply_to":"3aaa91ec_3ab11d02","updated":"2016-06-30 02:09:32.000000000","message":"Done","commit_id":"e85579fb089269efe5ce972891e5c8dcd50f7efa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2f278e97c98bb1080ac04c5b764eb6dc04618424","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        metadata[\u0027name\u0027] \u003d self.instance.display_name"},{"line_number":336,"context_line":"        metadata[\u0027launch_index\u0027] \u003d self.instance.launch_index"},{"line_number":337,"context_line":"        metadata[\u0027availability_zone\u0027] \u003d self.availability_zone"},{"line_number":338,"context_line":"        metadata[\u0027devices\u0027] \u003d self._get_device_metadata()"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"        if self._check_os_version(GRIZZLY, version):"},{"line_number":341,"context_line":"            metadata[\u0027random_seed\u0027] \u003d base64.b64encode(os.urandom(512))"}],"source_content_type":"text/x-python","patch_set":67,"id":"3aaa91ec_3a0c7deb","line":338,"updated":"2016-06-30 01:29:57.000000000","message":"This has to be conditional on the NEWTON version being requested.","commit_id":"e85579fb089269efe5ce972891e5c8dcd50f7efa"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"11aa5c37dd870ea5e68dad7f600686c0a4122ba4","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        metadata[\u0027name\u0027] \u003d self.instance.display_name"},{"line_number":336,"context_line":"        metadata[\u0027launch_index\u0027] \u003d self.instance.launch_index"},{"line_number":337,"context_line":"        metadata[\u0027availability_zone\u0027] \u003d self.availability_zone"},{"line_number":338,"context_line":"        metadata[\u0027devices\u0027] \u003d self._get_device_metadata()"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"        if self._check_os_version(GRIZZLY, version):"},{"line_number":341,"context_line":"            metadata[\u0027random_seed\u0027] \u003d base64.b64encode(os.urandom(512))"}],"source_content_type":"text/x-python","patch_set":67,"id":"3aaa91ec_b58d1e7e","line":338,"in_reply_to":"3aaa91ec_3a0c7deb","updated":"2016-06-30 02:09:32.000000000","message":"Done","commit_id":"e85579fb089269efe5ce972891e5c8dcd50f7efa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2f278e97c98bb1080ac04c5b764eb6dc04618424","unresolved":false,"context_lines":[{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        if self.instance.device_metadata is not None:"},{"line_number":358,"context_line":"            for device in self.instance.device_metadata.devices:"},{"line_number":359,"context_line":"                device_metadata \u003d {}"},{"line_number":360,"context_line":"                bus \u003d \u0027none\u0027"},{"line_number":361,"context_line":"                address \u003d \u0027none\u0027"},{"line_number":362,"context_line":""}],"source_content_type":"text/x-python","patch_set":67,"id":"3aaa91ec_fa05d5c1","line":359,"updated":"2016-06-30 01:29:57.000000000","message":"a","commit_id":"e85579fb089269efe5ce972891e5c8dcd50f7efa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8711bc0f26f53bf9ebd585d6908d5077d2b38f08","unresolved":false,"context_lines":[{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        if self.instance.device_metadata is not None:"},{"line_number":358,"context_line":"            for device in self.instance.device_metadata.devices:"},{"line_number":359,"context_line":"                device_metadata \u003d {}"},{"line_number":360,"context_line":"                bus \u003d \u0027none\u0027"},{"line_number":361,"context_line":"                address \u003d \u0027none\u0027"},{"line_number":362,"context_line":""}],"source_content_type":"text/x-python","patch_set":67,"id":"3aaa91ec_9a99317c","line":359,"in_reply_to":"3aaa91ec_fa05d5c1","updated":"2016-06-30 01:46:46.000000000","message":"ignore this","commit_id":"e85579fb089269efe5ce972891e5c8dcd50f7efa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8711bc0f26f53bf9ebd585d6908d5077d2b38f08","unresolved":false,"context_lines":[{"line_number":361,"context_line":"                address \u003d \u0027none\u0027"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"                if \u0027bus\u0027 in device:"},{"line_number":364,"context_line":"                    if isinstance(device.bus, metadata_obj.PCIDeviceBus):"},{"line_number":365,"context_line":"                        bus \u003d \u0027pci\u0027"},{"line_number":366,"context_line":"                    elif isinstance(device.bus, metadata_obj.USBDeviceBus):"},{"line_number":367,"context_line":"                        bus \u003d \u0027usb\u0027"},{"line_number":368,"context_line":"                    elif isinstance(device.bus, metadata_obj.SCSIDeviceBus):"},{"line_number":369,"context_line":"                        bus \u003d \u0027scsi\u0027"},{"line_number":370,"context_line":"                    elif isinstance(device.bus, metadata_obj.IDEDeviceBus):"},{"line_number":371,"context_line":"                        bus \u003d \u0027ide\u0027"},{"line_number":372,"context_line":"                    else:"},{"line_number":373,"context_line":"                        LOG.debug(\u0027Metadata for device with unknown bus %s \u0027"},{"line_number":374,"context_line":"                                  \u0027has not been included in the \u0027"}],"source_content_type":"text/x-python","patch_set":67,"id":"3aaa91ec_9abe51ac","line":371,"range":{"start_line":364,"start_character":20,"end_line":371,"end_character":35},"updated":"2016-06-30 01:46:46.000000000","message":"It would be nice if we had something more generic, like a type identifier or something, built into these types of objects, like a get_meta_type() abstract method on the base DeviceBus class.","commit_id":"e85579fb089269efe5ce972891e5c8dcd50f7efa"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"11aa5c37dd870ea5e68dad7f600686c0a4122ba4","unresolved":false,"context_lines":[{"line_number":361,"context_line":"                address \u003d \u0027none\u0027"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"                if \u0027bus\u0027 in device:"},{"line_number":364,"context_line":"                    if isinstance(device.bus, metadata_obj.PCIDeviceBus):"},{"line_number":365,"context_line":"                        bus \u003d \u0027pci\u0027"},{"line_number":366,"context_line":"                    elif isinstance(device.bus, metadata_obj.USBDeviceBus):"},{"line_number":367,"context_line":"                        bus \u003d \u0027usb\u0027"},{"line_number":368,"context_line":"                    elif isinstance(device.bus, metadata_obj.SCSIDeviceBus):"},{"line_number":369,"context_line":"                        bus \u003d \u0027scsi\u0027"},{"line_number":370,"context_line":"                    elif isinstance(device.bus, metadata_obj.IDEDeviceBus):"},{"line_number":371,"context_line":"                        bus \u003d \u0027ide\u0027"},{"line_number":372,"context_line":"                    else:"},{"line_number":373,"context_line":"                        LOG.debug(\u0027Metadata for device with unknown bus %s \u0027"},{"line_number":374,"context_line":"                                  \u0027has not been included in the \u0027"}],"source_content_type":"text/x-python","patch_set":67,"id":"3aaa91ec_954f4233","line":371,"range":{"start_line":364,"start_character":20,"end_line":371,"end_character":35},"in_reply_to":"3aaa91ec_9abe51ac","updated":"2016-06-30 02:09:32.000000000","message":"Done","commit_id":"e85579fb089269efe5ce972891e5c8dcd50f7efa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8711bc0f26f53bf9ebd585d6908d5077d2b38f08","unresolved":false,"context_lines":[{"line_number":374,"context_line":"                                  \u0027has not been included in the \u0027"},{"line_number":375,"context_line":"                                  \u0027output\u0027 % device.bus.__class__.__name__)"},{"line_number":376,"context_line":"                        continue"},{"line_number":377,"context_line":"                    if device.bus.obj_attr_is_set(\u0027address\u0027):"},{"line_number":378,"context_line":"                        address \u003d device.bus.address"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"                if isinstance(device, metadata_obj.NetworkInterfaceMetadata):"}],"source_content_type":"text/x-python","patch_set":67,"id":"3aaa91ec_9a1ad1c4","line":377,"updated":"2016-06-30 01:46:46.000000000","message":"if \u0027address\u0027 in device.bus:","commit_id":"e85579fb089269efe5ce972891e5c8dcd50f7efa"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"11aa5c37dd870ea5e68dad7f600686c0a4122ba4","unresolved":false,"context_lines":[{"line_number":374,"context_line":"                                  \u0027has not been included in the \u0027"},{"line_number":375,"context_line":"                                  \u0027output\u0027 % device.bus.__class__.__name__)"},{"line_number":376,"context_line":"                        continue"},{"line_number":377,"context_line":"                    if device.bus.obj_attr_is_set(\u0027address\u0027):"},{"line_number":378,"context_line":"                        address \u003d device.bus.address"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"                if isinstance(device, metadata_obj.NetworkInterfaceMetadata):"}],"source_content_type":"text/x-python","patch_set":67,"id":"3aaa91ec_b5523edc","line":377,"in_reply_to":"3aaa91ec_9a1ad1c4","updated":"2016-06-30 02:09:32.000000000","message":"Done","commit_id":"e85579fb089269efe5ce972891e5c8dcd50f7efa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8711bc0f26f53bf9ebd585d6908d5077d2b38f08","unresolved":false,"context_lines":[{"line_number":383,"context_line":"                elif isinstance(device, metadata_obj.DiskMetadata):"},{"line_number":384,"context_line":"                    device_metadata[\u0027type\u0027] \u003d \u0027disk\u0027"},{"line_number":385,"context_line":"                    # serial and path are optional paramenters"},{"line_number":386,"context_line":"                    if device.obj_attr_is_set(\u0027serial\u0027):"},{"line_number":387,"context_line":"                        device_metadata[\u0027serial\u0027] \u003d device.serial"},{"line_number":388,"context_line":"                    if device.obj_attr_is_set(\u0027path\u0027):"},{"line_number":389,"context_line":"                        device_metadata[\u0027path\u0027] \u003d device.path"}],"source_content_type":"text/x-python","patch_set":67,"id":"3aaa91ec_7a40c5a5","line":386,"range":{"start_line":386,"start_character":20,"end_line":386,"end_character":56},"updated":"2016-06-30 01:46:46.000000000","message":"nit: I prefer:\n\n if \u0027serial\u0027 in device:","commit_id":"e85579fb089269efe5ce972891e5c8dcd50f7efa"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"11aa5c37dd870ea5e68dad7f600686c0a4122ba4","unresolved":false,"context_lines":[{"line_number":383,"context_line":"                elif isinstance(device, metadata_obj.DiskMetadata):"},{"line_number":384,"context_line":"                    device_metadata[\u0027type\u0027] \u003d \u0027disk\u0027"},{"line_number":385,"context_line":"                    # serial and path are optional paramenters"},{"line_number":386,"context_line":"                    if device.obj_attr_is_set(\u0027serial\u0027):"},{"line_number":387,"context_line":"                        device_metadata[\u0027serial\u0027] \u003d device.serial"},{"line_number":388,"context_line":"                    if device.obj_attr_is_set(\u0027path\u0027):"},{"line_number":389,"context_line":"                        device_metadata[\u0027path\u0027] \u003d device.path"}],"source_content_type":"text/x-python","patch_set":67,"id":"3aaa91ec_155a32f2","line":386,"range":{"start_line":386,"start_character":20,"end_line":386,"end_character":56},"in_reply_to":"3aaa91ec_7a40c5a5","updated":"2016-06-30 02:09:32.000000000","message":"Done","commit_id":"e85579fb089269efe5ce972891e5c8dcd50f7efa"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"11aa5c37dd870ea5e68dad7f600686c0a4122ba4","unresolved":false,"context_lines":[{"line_number":385,"context_line":"                    # serial and path are optional paramenters"},{"line_number":386,"context_line":"                    if device.obj_attr_is_set(\u0027serial\u0027):"},{"line_number":387,"context_line":"                        device_metadata[\u0027serial\u0027] \u003d device.serial"},{"line_number":388,"context_line":"                    if device.obj_attr_is_set(\u0027path\u0027):"},{"line_number":389,"context_line":"                        device_metadata[\u0027path\u0027] \u003d device.path"},{"line_number":390,"context_line":"                else:"},{"line_number":391,"context_line":"                    LOG.debug(\u0027Metadata for device of unknown type %s has not \u0027"}],"source_content_type":"text/x-python","patch_set":67,"id":"3aaa91ec_55703a72","line":388,"updated":"2016-06-30 02:09:32.000000000","message":"Might as well put if \u0027path\u0027 in device here as well :)","commit_id":"e85579fb089269efe5ce972891e5c8dcd50f7efa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ab509f0bf8ef263b6650f274841ec4635128acd7","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    LIBERTY,"},{"line_number":70,"context_line":"    NEWTON,"},{"line_number":71,"context_line":"]"},{"line_number":72,"context_line":"DEVICE_TAGGING_VERSIONS \u003d ["},{"line_number":73,"context_line":"    NEWTON,"},{"line_number":74,"context_line":"]"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":68,"id":"3aaa91ec_e7b7fd82","line":72,"range":{"start_line":72,"start_character":0,"end_line":72,"end_character":23},"updated":"2016-06-30 03:21:31.000000000","message":"I don\u0027t think we need this.","commit_id":"861594fc2c8834d05ed42daca51cc2fe17dd5de2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ab509f0bf8ef263b6650f274841ec4635128acd7","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        metadata[\u0027name\u0027] \u003d self.instance.display_name"},{"line_number":339,"context_line":"        metadata[\u0027launch_index\u0027] \u003d self.instance.launch_index"},{"line_number":340,"context_line":"        metadata[\u0027availability_zone\u0027] \u003d self.availability_zone"},{"line_number":341,"context_line":"        if version in DEVICE_TAGGING_VERSIONS:"},{"line_number":342,"context_line":"            metadata[\u0027devices\u0027] \u003d self._get_device_metadata()"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        if self._check_os_version(GRIZZLY, version):"}],"source_content_type":"text/x-python","patch_set":68,"id":"3aaa91ec_27ae252e","line":341,"range":{"start_line":341,"start_character":8,"end_line":341,"end_character":46},"updated":"2016-06-30 03:21:31.000000000","message":"This should just be:\n\n  if self._check_os_version(NEWTON, version):","commit_id":"861594fc2c8834d05ed42daca51cc2fe17dd5de2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b086107513f2df4a1a17c2de3ac68bb03ebf2c7b","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    LIBERTY,"},{"line_number":70,"context_line":"    NEWTON,"},{"line_number":71,"context_line":"]"},{"line_number":72,"context_line":"DEVICE_TAGGING_VERSIONS \u003d ["},{"line_number":73,"context_line":"    NEWTON,"},{"line_number":74,"context_line":"]"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":70,"id":"3aaa91ec_7468b5f5","line":72,"range":{"start_line":72,"start_character":0,"end_line":72,"end_character":23},"updated":"2016-06-30 15:58:27.000000000","message":"As noted earlier, we don\u0027t need this.","commit_id":"73998ea130c81e57f26f3f114fe787b6216f176e"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"71b0a90fc8b1684c694a4dcd625347ab56f5adc4","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    LIBERTY,"},{"line_number":70,"context_line":"    NEWTON,"},{"line_number":71,"context_line":"]"},{"line_number":72,"context_line":"DEVICE_TAGGING_VERSIONS \u003d ["},{"line_number":73,"context_line":"    NEWTON,"},{"line_number":74,"context_line":"]"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":70,"id":"3aaa91ec_25571959","line":72,"range":{"start_line":72,"start_character":0,"end_line":72,"end_character":23},"in_reply_to":"3aaa91ec_7468b5f5","updated":"2016-06-30 16:51:23.000000000","message":"Done","commit_id":"73998ea130c81e57f26f3f114fe787b6216f176e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b086107513f2df4a1a17c2de3ac68bb03ebf2c7b","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        metadata[\u0027name\u0027] \u003d self.instance.display_name"},{"line_number":339,"context_line":"        metadata[\u0027launch_index\u0027] \u003d self.instance.launch_index"},{"line_number":340,"context_line":"        metadata[\u0027availability_zone\u0027] \u003d self.availability_zone"},{"line_number":341,"context_line":"        if version in DEVICE_TAGGING_VERSIONS:"},{"line_number":342,"context_line":"            metadata[\u0027devices\u0027] \u003d self._get_device_metadata()"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        if self._check_os_version(GRIZZLY, version):"}],"source_content_type":"text/x-python","patch_set":70,"id":"3aaa91ec_f474a5cf","line":341,"updated":"2016-06-30 15:58:27.000000000","message":"This should just be:\n\n if self._check_os_version(NEWTON, version):","commit_id":"73998ea130c81e57f26f3f114fe787b6216f176e"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"71b0a90fc8b1684c694a4dcd625347ab56f5adc4","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        metadata[\u0027name\u0027] \u003d self.instance.display_name"},{"line_number":339,"context_line":"        metadata[\u0027launch_index\u0027] \u003d self.instance.launch_index"},{"line_number":340,"context_line":"        metadata[\u0027availability_zone\u0027] \u003d self.availability_zone"},{"line_number":341,"context_line":"        if version in DEVICE_TAGGING_VERSIONS:"},{"line_number":342,"context_line":"            metadata[\u0027devices\u0027] \u003d self._get_device_metadata()"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        if self._check_os_version(GRIZZLY, version):"}],"source_content_type":"text/x-python","patch_set":70,"id":"3aaa91ec_454865b3","line":341,"in_reply_to":"3aaa91ec_f474a5cf","updated":"2016-06-30 16:51:23.000000000","message":"Done","commit_id":"73998ea130c81e57f26f3f114fe787b6216f176e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7eaa2b00bf3229ea89a2c96c06c3289a79e348ea","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        metadata[\u0027launch_index\u0027] \u003d self.instance.launch_index"},{"line_number":340,"context_line":"        metadata[\u0027availability_zone\u0027] \u003d self.availability_zone"},{"line_number":341,"context_line":"        if version in DEVICE_TAGGING_VERSIONS:"},{"line_number":342,"context_line":"            metadata[\u0027devices\u0027] \u003d self._get_device_metadata()"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        if self._check_os_version(GRIZZLY, version):"},{"line_number":345,"context_line":"            metadata[\u0027random_seed\u0027] \u003d base64.b64encode(os.urandom(512))"}],"source_content_type":"text/x-python","patch_set":70,"id":"3aaa91ec_549e5963","line":342,"updated":"2016-06-30 15:51:46.000000000","message":"Hmm, won\u0027t this make it go away the instant we have an ocata version if we forget to add it to the above list? Why not just use self._check_os_version() like the other stuff here?","commit_id":"73998ea130c81e57f26f3f114fe787b6216f176e"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"71b0a90fc8b1684c694a4dcd625347ab56f5adc4","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        metadata[\u0027launch_index\u0027] \u003d self.instance.launch_index"},{"line_number":340,"context_line":"        metadata[\u0027availability_zone\u0027] \u003d self.availability_zone"},{"line_number":341,"context_line":"        if version in DEVICE_TAGGING_VERSIONS:"},{"line_number":342,"context_line":"            metadata[\u0027devices\u0027] \u003d self._get_device_metadata()"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        if self._check_os_version(GRIZZLY, version):"},{"line_number":345,"context_line":"            metadata[\u0027random_seed\u0027] \u003d base64.b64encode(os.urandom(512))"}],"source_content_type":"text/x-python","patch_set":70,"id":"3aaa91ec_85cc0d36","line":342,"in_reply_to":"3aaa91ec_549e5963","updated":"2016-06-30 16:51:23.000000000","message":"Done","commit_id":"73998ea130c81e57f26f3f114fe787b6216f176e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"315e2936ae26a9d5588e94e9f5b0f4fa3089b599","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        metadata[\u0027name\u0027] \u003d self.instance.display_name"},{"line_number":336,"context_line":"        metadata[\u0027launch_index\u0027] \u003d self.instance.launch_index"},{"line_number":337,"context_line":"        metadata[\u0027availability_zone\u0027] \u003d self.availability_zone"},{"line_number":338,"context_line":"        if self._check_os_version(NEWTON, version):"},{"line_number":339,"context_line":"            metadata[\u0027devices\u0027] \u003d self._get_device_metadata()"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        if self._check_os_version(GRIZZLY, version):"}],"source_content_type":"text/x-python","patch_set":71,"id":"3aaa91ec_a0f01768","line":338,"updated":"2016-06-30 17:02:54.000000000","message":"nit: order wise this would make more sense after the LIBERTY check below.","commit_id":"1442b7b2c1261565bf36b856763024833ba6ca89"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b90c2183425e5e9235edf428f55e28c7224626a2","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        metadata[\u0027name\u0027] \u003d self.instance.display_name"},{"line_number":336,"context_line":"        metadata[\u0027launch_index\u0027] \u003d self.instance.launch_index"},{"line_number":337,"context_line":"        metadata[\u0027availability_zone\u0027] \u003d self.availability_zone"},{"line_number":338,"context_line":"        if self._check_os_version(NEWTON, version):"},{"line_number":339,"context_line":"            metadata[\u0027devices\u0027] \u003d self._get_device_metadata()"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        if self._check_os_version(GRIZZLY, version):"}],"source_content_type":"text/x-python","patch_set":71,"id":"3aaa91ec_c6d3bc02","line":338,"in_reply_to":"3aaa91ec_a0f01768","updated":"2016-06-30 17:29:50.000000000","message":"Done","commit_id":"1442b7b2c1261565bf36b856763024833ba6ca89"}],"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":"7d040598f8b30e42695667635c65d001eb11d494","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":69,"id":"3aaa91ec_6afd94b0","side":"PARENT","line":3488,"updated":"2016-06-30 03:49:02.000000000","message":"I think Dan meant to do this in the previous patch in the series.","commit_id":"e3213c87d4a57cbbacba93741819508e4dcdb72a"}],"nova/tests/unit/test_metadata.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"feaf0a27bf00d670feb1e84809fc83a40adcf863","unresolved":false,"context_lines":[{"line_number":576,"context_line":"        fakes.stub_out_key_pair_funcs(self.stubs)"},{"line_number":577,"context_line":"        inst \u003d self.instance.obj_clone()"},{"line_number":578,"context_line":"        mdinst \u003d fake_InstanceMetadata(self.stubs, inst)"},{"line_number":579,"context_line":"        mdjson \u003d mdinst.lookup(\"/openstack/latest/meta_data.json\")"},{"line_number":580,"context_line":"        mddict \u003d jsonutils.loads(mdjson)"},{"line_number":581,"context_line":"        self.assertEqual(mddict[\u0027devices\u0027], fake_metadata_dicts())"},{"line_number":582,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_29566106","line":579,"updated":"2016-06-16 09:06:40.000000000","message":"Where is this meta_data.json file ? Its not in this commit or any earlier one AFAICT","commit_id":"22daaa1d3e79beb02cb8751d033477569cc27b87"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"63cd28af70cb075326e6cff16f4409e17e3bb1ec","unresolved":false,"context_lines":[{"line_number":576,"context_line":"        fakes.stub_out_key_pair_funcs(self.stubs)"},{"line_number":577,"context_line":"        inst \u003d self.instance.obj_clone()"},{"line_number":578,"context_line":"        mdinst \u003d fake_InstanceMetadata(self.stubs, inst)"},{"line_number":579,"context_line":"        mdjson \u003d mdinst.lookup(\"/openstack/latest/meta_data.json\")"},{"line_number":580,"context_line":"        mddict \u003d jsonutils.loads(mdjson)"},{"line_number":581,"context_line":"        self.assertEqual(mddict[\u0027devices\u0027], fake_metadata_dicts())"},{"line_number":582,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_1d038643","line":579,"in_reply_to":"7aa08908_29566106","updated":"2016-06-17 19:06:01.000000000","message":"It\u0027s not a file, it\u0027s looking up that resource from the metadata API. You can see similar code elsewhere in these tests.","commit_id":"22daaa1d3e79beb02cb8751d033477569cc27b87"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8711bc0f26f53bf9ebd585d6908d5077d2b38f08","unresolved":false,"context_lines":[{"line_number":26,"context_line":"except ImportError:"},{"line_number":27,"context_line":"    import pickle"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"import copy"},{"line_number":30,"context_line":"import mock"},{"line_number":31,"context_line":"from oslo_config import cfg"},{"line_number":32,"context_line":"from oslo_serialization import jsonutils"}],"source_content_type":"text/x-python","patch_set":67,"id":"3aaa91ec_fa603537","line":29,"updated":"2016-06-30 01:46:46.000000000","message":"This isn\u0027t a 3rd party lib so the import should be in the group above.","commit_id":"e85579fb089269efe5ce972891e5c8dcd50f7efa"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"11aa5c37dd870ea5e68dad7f600686c0a4122ba4","unresolved":false,"context_lines":[{"line_number":26,"context_line":"except ImportError:"},{"line_number":27,"context_line":"    import pickle"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"import copy"},{"line_number":30,"context_line":"import mock"},{"line_number":31,"context_line":"from oslo_config import cfg"},{"line_number":32,"context_line":"from oslo_serialization import jsonutils"}],"source_content_type":"text/x-python","patch_set":67,"id":"3aaa91ec_15119204","line":29,"in_reply_to":"3aaa91ec_fa603537","updated":"2016-06-30 02:09:32.000000000","message":"Done","commit_id":"e85579fb089269efe5ce972891e5c8dcd50f7efa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8711bc0f26f53bf9ebd585d6908d5077d2b38f08","unresolved":false,"context_lines":[{"line_number":505,"context_line":"            \u0027name\u0027: instance.display_name,"},{"line_number":506,"context_line":"            \u0027launch_index\u0027: instance.launch_index,"},{"line_number":507,"context_line":"            \u0027availability_zone\u0027: md.availability_zone,"},{"line_number":508,"context_line":"            \u0027devices\u0027: fake_metadata_dicts(),"},{"line_number":509,"context_line":"        }"},{"line_number":510,"context_line":"        if md.launch_metadata:"},{"line_number":511,"context_line":"            expected_metadata[\u0027meta\u0027] \u003d md.launch_metadata"}],"source_content_type":"text/x-python","patch_set":67,"id":"3aaa91ec_1ad381d6","line":508,"updated":"2016-06-30 01:46:46.000000000","message":"This has to be conditional on version like base.LIBERTY below.","commit_id":"e85579fb089269efe5ce972891e5c8dcd50f7efa"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"11aa5c37dd870ea5e68dad7f600686c0a4122ba4","unresolved":false,"context_lines":[{"line_number":505,"context_line":"            \u0027name\u0027: instance.display_name,"},{"line_number":506,"context_line":"            \u0027launch_index\u0027: instance.launch_index,"},{"line_number":507,"context_line":"            \u0027availability_zone\u0027: md.availability_zone,"},{"line_number":508,"context_line":"            \u0027devices\u0027: fake_metadata_dicts(),"},{"line_number":509,"context_line":"        }"},{"line_number":510,"context_line":"        if md.launch_metadata:"},{"line_number":511,"context_line":"            expected_metadata[\u0027meta\u0027] \u003d md.launch_metadata"}],"source_content_type":"text/x-python","patch_set":67,"id":"3aaa91ec_d531caa3","line":508,"in_reply_to":"3aaa91ec_1ad381d6","updated":"2016-06-30 02:09:32.000000000","message":"Done","commit_id":"e85579fb089269efe5ce972891e5c8dcd50f7efa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8711bc0f26f53bf9ebd585d6908d5077d2b38f08","unresolved":false,"context_lines":[{"line_number":579,"context_line":"        mdinst \u003d fake_InstanceMetadata(self, inst)"},{"line_number":580,"context_line":"        mdjson \u003d mdinst.lookup(\"/openstack/latest/meta_data.json\")"},{"line_number":581,"context_line":"        mddict \u003d jsonutils.loads(mdjson)"},{"line_number":582,"context_line":"        self.assertFalse(mddict[\u0027devices\u0027])"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    def test_device_metadata(self):"},{"line_number":585,"context_line":"        # Because we handle a list of devices, we have only one test and in it"}],"source_content_type":"text/x-python","patch_set":67,"id":"3aaa91ec_7a03a542","line":582,"range":{"start_line":582,"start_character":13,"end_line":582,"end_character":24},"updated":"2016-06-30 01:46:46.000000000","message":"Should probably assertEqual([], mddict[\u0027devices\u0027])","commit_id":"e85579fb089269efe5ce972891e5c8dcd50f7efa"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"11aa5c37dd870ea5e68dad7f600686c0a4122ba4","unresolved":false,"context_lines":[{"line_number":579,"context_line":"        mdinst \u003d fake_InstanceMetadata(self, inst)"},{"line_number":580,"context_line":"        mdjson \u003d mdinst.lookup(\"/openstack/latest/meta_data.json\")"},{"line_number":581,"context_line":"        mddict \u003d jsonutils.loads(mdjson)"},{"line_number":582,"context_line":"        self.assertFalse(mddict[\u0027devices\u0027])"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    def test_device_metadata(self):"},{"line_number":585,"context_line":"        # Because we handle a list of devices, we have only one test and in it"}],"source_content_type":"text/x-python","patch_set":67,"id":"3aaa91ec_3523ee59","line":582,"range":{"start_line":582,"start_character":13,"end_line":582,"end_character":24},"in_reply_to":"3aaa91ec_7a03a542","updated":"2016-06-30 02:09:32.000000000","message":"Done","commit_id":"e85579fb089269efe5ce972891e5c8dcd50f7efa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8711bc0f26f53bf9ebd585d6908d5077d2b38f08","unresolved":false,"context_lines":[{"line_number":591,"context_line":"        mdinst \u003d fake_InstanceMetadata(self, inst)"},{"line_number":592,"context_line":"        mdjson \u003d mdinst.lookup(\"/openstack/latest/meta_data.json\")"},{"line_number":593,"context_line":"        mddict \u003d jsonutils.loads(mdjson)"},{"line_number":594,"context_line":"        self.assertEqual(mddict[\u0027devices\u0027], fake_metadata_dicts())"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    def test_top_level_listing(self):"},{"line_number":597,"context_line":"        # request for /openstack/\u003cversion\u003e/ should show metadata.json"}],"source_content_type":"text/x-python","patch_set":67,"id":"3aaa91ec_fa95d5e3","line":594,"range":{"start_line":594,"start_character":13,"end_line":594,"end_character":24},"updated":"2016-06-30 01:46:46.000000000","message":"Swap the args here, the parameters are (expected, observed). The result is the same but if it fails the error message would be incorrect.","commit_id":"e85579fb089269efe5ce972891e5c8dcd50f7efa"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"11aa5c37dd870ea5e68dad7f600686c0a4122ba4","unresolved":false,"context_lines":[{"line_number":591,"context_line":"        mdinst \u003d fake_InstanceMetadata(self, inst)"},{"line_number":592,"context_line":"        mdjson \u003d mdinst.lookup(\"/openstack/latest/meta_data.json\")"},{"line_number":593,"context_line":"        mddict \u003d jsonutils.loads(mdjson)"},{"line_number":594,"context_line":"        self.assertEqual(mddict[\u0027devices\u0027], fake_metadata_dicts())"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    def test_top_level_listing(self):"},{"line_number":597,"context_line":"        # request for /openstack/\u003cversion\u003e/ should show metadata.json"}],"source_content_type":"text/x-python","patch_set":67,"id":"3aaa91ec_551e7a0c","line":594,"range":{"start_line":594,"start_character":13,"end_line":594,"end_character":24},"in_reply_to":"3aaa91ec_fa95d5e3","updated":"2016-06-30 02:09:32.000000000","message":"Done","commit_id":"e85579fb089269efe5ce972891e5c8dcd50f7efa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"049eb6df5571e12305a1a6d7a6360e2e4c8c5c08","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"class FakeDeviceBus(metadata_obj.DeviceBus):"},{"line_number":177,"context_line":"    pass"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"def fake_metadata_objects():"}],"source_content_type":"text/x-python","patch_set":71,"id":"3aaa91ec_807ebbe1","line":177,"updated":"2016-06-30 17:06:10.000000000","message":"These are to ensure that we don\u0027t see them in the metadata for unrecognized devices right? We probably need to think about what our policy is for exposing new device types in here. Not sure it will require a new version each time, but being explicit about including them (as I guess you are here) is probably a good idea.","commit_id":"1442b7b2c1261565bf36b856763024833ba6ca89"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b90c2183425e5e9235edf428f55e28c7224626a2","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"class FakeDeviceBus(metadata_obj.DeviceBus):"},{"line_number":177,"context_line":"    pass"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"def fake_metadata_objects():"}],"source_content_type":"text/x-python","patch_set":71,"id":"3aaa91ec_66a00843","line":177,"in_reply_to":"3aaa91ec_46018c04","updated":"2016-06-30 17:29:50.000000000","message":"Yeah, this test is to make sure we don\u0027t add supported device types in the virt layer and they magically appear here. It goes along with the idea of building the JSON here in the metadata API layer, as opposed to having the metadata objects each build their own JSON representation.","commit_id":"1442b7b2c1261565bf36b856763024833ba6ca89"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8c2e73a6efee41d5b085b16150bc34c8fe6c06dc","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"class FakeDeviceBus(metadata_obj.DeviceBus):"},{"line_number":177,"context_line":"    pass"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"def fake_metadata_objects():"}],"source_content_type":"text/x-python","patch_set":71,"id":"3aaa91ec_46018c04","line":177,"in_reply_to":"3aaa91ec_807ebbe1","updated":"2016-06-30 17:07:50.000000000","message":"Yeah I thought about that last night, it\u0027s going to be tricky when new things get added way down in the virt driver bubbling up to the metadata API. But the Tempest test should also help there.","commit_id":"1442b7b2c1261565bf36b856763024833ba6ca89"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"049eb6df5571e12305a1a6d7a6360e2e4c8c5c08","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    nic_obj \u003d metadata_obj.NetworkInterfaceMetadata("},{"line_number":182,"context_line":"        bus\u003dmetadata_obj.PCIDeviceBus(address\u003d\u00270000:00:01.0\u0027),"},{"line_number":183,"context_line":"        mac\u003d\u002700:00:00:00:00:00\u0027,"},{"line_number":184,"context_line":"        tags\u003d[\u0027foo\u0027, \u0027bar\u0027]"},{"line_number":185,"context_line":"    )"},{"line_number":186,"context_line":"    ide_disk_obj \u003d metadata_obj.DiskMetadata("},{"line_number":187,"context_line":"        bus\u003dmetadata_obj.IDEDeviceBus(address\u003d\u00270:0\u0027),"}],"source_content_type":"text/x-python","patch_set":71,"id":"3aaa91ec_6092aff7","line":184,"updated":"2016-06-30 17:06:10.000000000","message":"Technically we don\u0027t have the ability to have multiple tags, but it\u0027s always a list so I don\u0027t really think this is unrealistic enough to be a problem.","commit_id":"1442b7b2c1261565bf36b856763024833ba6ca89"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b90c2183425e5e9235edf428f55e28c7224626a2","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    nic_obj \u003d metadata_obj.NetworkInterfaceMetadata("},{"line_number":182,"context_line":"        bus\u003dmetadata_obj.PCIDeviceBus(address\u003d\u00270000:00:01.0\u0027),"},{"line_number":183,"context_line":"        mac\u003d\u002700:00:00:00:00:00\u0027,"},{"line_number":184,"context_line":"        tags\u003d[\u0027foo\u0027, \u0027bar\u0027]"},{"line_number":185,"context_line":"    )"},{"line_number":186,"context_line":"    ide_disk_obj \u003d metadata_obj.DiskMetadata("},{"line_number":187,"context_line":"        bus\u003dmetadata_obj.IDEDeviceBus(address\u003d\u00270:0\u0027),"}],"source_content_type":"text/x-python","patch_set":71,"id":"3aaa91ec_c68bbcc1","line":184,"in_reply_to":"3aaa91ec_6092aff7","updated":"2016-06-30 17:29:50.000000000","message":"It\u0027s plural to allow for future multiple tags if we need that, but for now it\u0027s only a single tag per device, so yeah, probably best not to confuse folks here.","commit_id":"1442b7b2c1261565bf36b856763024833ba6ca89"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"31b8c2c4c998afe1428711bc2c504557ace8b633","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    nic_obj \u003d metadata_obj.NetworkInterfaceMetadata("},{"line_number":182,"context_line":"        bus\u003dmetadata_obj.PCIDeviceBus(address\u003d\u00270000:00:01.0\u0027),"},{"line_number":183,"context_line":"        mac\u003d\u002700:00:00:00:00:00\u0027,"},{"line_number":184,"context_line":"        tags\u003d[\u0027foo\u0027, \u0027bar\u0027]"},{"line_number":185,"context_line":"    )"},{"line_number":186,"context_line":"    ide_disk_obj \u003d metadata_obj.DiskMetadata("},{"line_number":187,"context_line":"        bus\u003dmetadata_obj.IDEDeviceBus(address\u003d\u00270:0\u0027),"}],"source_content_type":"text/x-python","patch_set":71,"id":"3aaa91ec_89b26704","line":184,"in_reply_to":"3aaa91ec_c68bbcc1","updated":"2016-06-30 17:32:08.000000000","message":"Yep, glad to have it plural in the model for $future, and it\u0027s not wrong to have it plural in the tests, I was just commenting.","commit_id":"1442b7b2c1261565bf36b856763024833ba6ca89"}],"releasenotes/notes/virtual-device-role-tagging-ec0c36226a3f2e4d.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6b2595c2b020d472bdfab9af2c3823ae935578e7","unresolved":false,"context_lines":[{"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"},{"line_number":22,"context_line":"    paragraph, along with their hardware metadata."}],"source_content_type":"text/x-yaml","patch_set":71,"id":"3aaa91ec_207a67bd","line":19,"range":{"start_line":19,"start_character":11,"end_line":19,"end_character":20},"updated":"2016-06-30 17:05:16.000000000","message":"This is not really correct, and probably confusing, I think we could omit user-data here. I think I introduced this so sorry.","commit_id":"1442b7b2c1261565bf36b856763024833ba6ca89"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b90c2183425e5e9235edf428f55e28c7224626a2","unresolved":false,"context_lines":[{"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"},{"line_number":22,"context_line":"    paragraph, along with their hardware metadata."}],"source_content_type":"text/x-yaml","patch_set":71,"id":"3aaa91ec_a6a03091","line":19,"range":{"start_line":19,"start_character":11,"end_line":19,"end_character":20},"in_reply_to":"3aaa91ec_207a67bd","updated":"2016-06-30 17:29:50.000000000","message":"Done","commit_id":"1442b7b2c1261565bf36b856763024833ba6ca89"}],"releasenotes/notes/virtual-device-tags-in-metadata-f57f276c10fde897.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7d040598f8b30e42695667635c65d001eb11d494","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"-   Starting with version 2016-06-30, the metadata contains"},{"line_number":4,"context_line":"    a \u0027devices\u0027 sections which lists any devices that are"},{"line_number":5,"context_line":"    tagged as described in the virtual-device-role-tagging spec,"},{"line_number":6,"context_line":"    along with their hardware metadata."}],"source_content_type":"text/x-yaml","patch_set":69,"id":"3aaa91ec_ca2c884c","line":3,"updated":"2016-06-30 03:49:02.000000000","message":"I actually meant for this to go in:\n\nhttps://review.openstack.org/#/c/304510/63/releasenotes/notes/virtual-device-role-tagging-ec0c36226a3f2e4d.yaml\n\nJust in this change, but the same release note, not a new one.","commit_id":"57f9147793f522769e5dc4c4d1208bd143deba95"}]}
