)]}'
{"nova/api/openstack/compute/schemas/servers.py":[{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"33798522fc04c0fe85c34cd303290b05b5353736","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                                \u0027format\u0027: \u0027uuid\u0027"},{"line_number":40,"context_line":"                            },"},{"line_number":41,"context_line":"                            \u0027uuid\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":42,"context_line":"                            \u0027tag\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":43,"context_line":"                        },"},{"line_number":44,"context_line":"                        \u0027additionalProperties\u0027: False,"},{"line_number":45,"context_line":"                    }"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_59f3e00a","line":42,"range":{"start_line":42,"start_character":28,"end_line":42,"end_character":53},"updated":"2015-12-23 20:15:02.000000000","message":"this surely requires a microversion, and also - we want to make it clear that we did not implement this for block devices in this patch (only for nics), so we may want to update the commit message.","commit_id":"5c9c1c775a46291360a5285006c40af843781f15"}],"nova/compute/manager.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"dcebe2bae1eb8ecf3388c7485cae83a499390359","unresolved":false,"context_lines":[{"line_number":4119,"context_line":"        \"\"\"Retrieve device metadata (including tags) for an intance on this"},{"line_number":4120,"context_line":"        host."},{"line_number":4121,"context_line":"        \"\"\""},{"line_number":4122,"context_line":"        return self.driver.get_device_metadata(context, instance)"},{"line_number":4123,"context_line":""},{"line_number":4124,"context_line":"    @wrap_exception()"},{"line_number":4125,"context_line":"    @reverts_task_state"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_e902e708","line":4122,"updated":"2015-12-24 12:44:36.000000000","message":"i am not sure about wrapping the exception here. what if the driver method is not implemented then you should just return. This will break all other drivers with metadata ...","commit_id":"5c9c1c775a46291360a5285006c40af843781f15"}],"nova/objects/metadata.py":[{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"33798522fc04c0fe85c34cd303290b05b5353736","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    fields \u003d {"},{"line_number":25,"context_line":"        \u0027type\u0027: fields.StringField(),"},{"line_number":26,"context_line":"        \u0027bus\u0027: fields.StringField(),"},{"line_number":27,"context_line":"        \u0027address\u0027: fields.StringField(),"},{"line_number":28,"context_line":"        \u0027tag\u0027: fields.StringField(),"},{"line_number":29,"context_line":"    }"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_f41ad36d","line":27,"range":{"start_line":27,"start_character":9,"end_line":27,"end_character":16},"updated":"2015-12-23 20:15:02.000000000","message":"Do we want to make it more apparent that this is in fact an an address on an instance bus as opposed to something else by calling it \u0027bus_address\u0027 for example?","commit_id":"5c9c1c775a46291360a5285006c40af843781f15"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"60952ab5abb30fd15925e909538b9fe5af2a5972","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            \u0027mac\u0027: self.mac,"},{"line_number":46,"context_line":"            \u0027tags\u0027: [self.tag],"},{"line_number":47,"context_line":"        }"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":51,"context_line":"class DeviceMetadataList(base.ObjectListBase, base.NovaObject):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_d16eb795","line":48,"updated":"2015-12-24 10:28:39.000000000","message":"This set of objects really needs to be changed to reflect the structure defined in the schema shown in the spec:\n\nhttp://specs.openstack.org/openstack/nova-specs/specs/mitaka/approved/virt-device-role-tagging.html\n\nI would expect us to have a \u0027DeviceBus\u0027 base object with no fields, with subclasses for DeviceBusPCI, DeviceBusUSB, DeviceBusSCSI, etc. Each subclass should have an \u0027address\u0027 attribute which *strongly* validates the type of the address eg a PCIAddressField, USBAddressField, SCSIADdressField, etc\n\n\nThen, we should have a \u0027Device\u0027 base object which had an \u0027tag\u0027 as a list of strings, and \u0027bus\u0027 as a object field of type DeviceBus. Then subclasses of \u0027Device\u0027 for DeviceNetwork, DeviceDisks, etc adding the custom fields for those device types.\n\nWe should probably have a prefix of \u0027Metadata\u0027 on all classes, since these names risk clashing with other objects in nova otherwise","commit_id":"5c9c1c775a46291360a5285006c40af843781f15"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"6966e58e1ca73e946eff9ef36c29c104245c9a6a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            \u0027mac\u0027: self.mac,"},{"line_number":46,"context_line":"            \u0027tags\u0027: [self.tag],"},{"line_number":47,"context_line":"        }"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":51,"context_line":"class DeviceMetadataList(base.ObjectListBase, base.NovaObject):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_fb614da9","line":48,"in_reply_to":"1a7b0d38_d16eb795","updated":"2015-12-24 12:08:50.000000000","message":"\u003e I would expect us to have a \u0027DeviceBus\u0027 base object with no fields, with subclasses for DeviceBusPCI, DeviceBusUSB, DeviceBusSCSI, etc. Each subclass should have an \u0027address\u0027 attribute which *strongly* validates the type of the address eg a PCIAddressField, USBAddressField, SCSIADdressField, etc\n\nOr actually this looks like we want to have more functionality added to the Field classes. Bus seems like ti could be it\u0027s own field, and bus address could be a field that depends on another object field. there is no way to validate the field based on the value of another field in the object in versionedobjects yet so we need to hack it with sub-object subclasses.","commit_id":"5c9c1c775a46291360a5285006c40af843781f15"}],"nova/objects/virtual_interface_tag.py":[{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"33798522fc04c0fe85c34cd303290b05b5353736","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":23,"context_line":"class VirtualInterfaceTag(base.NovaPersistentObject, base.NovaObject):"},{"line_number":24,"context_line":"    # Version 1.0: Initial version"},{"line_number":25,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_749ee357","line":23,"range":{"start_line":23,"start_character":6,"end_line":23,"end_character":25},"updated":"2015-12-23 20:15:02.000000000","message":"This is missing tests.","commit_id":"5c9c1c775a46291360a5285006c40af843781f15"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"60952ab5abb30fd15925e909538b9fe5af2a5972","unresolved":false,"context_lines":[{"line_number":7166,"context_line":""},{"line_number":7167,"context_line":"        for vif_tag in vif_tags:"},{"line_number":7168,"context_line":"            interface \u003d xml_dom.find("},{"line_number":7169,"context_line":"                \"./devices/interface/mac[@address\u003d\u0027%s\u0027]/..\" % vif_tag.address)"},{"line_number":7170,"context_line":""},{"line_number":7171,"context_line":"            device \u003d obj_metadata.NetworkInterfaceMetadata()"},{"line_number":7172,"context_line":"            device.type \u003d \u0027nic\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_11af5f95","line":7169,"range":{"start_line":7169,"start_character":77,"end_line":7169,"end_character":78},"updated":"2015-12-24 10:28:39.000000000","message":"Please don\u0027t try to parse XML using custom XPath. Use the nova.virt.libvirt.config classes to parse it and then just access attributes. You may need to add more parsing routines to those config classes, but that\u0027s normal / expected work.","commit_id":"5c9c1c775a46291360a5285006c40af843781f15"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"33798522fc04c0fe85c34cd303290b05b5353736","unresolved":false,"context_lines":[{"line_number":7175,"context_line":""},{"line_number":7176,"context_line":"            address \u003d interface.find(\u0027address\u0027)"},{"line_number":7177,"context_line":"            device.bus \u003d address.attrib[\u0027type\u0027]"},{"line_number":7178,"context_line":"            if device.bus \u003d\u003d \u0027pci\u0027:"},{"line_number":7179,"context_line":"                pci_domain \u003d int(address.attrib[\u0027domain\u0027], 16)"},{"line_number":7180,"context_line":"                pci_bus \u003d int(address.attrib[\u0027bus\u0027], 16)"},{"line_number":7181,"context_line":"                pci_slot \u003d int(address.attrib[\u0027slot\u0027], 16)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_347a9b25","line":7178,"range":{"start_line":7178,"start_character":15,"end_line":7178,"end_character":34},"updated":"2015-12-23 20:15:02.000000000","message":"do we want to no append anything on a non-pci device (however unlikely that is to happen)?","commit_id":"5c9c1c775a46291360a5285006c40af843781f15"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"60952ab5abb30fd15925e909538b9fe5af2a5972","unresolved":false,"context_lines":[{"line_number":7175,"context_line":""},{"line_number":7176,"context_line":"            address \u003d interface.find(\u0027address\u0027)"},{"line_number":7177,"context_line":"            device.bus \u003d address.attrib[\u0027type\u0027]"},{"line_number":7178,"context_line":"            if device.bus \u003d\u003d \u0027pci\u0027:"},{"line_number":7179,"context_line":"                pci_domain \u003d int(address.attrib[\u0027domain\u0027], 16)"},{"line_number":7180,"context_line":"                pci_bus \u003d int(address.attrib[\u0027bus\u0027], 16)"},{"line_number":7181,"context_line":"                pci_slot \u003d int(address.attrib[\u0027slot\u0027], 16)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_11867f13","line":7178,"range":{"start_line":7178,"start_character":15,"end_line":7178,"end_character":34},"in_reply_to":"1a7b0d38_347a9b25","updated":"2015-12-24 10:28:39.000000000","message":"Yes, the spec schema specifically allows for non-pci devices as they will happen with LXC, Xen, Parallels","commit_id":"5c9c1c775a46291360a5285006c40af843781f15"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"6966e58e1ca73e946eff9ef36c29c104245c9a6a","unresolved":false,"context_lines":[{"line_number":7187,"context_line":""},{"line_number":7188,"context_line":"        return metadata"},{"line_number":7189,"context_line":""},{"line_number":7190,"context_line":"    def get_device_metadata(self, context, instance):"},{"line_number":7191,"context_line":"        return self._get_vif_metadata(context, instance)"},{"line_number":7192,"context_line":""},{"line_number":7193,"context_line":"    def instance_on_disk(self, instance):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_7b91dd51","line":7190,"range":{"start_line":7190,"start_character":8,"end_line":7190,"end_character":27},"updated":"2015-12-24 12:08:50.000000000","message":"so this will work for metadata service, but we are completely bypassing the config drive. This is OK for the first implementation (we can add that later) but we want to be explicit about it in the commit message at least.","commit_id":"5c9c1c775a46291360a5285006c40af843781f15"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"deb05f273c883a2bfa2cabfe643aff7c10752cd6","unresolved":false,"context_lines":[{"line_number":7187,"context_line":""},{"line_number":7188,"context_line":"        return metadata"},{"line_number":7189,"context_line":""},{"line_number":7190,"context_line":"    def get_device_metadata(self, context, instance):"},{"line_number":7191,"context_line":"        return self._get_vif_metadata(context, instance)"},{"line_number":7192,"context_line":""},{"line_number":7193,"context_line":"    def instance_on_disk(self, instance):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_5e3bafd1","line":7190,"range":{"start_line":7190,"start_character":8,"end_line":7190,"end_character":27},"in_reply_to":"1a7b0d38_7b91dd51","updated":"2015-12-24 12:14:41.000000000","message":"Isn\u0027t the config drive generated *before* the instance is booted? Which means we don\u0027t know device PCI addressing information when the drive is generated. So unless we fundamentally change when the config drive is generated, we can\u0027t include PCI addressing information in it (and by extension any of the metadata from this spec).","commit_id":"5c9c1c775a46291360a5285006c40af843781f15"}]}
