)]}'
{"ironic/common/dhcp_factory.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"db4e3596790077e79e51cf7cd6f43f948cba607d","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        \"\"\""},{"line_number":105,"context_line":"        global _update_dhcp_shown"},{"line_number":106,"context_line":"        if not _update_dhcp_shown:"},{"line_number":107,"context_line":"            LOG.warning(\u0027update_dhcp via DHCP provider is deprecated and will \u0027"},{"line_number":108,"context_line":"                        \u0027be removed in Rocky. The node.network_interface \u0027"},{"line_number":109,"context_line":"                        \u0027should be used instead.\u0027)"},{"line_number":110,"context_line":"            _update_dhcp_shown \u003d True"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f4b6375_f798061c","line":107,"updated":"2017-10-30 12:29:11.000000000","message":"I\u0027m not sure it\u0027s worth pointing this out separately, as DHCP providers will be gone completely, but I guess it does not hurt.","commit_id":"52152b96148aecde4fafe0d713bd015cb157a965"}],"ironic/common/neutron.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"c7fade41dff9f433bee359437a8e2c029024bf44","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        client_id \u003d ironic_port.extra.get(\u0027client-id\u0027)"},{"line_number":232,"context_line":"        if client_id:"},{"line_number":233,"context_line":"            client_id_opt \u003d {\u0027opt_name\u0027: \u0027client-id\u0027, \u0027opt_value\u0027: client_id}"},{"line_number":234,"context_line":"            dhcp_opts.append(client_id_opt)"},{"line_number":235,"context_line":"        body[\u0027port\u0027][\u0027extra_dhcp_opts\u0027] \u003d dhcp_opts"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f201791_c5ffa165","line":234,"updated":"2017-06-21 15:12:01.000000000","message":"You\u0027re appending it to dhcp_opts for every port. Need to do copies I suppose","commit_id":"47f5af3625614745528e2ff9204ba28f8ec1cb46"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"8ef4fd6f8476d739f3cb333b445415a6981917cb","unresolved":false,"context_lines":[{"line_number":580,"context_line":"        return self._provisioning_network_uuid"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"class VIFIPMixin(object):"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"    def get_ip_addresses(self, task):"},{"line_number":586,"context_line":"        \"\"\"Get IP addresses for all ports/portgroups in `task`."}],"source_content_type":"text/x-python","patch_set":18,"id":"5f4e5783_9115db9e","line":583,"range":{"start_line":583,"start_character":6,"end_line":583,"end_character":16},"updated":"2017-10-16 10:54:04.000000000","message":"NeutronVIFIPMixin... to be honest I\u0027m not sure what the benefit of having this separate from the NeutronVifPortIdMixin is...","commit_id":"52152b96148aecde4fafe0d713bd015cb157a965"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"db4e3596790077e79e51cf7cd6f43f948cba607d","unresolved":false,"context_lines":[{"line_number":591,"context_line":"        \"\"\""},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"        vifs \u003d net_common.get_node_vif_ids(task)"},{"line_number":594,"context_line":"        vif_list \u003d [vif for pdict in vifs.values() for vif in pdict.values()]"},{"line_number":595,"context_line":"        ip_addresses \u003d []"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"        if not vif_list:"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f4b6375_57aa3a19","line":594,"updated":"2017-10-30 12:29:11.000000000","message":"omg","commit_id":"52152b96148aecde4fafe0d713bd015cb157a965"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"db4e3596790077e79e51cf7cd6f43f948cba607d","unresolved":false,"context_lines":[{"line_number":644,"context_line":"                body \u003d {\u0027port\u0027: {\u0027extra_dhcp_opts\u0027: []}}"},{"line_number":645,"context_line":"                try:"},{"line_number":646,"context_line":"                    client.update_port(vif_id, body)"},{"line_number":647,"context_line":"                # NOTE(vsaienko): Ignore if port was deleted before call"},{"line_number":648,"context_line":"                # cleanup."},{"line_number":649,"context_line":"                except neutron_exceptions.PortNotFoundClient:"},{"line_number":650,"context_line":"                    LOG.info(\u0027Port %s was not found while cleaning dhcp opts.\u0027,"},{"line_number":651,"context_line":"                             vif_id)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f4b6375_c2254aad","line":648,"range":{"start_line":647,"start_character":16,"end_line":648,"end_character":26},"updated":"2017-10-30 12:29:11.000000000","message":"nit - move this under except block","commit_id":"52152b96148aecde4fafe0d713bd015cb157a965"}],"ironic/common/pxe_utils.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"c7fade41dff9f433bee359437a8e2c029024bf44","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    ip_addrs \u003d task.driver.network.get_ip_addresses(task)"},{"line_number":97,"context_line":"    # TODO(vsaienko) remove once deprecation period is passed in Queens."},{"line_number":98,"context_line":"    if (CONF.dhcp.dhcp_provider not in [\u0027none\u0027, \u0027neutron\u0027] or"},{"line_number":99,"context_line":"            task.node.network_interface not in [\u0027noop\u0027, \u0027flat\u0027, \u0027neutron\u0027]):"},{"line_number":100,"context_line":"        api \u003d dhcp_factory.DHCPFactory().provider"},{"line_number":101,"context_line":"        ip_addrs \u003d api.get_ip_addresses(task)"},{"line_number":102,"context_line":"    if not ip_addrs:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f201791_452ef1a5","line":99,"range":{"start_line":98,"start_character":8,"end_line":99,"end_character":74},"updated":"2017-06-21 15:12:01.000000000","message":"so what happens if the custom network interface implements get_ip_addresses? This bit will overwrite them? Maybe we should check the ip_addrs, if there are some present, we consider the network interface to be up-to-date and not call this legacy code","commit_id":"47f5af3625614745528e2ff9204ba28f8ec1cb46"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"c7fade41dff9f433bee359437a8e2c029024bf44","unresolved":false,"context_lines":[{"line_number":256,"context_line":"    is_uefi_boot_mode \u003d (deploy_utils.get_boot_mode_for_deploy(task.node) \u003d\u003d"},{"line_number":257,"context_line":"                         \u0027uefi\u0027)"},{"line_number":258,"context_line":"    if is_uefi_boot_mode and not CONF.pxe.ipxe_enabled:"},{"line_number":259,"context_line":"        ip_addresses \u003d task.driver.network.get_ip_addresses(task)"},{"line_number":260,"context_line":"        # TODO(vsaienko) remove once deprecation period is passed in Queens."},{"line_number":261,"context_line":"        if (CONF.dhcp.dhcp_provider not in [\u0027none\u0027, \u0027neutron\u0027] or"},{"line_number":262,"context_line":"                task.node.network_interface not in [\u0027noop\u0027, \u0027flat\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f201791_a5602534","line":259,"updated":"2017-06-21 15:12:01.000000000","message":"ditto","commit_id":"47f5af3625614745528e2ff9204ba28f8ec1cb46"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"8ef4fd6f8476d739f3cb333b445415a6981917cb","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    ip_addrs \u003d task.driver.network.get_ip_addresses(task)"},{"line_number":97,"context_line":"    # TODO(vsaienko) remove once deprecation period is passed in Rocky."},{"line_number":98,"context_line":"    if (CONF.dhcp.dhcp_provider not in [\u0027none\u0027, \u0027neutron\u0027] or"},{"line_number":99,"context_line":"            task.node.network_interface not in [\u0027noop\u0027, \u0027flat\u0027, \u0027neutron\u0027]):"},{"line_number":100,"context_line":"        api \u003d dhcp_factory.DHCPFactory().provider"},{"line_number":101,"context_line":"        ip_addrs \u003d api.get_ip_addresses(task)"},{"line_number":102,"context_line":"    if not ip_addrs:"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f4e5783_91c83b22","line":99,"range":{"start_line":99,"start_character":11,"end_line":99,"end_character":74},"updated":"2017-10-16 10:54:04.000000000","message":"I think we need to check if the task.node.network.get_ip_addresses call returned anything valid and then fall back to the DHCP provider, because otherwise this will override any ip_addrs that out of tree network interfaces that implement get_ip_addresses return...","commit_id":"52152b96148aecde4fafe0d713bd015cb157a965"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"db4e3596790077e79e51cf7cd6f43f948cba607d","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    ip_addrs \u003d task.driver.network.get_ip_addresses(task)"},{"line_number":97,"context_line":"    # TODO(vsaienko) remove once deprecation period is passed in Rocky."},{"line_number":98,"context_line":"    if (CONF.dhcp.dhcp_provider not in [\u0027none\u0027, \u0027neutron\u0027] or"},{"line_number":99,"context_line":"            task.node.network_interface not in [\u0027noop\u0027, \u0027flat\u0027, \u0027neutron\u0027]):"},{"line_number":100,"context_line":"        api \u003d dhcp_factory.DHCPFactory().provider"},{"line_number":101,"context_line":"        ip_addrs \u003d api.get_ip_addresses(task)"},{"line_number":102,"context_line":"    if not ip_addrs:"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f4b6375_826512e4","line":99,"range":{"start_line":99,"start_character":11,"end_line":99,"end_character":74},"in_reply_to":"5f4e5783_91c83b22","updated":"2017-10-30 12:29:11.000000000","message":"++ good catch","commit_id":"52152b96148aecde4fafe0d713bd015cb157a965"}],"ironic/dhcp/base.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"785da19da35a820d3c2024643bf43010f0d21f61","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class BaseDHCP(object):"},{"line_number":27,"context_line":"    \"\"\"Base class for DHCP provider APIs.\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @abc.abstractmethod"},{"line_number":30,"context_line":"    def update_port_dhcp_opts(self, port_id, dhcp_options, token\u003dNone):"},{"line_number":31,"context_line":"        \"\"\"Update one or more DHCP options on the specified port."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7ffa3b31_ce5e7a11","side":"PARENT","line":29,"updated":"2017-04-18 13:48:40.000000000","message":"Why these methods are not abstract currently?","commit_id":"e35054cbfb0c9dc2c29a87d7491182cb1225e2a8"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"c7fade41dff9f433bee359437a8e2c029024bf44","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        global dhcp_provider_deprecation"},{"line_number":39,"context_line":"        if not dhcp_provider_deprecation:"},{"line_number":40,"context_line":"            dhcp_provider_deprecation \u003d True"},{"line_number":41,"context_line":"            msg \u003d (\u0027DHCP provider is deprecated and will be removed in Queens \u0027"},{"line_number":42,"context_line":"                   \u0027release.\u0027)"},{"line_number":43,"context_line":"            LOG.warning(msg)"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5f201791_c5e9e180","line":41,"updated":"2017-06-21 15:12:01.000000000","message":"Do we really need it here as well? It should be shown during the load of dhcp factory already.","commit_id":"47f5af3625614745528e2ff9204ba28f8ec1cb46"}],"ironic/dhcp/neutron.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7afe8a62b62233560538936af4abe4d3bbce60da","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            LOG.debug(\"Waiting %d seconds for Neutron.\", port_delay)"},{"line_number":151,"context_line":"            time.sleep(port_delay)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD"},{"line_number":154,"context_line":"    def _get_fixed_ip_address(self, port_uuid, client):"},{"line_number":155,"context_line":"        \"\"\"Get a Neutron port\u0027s fixed ip address."},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9ff52f3f_5f326ba9","line":153,"updated":"2017-04-12 21:38:39.000000000","message":"Merge conflict","commit_id":"6634c4bd3c3cdc082a8b505386356285d2bd178d"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"785da19da35a820d3c2024643bf43010f0d21f61","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        \"\"\""},{"line_number":162,"context_line":"        global get_ip_addresses_deprecation"},{"line_number":163,"context_line":"        if not get_ip_addresses_deprecation:"},{"line_number":164,"context_line":"            LOG.warning(_(\u0027update_port_address via DHCP provider is \u0027"},{"line_number":165,"context_line":"                          \u0027deprecated. The node.network_interface \u0027"},{"line_number":166,"context_line":"                          \u0027get_ip_address() should be used instead.\u0027))"},{"line_number":167,"context_line":"            get_ip_addresses_deprecation \u003d True"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ffa3b31_ceb31a4d","line":164,"range":{"start_line":164,"start_character":27,"end_line":164,"end_character":46},"updated":"2017-04-18 13:48:40.000000000","message":"This method gets ip address.","commit_id":"480f1473c4c60ba802546bf50545c9c710a75c31"}],"ironic/dhcp/none.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"785da19da35a820d3c2024643bf43010f0d21f61","unresolved":false,"context_lines":[{"line_number":19,"context_line":"class NoneDHCPApi(base.BaseDHCP):"},{"line_number":20,"context_line":"    \"\"\"No-op DHCP API.\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    # TODO(vsaienko) Remove this method when deprecation period is passed"},{"line_number":23,"context_line":"    # in Queens"},{"line_number":24,"context_line":"    def update_port_dhcp_opts(self, port_id, dhcp_options, token\u003dNone):"},{"line_number":25,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ffa3b31_6ecc06bc","line":22,"updated":"2017-04-18 13:48:40.000000000","message":"Maybe remove whole none provider?","commit_id":"480f1473c4c60ba802546bf50545c9c710a75c31"}],"ironic/drivers/base.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"785da19da35a820d3c2024643bf43010f0d21f61","unresolved":false,"context_lines":[{"line_number":1086,"context_line":"        \"\"\""},{"line_number":1087,"context_line":""},{"line_number":1088,"context_line":"    @abc.abstractmethod"},{"line_number":1089,"context_line":"    def configure_tenant_networks(self, task, dhcp_opts\u003dNone):"},{"line_number":1090,"context_line":"        \"\"\"Configure tenant networks for a node."},{"line_number":1091,"context_line":""},{"line_number":1092,"context_line":"        :param task: A TaskManager instance."}],"source_content_type":"text/x-python","patch_set":8,"id":"7ffa3b31_0e0ea231","line":1089,"updated":"2017-04-18 13:48:40.000000000","message":"This is strange for driver developers, network boot is not compatible with tenant isolations, but developer should implement this for netboot.","commit_id":"480f1473c4c60ba802546bf50545c9c710a75c31"}],"ironic/drivers/modules/agent.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"785da19da35a820d3c2024643bf43010f0d21f61","unresolved":false,"context_lines":[{"line_number":421,"context_line":"            # configured, unbind tenant ports if present"},{"line_number":422,"context_line":"            task.driver.network.unconfigure_tenant_networks(task)"},{"line_number":423,"context_line":"            dhcp_opts \u003d pxe_utils.dhcp_options_for_instance(task)"},{"line_number":424,"context_line":"            task.driver.network.add_provisioning_network(task, dhcp_opts)"},{"line_number":425,"context_line":"        if node.provision_state \u003d\u003d states.ACTIVE:"},{"line_number":426,"context_line":"            task.driver.boot.prepare_instance(task)"},{"line_number":427,"context_line":"        elif node.provision_state !\u003d states.ADOPTING:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ffa3b31_4e5dcae7","line":424,"updated":"2017-04-18 13:48:40.000000000","message":"This extra parameter can break current 3-party network drivers.","commit_id":"480f1473c4c60ba802546bf50545c9c710a75c31"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"8ef4fd6f8476d739f3cb333b445415a6981917cb","unresolved":false,"context_lines":[{"line_number":396,"context_line":"            task.driver.network.remove_provisioning_network(task)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"            boot_option \u003d deploy_utils.get_boot_option(task.node)"},{"line_number":399,"context_line":"            dhcp_opts \u003d []"},{"line_number":400,"context_line":"            if boot_option !\u003d \"local\":"},{"line_number":401,"context_line":"                dhcp_opts \u003d pxe_utils.dhcp_options_for_instance(task)"},{"line_number":402,"context_line":"            task.driver.network.configure_tenant_networks("},{"line_number":403,"context_line":"                task, dhcp_opts\u003ddhcp_opts)"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"            task.driver.boot.prepare_instance(task)"},{"line_number":406,"context_line":"            manager_utils.node_power_action(task, states.POWER_ON)"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f4e5783_71c49ff5","line":403,"range":{"start_line":399,"start_character":0,"end_line":403,"end_character":42},"updated":"2017-10-16 10:54:04.000000000","message":"I\u0027m very -1 against the deploy interface becoming boot option aware, its done this a couple of times before and just causes confusion and pain...","commit_id":"52152b96148aecde4fafe0d713bd015cb157a965"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"db4e3596790077e79e51cf7cd6f43f948cba607d","unresolved":false,"context_lines":[{"line_number":396,"context_line":"            task.driver.network.remove_provisioning_network(task)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"            boot_option \u003d deploy_utils.get_boot_option(task.node)"},{"line_number":399,"context_line":"            dhcp_opts \u003d []"},{"line_number":400,"context_line":"            if boot_option !\u003d \"local\":"},{"line_number":401,"context_line":"                dhcp_opts \u003d pxe_utils.dhcp_options_for_instance(task)"},{"line_number":402,"context_line":"            task.driver.network.configure_tenant_networks("},{"line_number":403,"context_line":"                task, dhcp_opts\u003ddhcp_opts)"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"            task.driver.boot.prepare_instance(task)"},{"line_number":406,"context_line":"            manager_utils.node_power_action(task, states.POWER_ON)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f4b6375_625336e4","line":403,"range":{"start_line":399,"start_character":0,"end_line":403,"end_character":42},"in_reply_to":"3f4b6375_62e69647","updated":"2017-10-30 12:29:11.000000000","message":"why not do this inside the configure_tenant_networks method itself? eg in the base class, this should be valid for all deploy interfaces. separate method might be ok too, but you\u0027ll need to know if you\u0027re configuring tenant/ cleaning/ provisioning ports","commit_id":"52152b96148aecde4fafe0d713bd015cb157a965"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2981359859809a9442aad23843d077697598c4dd","unresolved":false,"context_lines":[{"line_number":396,"context_line":"            task.driver.network.remove_provisioning_network(task)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"            boot_option \u003d deploy_utils.get_boot_option(task.node)"},{"line_number":399,"context_line":"            dhcp_opts \u003d []"},{"line_number":400,"context_line":"            if boot_option !\u003d \"local\":"},{"line_number":401,"context_line":"                dhcp_opts \u003d pxe_utils.dhcp_options_for_instance(task)"},{"line_number":402,"context_line":"            task.driver.network.configure_tenant_networks("},{"line_number":403,"context_line":"                task, dhcp_opts\u003ddhcp_opts)"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"            task.driver.boot.prepare_instance(task)"},{"line_number":406,"context_line":"            manager_utils.node_power_action(task, states.POWER_ON)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f4b6375_62e69647","line":403,"range":{"start_line":399,"start_character":0,"end_line":403,"end_character":42},"in_reply_to":"5f4e5783_71c49ff5","updated":"2017-10-19 10:34:11.000000000","message":"I thought about introducing new method in network interfaces `get_dhcp_options` or something like that that will return a list of dhcp options and call it from configure_tenant_networks/configure_provisioning_networks.\nWhat do you think?","commit_id":"52152b96148aecde4fafe0d713bd015cb157a965"}],"ironic/drivers/modules/agent_base_vendor.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"c7fade41dff9f433bee359437a8e2c029024bf44","unresolved":false,"context_lines":[{"line_number":586,"context_line":""},{"line_number":587,"context_line":"            task.driver.network.remove_provisioning_network(task)"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"            boot_option \u003d deploy_utils.get_boot_option(node)"},{"line_number":590,"context_line":"            dhcp_opts \u003d []"},{"line_number":591,"context_line":"            if boot_option !\u003d \"local\":"},{"line_number":592,"context_line":"                dhcp_opts \u003d pxe_utils.dhcp_options_for_instance(task)"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"            task.driver.network.configure_tenant_networks("},{"line_number":595,"context_line":"                task, dhcp_opts\u003ddhcp_opts)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f201791_b834cc4b","line":592,"range":{"start_line":589,"start_character":12,"end_line":592,"end_character":69},"updated":"2017-06-21 15:12:01.000000000","message":"Hrm, not sure I get this addition. Previously, where did this logic reside?","commit_id":"47f5af3625614745528e2ff9204ba28f8ec1cb46"}],"ironic/drivers/modules/deploy_utils.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"785da19da35a820d3c2024643bf43010f0d21f61","unresolved":false,"context_lines":[{"line_number":995,"context_line":"    :raises: InvalidParameterValue if cleaning network UUID config option has"},{"line_number":996,"context_line":"        an invalid value."},{"line_number":997,"context_line":"    \"\"\""},{"line_number":998,"context_line":"    task.driver.network.add_cleaning_network(task, dhcp_opts\u003ddhcp_opts)"},{"line_number":999,"context_line":""},{"line_number":1000,"context_line":"    # Append required config parameters to node\u0027s driver_internal_info"},{"line_number":1001,"context_line":"    # to pass to IPA."}],"source_content_type":"text/x-python","patch_set":8,"id":"7ffa3b31_ce68ba88","line":998,"updated":"2017-04-18 13:48:40.000000000","message":"This extra parameter can break current 3-party drivers.","commit_id":"480f1473c4c60ba802546bf50545c9c710a75c31"}],"ironic/drivers/modules/network/common.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"c7fade41dff9f433bee359437a8e2c029024bf44","unresolved":false,"context_lines":[{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def _update_port_dhcp_opts(self, task, vif, client_id_opt):"},{"line_number":225,"context_line":"        # TODO(vsaienko) remove once deprecation period is passed."},{"line_number":226,"context_line":"        api \u003d dhcp_factory.DHCPFactory()"},{"line_number":227,"context_line":"        if (task.node.network_interface not in [\u0027noop\u0027, \u0027flat\u0027, \u0027neutron\u0027] or"},{"line_number":228,"context_line":"            CONF.dhcp.dhcp_provider not in [\u0027none\u0027, \u0027neutron\u0027] or"},{"line_number":229,"context_line":"                task.driver.deploy.supported is False):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f201791_58f5b8ca","line":226,"range":{"start_line":226,"start_character":8,"end_line":226,"end_character":40},"updated":"2017-06-21 15:12:01.000000000","message":"should we do this inside the first if?","commit_id":"47f5af3625614745528e2ff9204ba28f8ec1cb46"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"c7fade41dff9f433bee359437a8e2c029024bf44","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        api \u003d dhcp_factory.DHCPFactory()"},{"line_number":227,"context_line":"        if (task.node.network_interface not in [\u0027noop\u0027, \u0027flat\u0027, \u0027neutron\u0027] or"},{"line_number":228,"context_line":"            CONF.dhcp.dhcp_provider not in [\u0027none\u0027, \u0027neutron\u0027] or"},{"line_number":229,"context_line":"                task.driver.deploy.supported is False):"},{"line_number":230,"context_line":"            api.provider.update_port_dhcp_opts(vif, [client_id_opt])"},{"line_number":231,"context_line":"        else:"},{"line_number":232,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f201791_381b1c1c","line":229,"range":{"start_line":229,"start_character":16,"end_line":229,"end_character":53},"updated":"2017-06-21 15:12:01.000000000","message":"is it needed everywhere or just here?","commit_id":"47f5af3625614745528e2ff9204ba28f8ec1cb46"}],"ironic/drivers/modules/pxe.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"785da19da35a820d3c2024643bf43010f0d21f61","unresolved":false,"context_lines":[{"line_number":406,"context_line":"        # TODO(vsaienko): remove once deprecation is passed in Queens"},{"line_number":407,"context_line":"        # NOTE(vsaienko): Do update_dhcp() only for out of tree dhcp"},{"line_number":408,"context_line":"        # providers or out of tree network interfaces"},{"line_number":409,"context_line":"        if (task.node.network_interface not in [\u0027noop\u0027, \u0027flat\u0027, \u0027neutron\u0027] or"},{"line_number":410,"context_line":"            CONF.dhcp.dhcp_provider not in [\u0027none\u0027, \u0027neutron\u0027]):"},{"line_number":411,"context_line":"            dhcp_opts \u003d pxe_utils.dhcp_options_for_instance(task)"},{"line_number":412,"context_line":"            provider \u003d dhcp_factory.DHCPFactory()"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ffa3b31_0ef462ce","line":409,"updated":"2017-04-18 13:48:40.000000000","message":"nit: this two lines can be refactored to one function","commit_id":"480f1473c4c60ba802546bf50545c9c710a75c31"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"8ef4fd6f8476d739f3cb333b445415a6981917cb","unresolved":false,"context_lines":[{"line_number":481,"context_line":"            CONF.dhcp.dhcp_provider not in [\u0027none\u0027, \u0027neutron\u0027]):"},{"line_number":482,"context_line":"            dhcp_opts \u003d pxe_utils.dhcp_options_for_instance(task)"},{"line_number":483,"context_line":"            provider \u003d dhcp_factory.DHCPFactory()"},{"line_number":484,"context_line":"            provider.update_dhcp(task, dhcp_opts)"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"        pxe_info \u003d _get_deploy_image_info(node)"},{"line_number":487,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5f4e5783_cc8e1678","line":484,"updated":"2017-10-16 10:54:04.000000000","message":"I still think the boot interface is the right place to make this call. pxe should care about pxe and the config required for pxe, the deploy interface shouldn\u0027t know if it pxe or vmedia, or a person with a USB stick booting the ramdisk","commit_id":"52152b96148aecde4fafe0d713bd015cb157a965"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"db4e3596790077e79e51cf7cd6f43f948cba607d","unresolved":false,"context_lines":[{"line_number":481,"context_line":"            CONF.dhcp.dhcp_provider not in [\u0027none\u0027, \u0027neutron\u0027]):"},{"line_number":482,"context_line":"            dhcp_opts \u003d pxe_utils.dhcp_options_for_instance(task)"},{"line_number":483,"context_line":"            provider \u003d dhcp_factory.DHCPFactory()"},{"line_number":484,"context_line":"            provider.update_dhcp(task, dhcp_opts)"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"        pxe_info \u003d _get_deploy_image_info(node)"},{"line_number":487,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3f4b6375_829e3252","line":484,"in_reply_to":"5f4e5783_cc8e1678","updated":"2017-10-30 12:29:11.000000000","message":"then we may want to provide an ability for boot interface to tell which dhcp options to add to the default list","commit_id":"52152b96148aecde4fafe0d713bd015cb157a965"}],"releasenotes/notes/deprecate-dhcp-provider-e56eaf738989366e.yaml":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"cb3c75ff977dac56a22d82d901c89540e637249f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds implementation of `clean_dhcp` and `get_ip_addresses` to"},{"line_number":5,"context_line":"    `flat` and `neutron` network_interfaces."},{"line_number":6,"context_line":"    The following network_interface methods now accept optional"},{"line_number":7,"context_line":"    parameter `dhcp_opts` that specifies a list of DHCP options:"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"5ff73747_96d9de84","line":4,"range":{"start_line":4,"start_character":27,"end_line":4,"end_character":28},"updated":"2017-04-24 17:33:22.000000000","message":"I think here and on the rest of these that a triple back-quote would be better.  Single back-quote makes it italic, which doesn\u0027t look like how we usually do it.\n\n ```clean_dhcp```","commit_id":"480f1473c4c60ba802546bf50545c9c710a75c31"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"85256375a002d235e08bd9fa063b5a0f13111019","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds implementation of `clean_dhcp` and `get_ip_addresses` to"},{"line_number":5,"context_line":"    `flat` and `neutron` network_interfaces."},{"line_number":6,"context_line":"    The following network_interface methods now accept optional"},{"line_number":7,"context_line":"    parameter `dhcp_opts` that specifies a list of DHCP options:"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"1f013ff3_95b64ffa","line":4,"range":{"start_line":4,"start_character":27,"end_line":4,"end_character":28},"in_reply_to":"5ff73747_96d9de84","updated":"2017-05-16 17:59:53.000000000","message":"Done","commit_id":"480f1473c4c60ba802546bf50545c9c710a75c31"}]}
