)]}'
{"ironic/common/pxe_utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"46fc26f10cba9fc502bd7c5c9c46131e07650dbc","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    api \u003d dhcp_factory.DHCPFactory().provider"},{"line_number":138,"context_line":"    ip_addrs \u003d api.get_ip_addresses(task)"},{"line_number":139,"context_line":"    if not ip_addrs:"},{"line_number":140,"context_line":"        raise exception.FailedToGetIPAddressOnPort(_("},{"line_number":141,"context_line":"            \"Failed to get IP address for any port on node %s.\") %"},{"line_number":142,"context_line":"            task.node.uuid)"},{"line_number":143,"context_line":"    for port_ip_address in ip_addrs:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_21822202","side":"PARENT","line":140,"updated":"2019-06-17 09:12:53.000000000","message":"What if we move this exception to our neutron implementations?","commit_id":"0f6639d4eba9a3611bba6e7059dd7cdc44edb2a6"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0fd1453d8fa643f81472cce3272bfe1cfe90dc0e","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    api \u003d dhcp_factory.DHCPFactory().provider"},{"line_number":138,"context_line":"    ip_addrs \u003d api.get_ip_addresses(task)"},{"line_number":139,"context_line":"    if not ip_addrs:"},{"line_number":140,"context_line":"        raise exception.FailedToGetIPAddressOnPort(_("},{"line_number":141,"context_line":"            \"Failed to get IP address for any port on node %s.\") %"},{"line_number":142,"context_line":"            task.node.uuid)"},{"line_number":143,"context_line":"    for port_ip_address in ip_addrs:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_944f3369","side":"PARENT","line":140,"in_reply_to":"9fb8cfa7_21822202","updated":"2019-06-21 06:17:12.000000000","message":"So it turns out no IP address on port is valid, just not for PXE unless there is a portgroup in the mix...\n\nThis was all elilo/grub ip address lookup code so I think it can just die.","commit_id":"0f6639d4eba9a3611bba6e7059dd7cdc44edb2a6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5cd9ea395b7ebe244700ef6cce4ff5883fbf2be4","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    api \u003d dhcp_factory.DHCPFactory().provider"},{"line_number":138,"context_line":"    ip_addrs \u003d api.get_ip_addresses(task)"},{"line_number":139,"context_line":"    if not ip_addrs:"},{"line_number":140,"context_line":"        LOG.warning("},{"line_number":141,"context_line":"            \"Failed to get IP address for any port on node %(node)s. \""},{"line_number":142,"context_line":"            \"Operators without Neutron can ignore this warning.\","}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_436fdc91","line":139,"updated":"2019-07-09 08:11:04.000000000","message":"a thought: distinguish cases of None (not supported) and [] (not found)?","commit_id":"cb577620da36ab9bec09df988bd96f40bf9eb1fa"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5cd9ea395b7ebe244700ef6cce4ff5883fbf2be4","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    if not ip_addrs:"},{"line_number":140,"context_line":"        LOG.warning("},{"line_number":141,"context_line":"            \"Failed to get IP address for any port on node %(node)s. \""},{"line_number":142,"context_line":"            \"Operators without Neutron can ignore this warning.\","},{"line_number":143,"context_line":"            {\u0027node\u0027: task.node.uuid})"},{"line_number":144,"context_line":"        # Just in case, reset to empty list if we got nothing."},{"line_number":145,"context_line":"        ip_addrs \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_e36da898","line":142,"updated":"2019-07-09 08:11:04.000000000","message":"nit: s/without Neutron/with noop DHCP implementation/ (there can be downstream network interfaces)","commit_id":"cb577620da36ab9bec09df988bd96f40bf9eb1fa"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"fe901ebcf2b73ae1e8b330e9be53ae647f99fa69","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    if not ip_addrs:"},{"line_number":140,"context_line":"        LOG.warning("},{"line_number":141,"context_line":"            \"Failed to get IP address for any port on node %(node)s. \""},{"line_number":142,"context_line":"            \"Operators without Neutron can ignore this warning.\","},{"line_number":143,"context_line":"            {\u0027node\u0027: task.node.uuid})"},{"line_number":144,"context_line":"        # Just in case, reset to empty list if we got nothing."},{"line_number":145,"context_line":"        ip_addrs \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_a0645ce6","line":142,"in_reply_to":"7faddb67_e36da898","updated":"2019-07-29 12:15:34.000000000","message":"Yeah, with code to handle things differently, makes sense to delineate.","commit_id":"cb577620da36ab9bec09df988bd96f40bf9eb1fa"}],"ironic/dhcp/base.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"46fc26f10cba9fc502bd7c5c9c46131e07650dbc","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        :returns: List of IP addresses associated with"},{"line_number":92,"context_line":"            task\u0027s ports and portgroups."},{"line_number":93,"context_line":"        \"\"\""},{"line_number":94,"context_line":"        return []"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def clean_dhcp_opts(self, task):"},{"line_number":97,"context_line":"        \"\"\"Clean up the DHCP BOOT options for all ports in `task`."}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_818d0e33","line":94,"updated":"2019-06-17 09:12:53.000000000","message":"This seems pointless. Maybe you meant to remove abstractmethod?","commit_id":"4ce8fbd43170406aaf8bd3bebf8cc5949f2f0188"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0fd1453d8fa643f81472cce3272bfe1cfe90dc0e","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        :returns: List of IP addresses associated with"},{"line_number":92,"context_line":"            task\u0027s ports and portgroups."},{"line_number":93,"context_line":"        \"\"\""},{"line_number":94,"context_line":"        return []"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def clean_dhcp_opts(self, task):"},{"line_number":97,"context_line":"        \"\"\"Clean up the DHCP BOOT options for all ports in `task`."}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_5459bb32","line":94,"in_reply_to":"9fb8cfa7_818d0e33","updated":"2019-06-21 06:17:12.000000000","message":"Yeah, should have. Next rev.","commit_id":"4ce8fbd43170406aaf8bd3bebf8cc5949f2f0188"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"d778f47b94e20100a747168bfc0e623d9b5c89cb","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        :returns: List of IP addresses associated with"},{"line_number":91,"context_line":"            task\u0027s ports and portgroups."},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":"        return []"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def clean_dhcp_opts(self, task):"},{"line_number":96,"context_line":"        \"\"\"Clean up the DHCP BOOT options for all ports in `task`."}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_e1288be2","line":93,"updated":"2019-08-07 02:08:54.000000000","message":"we could leave base class untouched, as the NoneDHCPApi overrides this method and returns an empty list.","commit_id":"ac8b2d01b056997955a2ca071ac3da6525354fca"}],"ironic/dhcp/neutron.py":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"5d1bcea556b1d9197c6eb0e4ad5a736d181a7f9c","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        # and removed, we need to bypass if a node calls with the ``noop``"},{"line_number":96,"context_line":"        # network_interface."},{"line_number":97,"context_line":"        if task.node.network_interface \u003d\u003d \u0027noop\u0027:"},{"line_number":98,"context_line":"            return"},{"line_number":99,"context_line":"        if vifs is None:"},{"line_number":100,"context_line":"            vifs \u003d network.get_node_vif_ids(task)"},{"line_number":101,"context_line":"        if not (vifs[\u0027ports\u0027] or vifs[\u0027portgroups\u0027]):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_0171f10c","line":98,"range":{"start_line":98,"start_character":14,"end_line":98,"end_character":15},"updated":"2017-09-05 05:26:45.000000000","message":"we have \u0027none\u0027 dhcp provider for this.","commit_id":"d511be7109577b465471326d89cb03dd03d62290"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c7dbdc932fde8641aa61ca9634252dcc6ebde0e2","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        # and removed, we need to bypass if a node calls with the ``noop``"},{"line_number":96,"context_line":"        # network_interface."},{"line_number":97,"context_line":"        if task.node.network_interface \u003d\u003d \u0027noop\u0027:"},{"line_number":98,"context_line":"            return"},{"line_number":99,"context_line":"        if vifs is None:"},{"line_number":100,"context_line":"            vifs \u003d network.get_node_vif_ids(task)"},{"line_number":101,"context_line":"        if not (vifs[\u0027ports\u0027] or vifs[\u0027portgroups\u0027]):"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_daa3e04e","line":98,"range":{"start_line":98,"start_character":14,"end_line":98,"end_character":15},"in_reply_to":"7f287b81_0171f10c","updated":"2017-12-04 12:38:52.000000000","message":"The stated intent for some time has been to deprecate out the dhcp provider. Expecting both being set during the transition period is somewhat unreasonable and the overriding influence should be network_interface since that is the direction we are going.","commit_id":"d511be7109577b465471326d89cb03dd03d62290"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"b44342c47f107706c85ab2670b9406bad98972e3","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        # NOTE(TheJulia): Until the dhcp interface is fully deprecated"},{"line_number":185,"context_line":"        # and removed, we need to bypass if a node calls with the ``noop``"},{"line_number":186,"context_line":"        # network_interface."},{"line_number":187,"context_line":"        if task.node.network_interface \u003d\u003d \u0027noop\u0027:"},{"line_number":188,"context_line":"            return"},{"line_number":189,"context_line":"        vif \u003d task.driver.network.get_current_vif(task, p_obj)"},{"line_number":190,"context_line":"        if not vif:"},{"line_number":191,"context_line":"            obj_name \u003d \u0027portgroup\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_1f72ac7d","line":188,"range":{"start_line":187,"start_character":8,"end_line":188,"end_character":18},"updated":"2017-09-01 05:00:48.000000000","message":"I think we should move this check to get_ip_addresses() @ L244 before making call to create a neutron client. Creation of neutron client may fail if configurations are not appropriate.","commit_id":"d511be7109577b465471326d89cb03dd03d62290"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"ae07f38f93acc1b1b2a195f686e4acd1f7478fe3","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        # and removed, we need to bypass if a node calls with the ``noop``"},{"line_number":186,"context_line":"        # network_interface."},{"line_number":187,"context_line":"        if task.node.network_interface \u003d\u003d \u0027noop\u0027:"},{"line_number":188,"context_line":"            return"},{"line_number":189,"context_line":"        vif \u003d task.driver.network.get_current_vif(task, p_obj)"},{"line_number":190,"context_line":"        if not vif:"},{"line_number":191,"context_line":"            obj_name \u003d \u0027portgroup\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_263e9fb7","line":188,"updated":"2017-08-31 02:31:03.000000000","message":"return this will cause None returned, get_ip_address will return a list of None objects.\ni think the more suitable place is get_ip_addresses, return an empty list to keep same behavior to NoneDHCPApi.get_ip_addresses","commit_id":"d511be7109577b465471326d89cb03dd03d62290"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"d7f79c0bd16897b7a9a82aa01f5c96db48227315","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        # and removed, we need to bypass if a node calls with the ``noop``"},{"line_number":186,"context_line":"        # network_interface."},{"line_number":187,"context_line":"        if task.node.network_interface \u003d\u003d \u0027noop\u0027:"},{"line_number":188,"context_line":"            return"},{"line_number":189,"context_line":"        vif \u003d task.driver.network.get_current_vif(task, p_obj)"},{"line_number":190,"context_line":"        if not vif:"},{"line_number":191,"context_line":"            obj_name \u003d \u0027portgroup\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_a9fda609","line":188,"in_reply_to":"7f287b81_032a67d9","updated":"2017-09-01 01:21:18.000000000","message":"Hmm, it\u0027s true we can\u0027t return empty list here for exception will be raised.\nthe set of methods are used to generate ip-mac pair as pxe config file, in case of uefi, but only get_ip_addresses is called from the outside, so possibly the suitable place for bypassing logic is there, i don\u0027t insist.","commit_id":"d511be7109577b465471326d89cb03dd03d62290"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c7dbdc932fde8641aa61ca9634252dcc6ebde0e2","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        # NOTE(TheJulia): Until the dhcp interface is fully deprecated"},{"line_number":185,"context_line":"        # and removed, we need to bypass if a node calls with the ``noop``"},{"line_number":186,"context_line":"        # network_interface."},{"line_number":187,"context_line":"        if task.node.network_interface \u003d\u003d \u0027noop\u0027:"},{"line_number":188,"context_line":"            return"},{"line_number":189,"context_line":"        vif \u003d task.driver.network.get_current_vif(task, p_obj)"},{"line_number":190,"context_line":"        if not vif:"},{"line_number":191,"context_line":"            obj_name \u003d \u0027portgroup\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_ba6cdc08","line":188,"range":{"start_line":187,"start_character":8,"end_line":188,"end_character":18},"in_reply_to":"7f287b81_1f72ac7d","updated":"2017-12-04 12:38:52.000000000","message":"I disagree, because we may not have a vif, and in noop mode a vif is not required, since a vif is purely a neutron port attachment concept for us.  If I remember correctly, the vif lookup fails, not the attempt to get the ip address.","commit_id":"d511be7109577b465471326d89cb03dd03d62290"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"cdbe00a391f1de14d2218bf2340a42897e117adc","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        # and removed, we need to bypass if a node calls with the ``noop``"},{"line_number":186,"context_line":"        # network_interface."},{"line_number":187,"context_line":"        if task.node.network_interface \u003d\u003d \u0027noop\u0027:"},{"line_number":188,"context_line":"            return"},{"line_number":189,"context_line":"        vif \u003d task.driver.network.get_current_vif(task, p_obj)"},{"line_number":190,"context_line":"        if not vif:"},{"line_number":191,"context_line":"            obj_name \u003d \u0027portgroup\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_032a67d9","line":188,"in_reply_to":"7f287b81_263e9fb7","updated":"2017-08-31 14:16:21.000000000","message":"So, there is no behavior contract for a noop node aside take no action. The only reason for this is bypass code we\u0027ve deprecated but still call for some unknown reason.  I think the true thing is to fix the initial caller that invokes dhcp actions when the noop interface is used.","commit_id":"d511be7109577b465471326d89cb03dd03d62290"}],"releasenotes/notes/fixes-noop-network-with-grub-8fd99a73b593ddba.yaml":[{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"8e22fe4055d364da6538486ca5678ebc2355fde9","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes an issue where users attempting to leverage non-iPXE UEFI booting"},{"line_number":5,"context_line":"    would experience failures when their ``dhcp_provider`` was set to"},{"line_number":6,"context_line":"    ``none``."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"7faddb67_96dc4d47","line":6,"range":{"start_line":6,"start_character":6,"end_line":6,"end_character":10},"updated":"2019-07-08 01:13:10.000000000","message":"/me is confused, neutron?","commit_id":"cb577620da36ab9bec09df988bd96f40bf9eb1fa"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5cd9ea395b7ebe244700ef6cce4ff5883fbf2be4","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes an issue where users attempting to leverage non-iPXE UEFI booting"},{"line_number":5,"context_line":"    would experience failures when their ``dhcp_provider`` was set to"},{"line_number":6,"context_line":"    ``none``."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"7faddb67_23742068","line":6,"updated":"2019-07-09 08:11:04.000000000","message":"No, I think \"none\" is correct, with Neutron the IP addresses are required.","commit_id":"cb577620da36ab9bec09df988bd96f40bf9eb1fa"}]}
