)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8267eefa0c345f71126882465cafc444dfed85f2","unresolved":false,"context_lines":[{"line_number":7,"context_line":"network: update pci request spec to handle trusted tags"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Read port info to extract the trusted tag from binding profile then,"},{"line_number":10,"context_line":"correclty set it in the request spec."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Implements blueprint sriov-trusted-vfs"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"bf659307_c7eb28da","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":9},"updated":"2018-04-04 18:58:51.000000000","message":"correctly","commit_id":"b1bf0810364f59d825e6aa6e18ed07d98c59758e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"97b7dfcc9c6b74e2021484197ff6bff60e605004","unresolved":false,"context_lines":[{"line_number":7,"context_line":"network: update pci request spec to handle trusted tags"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Read port info to extract the trusted tag from binding profile then,"},{"line_number":10,"context_line":"correclty set it in the request spec."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Implements blueprint sriov-trusted-vfs"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"bf659307_eea0f944","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":9},"updated":"2018-04-11 13:42:41.000000000","message":"correctly","commit_id":"1c01c2990e1f94ae54ac8d6db960700269299d22"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb1e7781e06d69fb14f80e81788b991bef04a184","unresolved":false,"context_lines":[{"line_number":7,"context_line":"network: update pci request spec to handle trusted tags"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Read port info to extract the trusted tag from binding profile then,"},{"line_number":10,"context_line":"correclty set it in the request spec."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Implements blueprint sriov-trusted-vfs"},{"line_number":13,"context_line":"Signed-off-by: Sahid Orentino Ferdjaoui \u003csahid.ferdjaoui@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"5f7c97a3_fdd64df2","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":9},"updated":"2018-05-29 21:29:29.000000000","message":"nit: typo, but just remove it, since \"correctly\" implies you\u0027re fixing something.","commit_id":"c6e389917f4115560c6113229f4caf0ba0172b73"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3e0f913e32d7dedbdf71beea4a52109663a36818","unresolved":false,"context_lines":[{"line_number":7,"context_line":"network: update pci request spec to handle trusted tags"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Read port info to extract the trusted tag from binding profile then,"},{"line_number":10,"context_line":"correclty set it in the request spec."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Implements blueprint sriov-trusted-vfs"},{"line_number":13,"context_line":"Signed-off-by: Sahid Orentino Ferdjaoui \u003csahid.ferdjaoui@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"5f7c97a3_c09b66c6","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":9},"in_reply_to":"5f7c97a3_fdd64df2","updated":"2018-05-29 21:45:46.000000000","message":"Done","commit_id":"c6e389917f4115560c6113229f4caf0ba0172b73"}],"nova/network/neutronv2/api.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"da175bb173ff6ab8567ea718076ac6cf90b53a0c","unresolved":false,"context_lines":[{"line_number":1404,"context_line":""},{"line_number":1405,"context_line":"    @staticmethod"},{"line_number":1406,"context_line":"    def _get_trusted_tag_from_port(port):"},{"line_number":1407,"context_line":"        return port.get(\u0027binding:profile\u0027, {}).get(\u0027trusted\u0027)"},{"line_number":1408,"context_line":""},{"line_number":1409,"context_line":"    def _get_port_vnic_info(self, context, neutron, port_id):"},{"line_number":1410,"context_line":"        \"\"\"Retrieve port vnic info"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_b8915bf4","line":1407,"updated":"2017-05-03 17:26:52.000000000","message":"You should convert this to a bool return instead of the string \"true\" that you will get from Neutron\u0027s port profile serialized response.","commit_id":"e43d7b5f47ea069938dce45e88964155df0731cf"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"f30af6f177063b737f96cdc9c400854ae1205697","unresolved":false,"context_lines":[{"line_number":1404,"context_line":""},{"line_number":1405,"context_line":"    @staticmethod"},{"line_number":1406,"context_line":"    def _get_trusted_tag_from_port(port):"},{"line_number":1407,"context_line":"        return port.get(\u0027binding:profile\u0027, {}).get(\u0027trusted\u0027)"},{"line_number":1408,"context_line":""},{"line_number":1409,"context_line":"    def _get_port_vnic_info(self, context, neutron, port_id):"},{"line_number":1410,"context_line":"        \"\"\"Retrieve port vnic info"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f044301_6260e033","line":1407,"in_reply_to":"5ff73747_b8915bf4","updated":"2017-05-04 10:50:07.000000000","message":"Actually it\u0027s exactly what I did in my first attempt but it\u0027s not possible to store the tag as True in the spec anyway [0].\n\n[0] http://git.openstack.org/cgit/openstack/nova/tree/nova/objects/instance_pci_requests.py#n31","commit_id":"e43d7b5f47ea069938dce45e88964155df0731cf"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"da175bb173ff6ab8567ea718076ac6cf90b53a0c","unresolved":false,"context_lines":[{"line_number":1412,"context_line":"        Invoked with a valid port_id."},{"line_number":1413,"context_line":"        Return vnic type and the attached physical network name."},{"line_number":1414,"context_line":"        \"\"\""},{"line_number":1415,"context_line":"        trusted \u003d None"},{"line_number":1416,"context_line":"        phynet_name \u003d None"},{"line_number":1417,"context_line":"        port \u003d self._show_port(context, port_id, neutron_client\u003dneutron,"},{"line_number":1418,"context_line":"                               fields\u003d[\u0027binding:vnic_type\u0027, \u0027network_id\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_581817d2","line":1415,"updated":"2017-05-03 17:26:52.000000000","message":"Are you differentiating None here from True/False as \"the state of trust between the PF and the VF is unknown\"? Or should you just default this to False instead of None?","commit_id":"e43d7b5f47ea069938dce45e88964155df0731cf"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"f30af6f177063b737f96cdc9c400854ae1205697","unresolved":false,"context_lines":[{"line_number":1412,"context_line":"        Invoked with a valid port_id."},{"line_number":1413,"context_line":"        Return vnic type and the attached physical network name."},{"line_number":1414,"context_line":"        \"\"\""},{"line_number":1415,"context_line":"        trusted \u003d None"},{"line_number":1416,"context_line":"        phynet_name \u003d None"},{"line_number":1417,"context_line":"        port \u003d self._show_port(context, port_id, neutron_client\u003dneutron,"},{"line_number":1418,"context_line":"                               fields\u003d[\u0027binding:vnic_type\u0027, \u0027network_id\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f044301_2273f8e9","line":1415,"in_reply_to":"5ff73747_581817d2","updated":"2017-05-04 10:50:07.000000000","message":"I\u0027m trying to say that \u0027None\u0027 means trusted tag has not been requested so we do not want to have it into the spec whereas we want it if defined to False (for scheduling purpose).\n\nActually it\u0027s nice comment because line 1461 I should have wrote:\n\n  if trusted is not None:\n    ...","commit_id":"e43d7b5f47ea069938dce45e88964155df0731cf"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"da175bb173ff6ab8567ea718076ac6cf90b53a0c","unresolved":false,"context_lines":[{"line_number":1417,"context_line":"        port \u003d self._show_port(context, port_id, neutron_client\u003dneutron,"},{"line_number":1418,"context_line":"                               fields\u003d[\u0027binding:vnic_type\u0027, \u0027network_id\u0027,"},{"line_number":1419,"context_line":"                                       \u0027binding:profile\u0027])"},{"line_number":1420,"context_line":"        LOG.debug(\"Port info: %s\", port)"},{"line_number":1421,"context_line":"        vnic_type \u003d port.get(\u0027binding:vnic_type\u0027,"},{"line_number":1422,"context_line":"                             network_model.VNIC_TYPE_NORMAL)"},{"line_number":1423,"context_line":"        if vnic_type in network_model.VNIC_TYPES_SRIOV:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_787873f7","line":1420,"updated":"2017-05-03 17:26:52.000000000","message":"Was the above added just for testing? Or were you really trying to output the entire port object to the debug logs?","commit_id":"e43d7b5f47ea069938dce45e88964155df0731cf"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"f30af6f177063b737f96cdc9c400854ae1205697","unresolved":false,"context_lines":[{"line_number":1417,"context_line":"        port \u003d self._show_port(context, port_id, neutron_client\u003dneutron,"},{"line_number":1418,"context_line":"                               fields\u003d[\u0027binding:vnic_type\u0027, \u0027network_id\u0027,"},{"line_number":1419,"context_line":"                                       \u0027binding:profile\u0027])"},{"line_number":1420,"context_line":"        LOG.debug(\"Port info: %s\", port)"},{"line_number":1421,"context_line":"        vnic_type \u003d port.get(\u0027binding:vnic_type\u0027,"},{"line_number":1422,"context_line":"                             network_model.VNIC_TYPE_NORMAL)"},{"line_number":1423,"context_line":"        if vnic_type in network_model.VNIC_TYPES_SRIOV:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f044301_a2502834","line":1420,"in_reply_to":"5ff73747_787873f7","updated":"2017-05-04 10:50:07.000000000","message":"It was for testing, but actually we can keep it to help any debug, no?","commit_id":"e43d7b5f47ea069938dce45e88964155df0731cf"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ed526991f39ca43e12b64b226f28e1b9daff5220","unresolved":false,"context_lines":[{"line_number":1448,"context_line":"        \"\"\"Retrieve port vnic info"},{"line_number":1449,"context_line":""},{"line_number":1450,"context_line":"        Invoked with a valid port_id."},{"line_number":1451,"context_line":"        Return vnic type and the attached physical network name."},{"line_number":1452,"context_line":"        \"\"\""},{"line_number":1453,"context_line":"        trusted \u003d None"},{"line_number":1454,"context_line":"        phynet_name \u003d None"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff0f0b1f_a102f23b","line":1451,"updated":"2017-05-22 20:33:44.000000000","message":"Please update the docstring return value.","commit_id":"58a8c8cb4f808906e22f1a6727798dc0706a700b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ed526991f39ca43e12b64b226f28e1b9daff5220","unresolved":false,"context_lines":[{"line_number":1486,"context_line":"                LOG.debug(\"Requested port_id\u003d%s, vnic_type\u003d%s, \""},{"line_number":1487,"context_line":"                          \"phynet_name\u003d%s, trusted_tag\u003d%s\","},{"line_number":1488,"context_line":"                          request_net.port_id, vnic_type, phynet_name,"},{"line_number":1489,"context_line":"                          trusted)"},{"line_number":1490,"context_line":"            pci_request_id \u003d None"},{"line_number":1491,"context_line":"            if vnic_type in network_model.VNIC_TYPES_SRIOV:"},{"line_number":1492,"context_line":"                spec \u003d {pci_request.PCI_NET_TAG: phynet_name}"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff0f0b1f_c105e647","line":1489,"updated":"2017-05-22 20:33:44.000000000","message":"How about \"Creating PCI device request for port_id\u003d%s...\"?","commit_id":"58a8c8cb4f808906e22f1a6727798dc0706a700b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ed526991f39ca43e12b64b226f28e1b9daff5220","unresolved":false,"context_lines":[{"line_number":1505,"context_line":"                pci_request_id \u003d request.request_id"},{"line_number":1506,"context_line":""},{"line_number":1507,"context_line":"                LOG.debug(\"PCI Request port_id\u003d%s, request\u003d%s\","},{"line_number":1508,"context_line":"                          request_net.port_id, request)"},{"line_number":1509,"context_line":""},{"line_number":1510,"context_line":"            # Add pci_request_id into the requested network"},{"line_number":1511,"context_line":"            request_net.pci_request_id \u003d pci_request_id"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff0f0b1f_e1d34ad4","line":1508,"updated":"2017-05-22 20:33:44.000000000","message":"Please remove this. It looks like some leftover testing statement?","commit_id":"58a8c8cb4f808906e22f1a6727798dc0706a700b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8cc65999d7ba50d06e081941be79f5953fdd5de4","unresolved":false,"context_lines":[{"line_number":1046,"context_line":"    def _get_pci_device_profile(self, pci_dev):"},{"line_number":1047,"context_line":"        dev_spec \u003d self.pci_whitelist.get_devspec(pci_dev)"},{"line_number":1048,"context_line":"        if dev_spec:"},{"line_number":1049,"context_line":"            profile \u003d {\u0027pci_vendor_info\u0027: \"%s:%s\" %"},{"line_number":1050,"context_line":"                        (pci_dev.vendor_id, pci_dev.product_id),"},{"line_number":1051,"context_line":"                    \u0027pci_slot\u0027: pci_dev.address,"},{"line_number":1052,"context_line":"                    \u0027physical_network\u0027:"},{"line_number":1053,"context_line":"                        dev_spec.get_tags().get(\u0027physical_network\u0027)}"},{"line_number":1054,"context_line":"            if dev_spec.get_tags().get(\u0027trusted\u0027):"},{"line_number":1055,"context_line":"                profile[\u0027trusted\u0027] \u003d dev_spec.get_tags().get(\u0027trusted\u0027)"},{"line_number":1056,"context_line":"            return profile"}],"source_content_type":"text/x-python","patch_set":11,"id":"df7087c5_ae03cf0f","line":1053,"range":{"start_line":1049,"start_character":12,"end_line":1053,"end_character":68},"updated":"2018-03-23 13:47:51.000000000","message":"Please fix up the alignment here.","commit_id":"edd569a4eaf563f11df0d918dcef21437b641413"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8cc65999d7ba50d06e081941be79f5953fdd5de4","unresolved":false,"context_lines":[{"line_number":1052,"context_line":"                    \u0027physical_network\u0027:"},{"line_number":1053,"context_line":"                        dev_spec.get_tags().get(\u0027physical_network\u0027)}"},{"line_number":1054,"context_line":"            if dev_spec.get_tags().get(\u0027trusted\u0027):"},{"line_number":1055,"context_line":"                profile[\u0027trusted\u0027] \u003d dev_spec.get_tags().get(\u0027trusted\u0027)"},{"line_number":1056,"context_line":"            return profile"},{"line_number":1057,"context_line":"        raise exception.PciDeviceNotFound(node_id\u003dpci_dev.compute_node_id,"},{"line_number":1058,"context_line":"                                          address\u003dpci_dev.address)"}],"source_content_type":"text/x-python","patch_set":11,"id":"df7087c5_79ffc300","line":1055,"range":{"start_line":1055,"start_character":37,"end_line":1055,"end_character":71},"updated":"2018-03-23 13:47:51.000000000","message":"Do we want to try and normalize this to a boolean? I know the spec said that the pci whitelist entry and what\u0027s put in the port profile via the neutron API have to be the same case, but how is the networking API user creating the port going to know what is in the pci whitelist? Ultimately the code run in the linux_net command casts to boolean, so couldn\u0027t we also normalize?","commit_id":"edd569a4eaf563f11df0d918dcef21437b641413"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"13372e08b745a1d7e5c1c17d76459e0938670184","unresolved":false,"context_lines":[{"line_number":1052,"context_line":"                    \u0027physical_network\u0027:"},{"line_number":1053,"context_line":"                        dev_spec.get_tags().get(\u0027physical_network\u0027)}"},{"line_number":1054,"context_line":"            if dev_spec.get_tags().get(\u0027trusted\u0027):"},{"line_number":1055,"context_line":"                profile[\u0027trusted\u0027] \u003d dev_spec.get_tags().get(\u0027trusted\u0027)"},{"line_number":1056,"context_line":"            return profile"},{"line_number":1057,"context_line":"        raise exception.PciDeviceNotFound(node_id\u003dpci_dev.compute_node_id,"},{"line_number":1058,"context_line":"                                          address\u003dpci_dev.address)"}],"source_content_type":"text/x-python","patch_set":11,"id":"bf659307_6ca34701","line":1055,"range":{"start_line":1055,"start_character":37,"end_line":1055,"end_character":71},"in_reply_to":"df7087c5_79ffc300","updated":"2018-04-03 13:50:02.000000000","message":"Yes that makes sense so now the binding profile can be any value that string_from_bool is able to convert.","commit_id":"edd569a4eaf563f11df0d918dcef21437b641413"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8cc65999d7ba50d06e081941be79f5953fdd5de4","unresolved":false,"context_lines":[{"line_number":1468,"context_line":""},{"line_number":1469,"context_line":"    @staticmethod"},{"line_number":1470,"context_line":"    def _get_trusted_tag_from_port(port):"},{"line_number":1471,"context_line":"        return port.get(\u0027binding:profile\u0027, {}).get(\u0027trusted\u0027)"},{"line_number":1472,"context_line":""},{"line_number":1473,"context_line":"    def _get_port_vnic_info(self, context, neutron, port_id):"},{"line_number":1474,"context_line":"        \"\"\"Retrieve port vnic info"}],"source_content_type":"text/x-python","patch_set":11,"id":"df7087c5_b918fb75","line":1471,"range":{"start_line":1471,"start_character":15,"end_line":1471,"end_character":61},"updated":"2018-03-23 13:47:51.000000000","message":"As above, can/should we normalize this?\n\nAlso, use the BINDING_PROFILE constant here please.","commit_id":"edd569a4eaf563f11df0d918dcef21437b641413"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8cc65999d7ba50d06e081941be79f5953fdd5de4","unresolved":false,"context_lines":[{"line_number":1486,"context_line":"        phynet_name \u003d None"},{"line_number":1487,"context_line":"        port \u003d self._show_port(context, port_id, neutron_client\u003dneutron,"},{"line_number":1488,"context_line":"                               fields\u003d[\u0027binding:vnic_type\u0027, \u0027network_id\u0027,"},{"line_number":1489,"context_line":"                                       \u0027binding:profile\u0027])"},{"line_number":1490,"context_line":"        vnic_type \u003d port.get(\u0027binding:vnic_type\u0027,"},{"line_number":1491,"context_line":"                             network_model.VNIC_TYPE_NORMAL)"},{"line_number":1492,"context_line":"        if vnic_type in network_model.VNIC_TYPES_SRIOV:"}],"source_content_type":"text/x-python","patch_set":11,"id":"df7087c5_39fceb70","line":1489,"range":{"start_line":1489,"start_character":39,"end_line":1489,"end_character":56},"updated":"2018-03-23 13:47:51.000000000","message":"Use the BINDING_PROFILE constant.","commit_id":"edd569a4eaf563f11df0d918dcef21437b641413"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8cc65999d7ba50d06e081941be79f5953fdd5de4","unresolved":false,"context_lines":[{"line_number":1516,"context_line":"                vnic_type, phynet_name, trusted \u003d self._get_port_vnic_info("},{"line_number":1517,"context_line":"                    context, neutron, request_net.port_id)"},{"line_number":1518,"context_line":"                LOG.debug(\"Creating PCI device request for port_id\u003d%s, \""},{"line_number":1519,"context_line":"                          \"vnic_type\u003d%s, phynet_name\u003d%s, trusted_tag\u003d%s\","},{"line_number":1520,"context_line":"                          request_net.port_id, vnic_type, phynet_name,"},{"line_number":1521,"context_line":"                          trusted)"},{"line_number":1522,"context_line":"            pci_request_id \u003d None"}],"source_content_type":"text/x-python","patch_set":11,"id":"df7087c5_19256709","line":1519,"range":{"start_line":1519,"start_character":57,"end_line":1519,"end_character":68},"updated":"2018-03-23 13:47:51.000000000","message":"nit: how about just saying \u0027trusted\u0027 here since that\u0027s what\u0027s in the PCI whitelist and binding profile.","commit_id":"edd569a4eaf563f11df0d918dcef21437b641413"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8267eefa0c345f71126882465cafc444dfed85f2","unresolved":false,"context_lines":[{"line_number":1129,"context_line":"            trusted \u003d self._get_trusted_mode_from_tags("},{"line_number":1130,"context_line":"                dev_spec.get_tags())"},{"line_number":1131,"context_line":"            # We want to consider trusted tag only if set to true that"},{"line_number":1132,"context_line":"            # to avoid filtering when not setted and false"},{"line_number":1133,"context_line":"            # differently."},{"line_number":1134,"context_line":"            if trusted:"},{"line_number":1135,"context_line":"                # We are storing tags in string so let normalize that"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_0c094730","line":1132,"range":{"start_line":1132,"start_character":42,"end_line":1132,"end_character":48},"updated":"2018-04-04 18:58:51.000000000","message":"s/setted/set/","commit_id":"b1bf0810364f59d825e6aa6e18ed07d98c59758e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8267eefa0c345f71126882465cafc444dfed85f2","unresolved":false,"context_lines":[{"line_number":1134,"context_line":"            if trusted:"},{"line_number":1135,"context_line":"                # We are storing tags in string so let normalize that"},{"line_number":1136,"context_line":"                # to a lower case value."},{"line_number":1137,"context_line":"                profile[\u0027trusted\u0027] \u003d str(trusted).lower()"},{"line_number":1138,"context_line":"            return profile"},{"line_number":1139,"context_line":"        raise exception.PciDeviceNotFound(node_id\u003dpci_dev.compute_node_id,"},{"line_number":1140,"context_line":"                                          address\u003dpci_dev.address)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_47ae3899","line":1137,"range":{"start_line":1137,"start_character":16,"end_line":1137,"end_character":57},"updated":"2018-04-04 18:58:51.000000000","message":"What is the actual change on the neutron side that stores/reads this value? I don\u0027t see anything in neutron or neutron-lib that knows anything about the \"trusted\" value in the binding:profile, which I know is backend-specific, but I\u0027d think something that implements this would care about it.\n\nOr is neutron just a bag of random data for the binding:profile, and it\u0027s just the place for the user to tell nova (passing data through neutron) that they want this port to be trusted.\n\nThe reason I ask is I\u0027m not making the connection on why we (nova) need to set this information, from the pci whitelist, into the port binding profile. In other words, shouldn\u0027t we just always *read* the \u0027trusted\u0027 value off the port, set by the user when they created the port? It doesn\u0027t seem like nova should ever *write* this information into the port binding profile. Does this mean that via the pci whitelist, nova can _create_ trusted ports?","commit_id":"b1bf0810364f59d825e6aa6e18ed07d98c59758e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c82c951dc2b30b6dd3a89eea17b6aba97435f6e8","unresolved":false,"context_lines":[{"line_number":1134,"context_line":"            if trusted:"},{"line_number":1135,"context_line":"                # We are storing tags in string so let normalize that"},{"line_number":1136,"context_line":"                # to a lower case value."},{"line_number":1137,"context_line":"                profile[\u0027trusted\u0027] \u003d str(trusted).lower()"},{"line_number":1138,"context_line":"            return profile"},{"line_number":1139,"context_line":"        raise exception.PciDeviceNotFound(node_id\u003dpci_dev.compute_node_id,"},{"line_number":1140,"context_line":"                                          address\u003dpci_dev.address)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_6a5bee53","line":1137,"range":{"start_line":1137,"start_character":16,"end_line":1137,"end_character":57},"in_reply_to":"bf659307_39ad5931","updated":"2018-04-05 16:28:39.000000000","message":"\u003e At this point we passed the scheduling and we have matched a device. We are updating the port binding profile with device information. The trusted argument should already be in that dict but we don\u0027t have any way to update only some of the attributes.\n\nLooking at how the return value of this method is used, it\u0027s always an update operation on the existing port binding:profile dict, which as you said if we got this far to match a trusted device on a compute host from the pci whitelist, we already know the port has the trusted value in it\u0027s binding:profile, so we don\u0027t really need to re-set this in the port binding:profile from the pci whitelist. In other words, it doesn\u0027t look like this method needs to change at all.","commit_id":"b1bf0810364f59d825e6aa6e18ed07d98c59758e"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"0424561e4eafb8f5ca3d8c1c226d61526e8c75b1","unresolved":false,"context_lines":[{"line_number":1134,"context_line":"            if trusted:"},{"line_number":1135,"context_line":"                # We are storing tags in string so let normalize that"},{"line_number":1136,"context_line":"                # to a lower case value."},{"line_number":1137,"context_line":"                profile[\u0027trusted\u0027] \u003d str(trusted).lower()"},{"line_number":1138,"context_line":"            return profile"},{"line_number":1139,"context_line":"        raise exception.PciDeviceNotFound(node_id\u003dpci_dev.compute_node_id,"},{"line_number":1140,"context_line":"                                          address\u003dpci_dev.address)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_39ad5931","line":1137,"range":{"start_line":1137,"start_character":16,"end_line":1137,"end_character":57},"in_reply_to":"bf659307_47ae3899","updated":"2018-04-05 12:12:59.000000000","message":"\u003e Or is neutron just a bag of random data for the binding:profile, and it\u0027s just the place for the user to tell nova (passing data through neutron) that they want this port to be trusted.\n\nYes that is the thing.\n\n\u003e The reason I ask is I\u0027m not making the connection on why we (nova) need to set this information, from the pci whitelist, into the port binding profile. In other words, shouldn\u0027t we just always *read* the \u0027trusted\u0027 value off the port, set by the user when they created the port? It doesn\u0027t seem like nova should ever *write* this information into the port binding profile. Does this mean that via the pci whitelist, nova can _create_ trusted ports?\n\nAt this point we passed the scheduling and we have matched a device. We are updating the port binding profile with device information. The trusted argument should already be in that dict but we don\u0027t have any way to update only some of the attributes.\n\nBefore of that the scheduling process was using the PCI requests created by \u0027create_pci_requests_from_sriov_ports\u0027 line 1589. In that function we extract from the binding profile the trusted attribute to use it during the scheduling step (PciPassthroughFilter).\n\nSo basically yes we always *read* the \u0027trusted\u0027 value set by user, it\u0027s just that at some point we need to update the binding profile with device information.","commit_id":"b1bf0810364f59d825e6aa6e18ed07d98c59758e"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a66409f8d312aaaa8062132af67d69efeea46140","unresolved":false,"context_lines":[{"line_number":1134,"context_line":"            if trusted:"},{"line_number":1135,"context_line":"                # We are storing tags in string so let normalize that"},{"line_number":1136,"context_line":"                # to a lower case value."},{"line_number":1137,"context_line":"                profile[\u0027trusted\u0027] \u003d str(trusted).lower()"},{"line_number":1138,"context_line":"            return profile"},{"line_number":1139,"context_line":"        raise exception.PciDeviceNotFound(node_id\u003dpci_dev.compute_node_id,"},{"line_number":1140,"context_line":"                                          address\u003dpci_dev.address)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_db1200b5","line":1137,"range":{"start_line":1137,"start_character":16,"end_line":1137,"end_character":57},"in_reply_to":"bf659307_6a5bee53","updated":"2018-04-06 06:39:59.000000000","message":"I might have missed something but If we don\u0027t do that we can\u0027t retrieve the trusted status in virt layer [0].\n\n[0] https://review.openstack.org/#/c/458514/14/nova/virt/libvirt/vif.py","commit_id":"b1bf0810364f59d825e6aa6e18ed07d98c59758e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8943763aa7613f1f7a11344c0915cf3821bb853e","unresolved":false,"context_lines":[{"line_number":1134,"context_line":"            if trusted:"},{"line_number":1135,"context_line":"                # We are storing tags in string so let normalize that"},{"line_number":1136,"context_line":"                # to a lower case value."},{"line_number":1137,"context_line":"                profile[\u0027trusted\u0027] \u003d str(trusted).lower()"},{"line_number":1138,"context_line":"            return profile"},{"line_number":1139,"context_line":"        raise exception.PciDeviceNotFound(node_id\u003dpci_dev.compute_node_id,"},{"line_number":1140,"context_line":"                                          address\u003dpci_dev.address)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_ce0bb5d2","line":1137,"range":{"start_line":1137,"start_character":16,"end_line":1137,"end_character":57},"in_reply_to":"bf659307_db1200b5","updated":"2018-04-11 13:26:47.000000000","message":"That is taken care of in _build_vif_model, see below.","commit_id":"b1bf0810364f59d825e6aa6e18ed07d98c59758e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8267eefa0c345f71126882465cafc444dfed85f2","unresolved":false,"context_lines":[{"line_number":1552,"context_line":"    @staticmethod"},{"line_number":1553,"context_line":"    def _get_trusted_mode_from_tags(tags):"},{"line_number":1554,"context_line":"        \"\"\"Returns whether trusted mode is activated\"\"\""},{"line_number":1555,"context_line":"        return strutils.bool_from_string(tags.get(\u0027trusted\u0027))"},{"line_number":1556,"context_line":""},{"line_number":1557,"context_line":"    @staticmethod"},{"line_number":1558,"context_line":"    def _get_trusted_mode_from_port(port):"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_67749c9d","line":1555,"range":{"start_line":1555,"start_character":24,"end_line":1555,"end_character":40},"updated":"2018-04-04 18:58:51.000000000","message":"Just looking at this utility method, strict\u003dTrue would raise a ValueError if the \u0027trusted\u0027 key isn\u0027t set in the tags, but since we don\u0027t specify strict\u003dTrue, passing in None will result in the default (False) being returned, which is OK for us.","commit_id":"b1bf0810364f59d825e6aa6e18ed07d98c59758e"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"0424561e4eafb8f5ca3d8c1c226d61526e8c75b1","unresolved":false,"context_lines":[{"line_number":1552,"context_line":"    @staticmethod"},{"line_number":1553,"context_line":"    def _get_trusted_mode_from_tags(tags):"},{"line_number":1554,"context_line":"        \"\"\"Returns whether trusted mode is activated\"\"\""},{"line_number":1555,"context_line":"        return strutils.bool_from_string(tags.get(\u0027trusted\u0027))"},{"line_number":1556,"context_line":""},{"line_number":1557,"context_line":"    @staticmethod"},{"line_number":1558,"context_line":"    def _get_trusted_mode_from_port(port):"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_b9664929","line":1555,"range":{"start_line":1555,"start_character":24,"end_line":1555,"end_character":40},"in_reply_to":"bf659307_67749c9d","updated":"2018-04-05 12:12:59.000000000","message":"Thanks for this verification.","commit_id":"b1bf0810364f59d825e6aa6e18ed07d98c59758e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8943763aa7613f1f7a11344c0915cf3821bb853e","unresolved":false,"context_lines":[{"line_number":2388,"context_line":"            vnic_type\u003dcurrent_neutron_port.get(\u0027binding:vnic_type\u0027,"},{"line_number":2389,"context_line":"                                               network_model.VNIC_TYPE_NORMAL),"},{"line_number":2390,"context_line":"            type\u003dcurrent_neutron_port.get(\u0027binding:vif_type\u0027),"},{"line_number":2391,"context_line":"            profile\u003d_get_binding_profile(current_neutron_port),"},{"line_number":2392,"context_line":"            details\u003dcurrent_neutron_port.get(\u0027binding:vif_details\u0027),"},{"line_number":2393,"context_line":"            ovs_interfaceid\u003dovs_interfaceid,"},{"line_number":2394,"context_line":"            devname\u003ddevname,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_8e74dd69","line":2391,"range":{"start_line":2391,"start_character":12,"end_line":2391,"end_character":63},"updated":"2018-04-11 13:26:47.000000000","message":"This is where the VIF profile gets set, and since the port already has the trusted tag in the binding profile from neutron, we don\u0027t need to re-set it in _get_pci_device_profile.","commit_id":"b1bf0810364f59d825e6aa6e18ed07d98c59758e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3c920f4e26ca150d2421ec16d66be01232e027f1","unresolved":false,"context_lines":[{"line_number":1134,"context_line":"            if trusted:"},{"line_number":1135,"context_line":"                # We are storing tags in string so let normalize that"},{"line_number":1136,"context_line":"                # to a lower case value."},{"line_number":1137,"context_line":"                profile[\u0027trusted\u0027] \u003d str(trusted).lower()"},{"line_number":1138,"context_line":"            return profile"},{"line_number":1139,"context_line":"        raise exception.PciDeviceNotFound(node_id\u003dpci_dev.compute_node_id,"},{"line_number":1140,"context_line":"                                          address\u003dpci_dev.address)"}],"source_content_type":"text/x-python","patch_set":13,"id":"bf659307_8e229d51","line":1137,"updated":"2018-04-11 13:27:23.000000000","message":"See my reply in PS13, but I don\u0027t think we need this here, it\u0027s set into the VIF in _build_vif_model.","commit_id":"1c01c2990e1f94ae54ac8d6db960700269299d22"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"356e968bc87997699d4fd5a3c79f10d6753bec02","unresolved":false,"context_lines":[{"line_number":1134,"context_line":"            if trusted:"},{"line_number":1135,"context_line":"                # We are storing tags in string so let normalize that"},{"line_number":1136,"context_line":"                # to a lower case value."},{"line_number":1137,"context_line":"                profile[\u0027trusted\u0027] \u003d str(trusted).lower()"},{"line_number":1138,"context_line":"            return profile"},{"line_number":1139,"context_line":"        raise exception.PciDeviceNotFound(node_id\u003dpci_dev.compute_node_id,"},{"line_number":1140,"context_line":"                                          address\u003dpci_dev.address)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f6a8fd7_6e772e04","line":1137,"in_reply_to":"9f6a8fd7_d379432f","updated":"2018-04-19 13:25:42.000000000","message":"I\u0027m not following you, what does restart (force) mean? Hard reboot? The vif gets unplugged during hard reboot, yes, but the instance.info_cache.network_info doesn\u0027t change as a result of that, and that is based on the port information which comes from neutron and unplugging the vif shouldn\u0027t have any impact on the port\u0027s binding profile which is where we get the trusted tag.","commit_id":"1c01c2990e1f94ae54ac8d6db960700269299d22"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"989a4fdf132b1d0bbd8db50bb17a60a7778934fc","unresolved":false,"context_lines":[{"line_number":1134,"context_line":"            if trusted:"},{"line_number":1135,"context_line":"                # We are storing tags in string so let normalize that"},{"line_number":1136,"context_line":"                # to a lower case value."},{"line_number":1137,"context_line":"                profile[\u0027trusted\u0027] \u003d str(trusted).lower()"},{"line_number":1138,"context_line":"            return profile"},{"line_number":1139,"context_line":"        raise exception.PciDeviceNotFound(node_id\u003dpci_dev.compute_node_id,"},{"line_number":1140,"context_line":"                                          address\u003dpci_dev.address)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f6a8fd7_d379432f","line":1137,"in_reply_to":"bf659307_8e229d51","updated":"2018-04-19 12:44:49.000000000","message":"If we restart (force) the instance we are going to destroy the VIF, then create new one based on the current status of the Neutron port which is missing the trusted tag.","commit_id":"1c01c2990e1f94ae54ac8d6db960700269299d22"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb1e7781e06d69fb14f80e81788b991bef04a184","unresolved":false,"context_lines":[{"line_number":1135,"context_line":"    def _get_pci_device_profile(self, pci_dev):"},{"line_number":1136,"context_line":"        dev_spec \u003d self.pci_whitelist.get_devspec(pci_dev)"},{"line_number":1137,"context_line":"        if dev_spec:"},{"line_number":1138,"context_line":"            profile \u003d {\u0027pci_vendor_info\u0027: \"%s:%s\" %"},{"line_number":1139,"context_line":"                       (pci_dev.vendor_id, pci_dev.product_id),"},{"line_number":1140,"context_line":"                       \u0027pci_slot\u0027: pci_dev.address,"},{"line_number":1141,"context_line":"                       \u0027physical_network\u0027:"},{"line_number":1142,"context_line":"                       dev_spec.get_tags().get(\u0027physical_network\u0027)}"},{"line_number":1143,"context_line":"            return profile"},{"line_number":1144,"context_line":"        raise exception.PciDeviceNotFound(node_id\u003dpci_dev.compute_node_id,"},{"line_number":1145,"context_line":"                                          address\u003dpci_dev.address)"},{"line_number":1146,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_3dfa8574","line":1143,"range":{"start_line":1138,"start_character":12,"end_line":1143,"end_character":26},"updated":"2018-05-29 21:29:29.000000000","message":"This no longer needs to change since you\u0027re not adding anything to the profile here.","commit_id":"c6e389917f4115560c6113229f4caf0ba0172b73"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3e0f913e32d7dedbdf71beea4a52109663a36818","unresolved":false,"context_lines":[{"line_number":1135,"context_line":"    def _get_pci_device_profile(self, pci_dev):"},{"line_number":1136,"context_line":"        dev_spec \u003d self.pci_whitelist.get_devspec(pci_dev)"},{"line_number":1137,"context_line":"        if dev_spec:"},{"line_number":1138,"context_line":"            profile \u003d {\u0027pci_vendor_info\u0027: \"%s:%s\" %"},{"line_number":1139,"context_line":"                       (pci_dev.vendor_id, pci_dev.product_id),"},{"line_number":1140,"context_line":"                       \u0027pci_slot\u0027: pci_dev.address,"},{"line_number":1141,"context_line":"                       \u0027physical_network\u0027:"},{"line_number":1142,"context_line":"                       dev_spec.get_tags().get(\u0027physical_network\u0027)}"},{"line_number":1143,"context_line":"            return profile"},{"line_number":1144,"context_line":"        raise exception.PciDeviceNotFound(node_id\u003dpci_dev.compute_node_id,"},{"line_number":1145,"context_line":"                                          address\u003dpci_dev.address)"},{"line_number":1146,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_6067f2ea","line":1143,"range":{"start_line":1138,"start_character":12,"end_line":1143,"end_character":26},"in_reply_to":"5f7c97a3_3dfa8574","updated":"2018-05-29 21:45:46.000000000","message":"Done","commit_id":"c6e389917f4115560c6113229f4caf0ba0172b73"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb1e7781e06d69fb14f80e81788b991bef04a184","unresolved":false,"context_lines":[{"line_number":1561,"context_line":"        If port binding does not provide any information about trusted"},{"line_number":1562,"context_line":"        status this function is returning None"},{"line_number":1563,"context_line":"        \"\"\""},{"line_number":1564,"context_line":"        value \u003d port.get(BINDING_PROFILE, {}).get(\u0027trusted\u0027)"},{"line_number":1565,"context_line":"        if value is not None:"},{"line_number":1566,"context_line":"            return strutils.bool_from_string(value)"},{"line_number":1567,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_dd303159","line":1564,"range":{"start_line":1564,"start_character":16,"end_line":1564,"end_character":45},"updated":"2018-05-29 21:29:29.000000000","message":"Use self._get_binding_profile(port) here.","commit_id":"c6e389917f4115560c6113229f4caf0ba0172b73"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3e0f913e32d7dedbdf71beea4a52109663a36818","unresolved":false,"context_lines":[{"line_number":1561,"context_line":"        If port binding does not provide any information about trusted"},{"line_number":1562,"context_line":"        status this function is returning None"},{"line_number":1563,"context_line":"        \"\"\""},{"line_number":1564,"context_line":"        value \u003d port.get(BINDING_PROFILE, {}).get(\u0027trusted\u0027)"},{"line_number":1565,"context_line":"        if value is not None:"},{"line_number":1566,"context_line":"            return strutils.bool_from_string(value)"},{"line_number":1567,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_00607ece","line":1564,"range":{"start_line":1564,"start_character":16,"end_line":1564,"end_character":45},"in_reply_to":"5f7c97a3_dd303159","updated":"2018-05-29 21:45:46.000000000","message":"Done","commit_id":"c6e389917f4115560c6113229f4caf0ba0172b73"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"860db8dfc5ff688e6886dc32fb1f96848eda96c9","unresolved":false,"context_lines":[{"line_number":1626,"context_line":"                dev_type \u003d pci_request.DEVICE_TYPE_FOR_VNIC_TYPE.get(vnic_type)"},{"line_number":1627,"context_line":"                if dev_type:"},{"line_number":1628,"context_line":"                    spec[pci_request.PCI_DEVICE_TYPE_TAG] \u003d dev_type"},{"line_number":1629,"context_line":"                if trusted is not None:"},{"line_number":1630,"context_line":"                    # We specifically have requested device on a pool"},{"line_number":1631,"context_line":"                    # with a tag trusted set to true or false. We"},{"line_number":1632,"context_line":"                    # convert the value is string since tags are"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_80c80ea8","line":1629,"updated":"2018-05-29 21:48:14.000000000","message":"As far as I can tell, this being True is not tested.","commit_id":"c6e389917f4115560c6113229f4caf0ba0172b73"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e4c9f889fedfe5b4cc26ca1ffa16b25f8f8bb206","unresolved":false,"context_lines":[{"line_number":1626,"context_line":"                dev_type \u003d pci_request.DEVICE_TYPE_FOR_VNIC_TYPE.get(vnic_type)"},{"line_number":1627,"context_line":"                if dev_type:"},{"line_number":1628,"context_line":"                    spec[pci_request.PCI_DEVICE_TYPE_TAG] \u003d dev_type"},{"line_number":1629,"context_line":"                if trusted is not None:"},{"line_number":1630,"context_line":"                    # We specifically have requested device on a pool"},{"line_number":1631,"context_line":"                    # with a tag trusted set to true or false. We"},{"line_number":1632,"context_line":"                    # convert the value is string since tags are"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_1623d5a8","line":1629,"in_reply_to":"5f7c97a3_0ad0901e","updated":"2018-05-30 18:52:40.000000000","message":"I added the test wrinkle in the existing mox-based test. I see you\u0027ve copied and re-written that test in mock, so we can just remove the mox test now since it\u0027s a duplicate.","commit_id":"c6e389917f4115560c6113229f4caf0ba0172b73"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"26697aaf81af9a527de3f2c952a99bf6f394643e","unresolved":false,"context_lines":[{"line_number":1626,"context_line":"                dev_type \u003d pci_request.DEVICE_TYPE_FOR_VNIC_TYPE.get(vnic_type)"},{"line_number":1627,"context_line":"                if dev_type:"},{"line_number":1628,"context_line":"                    spec[pci_request.PCI_DEVICE_TYPE_TAG] \u003d dev_type"},{"line_number":1629,"context_line":"                if trusted is not None:"},{"line_number":1630,"context_line":"                    # We specifically have requested device on a pool"},{"line_number":1631,"context_line":"                    # with a tag trusted set to true or false. We"},{"line_number":1632,"context_line":"                    # convert the value is string since tags are"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_0ad0901e","line":1629,"in_reply_to":"5f7c97a3_80c80ea8","updated":"2018-05-30 10:48:21.000000000","message":"Yes you wanted me to add test in mock. My mistake.","commit_id":"c6e389917f4115560c6113229f4caf0ba0172b73"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb1e7781e06d69fb14f80e81788b991bef04a184","unresolved":false,"context_lines":[{"line_number":1629,"context_line":"                if trusted is not None:"},{"line_number":1630,"context_line":"                    # We specifically have requested device on a pool"},{"line_number":1631,"context_line":"                    # with a tag trusted set to true or false. We"},{"line_number":1632,"context_line":"                    # convert the value is string since tags are"},{"line_number":1633,"context_line":"                    # compared in that way."},{"line_number":1634,"context_line":"                    spec[pci_request.PCI_TRUSTED_TAG] \u003d str(trusted)"},{"line_number":1635,"context_line":"                request \u003d objects.InstancePCIRequest("}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_bd79b5fc","line":1632,"range":{"start_line":1632,"start_character":40,"end_line":1632,"end_character":42},"updated":"2018-05-29 21:29:29.000000000","message":"to","commit_id":"c6e389917f4115560c6113229f4caf0ba0172b73"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3e0f913e32d7dedbdf71beea4a52109663a36818","unresolved":false,"context_lines":[{"line_number":1629,"context_line":"                if trusted is not None:"},{"line_number":1630,"context_line":"                    # We specifically have requested device on a pool"},{"line_number":1631,"context_line":"                    # with a tag trusted set to true or false. We"},{"line_number":1632,"context_line":"                    # convert the value is string since tags are"},{"line_number":1633,"context_line":"                    # compared in that way."},{"line_number":1634,"context_line":"                    spec[pci_request.PCI_TRUSTED_TAG] \u003d str(trusted)"},{"line_number":1635,"context_line":"                request \u003d objects.InstancePCIRequest("}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_205d7a14","line":1632,"range":{"start_line":1632,"start_character":40,"end_line":1632,"end_character":42},"in_reply_to":"5f7c97a3_bd79b5fc","updated":"2018-05-29 21:45:46.000000000","message":"Done","commit_id":"c6e389917f4115560c6113229f4caf0ba0172b73"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f77b81a33c0fb15de458f9df8086d565998bdac3","unresolved":false,"context_lines":[{"line_number":1627,"context_line":"                dev_type \u003d pci_request.DEVICE_TYPE_FOR_VNIC_TYPE.get(vnic_type)"},{"line_number":1628,"context_line":"                if dev_type:"},{"line_number":1629,"context_line":"                    spec[pci_request.PCI_DEVICE_TYPE_TAG] \u003d dev_type"},{"line_number":1630,"context_line":"                if trusted is not None:"},{"line_number":1631,"context_line":"                    # We specifically have requested device on a pool"},{"line_number":1632,"context_line":"                    # with a tag trusted set to true or false. We"},{"line_number":1633,"context_line":"                    # convert the value to string since tags are"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_764d69c2","line":1630,"updated":"2018-05-30 19:30:09.000000000","message":"nit: not sure if we should fail here if trusted\u003dTrue and vnic_type !\u003d \u0027direct\u0027 since the libvirt driver will ignore the setting otherwise; might be nice for immediate validation that the port is configured incorrectly rather than wondering why the compute is ignoring the trusted mode and not setting it on the VF. I don\u0027t consider it worth blocking this though since it\u0027s a driver implementation detail on the compute backend. This is the kind of confusing UX mess we get into with shoving all of this random stuff into port binding profiles where we don\u0027t do schema validation on it.","commit_id":"f41dcd76bcb338992f773a1c89ef2a8d5e87f292"}],"nova/tests/unit/network/test_neutronv2.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"da175bb173ff6ab8567ea718076ac6cf90b53a0c","unresolved":false,"context_lines":[{"line_number":3191,"context_line":"            fields\u003d\u0027provider:physical_network\u0027)"},{"line_number":3192,"context_line":"        self.assertEqual(model.VNIC_TYPE_DIRECT, vnic_type)"},{"line_number":3193,"context_line":"        self.assertEqual(\u0027phynet1\u0027, phynet_name)"},{"line_number":3194,"context_line":"        self.assertEqual(\"true\", trusted)"},{"line_number":3195,"context_line":""},{"line_number":3196,"context_line":"    def _test_get_port_vnic_info(self, mock_get_client,"},{"line_number":3197,"context_line":"                                 binding_vnic_type\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_b8aa7b16","line":3194,"updated":"2017-05-03 17:26:52.000000000","message":"Per comment on previous code, this should really be:\n\n self.assertTrue(trusted)\n\nafter converting the response from Neutron to a real bool.","commit_id":"e43d7b5f47ea069938dce45e88964155df0731cf"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8cc65999d7ba50d06e081941be79f5953fdd5de4","unresolved":false,"context_lines":[{"line_number":3201,"context_line":"        api \u003d neutronapi.API()"},{"line_number":3202,"context_line":"        self.mox.ResetAll()"},{"line_number":3203,"context_line":"        test_port \u003d {"},{"line_number":3204,"context_line":"            \u0027port\u0027: {\u0027id\u0027: \u0027my_port_id1\u0027,"},{"line_number":3205,"context_line":"                      \u0027network_id\u0027: \u0027net-id\u0027,"},{"line_number":3206,"context_line":"                      \u0027binding:vnic_type\u0027: model.VNIC_TYPE_DIRECT,"},{"line_number":3207,"context_line":"                      \u0027binding:profile\u0027: {\"trusted\": \"true\"},"},{"line_number":3208,"context_line":"                     },"},{"line_number":3209,"context_line":"            }"},{"line_number":3210,"context_line":"        test_net \u003d {\u0027network\u0027: {\u0027provider:physical_network\u0027: \u0027phynet1\u0027}}"},{"line_number":3211,"context_line":"        test_ext_list \u003d {\u0027extensions\u0027: []}"},{"line_number":3212,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"df7087c5_196a4719","line":3209,"range":{"start_line":3204,"start_character":12,"end_line":3209,"end_character":13},"updated":"2018-03-23 13:47:51.000000000","message":"nit: alignment is a bit off here","commit_id":"edd569a4eaf563f11df0d918dcef21437b641413"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8267eefa0c345f71126882465cafc444dfed85f2","unresolved":false,"context_lines":[{"line_number":3239,"context_line":"    @mock.patch.object(neutronapi, \u0027get_client\u0027, return_value\u003dmock.Mock())"},{"line_number":3240,"context_line":"    def test_get_port_vnic_info_trusted(self, mock_get_client):"},{"line_number":3241,"context_line":"        api \u003d neutronapi.API()"},{"line_number":3242,"context_line":"        self.mox.ResetAll()"},{"line_number":3243,"context_line":"        test_port \u003d {"},{"line_number":3244,"context_line":"            \u0027port\u0027: {\u0027id\u0027: \u0027my_port_id1\u0027,"},{"line_number":3245,"context_line":"                     \u0027network_id\u0027: \u0027net-id\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_a775d434","line":3242,"range":{"start_line":3242,"start_character":8,"end_line":3242,"end_character":27},"updated":"2018-04-04 18:58:51.000000000","message":"Please write this test with just mock, so maybe put it in TestNeutronv2WithMock? The point is we have to eventually drop mox as a community goal so adding more neutron unit tests that rely on the super complicated base class setup for mox is going to be hard, so let\u0027s not add to that.","commit_id":"b1bf0810364f59d825e6aa6e18ed07d98c59758e"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"0424561e4eafb8f5ca3d8c1c226d61526e8c75b1","unresolved":false,"context_lines":[{"line_number":3239,"context_line":"    @mock.patch.object(neutronapi, \u0027get_client\u0027, return_value\u003dmock.Mock())"},{"line_number":3240,"context_line":"    def test_get_port_vnic_info_trusted(self, mock_get_client):"},{"line_number":3241,"context_line":"        api \u003d neutronapi.API()"},{"line_number":3242,"context_line":"        self.mox.ResetAll()"},{"line_number":3243,"context_line":"        test_port \u003d {"},{"line_number":3244,"context_line":"            \u0027port\u0027: {\u0027id\u0027: \u0027my_port_id1\u0027,"},{"line_number":3245,"context_line":"                     \u0027network_id\u0027: \u0027net-id\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_7970b1dd","line":3242,"range":{"start_line":3242,"start_character":8,"end_line":3242,"end_character":27},"in_reply_to":"bf659307_a775d434","updated":"2018-04-05 12:12:59.000000000","message":"Sure makes sense.","commit_id":"b1bf0810364f59d825e6aa6e18ed07d98c59758e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb1e7781e06d69fb14f80e81788b991bef04a184","unresolved":false,"context_lines":[{"line_number":3238,"context_line":"            fields\u003d\u0027provider:physical_network\u0027)"},{"line_number":3239,"context_line":"        self.assertEqual(model.VNIC_TYPE_DIRECT, vnic_type)"},{"line_number":3240,"context_line":"        self.assertEqual(\u0027phynet1\u0027, phynet_name)"},{"line_number":3241,"context_line":"        self.assertFalse(trusted)"},{"line_number":3242,"context_line":""},{"line_number":3243,"context_line":"    def _test_get_port_vnic_info(self, mock_get_client,"},{"line_number":3244,"context_line":"                                 binding_vnic_type\u003dNone):"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_bdc77512","line":3241,"range":{"start_line":3241,"start_character":13,"end_line":3241,"end_character":24},"updated":"2018-05-29 21:29:29.000000000","message":"This should be assertIsNone, correct?","commit_id":"c6e389917f4115560c6113229f4caf0ba0172b73"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3e0f913e32d7dedbdf71beea4a52109663a36818","unresolved":false,"context_lines":[{"line_number":3238,"context_line":"            fields\u003d\u0027provider:physical_network\u0027)"},{"line_number":3239,"context_line":"        self.assertEqual(model.VNIC_TYPE_DIRECT, vnic_type)"},{"line_number":3240,"context_line":"        self.assertEqual(\u0027phynet1\u0027, phynet_name)"},{"line_number":3241,"context_line":"        self.assertFalse(trusted)"},{"line_number":3242,"context_line":""},{"line_number":3243,"context_line":"    def _test_get_port_vnic_info(self, mock_get_client,"},{"line_number":3244,"context_line":"                                 binding_vnic_type\u003dNone):"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_20449a46","line":3241,"range":{"start_line":3241,"start_character":13,"end_line":3241,"end_character":24},"in_reply_to":"5f7c97a3_bdc77512","updated":"2018-05-29 21:45:46.000000000","message":"Done","commit_id":"c6e389917f4115560c6113229f4caf0ba0172b73"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb1e7781e06d69fb14f80e81788b991bef04a184","unresolved":false,"context_lines":[{"line_number":3263,"context_line":"            fields\u003d[\u0027binding:vnic_type\u0027, \u0027network_id\u0027, \u0027binding:profile\u0027])"},{"line_number":3264,"context_line":"        self.assertEqual(model.VNIC_TYPE_NORMAL, vnic_type)"},{"line_number":3265,"context_line":"        self.assertFalse(phynet_name)"},{"line_number":3266,"context_line":"        self.assertFalse(trusted)"},{"line_number":3267,"context_line":""},{"line_number":3268,"context_line":"    @mock.patch.object(neutronapi, \u0027get_client\u0027, return_value\u003dmock.Mock())"},{"line_number":3269,"context_line":"    def test_get_port_vnic_info_2(self, mock_get_client):"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_ddccb136","line":3266,"updated":"2018-05-29 21:29:29.000000000","message":"same","commit_id":"c6e389917f4115560c6113229f4caf0ba0172b73"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3e0f913e32d7dedbdf71beea4a52109663a36818","unresolved":false,"context_lines":[{"line_number":3263,"context_line":"            fields\u003d[\u0027binding:vnic_type\u0027, \u0027network_id\u0027, \u0027binding:profile\u0027])"},{"line_number":3264,"context_line":"        self.assertEqual(model.VNIC_TYPE_NORMAL, vnic_type)"},{"line_number":3265,"context_line":"        self.assertFalse(phynet_name)"},{"line_number":3266,"context_line":"        self.assertFalse(trusted)"},{"line_number":3267,"context_line":""},{"line_number":3268,"context_line":"    @mock.patch.object(neutronapi, \u0027get_client\u0027, return_value\u003dmock.Mock())"},{"line_number":3269,"context_line":"    def test_get_port_vnic_info_2(self, mock_get_client):"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_806c8ed0","line":3266,"in_reply_to":"5f7c97a3_ddccb136","updated":"2018-05-29 21:45:46.000000000","message":"Done","commit_id":"c6e389917f4115560c6113229f4caf0ba0172b73"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb1e7781e06d69fb14f80e81788b991bef04a184","unresolved":false,"context_lines":[{"line_number":5128,"context_line":""},{"line_number":5129,"context_line":"    @mock.patch.object(pci_whitelist.Whitelist, \u0027get_devspec\u0027)"},{"line_number":5130,"context_line":"    @mock.patch.object(pci_manager, \u0027get_instance_pci_devs\u0027)"},{"line_number":5131,"context_line":"    def test_populate_neutron_extension_values_binding_sriov_trusted_no(self,"},{"line_number":5132,"context_line":"                                         mock_get_instance_pci_devs,"},{"line_number":5133,"context_line":"                                         mock_get_pci_device_devspec):"},{"line_number":5134,"context_line":"        api \u003d neutronapi.API()"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_bd9535e6","line":5131,"updated":"2018-05-29 21:29:29.000000000","message":"Since _get_pci_device_profile is no longer changed, do we really need this test? I could remove the code change and nothing would change for this test.","commit_id":"c6e389917f4115560c6113229f4caf0ba0172b73"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3e0f913e32d7dedbdf71beea4a52109663a36818","unresolved":false,"context_lines":[{"line_number":5128,"context_line":""},{"line_number":5129,"context_line":"    @mock.patch.object(pci_whitelist.Whitelist, \u0027get_devspec\u0027)"},{"line_number":5130,"context_line":"    @mock.patch.object(pci_manager, \u0027get_instance_pci_devs\u0027)"},{"line_number":5131,"context_line":"    def test_populate_neutron_extension_values_binding_sriov_trusted_no(self,"},{"line_number":5132,"context_line":"                                         mock_get_instance_pci_devs,"},{"line_number":5133,"context_line":"                                         mock_get_pci_device_devspec):"},{"line_number":5134,"context_line":"        api \u003d neutronapi.API()"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_a0718aaa","line":5131,"in_reply_to":"5f7c97a3_bd9535e6","updated":"2018-05-29 21:45:46.000000000","message":"Done","commit_id":"c6e389917f4115560c6113229f4caf0ba0172b73"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb1e7781e06d69fb14f80e81788b991bef04a184","unresolved":false,"context_lines":[{"line_number":5151,"context_line":"        mock_get_instance_pci_devs.return_value \u003d [mydev]"},{"line_number":5152,"context_line":"        devspec \u003d mock.Mock()"},{"line_number":5153,"context_line":"        devspec.get_tags.return_value \u003d {\u0027physical_network\u0027: \u0027phynet1\u0027,"},{"line_number":5154,"context_line":"                                         \u0027trusted\u0027: \u0027No\u0027}"},{"line_number":5155,"context_line":"        mock_get_pci_device_devspec.return_value \u003d devspec"},{"line_number":5156,"context_line":"        api._populate_neutron_binding_profile(instance,"},{"line_number":5157,"context_line":"                                              pci_req_id, port_req_body)"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_fdf96d4d","line":5154,"range":{"start_line":5154,"start_character":41,"end_line":5154,"end_character":56},"updated":"2018-05-29 21:29:29.000000000","message":"This wouldn\u0027t work in reality would it? We take the trusted value from the port binding profile and if set, convert it to a boolean (so 1/yes/true all convert to True via bool_from_string), but then we convert that to a str and store it in the PciRequest, which then must match the pci whitelist via the case insensitive check. I realize this isn\u0027t touching that code, but it\u0027s technically wrong as an example here.","commit_id":"c6e389917f4115560c6113229f4caf0ba0172b73"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e4c9f889fedfe5b4cc26ca1ffa16b25f8f8bb206","unresolved":false,"context_lines":[{"line_number":5006,"context_line":""},{"line_number":5007,"context_line":"    @mock.patch.object(neutronapi.API, \"_get_port_vnic_info\")"},{"line_number":5008,"context_line":"    @mock.patch.object(neutronapi, \u0027get_client\u0027)"},{"line_number":5009,"context_line":"    def test_create_pci_requests_for_sriov_ports(self, getclient,"},{"line_number":5010,"context_line":"                                                 mock_get_port_vnic_info):"},{"line_number":5011,"context_line":"        requested_networks \u003d objects.NetworkRequestList("},{"line_number":5012,"context_line":"            objects \u003d ["}],"source_content_type":"text/x-python","patch_set":19,"id":"5f7c97a3_221c8c76","line":5009,"range":{"start_line":5009,"start_character":8,"end_line":5009,"end_character":48},"updated":"2018-05-30 18:52:40.000000000","message":"You can either remove this, or remove the other test_create_pci_requests_for_sriov_ports which uses mox, since they are doing the same thing now.","commit_id":"f17ed10510872d94147ca934c27dacffb2270249"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a5d84e6cc6d4021fb130429022ee862127284944","unresolved":false,"context_lines":[{"line_number":5006,"context_line":""},{"line_number":5007,"context_line":"    @mock.patch.object(neutronapi.API, \"_get_port_vnic_info\")"},{"line_number":5008,"context_line":"    @mock.patch.object(neutronapi, \u0027get_client\u0027)"},{"line_number":5009,"context_line":"    def test_create_pci_requests_for_sriov_ports(self, getclient,"},{"line_number":5010,"context_line":"                                                 mock_get_port_vnic_info):"},{"line_number":5011,"context_line":"        requested_networks \u003d objects.NetworkRequestList("},{"line_number":5012,"context_line":"            objects \u003d ["}],"source_content_type":"text/x-python","patch_set":19,"id":"5f7c97a3_56e2add6","line":5009,"range":{"start_line":5009,"start_character":8,"end_line":5009,"end_character":48},"in_reply_to":"5f7c97a3_221c8c76","updated":"2018-05-30 19:20:25.000000000","message":"Done","commit_id":"f17ed10510872d94147ca934c27dacffb2270249"}],"releasenotes/notes/trusted-vfs-abee6dff7c9b6940.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e4c9f889fedfe5b4cc26ca1ffa16b25f8f8bb206","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    Where \"eth0\" is the interface name related to the physical"},{"line_number":18,"context_line":"    function."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    Ports from the phyical network will have to be created with a"},{"line_number":21,"context_line":"    binding profile to match the trusted tag."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    .. code-block:: ini"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"5f7c97a3_6205a413","line":20,"range":{"start_line":20,"start_character":19,"end_line":20,"end_character":26},"updated":"2018-05-30 18:52:40.000000000","message":"physical","commit_id":"f17ed10510872d94147ca934c27dacffb2270249"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a5d84e6cc6d4021fb130429022ee862127284944","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    Where \"eth0\" is the interface name related to the physical"},{"line_number":18,"context_line":"    function."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    Ports from the phyical network will have to be created with a"},{"line_number":21,"context_line":"    binding profile to match the trusted tag."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    .. code-block:: ini"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"5f7c97a3_f6e419e2","line":20,"range":{"start_line":20,"start_character":19,"end_line":20,"end_character":26},"in_reply_to":"5f7c97a3_6205a413","updated":"2018-05-30 19:20:25.000000000","message":"Done","commit_id":"f17ed10510872d94147ca934c27dacffb2270249"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e4c9f889fedfe5b4cc26ca1ffa16b25f8f8bb206","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    Ports from the phyical network will have to be created with a"},{"line_number":21,"context_line":"    binding profile to match the trusted tag."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    .. code-block:: ini"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"      $ neutron port-create \u003cnet-id\u003e \\"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"5f7c97a3_160af51e","line":22,"updated":"2018-05-30 18:52:40.000000000","message":"Should probably mention that only ports with binding:vif_type\u003d\u0027hw_veb\u0027 and binding:vnic_type\u003d\u0027direct\u0027 are supported.\n\nAlso, I was looking at the history on the ip-link command and it looks like Ubuntu 16.04 LTS doesn\u0027t support ip-link with the trust mode on the vf, so we should probably just make some blanket statement about ensuring that the version of ip-link on the compute host supports setting the trust mode on the device.","commit_id":"f17ed10510872d94147ca934c27dacffb2270249"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a5d84e6cc6d4021fb130429022ee862127284944","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    Ports from the phyical network will have to be created with a"},{"line_number":21,"context_line":"    binding profile to match the trusted tag."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    .. code-block:: ini"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"      $ neutron port-create \u003cnet-id\u003e \\"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"5f7c97a3_16e8b5b0","line":22,"in_reply_to":"5f7c97a3_160af51e","updated":"2018-05-30 19:20:25.000000000","message":"Done","commit_id":"f17ed10510872d94147ca934c27dacffb2270249"}]}
