)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"5a51f93a7aed59d82ba9eeb6f7a9863b9ac3c81c","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Allow to attach/detach VIFs to active ironic nodes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch enhances attach/detach logic and allows to work with"},{"line_number":10,"context_line":"active nova nodes. Starting with this change when VIF is attach/detach"},{"line_number":11,"context_line":"neutron port is updated appropriately to reflect changes on hardware"},{"line_number":12,"context_line":"(ie: plug port to specific network)"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"da36d5c6_0b32bdf1","line":10,"range":{"start_line":10,"start_character":7,"end_line":10,"end_character":17},"updated":"2017-02-20 12:17:09.000000000","message":"Vasyl, did you mean Nova instances or Ironic nodes here?","commit_id":"c4c5ef85f0936b84a09c0dba914fdb457818c3df"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c249b5580bcadef13a059a2e77020aedf7c6cd80","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Allow to attach/detach VIFs to active ironic nodes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch enhances attach/detach logic and allows to work with"},{"line_number":10,"context_line":"active nova nodes. Starting with this change when VIF is attach/detach"},{"line_number":11,"context_line":"neutron port is updated appropriately to reflect changes on hardware"},{"line_number":12,"context_line":"(ie: plug port to specific network)"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"ba2be162_2a2f22f7","line":10,"range":{"start_line":10,"start_character":7,"end_line":10,"end_character":17},"in_reply_to":"da36d5c6_0b32bdf1","updated":"2017-03-02 16:11:57.000000000","message":"Done","commit_id":"c4c5ef85f0936b84a09c0dba914fdb457818c3df"}],"ironic/drivers/modules/network/common.py":[{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"cd9a64602b2a4acbb77f1c5c08a448c44942d7be","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    :param task: A TaskManager instance."},{"line_number":142,"context_line":"    :param port_like_obj: port-like object to plug."},{"line_number":143,"context_line":"    :raises NetworkError: if failed to update Neutron port."},{"line_number":144,"context_line":"    :raises: VifNotAttached if tenant VIF is not associated with port_like_obj."},{"line_number":145,"context_line":"    \"\"\""},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a461143_b4810b92","line":143,"updated":"2017-01-25 23:16:22.000000000","message":"nit:\n\n:param client: neutron client","commit_id":"8c1d24343cdd0118982e8716935e2bf946c7dd16"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"0466f861e4f091bf4bac981aa6400389e853e073","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    :param task: A TaskManager instance."},{"line_number":142,"context_line":"    :param port_like_obj: port-like object to plug."},{"line_number":143,"context_line":"    :raises NetworkError: if failed to update Neutron port."},{"line_number":144,"context_line":"    :raises: VifNotAttached if tenant VIF is not associated with port_like_obj."},{"line_number":145,"context_line":"    \"\"\""},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_c94130ab","line":143,"in_reply_to":"3a461143_b4810b92","updated":"2017-02-07 12:05:42.000000000","message":"Done","commit_id":"8c1d24343cdd0118982e8716935e2bf946c7dd16"},{"author":{"_account_id":19686,"name":"Ramamani Yeleswarapu","email":"ramamani.yeleswarapu@intel.com","username":"Rama_Y"},"change_message_id":"6d46d86d45d2d44ea6ae8f830d024a4cbf0aef61","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    :param task: A TaskManager instance."},{"line_number":142,"context_line":"    :param port_like_obj: port-like object to plug."},{"line_number":143,"context_line":"    :raises NetworkError: if failed to update Neutron port."},{"line_number":144,"context_line":"    :raises: VifNotAttached if tenant VIF is not associated with port_like_obj."},{"line_number":145,"context_line":"    \"\"\""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    node \u003d task.node"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a461143_24ab388b","line":144,"range":{"start_line":144,"start_character":5,"end_line":144,"end_character":27},"updated":"2017-01-25 19:34:52.000000000","message":":raises VifNotAttached:","commit_id":"8c1d24343cdd0118982e8716935e2bf946c7dd16"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"0466f861e4f091bf4bac981aa6400389e853e073","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    :param task: A TaskManager instance."},{"line_number":142,"context_line":"    :param port_like_obj: port-like object to plug."},{"line_number":143,"context_line":"    :raises NetworkError: if failed to update Neutron port."},{"line_number":144,"context_line":"    :raises: VifNotAttached if tenant VIF is not associated with port_like_obj."},{"line_number":145,"context_line":"    \"\"\""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    node \u003d task.node"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_e93eec26","line":144,"range":{"start_line":144,"start_character":5,"end_line":144,"end_character":27},"in_reply_to":"3a461143_24ab388b","updated":"2017-02-07 12:05:42.000000000","message":"Done","commit_id":"8c1d24343cdd0118982e8716935e2bf946c7dd16"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"cd9a64602b2a4acbb77f1c5c08a448c44942d7be","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    if isinstance(port_like_obj, objects.Portgroup):"},{"line_number":167,"context_line":"        pg_ports \u003d [p for p in task.ports"},{"line_number":168,"context_line":"                    if p.portgroup_id \u003d\u003d port_like_obj.id]"},{"line_number":169,"context_line":"        for port in pg_ports:"},{"line_number":170,"context_line":"            local_link_info.append(port.local_link_connection)"},{"line_number":171,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a461143_cfb6043d","line":168,"updated":"2017-01-25 23:16:22.000000000","message":"Is it possible that this function gets passed a portgroup not associated with any of the node\u0027s ports?\n\nIt seems impossible based on the caller, but in that case, it seems like we\u0027ll be destroying any existing link info on the neutron port.\n\nMaybe log a warning if pg_ports is empty?","commit_id":"8c1d24343cdd0118982e8716935e2bf946c7dd16"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"0466f861e4f091bf4bac981aa6400389e853e073","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    if isinstance(port_like_obj, objects.Portgroup):"},{"line_number":167,"context_line":"        pg_ports \u003d [p for p in task.ports"},{"line_number":168,"context_line":"                    if p.portgroup_id \u003d\u003d port_like_obj.id]"},{"line_number":169,"context_line":"        for port in pg_ports:"},{"line_number":170,"context_line":"            local_link_info.append(port.local_link_connection)"},{"line_number":171,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_29e1d49a","line":168,"in_reply_to":"3a461143_cfb6043d","updated":"2017-02-07 12:05:42.000000000","message":"We can\u0027t attach VIF to an empty portgroup. It is handled in vif_attach()","commit_id":"8c1d24343cdd0118982e8716935e2bf946c7dd16"},{"author":{"_account_id":19686,"name":"Ramamani Yeleswarapu","email":"ramamani.yeleswarapu@intel.com","username":"Rama_Y"},"change_message_id":"6d46d86d45d2d44ea6ae8f830d024a4cbf0aef61","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            \u0027binding:vnic_type\u0027: \u0027baremetal\u0027,"},{"line_number":184,"context_line":"            \u0027binding:host_id\u0027: node.uuid,"},{"line_number":185,"context_line":"            \u0027binding:profile\u0027: {"},{"line_number":186,"context_line":"                \u0027local_link_information\u0027: local_link_info,"},{"line_number":187,"context_line":"            },"},{"line_number":188,"context_line":"        }"},{"line_number":189,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a461143_b24686bd","line":186,"updated":"2017-01-25 19:34:52.000000000","message":"Why not have local_link_information one level above? Will there be additional info in binding:profile later on?","commit_id":"8c1d24343cdd0118982e8716935e2bf946c7dd16"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"0466f861e4f091bf4bac981aa6400389e853e073","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            \u0027binding:vnic_type\u0027: \u0027baremetal\u0027,"},{"line_number":184,"context_line":"            \u0027binding:host_id\u0027: node.uuid,"},{"line_number":185,"context_line":"            \u0027binding:profile\u0027: {"},{"line_number":186,"context_line":"                \u0027local_link_information\u0027: local_link_info,"},{"line_number":187,"context_line":"            },"},{"line_number":188,"context_line":"        }"},{"line_number":189,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a461143_11016338","line":186,"in_reply_to":"3a461143_945b2f54","updated":"2017-02-07 12:05:42.000000000","message":"right, neutron expects local_link_information dict inside binding:profile.","commit_id":"8c1d24343cdd0118982e8716935e2bf946c7dd16"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"cd9a64602b2a4acbb77f1c5c08a448c44942d7be","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            \u0027binding:vnic_type\u0027: \u0027baremetal\u0027,"},{"line_number":184,"context_line":"            \u0027binding:host_id\u0027: node.uuid,"},{"line_number":185,"context_line":"            \u0027binding:profile\u0027: {"},{"line_number":186,"context_line":"                \u0027local_link_information\u0027: local_link_info,"},{"line_number":187,"context_line":"            },"},{"line_number":188,"context_line":"        }"},{"line_number":189,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a461143_945b2f54","line":186,"in_reply_to":"3a461143_b24686bd","updated":"2017-01-25 23:16:22.000000000","message":"I think this is the format that neutron expects","commit_id":"8c1d24343cdd0118982e8716935e2bf946c7dd16"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"cd9a64602b2a4acbb77f1c5c08a448c44942d7be","unresolved":false,"context_lines":[{"line_number":404,"context_line":"        for port_like_obj in portgroups + ports:"},{"line_number":405,"context_line":"            # FIXME(sambetts) Remove this when we no longer support a nova"},{"line_number":406,"context_line":"            # driver that uses port.extra"},{"line_number":407,"context_line":"            vif_port_id \u003d port_like_obj.internal_info.get("},{"line_number":408,"context_line":"                TENANT_VIF_KEY, port_like_obj.extra.get(\"vif_port_id\"))"},{"line_number":409,"context_line":"            if vif_port_id \u003d\u003d vif_id:"},{"line_number":410,"context_line":"                int_info \u003d port_like_obj.internal_info"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a461143_efcf40b1","line":407,"updated":"2017-01-25 23:16:22.000000000","message":"nit: I like this, but it seems unrelated","commit_id":"8c1d24343cdd0118982e8716935e2bf946c7dd16"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"07663b83b81842a7af878d6db9806282b8b8b234","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        raise exception.VifNotAttached("},{"line_number":162,"context_line":"            _(\"Tenant VIF is not associated with %(obj_name)s \""},{"line_number":163,"context_line":"              \"%(vif_id)s\") % {\u0027obj_name\u0027: obj_name,"},{"line_number":164,"context_line":"                               \u0027vif_id\u0027: vif_id})"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    LOG.debug(\u0027Mapping tenant port %(vif_id)s to node \u0027"},{"line_number":167,"context_line":"              \u0027%(node_id)s\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"da36d5c6_9dcdee5f","line":164,"range":{"start_line":164,"start_character":41,"end_line":164,"end_character":47},"updated":"2017-02-21 13:26:51.000000000","message":"This value will be None. Use port_like_obj.uuid instead.","commit_id":"c4c5ef85f0936b84a09c0dba914fdb457818c3df"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c249b5580bcadef13a059a2e77020aedf7c6cd80","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        raise exception.VifNotAttached("},{"line_number":162,"context_line":"            _(\"Tenant VIF is not associated with %(obj_name)s \""},{"line_number":163,"context_line":"              \"%(vif_id)s\") % {\u0027obj_name\u0027: obj_name,"},{"line_number":164,"context_line":"                               \u0027vif_id\u0027: vif_id})"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    LOG.debug(\u0027Mapping tenant port %(vif_id)s to node \u0027"},{"line_number":167,"context_line":"              \u0027%(node_id)s\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_cfabf81b","line":164,"range":{"start_line":164,"start_character":41,"end_line":164,"end_character":47},"in_reply_to":"da36d5c6_9dcdee5f","updated":"2017-03-02 16:11:57.000000000","message":"Done","commit_id":"c4c5ef85f0936b84a09c0dba914fdb457818c3df"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"b17daac036ccb822985c31544afcabeeeead2231","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    for p in task.ports:"},{"line_number":79,"context_line":"        # Validate that port has needed information"},{"line_number":80,"context_line":"        if not neutron.validate_port_info(task.node, p):"},{"line_number":81,"context_line":"            continue"},{"line_number":82,"context_line":"        if _vif_attached(p, vif_id):"},{"line_number":83,"context_line":"            # Consider such portgroup unusable. The fact that we can have None"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_4da65e11","line":80,"updated":"2017-03-29 17:58:33.000000000","message":"neutron dependency","commit_id":"b9ad3de19f648c159c371f78b1c7e068fe032a24"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"b17daac036ccb822985c31544afcabeeeead2231","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    return sorted_free_ports[0]"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"def plug_port_to_tenant_network(task, port_like_obj, client\u003dNone):"},{"line_number":142,"context_line":"    \"\"\"Plug port like object to tenant network."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    :param task: A TaskManager instance."}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_6db002de","line":141,"range":{"start_line":141,"start_character":53,"end_line":141,"end_character":64},"updated":"2017-03-29 17:58:33.000000000","message":"nit: why\u0027s this optional? The only use of the function I see is passing the client already","commit_id":"b9ad3de19f648c159c371f78b1c7e068fe032a24"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"b17daac036ccb822985c31544afcabeeeead2231","unresolved":false,"context_lines":[{"line_number":367,"context_line":"            # Check if the requested vif_id is a neutron port. If it is"},{"line_number":368,"context_line":"            # then attempt to update the port\u0027s MAC address."},{"line_number":369,"context_line":"            try:"},{"line_number":370,"context_line":"                client.show_port(vif_id)"},{"line_number":371,"context_line":"            except neutron_exceptions.NeutronClientException:"},{"line_number":372,"context_line":"                # NOTE(sambetts): If a client error occurs this is because"},{"line_number":373,"context_line":"                # either neutron doesn\u0027t exist because we\u0027re running in"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_ed8f7272","line":370,"updated":"2017-03-29 17:58:33.000000000","message":"neutron dependency","commit_id":"b9ad3de19f648c159c371f78b1c7e068fe032a24"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"b17daac036ccb822985c31544afcabeeeead2231","unresolved":false,"context_lines":[{"line_number":378,"context_line":"                pass"},{"line_number":379,"context_line":"            else:"},{"line_number":380,"context_line":"                try:"},{"line_number":381,"context_line":"                    neutron.update_port_address(vif_id, port_like_obj.address)"},{"line_number":382,"context_line":"                except exception.FailedToUpdateMacOnPort:"},{"line_number":383,"context_line":"                    raise exception.NetworkError(_("},{"line_number":384,"context_line":"                        \"Unable to attach VIF %(vif)s because Ironic can not \""}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_8deea61f","line":381,"updated":"2017-03-29 17:58:33.000000000","message":"neutron dependency","commit_id":"b9ad3de19f648c159c371f78b1c7e068fe032a24"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"072bfe0b335b46a8ea95ea9b1848d382028e9f88","unresolved":false,"context_lines":[{"line_number":392,"context_line":"        port_like_obj.internal_info \u003d int_info"},{"line_number":393,"context_line":"        port_like_obj.save()"},{"line_number":394,"context_line":"        # NOTE(vsaienko) allow to attach VIF to active instance."},{"line_number":395,"context_line":"        if task.node.provision_state \u003d\u003d states.ACTIVE:"},{"line_number":396,"context_line":"            plug_port_to_tenant_network(task, port_like_obj, client\u003dclient)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    def vif_detach(self, task, vif_id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba2be162_5719d621","line":395,"updated":"2017-03-06 17:37:02.000000000","message":"I\u0027m not sure this is a good way, maybe better to actually leave this method to just insert the key into internal info dictionary, and trigger the actual attachment in conductor/manager?","commit_id":"b9ad3de19f648c159c371f78b1c7e068fe032a24"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"f6b8dc4ca10a2f542bdad612efe5d7dd77e90489","unresolved":false,"context_lines":[{"line_number":392,"context_line":"        port_like_obj.internal_info \u003d int_info"},{"line_number":393,"context_line":"        port_like_obj.save()"},{"line_number":394,"context_line":"        # NOTE(vsaienko) allow to attach VIF to active instance."},{"line_number":395,"context_line":"        if task.node.provision_state \u003d\u003d states.ACTIVE:"},{"line_number":396,"context_line":"            plug_port_to_tenant_network(task, port_like_obj, client\u003dclient)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    def vif_detach(self, task, vif_id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_7cda4f18","line":395,"in_reply_to":"ba2be162_5719d621","updated":"2017-03-13 14:29:34.000000000","message":"We already update neutron port mac_address during vif_attach. And it would be good to keep all network logic in single place.\n\nhttps://github.com/openstack/ironic/blob/master/ironic/drivers/modules/network/common.py#L308","commit_id":"b9ad3de19f648c159c371f78b1c7e068fe032a24"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"fecb431d06a8673cab42f1a2f3bbcdb2bdc3b089","unresolved":false,"context_lines":[{"line_number":421,"context_line":"                port_like_obj.save()"},{"line_number":422,"context_line":"                # NOTE(vsaienko) allow to unplug VIFs from ACTIVE instance."},{"line_number":423,"context_line":"                if task.node.provision_state \u003d\u003d states.ACTIVE:"},{"line_number":424,"context_line":"                    neutron.unbind_neutron_port(vif_port_id)"},{"line_number":425,"context_line":"                break"},{"line_number":426,"context_line":"        else:"},{"line_number":427,"context_line":"            raise exception.VifNotAttached(vif\u003dvif_id, node\u003dtask.node.uuid)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_10d9b455","line":424,"range":{"start_line":424,"start_character":20,"end_line":424,"end_character":60},"updated":"2017-03-29 01:58:37.000000000","message":"nit: I _feel_ like this should be calling the interface driver, but since we only really support neutron based network interfaces, our interface is just a different use model, but I could see the possibility of someone implementing their own interface since not everyone that uses ironic uses neutron. Maybe something we should keep in mind for later since otherwise surely downstream consumers, if they want this feature, will be likely to modify this area of the code.","commit_id":"b9ad3de19f648c159c371f78b1c7e068fe032a24"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b6c8b6ce9e1cfe0ae2b95f240c7646691f1de271","unresolved":false,"context_lines":[{"line_number":421,"context_line":"                port_like_obj.save()"},{"line_number":422,"context_line":"                # NOTE(vsaienko) allow to unplug VIFs from ACTIVE instance."},{"line_number":423,"context_line":"                if task.node.provision_state \u003d\u003d states.ACTIVE:"},{"line_number":424,"context_line":"                    neutron.unbind_neutron_port(vif_port_id)"},{"line_number":425,"context_line":"                break"},{"line_number":426,"context_line":"        else:"},{"line_number":427,"context_line":"            raise exception.VifNotAttached(vif\u003dvif_id, node\u003dtask.node.uuid)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_656395b3","line":424,"range":{"start_line":424,"start_character":20,"end_line":424,"end_character":60},"in_reply_to":"ffe62b97_10d9b455","updated":"2017-03-29 08:38:45.000000000","message":"you are right, but the whole ironic/drivers/modules/network/common strictly rely on Neutron. We can rework this in future.","commit_id":"b9ad3de19f648c159c371f78b1c7e068fe032a24"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"b17daac036ccb822985c31544afcabeeeead2231","unresolved":false,"context_lines":[{"line_number":421,"context_line":"                port_like_obj.save()"},{"line_number":422,"context_line":"                # NOTE(vsaienko) allow to unplug VIFs from ACTIVE instance."},{"line_number":423,"context_line":"                if task.node.provision_state \u003d\u003d states.ACTIVE:"},{"line_number":424,"context_line":"                    neutron.unbind_neutron_port(vif_port_id)"},{"line_number":425,"context_line":"                break"},{"line_number":426,"context_line":"        else:"},{"line_number":427,"context_line":"            raise exception.VifNotAttached(vif\u003dvif_id, node\u003dtask.node.uuid)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_cd66eebb","line":424,"range":{"start_line":424,"start_character":20,"end_line":424,"end_character":60},"in_reply_to":"ffe62b97_656395b3","updated":"2017-03-29 17:58:33.000000000","message":"I agree with Julia that this module could ideally be more decoupled and have all external interactions go through the network driver layer, but this module does already have a neutron dependency in quite a few other places (marked them inline).\n\nIf downstream consumers want to have special networking functionality now, I think they\u0027d have to stick most of it inside their driver anyway.\n\n+1 to reworking later if there\u0027s demand for it","commit_id":"b9ad3de19f648c159c371f78b1c7e068fe032a24"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"704a175fda8168cfb0b529be8b8687ca9a282b9c","unresolved":false,"context_lines":[{"line_number":421,"context_line":"                port_like_obj.save()"},{"line_number":422,"context_line":"                # NOTE(vsaienko) allow to unplug VIFs from ACTIVE instance."},{"line_number":423,"context_line":"                if task.node.provision_state \u003d\u003d states.ACTIVE:"},{"line_number":424,"context_line":"                    neutron.unbind_neutron_port(vif_port_id)"},{"line_number":425,"context_line":"                break"},{"line_number":426,"context_line":"        else:"},{"line_number":427,"context_line":"            raise exception.VifNotAttached(vif\u003dvif_id, node\u003dtask.node.uuid)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_4dde5e3e","line":424,"range":{"start_line":424,"start_character":20,"end_line":424,"end_character":60},"in_reply_to":"ffe62b97_656395b3","updated":"2017-03-29 17:53:28.000000000","message":"I think we should kind of plan on it, at least as a background thing.  There was some talk of doing some re-tooling for other dhcp servers, since neutron can actually use other dhcp servers, and our main options are dnsmasq centric.","commit_id":"b9ad3de19f648c159c371f78b1c7e068fe032a24"}]}
