)]}'
{"ironic/common/neutron.py":[{"author":{"_account_id":19686,"name":"Ramamani Yeleswarapu","email":"ramamani.yeleswarapu@intel.com","username":"Rama_Y"},"change_message_id":"20cc1f82aa28f8c97e36d10916a76d8aea0ad307","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    portmap \u003d get_node_portmap(task)"},{"line_number":215,"context_line":"    pxe_enabled_ports \u003d [p for p in task.ports if p.pxe_enabled]"},{"line_number":216,"context_line":"    for ironic_port in pxe_enabled_ports:"},{"line_number":217,"context_line":"        # Skip ports that missing required information for deploy."},{"line_number":218,"context_line":"        if (node.network_interface \u003d\u003d \u0027neutron\u0027 and"},{"line_number":219,"context_line":"                not validate_port_info(ironic_port)):"},{"line_number":220,"context_line":"            failures.append(ironic_port.uuid)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_3ed95e22","line":217,"updated":"2017-01-19 22:19:04.000000000","message":"s/missing/are missing","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2f0b96b521eb1af2c8c21755638233b0741bfe55","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    portmap \u003d get_node_portmap(task)"},{"line_number":215,"context_line":"    pxe_enabled_ports \u003d [p for p in task.ports if p.pxe_enabled]"},{"line_number":216,"context_line":"    for ironic_port in pxe_enabled_ports:"},{"line_number":217,"context_line":"        # Skip ports that missing required information for deploy."},{"line_number":218,"context_line":"        if (node.network_interface \u003d\u003d \u0027neutron\u0027 and"},{"line_number":219,"context_line":"                not validate_port_info(ironic_port)):"},{"line_number":220,"context_line":"            failures.append(ironic_port.uuid)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_02f49758","line":217,"in_reply_to":"5a3905b3_3ed95e22","updated":"2017-01-24 12:59:42.000000000","message":"Done","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"76c1174036620b854cc78ad76caf05eddbbff191","unresolved":false,"context_lines":[{"line_number":397,"context_line":"    return networks[0]"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"def validate_port_info(port):"},{"line_number":401,"context_line":"    \"\"\"Check that port contain enough information for deploy."},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    Neutron network driver require that local_link_information field is"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_ab9b2ac8","line":400,"updated":"2017-01-20 12:38:28.000000000","message":"You could also pass node here, and include if node.network_interface \u003d\u003d \u0027neutron\u0027 here too","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2f0b96b521eb1af2c8c21755638233b0741bfe55","unresolved":false,"context_lines":[{"line_number":397,"context_line":"    return networks[0]"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"def validate_port_info(port):"},{"line_number":401,"context_line":"    \"\"\"Check that port contain enough information for deploy."},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    Neutron network driver require that local_link_information field is"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_22f27306","line":400,"in_reply_to":"5a3905b3_ab9b2ac8","updated":"2017-01-24 12:59:42.000000000","message":"Done","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":19686,"name":"Ramamani Yeleswarapu","email":"ramamani.yeleswarapu@intel.com","username":"Rama_Y"},"change_message_id":"20cc1f82aa28f8c97e36d10916a76d8aea0ad307","unresolved":false,"context_lines":[{"line_number":398,"context_line":""},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"def validate_port_info(port):"},{"line_number":401,"context_line":"    \"\"\"Check that port contain enough information for deploy."},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    Neutron network driver require that local_link_information field is"},{"line_number":404,"context_line":"    filled before we can use this port."}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_1ef3c29f","line":401,"updated":"2017-01-19 22:19:04.000000000","message":"s/contain/contains","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2f0b96b521eb1af2c8c21755638233b0741bfe55","unresolved":false,"context_lines":[{"line_number":398,"context_line":""},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"def validate_port_info(port):"},{"line_number":401,"context_line":"    \"\"\"Check that port contain enough information for deploy."},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    Neutron network driver require that local_link_information field is"},{"line_number":404,"context_line":"    filled before we can use this port."}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_62e0fb29","line":401,"in_reply_to":"5a3905b3_1ef3c29f","updated":"2017-01-24 12:59:42.000000000","message":"Done","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"76c1174036620b854cc78ad76caf05eddbbff191","unresolved":false,"context_lines":[{"line_number":400,"context_line":"def validate_port_info(port):"},{"line_number":401,"context_line":"    \"\"\"Check that port contain enough information for deploy."},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    Neutron network driver require that local_link_information field is"},{"line_number":404,"context_line":"    filled before we can use this port."},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    :param port: Ironic port object."}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_f0444375","line":403,"range":{"start_line":403,"start_character":20,"end_line":403,"end_character":26},"updated":"2017-01-20 12:38:28.000000000","message":"interface","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":19686,"name":"Ramamani Yeleswarapu","email":"ramamani.yeleswarapu@intel.com","username":"Rama_Y"},"change_message_id":"20cc1f82aa28f8c97e36d10916a76d8aea0ad307","unresolved":false,"context_lines":[{"line_number":400,"context_line":"def validate_port_info(port):"},{"line_number":401,"context_line":"    \"\"\"Check that port contain enough information for deploy."},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    Neutron network driver require that local_link_information field is"},{"line_number":404,"context_line":"    filled before we can use this port."},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    :param port: Ironic port object."}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_9e35f247","line":403,"updated":"2017-01-19 22:19:04.000000000","message":"s/require/requires","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2f0b96b521eb1af2c8c21755638233b0741bfe55","unresolved":false,"context_lines":[{"line_number":400,"context_line":"def validate_port_info(port):"},{"line_number":401,"context_line":"    \"\"\"Check that port contain enough information for deploy."},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    Neutron network driver require that local_link_information field is"},{"line_number":404,"context_line":"    filled before we can use this port."},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    :param port: Ironic port object."}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_e2d22b5b","line":403,"in_reply_to":"5a3905b3_9e35f247","updated":"2017-01-24 12:59:42.000000000","message":"Done","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2f0b96b521eb1af2c8c21755638233b0741bfe55","unresolved":false,"context_lines":[{"line_number":400,"context_line":"def validate_port_info(port):"},{"line_number":401,"context_line":"    \"\"\"Check that port contain enough information for deploy."},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    Neutron network driver require that local_link_information field is"},{"line_number":404,"context_line":"    filled before we can use this port."},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    :param port: Ironic port object."}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_02d6574e","line":403,"range":{"start_line":403,"start_character":20,"end_line":403,"end_character":26},"in_reply_to":"5a3905b3_f0444375","updated":"2017-01-24 12:59:42.000000000","message":"Done","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"76c1174036620b854cc78ad76caf05eddbbff191","unresolved":false,"context_lines":[{"line_number":404,"context_line":"    filled before we can use this port."},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    :param port: Ironic port object."},{"line_number":407,"context_line":"    :returns: True if port info is valid, False otherwise."},{"line_number":408,"context_line":"    \"\"\""},{"line_number":409,"context_line":"    if not port.local_link_connection:"},{"line_number":410,"context_line":"        LOG.warning(_LW(\"The local_link_connection is required for \""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_ebab7287","line":407,"range":{"start_line":407,"start_character":35,"end_line":407,"end_character":40},"updated":"2017-01-20 12:38:28.000000000","message":"The problem is, it does not validate it actually, it happens on API side. I\u0027d say it ensures it is not empty. Might be worth renaming to ensure_port_info_present.","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"194784653fedd5870a0de664dfcb82570920dc62","unresolved":false,"context_lines":[{"line_number":408,"context_line":"    \"\"\""},{"line_number":409,"context_line":"    if not port.local_link_connection:"},{"line_number":410,"context_line":"        LOG.warning(_LW(\"The local_link_connection is required for \""},{"line_number":411,"context_line":"                        \"\u0027neutron\u0027 network interface and missed in the \""},{"line_number":412,"context_line":"                        \"port %s\"), port.uuid)"},{"line_number":413,"context_line":"        return False"},{"line_number":414,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_0401bfae","line":411,"range":{"start_line":411,"start_character":53,"end_line":411,"end_character":70},"updated":"2017-01-19 17:36:25.000000000","message":"s/and missed in the/and is not present/ or \"and is missing in the port\"","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2f0b96b521eb1af2c8c21755638233b0741bfe55","unresolved":false,"context_lines":[{"line_number":408,"context_line":"    \"\"\""},{"line_number":409,"context_line":"    if not port.local_link_connection:"},{"line_number":410,"context_line":"        LOG.warning(_LW(\"The local_link_connection is required for \""},{"line_number":411,"context_line":"                        \"\u0027neutron\u0027 network interface and missed in the \""},{"line_number":412,"context_line":"                        \"port %s\"), port.uuid)"},{"line_number":413,"context_line":"        return False"},{"line_number":414,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_c2c28f52","line":411,"range":{"start_line":411,"start_character":53,"end_line":411,"end_character":70},"in_reply_to":"5a3905b3_0401bfae","updated":"2017-01-24 12:59:42.000000000","message":"Done","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"c5e5a616097bd2f63f5c1a3ccaa5a8ef6868f12e","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    for ironic_port in pxe_enabled_ports:"},{"line_number":217,"context_line":"        # Skip ports that are missing required information for deploy."},{"line_number":218,"context_line":"        if not validate_port_info(node, ironic_port):"},{"line_number":219,"context_line":"            failures.append(ironic_port.uuid)"},{"line_number":220,"context_line":"            continue"},{"line_number":221,"context_line":"        body[\u0027port\u0027][\u0027mac_address\u0027] \u003d ironic_port.address"},{"line_number":222,"context_line":"        binding_profile \u003d {\u0027local_link_information\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a3905b3_d6940838","line":219,"updated":"2017-01-24 14:50:07.000000000","message":"There are two types of \"failure\": invalid port info and neutron client error. Maybe add some different logging/error messages for help administrator to investigate the problem?","commit_id":"059e5d09f84fbcf05a1eb2746cada42e4d42a0df"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"41ec4eaee75385ab71769204fa8b9691ad1cb1c5","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    for ironic_port in pxe_enabled_ports:"},{"line_number":217,"context_line":"        # Skip ports that are missing required information for deploy."},{"line_number":218,"context_line":"        if not validate_port_info(node, ironic_port):"},{"line_number":219,"context_line":"            failures.append(ironic_port.uuid)"},{"line_number":220,"context_line":"            continue"},{"line_number":221,"context_line":"        body[\u0027port\u0027][\u0027mac_address\u0027] \u003d ironic_port.address"},{"line_number":222,"context_line":"        binding_profile \u003d {\u0027local_link_information\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a3905b3_7357e125","line":219,"in_reply_to":"5a3905b3_73c7e163","updated":"2017-01-24 15:54:05.000000000","message":"Thanks for explanation.","commit_id":"059e5d09f84fbcf05a1eb2746cada42e4d42a0df"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b20ed3246c6042f73d769d0b2ac7608103e046db","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    for ironic_port in pxe_enabled_ports:"},{"line_number":217,"context_line":"        # Skip ports that are missing required information for deploy."},{"line_number":218,"context_line":"        if not validate_port_info(node, ironic_port):"},{"line_number":219,"context_line":"            failures.append(ironic_port.uuid)"},{"line_number":220,"context_line":"            continue"},{"line_number":221,"context_line":"        body[\u0027port\u0027][\u0027mac_address\u0027] \u003d ironic_port.address"},{"line_number":222,"context_line":"        binding_profile \u003d {\u0027local_link_information\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a3905b3_73c7e163","line":219,"in_reply_to":"5a3905b3_d6940838","updated":"2017-01-24 15:48:09.000000000","message":"The failures may be mixed here, for example 2 ports failed with neutron exception, 1 port due to missed info in port.\nAdministrator will see all failures in the log L235 and L411","commit_id":"059e5d09f84fbcf05a1eb2746cada42e4d42a0df"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"fe8bf020f36bc51e783c144c2b4318ea65f6d477","unresolved":false,"context_lines":[{"line_number":410,"context_line":"            not port.local_link_connection):"},{"line_number":411,"context_line":"        LOG.warning(_LW(\"The local_link_connection is required for \""},{"line_number":412,"context_line":"                        \"\u0027neutron\u0027 network interface and is not present \""},{"line_number":413,"context_line":"                        \"in the port %s\"), port.uuid)"},{"line_number":414,"context_line":"        return False"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    return True"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_1ea65510","line":413,"updated":"2017-01-26 17:19:59.000000000","message":"This message should also have the node.uuid, like the other messages.","commit_id":"488c23be81a4b2537163f0de4c47c46a94f44324"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"6d9e10b81d6a84b9df1576a06e7966e151a55882","unresolved":false,"context_lines":[{"line_number":410,"context_line":"            not port.local_link_connection):"},{"line_number":411,"context_line":"        LOG.warning(_LW(\"The local_link_connection is required for \""},{"line_number":412,"context_line":"                        \"\u0027neutron\u0027 network interface and is not present \""},{"line_number":413,"context_line":"                        \"in the port %s\"), port.uuid)"},{"line_number":414,"context_line":"        return False"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    return True"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_829c8ac1","line":413,"in_reply_to":"3a461143_1ea65510","updated":"2017-01-27 13:45:13.000000000","message":"Done","commit_id":"488c23be81a4b2537163f0de4c47c46a94f44324"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"b51e6f43d36a6a8d5338d5dfdaa2055427e81513","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        raise exception.NetworkError(msg)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"def add_ports_to_network(task, network_uuid, security_groups\u003dNone):"},{"line_number":166,"context_line":"    \"\"\"Create neutron ports to boot the ramdisk."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    Create neutron ports for each pxe_enabled port on task.node to boot"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a461143_e96724e8","line":165,"updated":"2017-02-03 11:38:20.000000000","message":"Hope this function is not being used externally (/me checked ironic-staging-drivers and ironic-lib, seems grand)","commit_id":"56570b1f41e84f40ea18f534217fc8b093ce6e9a"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c7d9acd81eacd4fd39e4bc2cd75a8a405e510487","unresolved":false,"context_lines":[{"line_number":197,"context_line":"    if security_groups:"},{"line_number":198,"context_line":"        body[\u0027port\u0027][\u0027security_groups\u0027] \u003d security_groups"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    if node.network_interface !\u003d \u0027flat\u0027:"},{"line_number":201,"context_line":"        # NOTE(vdrok): It seems that change"},{"line_number":202,"context_line":"        # I437290affd8eb87177d0626bf7935a165859cbdd to neutron broke the"},{"line_number":203,"context_line":"        # possibility to always bind port. Set binding:host_id only in"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_26589efa","line":200,"updated":"2017-02-03 11:04:19.000000000","message":"I really don\u0027t like hardcoding interface names. let\u0027s maybe extend NetworkInterface to contain something like\n\n @abstractproperty\n def should_bind_port(self):\n\n? I\u0027m fine with a follow-up.","commit_id":"56570b1f41e84f40ea18f534217fc8b093ce6e9a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"4942fd68c03fe28476f07dc44e3482deb485d64e","unresolved":false,"context_lines":[{"line_number":197,"context_line":"    if security_groups:"},{"line_number":198,"context_line":"        body[\u0027port\u0027][\u0027security_groups\u0027] \u003d security_groups"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    if node.network_interface !\u003d \u0027flat\u0027:"},{"line_number":201,"context_line":"        # NOTE(vdrok): It seems that change"},{"line_number":202,"context_line":"        # I437290affd8eb87177d0626bf7935a165859cbdd to neutron broke the"},{"line_number":203,"context_line":"        # possibility to always bind port. Set binding:host_id only in"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_bc0d1f40","line":200,"in_reply_to":"1a430d35_26589efa","updated":"2017-02-06 20:09:56.000000000","message":"will update in follow-up.","commit_id":"56570b1f41e84f40ea18f534217fc8b093ce6e9a"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"b51e6f43d36a6a8d5338d5dfdaa2055427e81513","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    for ironic_port in pxe_enabled_ports:"},{"line_number":217,"context_line":"        # Skip ports that are missing required information for deploy."},{"line_number":218,"context_line":"        if not validate_port_info(node, ironic_port):"},{"line_number":219,"context_line":"            failures.append(ironic_port.uuid)"},{"line_number":220,"context_line":"            continue"},{"line_number":221,"context_line":"        body[\u0027port\u0027][\u0027mac_address\u0027] \u003d ironic_port.address"},{"line_number":222,"context_line":"        binding_profile \u003d {\u0027local_link_information\u0027:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a461143_c92428b1","line":219,"updated":"2017-02-03 11:38:20.000000000","message":"Is it expected (in the best case scenario) that all ports will contain the required information ?\n\nIf so, it would be good to LOG a warning here when a port fails validation.","commit_id":"56570b1f41e84f40ea18f534217fc8b093ce6e9a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"4942fd68c03fe28476f07dc44e3482deb485d64e","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    for ironic_port in pxe_enabled_ports:"},{"line_number":217,"context_line":"        # Skip ports that are missing required information for deploy."},{"line_number":218,"context_line":"        if not validate_port_info(node, ironic_port):"},{"line_number":219,"context_line":"            failures.append(ironic_port.uuid)"},{"line_number":220,"context_line":"            continue"},{"line_number":221,"context_line":"        body[\u0027port\u0027][\u0027mac_address\u0027] \u003d ironic_port.address"},{"line_number":222,"context_line":"        binding_profile \u003d {\u0027local_link_information\u0027:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_5f2a6d7f","line":219,"in_reply_to":"3a461143_c92428b1","updated":"2017-02-06 20:09:56.000000000","message":"warning message will be showed inside the validate_port_info function. Why duplicate it here?","commit_id":"56570b1f41e84f40ea18f534217fc8b093ce6e9a"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"40a71716bd149b25b5914c1aaab5d0b49f434108","unresolved":false,"context_lines":[{"line_number":396,"context_line":"    return networks[0]"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"def validate_port_info(node, port):"},{"line_number":400,"context_line":"    \"\"\"Check that port contains enough information for deploy."},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    Neutron network interface requires that local_link_information field is"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a461143_86687e89","line":399,"range":{"start_line":399,"start_character":4,"end_line":399,"end_character":22},"updated":"2017-02-01 15:11:21.000000000","message":"This validates only local_link_connection field.","commit_id":"56570b1f41e84f40ea18f534217fc8b093ce6e9a"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c7d9acd81eacd4fd39e4bc2cd75a8a405e510487","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    :param port: Ironic port object."},{"line_number":407,"context_line":"    :returns: True if port info is valid, False otherwise."},{"line_number":408,"context_line":"    \"\"\""},{"line_number":409,"context_line":"    if (node.network_interface \u003d\u003d \u0027neutron\u0027 and"},{"line_number":410,"context_line":"            not port.local_link_connection):"},{"line_number":411,"context_line":"        LOG.warning(_LW(\"The local_link_connection is required for\""},{"line_number":412,"context_line":"                        \"\u0027neutron\u0027 network interface and is not present \""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_465daae8","line":409,"updated":"2017-02-03 11:04:19.000000000","message":"ditto, we should not rely on entrypoint names or expect that we won\u0027t have 3rdparty network interface implementation. why don\u0027t we use NetworkInterface.validate? or maybe a new call, dunno?","commit_id":"56570b1f41e84f40ea18f534217fc8b093ce6e9a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"4942fd68c03fe28476f07dc44e3482deb485d64e","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    :param port: Ironic port object."},{"line_number":407,"context_line":"    :returns: True if port info is valid, False otherwise."},{"line_number":408,"context_line":"    \"\"\""},{"line_number":409,"context_line":"    if (node.network_interface \u003d\u003d \u0027neutron\u0027 and"},{"line_number":410,"context_line":"            not port.local_link_connection):"},{"line_number":411,"context_line":"        LOG.warning(_LW(\"The local_link_connection is required for\""},{"line_number":412,"context_line":"                        \"\u0027neutron\u0027 network interface and is not present \""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_1f5f050f","line":409,"in_reply_to":"1a430d35_465daae8","updated":"2017-02-06 20:09:56.000000000","message":"Please have look at patch set 1 comments. We shouldn\u0027t place this check to networkInterface.validate() as local_link_info should be present at least on 1 port.\nAlso we call validate() when doing VIF attach/detach/list it will be strange if vif_list() failed because some port missing local_link_connection.","commit_id":"56570b1f41e84f40ea18f534217fc8b093ce6e9a"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"40a71716bd149b25b5914c1aaab5d0b49f434108","unresolved":false,"context_lines":[{"line_number":407,"context_line":"    :returns: True if port info is valid, False otherwise."},{"line_number":408,"context_line":"    \"\"\""},{"line_number":409,"context_line":"    if (node.network_interface \u003d\u003d \u0027neutron\u0027 and"},{"line_number":410,"context_line":"            not port.local_link_connection):"},{"line_number":411,"context_line":"        LOG.warning(_LW(\"The local_link_connection is required for\""},{"line_number":412,"context_line":"                        \"\u0027neutron\u0027 network interface and is not present \""},{"line_number":413,"context_line":"                        \"in the nodes %(node)s port %(port)s\"),"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a461143_263eea29","line":410,"updated":"2017-02-01 15:11:21.000000000","message":"In API code I see mandatory fields here. This code is good if we assume that it\u0027s set only via API. But we have precedents now in ironic that drivers create ports. Maybe check mandatory field also here?","commit_id":"56570b1f41e84f40ea18f534217fc8b093ce6e9a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"f15adf540dad46ceba1bd510d47972253af7a803","unresolved":false,"context_lines":[{"line_number":407,"context_line":"    :returns: True if port info is valid, False otherwise."},{"line_number":408,"context_line":"    \"\"\""},{"line_number":409,"context_line":"    if (node.network_interface \u003d\u003d \u0027neutron\u0027 and"},{"line_number":410,"context_line":"            not port.local_link_connection):"},{"line_number":411,"context_line":"        LOG.warning(_LW(\"The local_link_connection is required for\""},{"line_number":412,"context_line":"                        \"\u0027neutron\u0027 network interface and is not present \""},{"line_number":413,"context_line":"                        \"in the nodes %(node)s port %(port)s\"),"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a461143_536e5397","line":410,"in_reply_to":"3a461143_263eea29","updated":"2017-02-01 15:42:49.000000000","message":"omg, we have a places where we create ports in db directly like https://github.com/openstack/ironic/blob/master/ironic/drivers/modules/ilo/inspect.py#L56\n\nCreating resources directly in db is not right approach, it may lead to unpredictable behaviour, as we have a ton of checks on api/conductor side.","commit_id":"56570b1f41e84f40ea18f534217fc8b093ce6e9a"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"b51e6f43d36a6a8d5338d5dfdaa2055427e81513","unresolved":false,"context_lines":[{"line_number":407,"context_line":"    :returns: True if port info is valid, False otherwise."},{"line_number":408,"context_line":"    \"\"\""},{"line_number":409,"context_line":"    if (node.network_interface \u003d\u003d \u0027neutron\u0027 and"},{"line_number":410,"context_line":"            not port.local_link_connection):"},{"line_number":411,"context_line":"        LOG.warning(_LW(\"The local_link_connection is required for\""},{"line_number":412,"context_line":"                        \"\u0027neutron\u0027 network interface and is not present \""},{"line_number":413,"context_line":"                        \"in the nodes %(node)s port %(port)s\"),"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a461143_a97b5c7a","line":410,"in_reply_to":"3a461143_536e5397","updated":"2017-02-03 11:38:20.000000000","message":"++  :-/","commit_id":"56570b1f41e84f40ea18f534217fc8b093ce6e9a"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c7d9acd81eacd4fd39e4bc2cd75a8a405e510487","unresolved":false,"context_lines":[{"line_number":408,"context_line":"    \"\"\""},{"line_number":409,"context_line":"    if (node.network_interface \u003d\u003d \u0027neutron\u0027 and"},{"line_number":410,"context_line":"            not port.local_link_connection):"},{"line_number":411,"context_line":"        LOG.warning(_LW(\"The local_link_connection is required for\""},{"line_number":412,"context_line":"                        \"\u0027neutron\u0027 network interface and is not present \""},{"line_number":413,"context_line":"                        \"in the nodes %(node)s port %(port)s\"),"},{"line_number":414,"context_line":"                    {\u0027node\u0027: node.uuid, \u0027port\u0027: port.uuid})"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_6672a67e","line":411,"updated":"2017-02-03 11:04:19.000000000","message":"s/warning/error/ as it results in a failure","commit_id":"56570b1f41e84f40ea18f534217fc8b093ce6e9a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"eb619102e4a82fb203b9aeebe77a4bcb4546f00c","unresolved":false,"context_lines":[{"line_number":408,"context_line":"    \"\"\""},{"line_number":409,"context_line":"    if (node.network_interface \u003d\u003d \u0027neutron\u0027 and"},{"line_number":410,"context_line":"            not port.local_link_connection):"},{"line_number":411,"context_line":"        LOG.warning(_LW(\"The local_link_connection is required for\""},{"line_number":412,"context_line":"                        \"\u0027neutron\u0027 network interface and is not present \""},{"line_number":413,"context_line":"                        \"in the nodes %(node)s port %(port)s\"),"},{"line_number":414,"context_line":"                    {\u0027node\u0027: node.uuid, \u0027port\u0027: port.uuid})"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_ea552b50","line":411,"in_reply_to":"1a430d35_6672a67e","updated":"2017-02-06 14:28:00.000000000","message":"Also missing a blank space at the end","commit_id":"56570b1f41e84f40ea18f534217fc8b093ce6e9a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"4942fd68c03fe28476f07dc44e3482deb485d64e","unresolved":false,"context_lines":[{"line_number":408,"context_line":"    \"\"\""},{"line_number":409,"context_line":"    if (node.network_interface \u003d\u003d \u0027neutron\u0027 and"},{"line_number":410,"context_line":"            not port.local_link_connection):"},{"line_number":411,"context_line":"        LOG.warning(_LW(\"The local_link_connection is required for\""},{"line_number":412,"context_line":"                        \"\u0027neutron\u0027 network interface and is not present \""},{"line_number":413,"context_line":"                        \"in the nodes %(node)s port %(port)s\"),"},{"line_number":414,"context_line":"                    {\u0027node\u0027: node.uuid, \u0027port\u0027: port.uuid})"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_bfdef16a","line":411,"in_reply_to":"1a430d35_6672a67e","updated":"2017-02-06 20:09:56.000000000","message":"It is ok if node with neutron network interface have ports without local_link_connection. It should have at least one port for successful deployment, ports with missed llc should just be ignored when doing vif_attach()","commit_id":"56570b1f41e84f40ea18f534217fc8b093ce6e9a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"4942fd68c03fe28476f07dc44e3482deb485d64e","unresolved":false,"context_lines":[{"line_number":408,"context_line":"    \"\"\""},{"line_number":409,"context_line":"    if (node.network_interface \u003d\u003d \u0027neutron\u0027 and"},{"line_number":410,"context_line":"            not port.local_link_connection):"},{"line_number":411,"context_line":"        LOG.warning(_LW(\"The local_link_connection is required for\""},{"line_number":412,"context_line":"                        \"\u0027neutron\u0027 network interface and is not present \""},{"line_number":413,"context_line":"                        \"in the nodes %(node)s port %(port)s\"),"},{"line_number":414,"context_line":"                    {\u0027node\u0027: node.uuid, \u0027port\u0027: port.uuid})"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_ffe87912","line":411,"in_reply_to":"1a430d35_ea552b50","updated":"2017-02-06 20:09:56.000000000","message":"will do.","commit_id":"56570b1f41e84f40ea18f534217fc8b093ce6e9a"}],"ironic/drivers/modules/network/neutron.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"2f1baccd4e802f4cb80842f181f9734cf2af141c","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \"\"\""},{"line_number":62,"context_line":"        self.get_cleaning_network_uuid()"},{"line_number":63,"context_line":"        self.get_provisioning_network_uuid()"},{"line_number":64,"context_line":"        neutron.validate_local_link_connection_info(task)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def add_provisioning_network(self, task):"},{"line_number":67,"context_line":"        \"\"\"Add the provisioning network to a node."}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_f3948de9","line":64,"updated":"2016-12-30 14:24:28.000000000","message":"This will introduce some problems with such things as vif attach/detach/list and changing port or portgroup, as validate is called prior to that, while those operations should not require local_link_connection, it\u0027s not needed there. Will need to think how to refactor this.","commit_id":"92fc3509b00e131a89b17d93f9c133215e87319e"}],"ironic/tests/unit/common/test_neutron.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"76c1174036620b854cc78ad76caf05eddbbff191","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        llc \u003d {\u0027switch_id\u0027: \u0027aa:bb:cc:dd:ee:ff\u0027, \u0027port_id\u0027: \u0027aaa\u0027}"},{"line_number":466,"context_line":"        port \u003d object_utils.create_test_port("},{"line_number":467,"context_line":"            self.context, node_id\u003dnode.id, uuid\u003duuidutils.generate_uuid(),"},{"line_number":468,"context_line":"            address\u003d\u002752:54:00:cf:2d:33\u0027, local_link_connection\u003dllc)"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"        res \u003d neutron.validate_port_info(port)"},{"line_number":471,"context_line":"        self.assertTrue(res)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_8b166eef","line":468,"range":{"start_line":468,"start_character":41,"end_line":468,"end_character":66},"updated":"2017-01-20 12:38:28.000000000","message":"test port has llc by default","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"fa8f620528c0d839d02cb0f5c60cea173adaa7a7","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        llc \u003d {\u0027switch_id\u0027: \u0027aa:bb:cc:dd:ee:ff\u0027, \u0027port_id\u0027: \u0027aaa\u0027}"},{"line_number":466,"context_line":"        port \u003d object_utils.create_test_port("},{"line_number":467,"context_line":"            self.context, node_id\u003dnode.id, uuid\u003duuidutils.generate_uuid(),"},{"line_number":468,"context_line":"            address\u003d\u002752:54:00:cf:2d:33\u0027, local_link_connection\u003dllc)"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"        res \u003d neutron.validate_port_info(port)"},{"line_number":471,"context_line":"        self.assertTrue(res)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_2ce7c2ac","line":468,"range":{"start_line":468,"start_character":41,"end_line":468,"end_character":66},"in_reply_to":"5a3905b3_8b166eef","updated":"2017-01-24 13:00:20.000000000","message":"Done","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"76c1174036620b854cc78ad76caf05eddbbff191","unresolved":false,"context_lines":[{"line_number":472,"context_line":"        self.assertFalse(log_mock.warning.called)"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"    @mock.patch.object(neutron, \u0027LOG\u0027)"},{"line_number":475,"context_line":"    def test_validate_port_info_raise(self, log_mock):"},{"line_number":476,"context_line":"        node \u003d object_utils.create_test_node("},{"line_number":477,"context_line":"            self.context, uuid\u003duuidutils.generate_uuid(),"},{"line_number":478,"context_line":"            network_interface\u003d\u0027neutron\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_0be19efe","line":475,"range":{"start_line":475,"start_character":32,"end_line":475,"end_character":37},"updated":"2017-01-20 12:38:28.000000000","message":"does not raise :)","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"fa8f620528c0d839d02cb0f5c60cea173adaa7a7","unresolved":false,"context_lines":[{"line_number":472,"context_line":"        self.assertFalse(log_mock.warning.called)"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"    @mock.patch.object(neutron, \u0027LOG\u0027)"},{"line_number":475,"context_line":"    def test_validate_port_info_raise(self, log_mock):"},{"line_number":476,"context_line":"        node \u003d object_utils.create_test_node("},{"line_number":477,"context_line":"            self.context, uuid\u003duuidutils.generate_uuid(),"},{"line_number":478,"context_line":"            network_interface\u003d\u0027neutron\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_4cea4e75","line":475,"range":{"start_line":475,"start_character":32,"end_line":475,"end_character":37},"in_reply_to":"5a3905b3_0be19efe","updated":"2017-01-24 13:00:20.000000000","message":"Done","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"}],"ironic/tests/unit/drivers/modules/network/test_common.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"76c1174036620b854cc78ad76caf05eddbbff191","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @mock.patch.object(neutron_common, \u0027validate_port_info\u0027, autospec\u003dTrue)"},{"line_number":92,"context_line":"    def test__get_free_portgroups_and_ports_neutron_missed(self, vpi_mock):"},{"line_number":93,"context_line":"        self.node.network_interface \u003d \u0027neutron\u0027"},{"line_number":94,"context_line":"        self.node.save()"},{"line_number":95,"context_line":"        self.port.local_link_connection \u003d {}"},{"line_number":96,"context_line":"        self.port.save()"},{"line_number":97,"context_line":"        vpi_mock.return_value \u003d False"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_8be3ce32","line":94,"range":{"start_line":93,"start_character":8,"end_line":94,"end_character":24},"updated":"2017-01-20 12:38:28.000000000","message":"It is set to neutron in setUp","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2f0b96b521eb1af2c8c21755638233b0741bfe55","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @mock.patch.object(neutron_common, \u0027validate_port_info\u0027, autospec\u003dTrue)"},{"line_number":92,"context_line":"    def test__get_free_portgroups_and_ports_neutron_missed(self, vpi_mock):"},{"line_number":93,"context_line":"        self.node.network_interface \u003d \u0027neutron\u0027"},{"line_number":94,"context_line":"        self.node.save()"},{"line_number":95,"context_line":"        self.port.local_link_connection \u003d {}"},{"line_number":96,"context_line":"        self.port.save()"},{"line_number":97,"context_line":"        vpi_mock.return_value \u003d False"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_45a7890a","line":94,"range":{"start_line":93,"start_character":8,"end_line":94,"end_character":24},"in_reply_to":"5a3905b3_8be3ce32","updated":"2017-01-24 12:59:42.000000000","message":"Done","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"76c1174036620b854cc78ad76caf05eddbbff191","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @mock.patch.object(neutron_common, \u0027validate_port_info\u0027, autospec\u003dTrue)"},{"line_number":104,"context_line":"    def test__get_free_portgroups_and_ports_neutron(self, vpi_mock):"},{"line_number":105,"context_line":"        self.node.network_interface \u003d \u0027neutron\u0027"},{"line_number":106,"context_line":"        self.node.save()"},{"line_number":107,"context_line":"        self.port.local_link_connection \u003d {\u0027switch_id\u0027: \u0027aa:bb:cc:dd:ee:ff\u0027,"},{"line_number":108,"context_line":"                                           \u0027port_id\u0027: \u0027Gig0/1\u0027}"},{"line_number":109,"context_line":"        self.port.save()"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_cbd3165e","line":106,"range":{"start_line":105,"start_character":8,"end_line":106,"end_character":24},"updated":"2017-01-20 12:38:28.000000000","message":"ditto","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2f0b96b521eb1af2c8c21755638233b0741bfe55","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @mock.patch.object(neutron_common, \u0027validate_port_info\u0027, autospec\u003dTrue)"},{"line_number":104,"context_line":"    def test__get_free_portgroups_and_ports_neutron(self, vpi_mock):"},{"line_number":105,"context_line":"        self.node.network_interface \u003d \u0027neutron\u0027"},{"line_number":106,"context_line":"        self.node.save()"},{"line_number":107,"context_line":"        self.port.local_link_connection \u003d {\u0027switch_id\u0027: \u0027aa:bb:cc:dd:ee:ff\u0027,"},{"line_number":108,"context_line":"                                           \u0027port_id\u0027: \u0027Gig0/1\u0027}"},{"line_number":109,"context_line":"        self.port.save()"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_a58f4d73","line":106,"range":{"start_line":105,"start_character":8,"end_line":106,"end_character":24},"in_reply_to":"5a3905b3_cbd3165e","updated":"2017-01-24 12:59:42.000000000","message":"Done","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"76c1174036620b854cc78ad76caf05eddbbff191","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    def test__get_free_portgroups_and_ports_neutron(self, vpi_mock):"},{"line_number":105,"context_line":"        self.node.network_interface \u003d \u0027neutron\u0027"},{"line_number":106,"context_line":"        self.node.save()"},{"line_number":107,"context_line":"        self.port.local_link_connection \u003d {\u0027switch_id\u0027: \u0027aa:bb:cc:dd:ee:ff\u0027,"},{"line_number":108,"context_line":"                                           \u0027port_id\u0027: \u0027Gig0/1\u0027}"},{"line_number":109,"context_line":"        self.port.save()"},{"line_number":110,"context_line":"        vpi_mock.return_value \u003d True"},{"line_number":111,"context_line":"        with task_manager.acquire(self.context, self.node.id) as task:"},{"line_number":112,"context_line":"            free_portgroups, free_ports \u003d ("}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_0b5c3eec","line":109,"range":{"start_line":107,"start_character":8,"end_line":109,"end_character":24},"updated":"2017-01-20 12:38:28.000000000","message":"ditto, port created with llc by default","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2f0b96b521eb1af2c8c21755638233b0741bfe55","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    def test__get_free_portgroups_and_ports_neutron(self, vpi_mock):"},{"line_number":105,"context_line":"        self.node.network_interface \u003d \u0027neutron\u0027"},{"line_number":106,"context_line":"        self.node.save()"},{"line_number":107,"context_line":"        self.port.local_link_connection \u003d {\u0027switch_id\u0027: \u0027aa:bb:cc:dd:ee:ff\u0027,"},{"line_number":108,"context_line":"                                           \u0027port_id\u0027: \u0027Gig0/1\u0027}"},{"line_number":109,"context_line":"        self.port.save()"},{"line_number":110,"context_line":"        vpi_mock.return_value \u003d True"},{"line_number":111,"context_line":"        with task_manager.acquire(self.context, self.node.id) as task:"},{"line_number":112,"context_line":"            free_portgroups, free_ports \u003d ("}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_c58a9963","line":109,"range":{"start_line":107,"start_character":8,"end_line":109,"end_character":24},"in_reply_to":"5a3905b3_0b5c3eec","updated":"2017-01-24 12:59:42.000000000","message":"Done","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"76c1174036620b854cc78ad76caf05eddbbff191","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @mock.patch.object(neutron_common, \u0027validate_port_info\u0027, autospec\u003dTrue)"},{"line_number":118,"context_line":"    def test__get_free_portgroups_and_ports_flat(self, vpi_mock):"},{"line_number":119,"context_line":"        self.node.network_interface \u003d \u0027flat\u0027"},{"line_number":120,"context_line":"        self.node.save()"},{"line_number":121,"context_line":"        self.port.local_link_connection \u003d {}"},{"line_number":122,"context_line":"        self.port.save()"},{"line_number":123,"context_line":"        with task_manager.acquire(self.context, self.node.id) as task:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_0bcefeb3","line":120,"range":{"start_line":119,"start_character":8,"end_line":120,"end_character":24},"updated":"2017-01-20 12:38:28.000000000","message":"ditto","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2f0b96b521eb1af2c8c21755638233b0741bfe55","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @mock.patch.object(neutron_common, \u0027validate_port_info\u0027, autospec\u003dTrue)"},{"line_number":118,"context_line":"    def test__get_free_portgroups_and_ports_flat(self, vpi_mock):"},{"line_number":119,"context_line":"        self.node.network_interface \u003d \u0027flat\u0027"},{"line_number":120,"context_line":"        self.node.save()"},{"line_number":121,"context_line":"        self.port.local_link_connection \u003d {}"},{"line_number":122,"context_line":"        self.port.save()"},{"line_number":123,"context_line":"        with task_manager.acquire(self.context, self.node.id) as task:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_c5b8d913","line":120,"range":{"start_line":119,"start_character":8,"end_line":120,"end_character":24},"in_reply_to":"5a3905b3_0bcefeb3","updated":"2017-01-24 12:59:42.000000000","message":"it is flat, so should be overridden.","commit_id":"b7f0c9522035de214d67f215158a5bbe2001d2ad"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"487c23d12f79a78cb4356b9a0106e7aa44ed7458","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @mock.patch.object(neutron_common, \u0027validate_port_info\u0027, autospec\u003dTrue)"},{"line_number":92,"context_line":"    def test__get_free_portgroups_and_ports_neutron_missed(self, vpi_mock):"},{"line_number":93,"context_line":"        self.port.local_link_connection \u003d {}"},{"line_number":94,"context_line":"        self.port.save()"},{"line_number":95,"context_line":"        vpi_mock.return_value \u003d False"},{"line_number":96,"context_line":"        with task_manager.acquire(self.context, self.node.id) as task:"},{"line_number":97,"context_line":"            free_portgroups, free_ports \u003d ("}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_885ea1e7","line":94,"range":{"start_line":93,"start_character":8,"end_line":94,"end_character":24},"updated":"2017-01-26 11:05:01.000000000","message":"No need in this, validate_port_info is mocked :)","commit_id":"488c23be81a4b2537163f0de4c47c46a94f44324"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"6d9e10b81d6a84b9df1576a06e7966e151a55882","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @mock.patch.object(neutron_common, \u0027validate_port_info\u0027, autospec\u003dTrue)"},{"line_number":92,"context_line":"    def test__get_free_portgroups_and_ports_neutron_missed(self, vpi_mock):"},{"line_number":93,"context_line":"        self.port.local_link_connection \u003d {}"},{"line_number":94,"context_line":"        self.port.save()"},{"line_number":95,"context_line":"        vpi_mock.return_value \u003d False"},{"line_number":96,"context_line":"        with task_manager.acquire(self.context, self.node.id) as task:"},{"line_number":97,"context_line":"            free_portgroups, free_ports \u003d ("}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_22acb6ec","line":94,"range":{"start_line":93,"start_character":8,"end_line":94,"end_character":24},"in_reply_to":"3a461143_885ea1e7","updated":"2017-01-27 13:45:13.000000000","message":"Done","commit_id":"488c23be81a4b2537163f0de4c47c46a94f44324"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"487c23d12f79a78cb4356b9a0106e7aa44ed7458","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    def test__get_free_portgroups_and_ports_flat(self, vpi_mock):"},{"line_number":112,"context_line":"        self.node.network_interface \u003d \u0027flat\u0027"},{"line_number":113,"context_line":"        self.node.save()"},{"line_number":114,"context_line":"        self.port.local_link_connection \u003d {}"},{"line_number":115,"context_line":"        self.port.save()"},{"line_number":116,"context_line":"        vpi_mock.return_value \u003d True"},{"line_number":117,"context_line":"        with task_manager.acquire(self.context, self.node.id) as task:"},{"line_number":118,"context_line":"            free_portgroups, free_ports \u003d ("}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_882ce14b","line":115,"range":{"start_line":114,"start_character":8,"end_line":115,"end_character":24},"updated":"2017-01-26 11:05:01.000000000","message":"ditto","commit_id":"488c23be81a4b2537163f0de4c47c46a94f44324"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"6d9e10b81d6a84b9df1576a06e7966e151a55882","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    def test__get_free_portgroups_and_ports_flat(self, vpi_mock):"},{"line_number":112,"context_line":"        self.node.network_interface \u003d \u0027flat\u0027"},{"line_number":113,"context_line":"        self.node.save()"},{"line_number":114,"context_line":"        self.port.local_link_connection \u003d {}"},{"line_number":115,"context_line":"        self.port.save()"},{"line_number":116,"context_line":"        vpi_mock.return_value \u003d True"},{"line_number":117,"context_line":"        with task_manager.acquire(self.context, self.node.id) as task:"},{"line_number":118,"context_line":"            free_portgroups, free_ports \u003d ("}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_42bb8227","line":115,"range":{"start_line":114,"start_character":8,"end_line":115,"end_character":24},"in_reply_to":"3a461143_882ce14b","updated":"2017-01-27 13:45:13.000000000","message":"Done","commit_id":"488c23be81a4b2537163f0de4c47c46a94f44324"}],"releasenotes/notes/validate-port-info-before-using-it-e26135982d37c698.yaml":[{"author":{"_account_id":19686,"name":"Ramamani Yeleswarapu","email":"ramamani.yeleswarapu@intel.com","username":"Rama_Y"},"change_message_id":"e33afa2d4617ad36c91c706d34ed2313b353a5a5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - An issue when attaching VIF to a port with missed"},{"line_number":4,"context_line":"    `local_link_connection` was allowed when node network"},{"line_number":5,"context_line":"    interface is `neutron`."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3a461143_d886da64","line":3,"range":{"start_line":3,"start_character":13,"end_line":3,"end_character":17},"updated":"2017-01-25 17:53:24.000000000","message":"s/when/where","commit_id":"b7ad3a68f7c0af441eec20058f061d7695d4f09e"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"68dc77524ce105c29c9aff2c97fea86cdf039cfb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - An issue when attaching VIF to a port with missed"},{"line_number":4,"context_line":"    `local_link_connection` was allowed when node network"},{"line_number":5,"context_line":"    interface is `neutron`."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3a461143_66b44bf2","line":3,"range":{"start_line":3,"start_character":13,"end_line":3,"end_character":17},"in_reply_to":"3a461143_d886da64","updated":"2017-01-26 09:09:47.000000000","message":"when is appropriate keyword here.","commit_id":"b7ad3a68f7c0af441eec20058f061d7695d4f09e"},{"author":{"_account_id":19686,"name":"Ramamani Yeleswarapu","email":"ramamani.yeleswarapu@intel.com","username":"Rama_Y"},"change_message_id":"e33afa2d4617ad36c91c706d34ed2313b353a5a5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - An issue when attaching VIF to a port with missed"},{"line_number":4,"context_line":"    `local_link_connection` was allowed when node network"},{"line_number":5,"context_line":"    interface is `neutron`."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3a461143_58daea79","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":27},"updated":"2017-01-25 17:53:24.000000000","message":"s/`local_link_connection`/``local_link_connection``","commit_id":"b7ad3a68f7c0af441eec20058f061d7695d4f09e"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"68dc77524ce105c29c9aff2c97fea86cdf039cfb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - An issue when attaching VIF to a port with missed"},{"line_number":4,"context_line":"    `local_link_connection` was allowed when node network"},{"line_number":5,"context_line":"    interface is `neutron`."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3a461143_06ef07e9","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":27},"in_reply_to":"3a461143_58daea79","updated":"2017-01-26 09:09:47.000000000","message":"Done","commit_id":"b7ad3a68f7c0af441eec20058f061d7695d4f09e"},{"author":{"_account_id":19686,"name":"Ramamani Yeleswarapu","email":"ramamani.yeleswarapu@intel.com","username":"Rama_Y"},"change_message_id":"e33afa2d4617ad36c91c706d34ed2313b353a5a5","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - An issue when attaching VIF to a port with missed"},{"line_number":4,"context_line":"    `local_link_connection` was allowed when node network"},{"line_number":5,"context_line":"    interface is `neutron`."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3a461143_f840f609","line":5,"range":{"start_line":5,"start_character":17,"end_line":5,"end_character":26},"updated":"2017-01-25 17:53:24.000000000","message":"s/`neutron`/``neutron``","commit_id":"b7ad3a68f7c0af441eec20058f061d7695d4f09e"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"68dc77524ce105c29c9aff2c97fea86cdf039cfb","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - An issue when attaching VIF to a port with missed"},{"line_number":4,"context_line":"    `local_link_connection` was allowed when node network"},{"line_number":5,"context_line":"    interface is `neutron`."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3a461143_26ba43e2","line":5,"range":{"start_line":5,"start_character":17,"end_line":5,"end_character":26},"in_reply_to":"3a461143_f840f609","updated":"2017-01-26 09:09:47.000000000","message":"Done","commit_id":"b7ad3a68f7c0af441eec20058f061d7695d4f09e"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"487c23d12f79a78cb4356b9a0106e7aa44ed7458","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - An issue when attaching VIF to a port with missed"},{"line_number":4,"context_line":"    ``local_link_connection`` was allowed when node network"},{"line_number":5,"context_line":"    interface is ``neutron``."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"3a461143_08e8f1e1","line":3,"updated":"2017-01-26 11:05:01.000000000","message":"Fixes an issue?","commit_id":"488c23be81a4b2537163f0de4c47c46a94f44324"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"fe8bf020f36bc51e783c144c2b4318ea65f6d477","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - An issue when attaching VIF to a port with missed"},{"line_number":4,"context_line":"    ``local_link_connection`` was allowed when node network"},{"line_number":5,"context_line":"    interface is ``neutron``."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"3a461143_1e42d510","line":3,"in_reply_to":"3a461143_08e8f1e1","updated":"2017-01-26 17:19:59.000000000","message":"This doesn\u0027t quite make sense to me.\n\n\"missed local_link_connection\"? What does that mean?","commit_id":"488c23be81a4b2537163f0de4c47c46a94f44324"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"6d9e10b81d6a84b9df1576a06e7966e151a55882","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - An issue when attaching VIF to a port with missed"},{"line_number":4,"context_line":"    ``local_link_connection`` was allowed when node network"},{"line_number":5,"context_line":"    interface is ``neutron``."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"3a461143_c2f4d2f3","line":3,"in_reply_to":"3a461143_1e42d510","updated":"2017-01-27 13:45:13.000000000","message":"It is node field https://github.com/openstack/ironic/blob/master/ironic/api/controllers/v1/port.py#L145 \n\nAdded mention about it in release notes.","commit_id":"488c23be81a4b2537163f0de4c47c46a94f44324"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"fe8bf020f36bc51e783c144c2b4318ea65f6d477","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - An issue when attaching VIF to a port with missed"},{"line_number":4,"context_line":"    ``local_link_connection`` was allowed when node network"},{"line_number":5,"context_line":"    interface is ``neutron``."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"3a461143_7e47591d","line":5,"range":{"start_line":5,"start_character":14,"end_line":5,"end_character":16},"updated":"2017-01-26 17:19:59.000000000","message":"s/is/was/","commit_id":"488c23be81a4b2537163f0de4c47c46a94f44324"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"6d9e10b81d6a84b9df1576a06e7966e151a55882","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - An issue when attaching VIF to a port with missed"},{"line_number":4,"context_line":"    ``local_link_connection`` was allowed when node network"},{"line_number":5,"context_line":"    interface is ``neutron``."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"3a461143_e2f70ef3","line":5,"range":{"start_line":5,"start_character":14,"end_line":5,"end_character":16},"in_reply_to":"3a461143_7e47591d","updated":"2017-01-27 13:45:13.000000000","message":"Done","commit_id":"488c23be81a4b2537163f0de4c47c46a94f44324"}]}
