)]}'
{"ironic/common/pxe_utils.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":"94c2aea7c549a0b8485b0603d89b71ad2565ae1d","unresolved":false,"context_lines":[{"line_number":915,"context_line":"    \"\"\""},{"line_number":916,"context_line":""},{"line_number":917,"context_line":"    node \u003d task.node"},{"line_number":918,"context_line":"    dhcp_opts \u003d []"},{"line_number":919,"context_line":"    # Generate options for both IPv4 and IPv6, and they can be"},{"line_number":920,"context_line":"    # filtered down later based upon the port options."},{"line_number":921,"context_line":"    dhcp_opts \u003d dhcp_options_for_instance(task, ipxe_enabled,"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_0b5af8f1","line":918,"range":{"start_line":918,"start_character":0,"end_line":918,"end_character":18},"updated":"2020-03-24 16:11:45.000000000","message":"not needed","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"82bc6991bce9ef1698e8f5c4f2e897caf7e699f5","unresolved":false,"context_lines":[{"line_number":916,"context_line":""},{"line_number":917,"context_line":"    node \u003d task.node"},{"line_number":918,"context_line":"    dhcp_opts \u003d []"},{"line_number":919,"context_line":"    # Generate options for both IPv4 and IPv6, and they can be"},{"line_number":920,"context_line":"    # filtered down later based upon the port options."},{"line_number":921,"context_line":"    dhcp_opts \u003d dhcp_options_for_instance(task, ipxe_enabled,"},{"line_number":922,"context_line":"                                          ip_version\u003d4)"},{"line_number":923,"context_line":"    dhcp_opts +\u003d dhcp_options_for_instance(task, ipxe_enabled,"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_c6c2d4e9","line":920,"range":{"start_line":919,"start_character":4,"end_line":920,"end_character":54},"updated":"2020-03-24 00:51:34.000000000","message":"Could we not instead do a massive simplification of \u0027dhcp_options_for_instance\u0027 instead. We basically want it to return both ipv4 and ipv6 options?","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"94c2aea7c549a0b8485b0603d89b71ad2565ae1d","unresolved":false,"context_lines":[{"line_number":916,"context_line":""},{"line_number":917,"context_line":"    node \u003d task.node"},{"line_number":918,"context_line":"    dhcp_opts \u003d []"},{"line_number":919,"context_line":"    # Generate options for both IPv4 and IPv6, and they can be"},{"line_number":920,"context_line":"    # filtered down later based upon the port options."},{"line_number":921,"context_line":"    dhcp_opts \u003d dhcp_options_for_instance(task, ipxe_enabled,"},{"line_number":922,"context_line":"                                          ip_version\u003d4)"},{"line_number":923,"context_line":"    dhcp_opts +\u003d dhcp_options_for_instance(task, ipxe_enabled,"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_cb5f70e3","line":920,"range":{"start_line":919,"start_character":4,"end_line":920,"end_character":54},"in_reply_to":"df33271e_c6c2d4e9","updated":"2020-03-24 16:11:45.000000000","message":"we absolutely could! However I tried that path and it led to maddnes.. and also my concern would be anyone else using it in any other drivers out of tree, so this pattern shouldn\u0027t break although we did... for a little while return both. Mixing ip_version fields in drivers ends up breaking neutron processing. :(","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"e4402ca89e2936ce9b47cb3b0c6cb128cf4de097","unresolved":false,"context_lines":[{"line_number":916,"context_line":""},{"line_number":917,"context_line":"    node \u003d task.node"},{"line_number":918,"context_line":"    dhcp_opts \u003d []"},{"line_number":919,"context_line":"    # Generate options for both IPv4 and IPv6, and they can be"},{"line_number":920,"context_line":"    # filtered down later based upon the port options."},{"line_number":921,"context_line":"    dhcp_opts \u003d dhcp_options_for_instance(task, ipxe_enabled,"},{"line_number":922,"context_line":"                                          ip_version\u003d4)"},{"line_number":923,"context_line":"    dhcp_opts +\u003d dhcp_options_for_instance(task, ipxe_enabled,"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_1a319f0c","line":920,"range":{"start_line":919,"start_character":4,"end_line":920,"end_character":54},"in_reply_to":"df33271e_cb5f70e3","updated":"2020-03-24 20:38:12.000000000","message":"ok, I see x/cisco-ironic-contrib and x/bareon is using the  \u0027dhcp_options_for_instance\u0027 method, passing only \u0027task\u0027.\n\nLet\u0027s leave it as is for now, but maybe revisit later with a new method and deprecate the current \u0027dhcp_options_for_instance\u0027 before removing it in a couple of cycles.","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e2d3de936b98af2e2c56400e89f664a0da8406e8","unresolved":false,"context_lines":[{"line_number":920,"context_line":"    # TODO(TheJulia): This should be re-tooled during the Victoria"},{"line_number":921,"context_line":"    # development cycle so that we call a single method and return"},{"line_number":922,"context_line":"    # combined options. The method we currently call is relied upon"},{"line_number":923,"context_line":"    # by two eternal projects, to changing the behavior is not ideal."},{"line_number":924,"context_line":"    dhcp_opts \u003d dhcp_options_for_instance(task, ipxe_enabled,"},{"line_number":925,"context_line":"                                          ip_version\u003d4)"},{"line_number":926,"context_line":"    dhcp_opts +\u003d dhcp_options_for_instance(task, ipxe_enabled,"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_65f50257","line":923,"updated":"2020-04-02 08:56:13.000000000","message":"You can start accepting dual_stack\u003dTrue (with False being the default).","commit_id":"e0e51ca4d5016e45fa35cb8b243c5cadc78ba980"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"96ab9fa5a9f764d776acf16a3157a9675a3a1eb9","unresolved":false,"context_lines":[{"line_number":921,"context_line":"    # development cycle so that we call a single method and return"},{"line_number":922,"context_line":"    # combined options. The method we currently call is relied upon"},{"line_number":923,"context_line":"    # by two eternal projects, to changing the behavior is not ideal."},{"line_number":924,"context_line":"    dhcp_opts \u003d dhcp_options_for_instance(task, ipxe_enabled,"},{"line_number":925,"context_line":"                                          ip_version\u003d4)"},{"line_number":926,"context_line":"    dhcp_opts +\u003d dhcp_options_for_instance(task, ipxe_enabled,"},{"line_number":927,"context_line":"                                           ip_version\u003d6)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f4c43b2_fe83f6a7","line":924,"range":{"start_line":924,"start_character":16,"end_line":924,"end_character":41},"updated":"2020-04-15 20:14:42.000000000","message":"We could replace this method with a new simpler method that gets the combined options? Then add a LOG.warning with deprecated in this method?","commit_id":"e0e51ca4d5016e45fa35cb8b243c5cadc78ba980"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"e788c9d371dc3096ccdf5f98c65c62bc690a0cf3","unresolved":false,"context_lines":[{"line_number":379,"context_line":"    :param task: A TaskManager object."},{"line_number":380,"context_line":"    :param url_boot: Boolean value default False to indicate if a"},{"line_number":381,"context_line":"                     URL should be returned to the file as opposed"},{"line_number":382,"context_line":"                     to a file."},{"line_number":383,"context_line":"    \"\"\""},{"line_number":384,"context_line":"    boot_file \u003d deploy_utils.get_pxe_boot_file(task.node)"},{"line_number":385,"context_line":"    # NOTE(TheJulia): There are additional cases as we add new"}],"source_content_type":"text/x-python","patch_set":10,"id":"df33271e_562b96e9","line":382,"updated":"2020-04-10 08:26:56.000000000","message":"missing param ip_version","commit_id":"ec3c9e2035c737e38d11dec5cb9dea14acfc0ee4"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ebe772bb9dd8ceca74f657e8f7b57106128c1afb","unresolved":false,"context_lines":[{"line_number":420,"context_line":"    if ip_version:"},{"line_number":421,"context_line":"        use_ip_version \u003d ip_version"},{"line_number":422,"context_line":"    else:"},{"line_number":423,"context_line":"        use_ip_version \u003d int(CONF.pxe.ip_version)"},{"line_number":424,"context_line":"    dhcp_opts \u003d []"},{"line_number":425,"context_line":"    dhcp_provider_name \u003d CONF.dhcp.dhcp_provider"},{"line_number":426,"context_line":"    if use_ip_version \u003d\u003d 4:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f493fa4_5080508c","line":423,"updated":"2020-04-21 11:32:52.000000000","message":"nit:\n\n ip_version \u003d ip_version or int(CONF.pxe_ip_version)","commit_id":"cf412bc81e4182a7c332545cfeb6e154015e3dc3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ebe772bb9dd8ceca74f657e8f7b57106128c1afb","unresolved":false,"context_lines":[{"line_number":924,"context_line":"    # TODO(TheJulia): This should be re-tooled during the Victoria"},{"line_number":925,"context_line":"    # development cycle so that we call a single method and return"},{"line_number":926,"context_line":"    # combined options. The method we currently call is relied upon"},{"line_number":927,"context_line":"    # by two eternal projects, to changing the behavior is not ideal."},{"line_number":928,"context_line":"    dhcp_opts \u003d dhcp_options_for_instance(task, ipxe_enabled,"},{"line_number":929,"context_line":"                                          ip_version\u003d4)"},{"line_number":930,"context_line":"    dhcp_opts +\u003d dhcp_options_for_instance(task, ipxe_enabled,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f493fa4_307dc4b1","line":927,"updated":"2020-04-21 11:32:52.000000000","message":"\"external\" (although \"eternal projects\" does have a certain ring to it)","commit_id":"cf412bc81e4182a7c332545cfeb6e154015e3dc3"}],"ironic/conf/default.py":[{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"82bc6991bce9ef1698e8f5c4f2e897caf7e699f5","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    cfg.StrOpt(\u0027my_ipv6\u0027,"},{"line_number":250,"context_line":"               default\u003dNone,"},{"line_number":251,"context_line":"               sample_default\u003d\u00272001:db8::1\u0027,"},{"line_number":252,"context_line":"               help\u003d_(\u0027IP address of this host using IPv6. This value must \u0027"},{"line_number":253,"context_line":"                      \u0027be supplied via the configuration and cannot be \u0027"},{"line_number":254,"context_line":"                      \u0027adiquately programatically determined like the \u0027"},{"line_number":255,"context_line":"                      \u0027[DEFAULT]my_ip parameter for IPv4.\u0027)),"},{"line_number":256,"context_line":"]"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"notification_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_6624a8c7","line":255,"range":{"start_line":252,"start_character":23,"end_line":255,"end_character":57},"updated":"2020-03-24 00:51:34.000000000","message":"Should we add a get_my_ipv6 function to netutils?","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"94c2aea7c549a0b8485b0603d89b71ad2565ae1d","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    cfg.StrOpt(\u0027my_ipv6\u0027,"},{"line_number":250,"context_line":"               default\u003dNone,"},{"line_number":251,"context_line":"               sample_default\u003d\u00272001:db8::1\u0027,"},{"line_number":252,"context_line":"               help\u003d_(\u0027IP address of this host using IPv6. This value must \u0027"},{"line_number":253,"context_line":"                      \u0027be supplied via the configuration and cannot be \u0027"},{"line_number":254,"context_line":"                      \u0027adiquately programatically determined like the \u0027"},{"line_number":255,"context_line":"                      \u0027[DEFAULT]my_ip parameter for IPv4.\u0027)),"},{"line_number":256,"context_line":"]"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"notification_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_ab094cde","line":255,"range":{"start_line":252,"start_character":23,"end_line":255,"end_character":57},"in_reply_to":"df33271e_6624a8c7","updated":"2020-03-24 16:11:45.000000000","message":"_maybe_ although every interface may have multiple and I think likely the best path is to allow operators to set explicit addresses which seems to be the preferred way forward, at least to me. Thoughts?","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"e4402ca89e2936ce9b47cb3b0c6cb128cf4de097","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    cfg.StrOpt(\u0027my_ipv6\u0027,"},{"line_number":250,"context_line":"               default\u003dNone,"},{"line_number":251,"context_line":"               sample_default\u003d\u00272001:db8::1\u0027,"},{"line_number":252,"context_line":"               help\u003d_(\u0027IP address of this host using IPv6. This value must \u0027"},{"line_number":253,"context_line":"                      \u0027be supplied via the configuration and cannot be \u0027"},{"line_number":254,"context_line":"                      \u0027adiquately programatically determined like the \u0027"},{"line_number":255,"context_line":"                      \u0027[DEFAULT]my_ip parameter for IPv4.\u0027)),"},{"line_number":256,"context_line":"]"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"notification_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_baed13f1","line":255,"range":{"start_line":252,"start_character":23,"end_line":255,"end_character":57},"in_reply_to":"df33271e_ab094cde","updated":"2020-03-24 20:38:12.000000000","message":"get_my_ipv4 choose the address based on the src address that would be used if connecting to something beyond the default route. something similar could be done with ipv6. But, it\u0027s not a big deal. I agree that most operators would set and explicit address here anyway.","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"2f6b68d8260116ef8c5027ff135c9c453a5d1c00","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    cfg.StrOpt(\u0027my_ipv6\u0027,"},{"line_number":250,"context_line":"               default\u003dNone,"},{"line_number":251,"context_line":"               sample_default\u003d\u00272001:db8::1\u0027,"},{"line_number":252,"context_line":"               help\u003d_(\u0027IP address of this host using IPv6. This value must \u0027"},{"line_number":253,"context_line":"                      \u0027be supplied via the configuration and cannot be \u0027"},{"line_number":254,"context_line":"                      \u0027adiquately programatically determined like the \u0027"},{"line_number":255,"context_line":"                      \u0027[DEFAULT]my_ip parameter for IPv4.\u0027)),"},{"line_number":256,"context_line":"]"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"notification_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_a55fb43f","line":255,"range":{"start_line":252,"start_character":23,"end_line":255,"end_character":57},"in_reply_to":"df33271e_baed13f1","updated":"2020-03-24 21:42:12.000000000","message":"I guess the other thing is address randomization :\\","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"96ab9fa5a9f764d776acf16a3157a9675a3a1eb9","unresolved":false,"context_lines":[{"line_number":236,"context_line":"]"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"netconf_opts \u003d ["},{"line_number":239,"context_line":"    cfg.StrOpt(\u0027my_ip\u0027,"},{"line_number":240,"context_line":"               default\u003dnetutils.get_my_ipv4(),"},{"line_number":241,"context_line":"               sample_default\u003d\u0027127.0.0.1\u0027,"},{"line_number":242,"context_line":"               help\u003d_(\u0027IPv4 address of this host. If unset, will determine \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f4c43b2_712b9781","line":239,"range":{"start_line":239,"start_character":8,"end_line":239,"end_character":14},"updated":"2020-04-15 20:14:42.000000000","message":"nit: Could change to cfg.IPOpt here as well, without a version parameter to accept both versions.","commit_id":"e0e51ca4d5016e45fa35cb8b243c5cadc78ba980"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"96ab9fa5a9f764d776acf16a3157a9675a3a1eb9","unresolved":false,"context_lines":[{"line_number":246,"context_line":"                      \u0027however it is recommended that [DEFAULT]my_ipv6 \u0027"},{"line_number":247,"context_line":"                      \u0027is used along with DNS names for service URLs for \u0027"},{"line_number":248,"context_line":"                      \u0027dual-stack environments.\u0027)),"},{"line_number":249,"context_line":"    cfg.StrOpt(\u0027my_ipv6\u0027,"},{"line_number":250,"context_line":"               default\u003dNone,"},{"line_number":251,"context_line":"               sample_default\u003d\u00272001:db8::1\u0027,"},{"line_number":252,"context_line":"               help\u003d_(\u0027IP address of this host using IPv6. This value must \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f4c43b2_b1251fae","line":249,"range":{"start_line":249,"start_character":8,"end_line":249,"end_character":14},"updated":"2020-04-15 20:14:42.000000000","message":"nit: We could use cfg.IPOpt and include parameter version\u003d6.","commit_id":"e0e51ca4d5016e45fa35cb8b243c5cadc78ba980"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"96ab9fa5a9f764d776acf16a3157a9675a3a1eb9","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    cfg.StrOpt(\u0027my_ipv6\u0027,"},{"line_number":250,"context_line":"               default\u003dNone,"},{"line_number":251,"context_line":"               sample_default\u003d\u00272001:db8::1\u0027,"},{"line_number":252,"context_line":"               help\u003d_(\u0027IP address of this host using IPv6. This value must \u0027"},{"line_number":253,"context_line":"                      \u0027be supplied via the configuration and cannot be \u0027"},{"line_number":254,"context_line":"                      \u0027adiquately programatically determined like the \u0027"},{"line_number":255,"context_line":"                      \u0027[DEFAULT]my_ip parameter for IPv4.\u0027)),"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f4c43b2_5e5aea4e","line":252,"range":{"start_line":252,"start_character":23,"end_line":252,"end_character":57},"updated":"2020-04-15 20:14:42.000000000","message":"nit: Re-word to: \u0027IPv6 address of this host. This value ...\u0027","commit_id":"e0e51ca4d5016e45fa35cb8b243c5cadc78ba980"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"e788c9d371dc3096ccdf5f98c65c62bc690a0cf3","unresolved":false,"context_lines":[{"line_number":236,"context_line":"]"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"netconf_opts \u003d ["},{"line_number":239,"context_line":"    cfg.StrOpt(\u0027my_ip\u0027,"},{"line_number":240,"context_line":"               default\u003dnetutils.get_my_ipv4(),"},{"line_number":241,"context_line":"               sample_default\u003d\u0027127.0.0.1\u0027,"},{"line_number":242,"context_line":"               help\u003d_(\u0027IPv4 address of this host. If unset, will determine \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"df33271e_16e10e9c","line":239,"updated":"2020-04-10 08:26:56.000000000","message":"wondering it we should deprecate this and use my_ipv4 to pair with my_ipv6","commit_id":"ec3c9e2035c737e38d11dec5cb9dea14acfc0ee4"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"70240dd0f739f3ae1af15d0b9fbeab99aaa9d676","unresolved":false,"context_lines":[{"line_number":236,"context_line":"]"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"netconf_opts \u003d ["},{"line_number":239,"context_line":"    cfg.StrOpt(\u0027my_ip\u0027,"},{"line_number":240,"context_line":"               default\u003dnetutils.get_my_ipv4(),"},{"line_number":241,"context_line":"               sample_default\u003d\u0027127.0.0.1\u0027,"},{"line_number":242,"context_line":"               help\u003d_(\u0027IPv4 address of this host. If unset, will determine \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f4c43b2_8804747d","line":239,"in_reply_to":"df33271e_16e10e9c","updated":"2020-04-16 22:52:58.000000000","message":"*shrug* I feel like that may be out of the scope of this patch at the moment.","commit_id":"ec3c9e2035c737e38d11dec5cb9dea14acfc0ee4"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"e788c9d371dc3096ccdf5f98c65c62bc690a0cf3","unresolved":false,"context_lines":[{"line_number":251,"context_line":"               sample_default\u003d\u00272001:db8::1\u0027,"},{"line_number":252,"context_line":"               help\u003d_(\u0027IP address of this host using IPv6. This value must \u0027"},{"line_number":253,"context_line":"                      \u0027be supplied via the configuration and cannot be \u0027"},{"line_number":254,"context_line":"                      \u0027adiquately programatically determined like the \u0027"},{"line_number":255,"context_line":"                      \u0027[DEFAULT]my_ip parameter for IPv4.\u0027)),"},{"line_number":256,"context_line":"]"},{"line_number":257,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"df33271e_960a3e76","line":254,"range":{"start_line":254,"start_character":23,"end_line":254,"end_character":33},"updated":"2020-04-10 08:26:56.000000000","message":"nit: adequately","commit_id":"ec3c9e2035c737e38d11dec5cb9dea14acfc0ee4"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"e788c9d371dc3096ccdf5f98c65c62bc690a0cf3","unresolved":false,"context_lines":[{"line_number":251,"context_line":"               sample_default\u003d\u00272001:db8::1\u0027,"},{"line_number":252,"context_line":"               help\u003d_(\u0027IP address of this host using IPv6. This value must \u0027"},{"line_number":253,"context_line":"                      \u0027be supplied via the configuration and cannot be \u0027"},{"line_number":254,"context_line":"                      \u0027adiquately programatically determined like the \u0027"},{"line_number":255,"context_line":"                      \u0027[DEFAULT]my_ip parameter for IPv4.\u0027)),"},{"line_number":256,"context_line":"]"},{"line_number":257,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"df33271e_760fba87","line":254,"range":{"start_line":254,"start_character":34,"end_line":254,"end_character":49},"updated":"2020-04-10 08:26:56.000000000","message":"nit: programmatically","commit_id":"ec3c9e2035c737e38d11dec5cb9dea14acfc0ee4"}],"ironic/dhcp/neutron.py":[{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"82bc6991bce9ef1698e8f5c4f2e897caf7e699f5","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        :param port_id: designate which port these attributes"},{"line_number":47,"context_line":"                        will be applied to."},{"line_number":48,"context_line":"        :param dhcp_options: this will be a list of dicts, e.g."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"                             ::"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"                              [{\u0027opt_name\u0027: \u002767\u0027,"},{"line_number":53,"context_line":"                                \u0027opt_value\u0027: \u0027pxelinux.0\u0027},"},{"line_number":54,"context_line":"                               {\u0027opt_name\u0027: \u002766\u0027,"},{"line_number":55,"context_line":"                                \u0027opt_value\u0027: \u0027123.123.123.456\u0027}]"},{"line_number":56,"context_line":"        :param token: optional auth token. Deprecated, use context."},{"line_number":57,"context_line":"        :param context: request context"},{"line_number":58,"context_line":"        :type context: ironic.common.context.RequestContext"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_06279cb5","line":55,"range":{"start_line":48,"start_character":0,"end_line":55,"end_character":64},"updated":"2020-03-24 00:51:34.000000000","message":"Add \u0027ip_version\u0027 to the examples in doc string.\n\nAlso update doc string in:\nironic.dhcp.base.BaseDHCP.update_port_dhcp_opts\nironic.common.dhcp_factory.DHCPFactory.update_dhcp","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"94c2aea7c549a0b8485b0603d89b71ad2565ae1d","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        :param port_id: designate which port these attributes"},{"line_number":47,"context_line":"                        will be applied to."},{"line_number":48,"context_line":"        :param dhcp_options: this will be a list of dicts, e.g."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"                             ::"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"                              [{\u0027opt_name\u0027: \u002767\u0027,"},{"line_number":53,"context_line":"                                \u0027opt_value\u0027: \u0027pxelinux.0\u0027},"},{"line_number":54,"context_line":"                               {\u0027opt_name\u0027: \u002766\u0027,"},{"line_number":55,"context_line":"                                \u0027opt_value\u0027: \u0027123.123.123.456\u0027}]"},{"line_number":56,"context_line":"        :param token: optional auth token. Deprecated, use context."},{"line_number":57,"context_line":"        :param context: request context"},{"line_number":58,"context_line":"        :type context: ironic.common.context.RequestContext"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_cb2db047","line":55,"range":{"start_line":48,"start_character":0,"end_line":55,"end_character":64},"in_reply_to":"df33271e_06279cb5","updated":"2020-03-24 16:11:45.000000000","message":"Good catch, it has been missing from that for a very very very long time.","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"cceda1bc3a95f3b06289de7b7aa59859038b66d2","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        :param port_id: designate which port these attributes"},{"line_number":47,"context_line":"                        will be applied to."},{"line_number":48,"context_line":"        :param dhcp_options: this will be a list of dicts, e.g."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"                             ::"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"                              [{\u0027opt_name\u0027: \u002767\u0027,"},{"line_number":53,"context_line":"                                \u0027opt_value\u0027: \u0027pxelinux.0\u0027},"},{"line_number":54,"context_line":"                               {\u0027opt_name\u0027: \u002766\u0027,"},{"line_number":55,"context_line":"                                \u0027opt_value\u0027: \u0027123.123.123.456\u0027}]"},{"line_number":56,"context_line":"        :param token: optional auth token. Deprecated, use context."},{"line_number":57,"context_line":"        :param context: request context"},{"line_number":58,"context_line":"        :type context: ironic.common.context.RequestContext"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_606d9a03","line":55,"range":{"start_line":48,"start_character":0,"end_line":55,"end_character":64},"in_reply_to":"df33271e_cb2db047","updated":"2020-03-24 23:17:01.000000000","message":"Done","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"82bc6991bce9ef1698e8f5c4f2e897caf7e699f5","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            port \u003d neutron_client.show_port(port_id).get(\u0027port\u0027)"},{"line_number":69,"context_line":"            try:"},{"line_number":70,"context_line":"                if port:"},{"line_number":71,"context_line":"                    fip \u003d port.get(\u0027fixed_ips\u0027)[0]"},{"line_number":72,"context_line":"            except (KeyError, IndexError):"},{"line_number":73,"context_line":"                pass"},{"line_number":74,"context_line":"            update_opts \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_06ef9c84","line":71,"range":{"start_line":71,"start_character":47,"end_line":71,"end_character":50},"updated":"2020-03-24 00:51:34.000000000","message":"On a dual-stack network the port would have both an IPv4 and IPv6 allocation. We should make an ip_version_list and add options for both versions so that whatever the client tries to use works.\n\n$ openstack port create --network private testport -c fixed_ips -f yaml\nfixed_ips:\n- ip_address: 172.24.6.32\n  subnet_id: 69dfc4a3-6edc-4fb6-9be3-b4b0238d8a91\n- ip_address: dead:beef:1::29a\n  subnet_id: ea21fba6-33b7-4a08-9d0c-3c909370661a","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"94c2aea7c549a0b8485b0603d89b71ad2565ae1d","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            port \u003d neutron_client.show_port(port_id).get(\u0027port\u0027)"},{"line_number":69,"context_line":"            try:"},{"line_number":70,"context_line":"                if port:"},{"line_number":71,"context_line":"                    fip \u003d port.get(\u0027fixed_ips\u0027)[0]"},{"line_number":72,"context_line":"            except (KeyError, IndexError):"},{"line_number":73,"context_line":"                pass"},{"line_number":74,"context_line":"            update_opts \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_cbb770d8","line":71,"range":{"start_line":71,"start_character":47,"end_line":71,"end_character":50},"in_reply_to":"df33271e_06ef9c84","updated":"2020-03-24 16:11:45.000000000","message":"so I\u0027m not sure we can do that out of the gate since we know trying to supply both ip version\u0027s data to neutron results in DHCP not working. I kind of like the idea of just treating the first address returned with a dual-stack network as a first pass, and if we can sort out the duality issues with the data then just support both in a later version?","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"819a22075863d3d76bbd3b0fb9467e6cdac1b735","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            port \u003d neutron_client.show_port(port_id).get(\u0027port\u0027)"},{"line_number":69,"context_line":"            try:"},{"line_number":70,"context_line":"                if port:"},{"line_number":71,"context_line":"                    fip \u003d port.get(\u0027fixed_ips\u0027)[0]"},{"line_number":72,"context_line":"            except (KeyError, IndexError):"},{"line_number":73,"context_line":"                pass"},{"line_number":74,"context_line":"            update_opts \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_7fd36f39","line":71,"range":{"start_line":71,"start_character":47,"end_line":71,"end_character":50},"in_reply_to":"df33271e_800a5e23","updated":"2020-03-25 13:07:57.000000000","message":"ok, allowing the operator to set a preference makes sense.\n\nI will create a card in our downstream backlog to investigate the possibility of fully support adding options for both protocols. I\u0027m pretty sure we can do that with dnsmasq by using a tag for dhcpv6 options. But it probably need a small bit of work on the neutron side.","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"2f6b68d8260116ef8c5027ff135c9c453a5d1c00","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            port \u003d neutron_client.show_port(port_id).get(\u0027port\u0027)"},{"line_number":69,"context_line":"            try:"},{"line_number":70,"context_line":"                if port:"},{"line_number":71,"context_line":"                    fip \u003d port.get(\u0027fixed_ips\u0027)[0]"},{"line_number":72,"context_line":"            except (KeyError, IndexError):"},{"line_number":73,"context_line":"                pass"},{"line_number":74,"context_line":"            update_opts \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_e507fc1b","line":71,"range":{"start_line":71,"start_character":47,"end_line":71,"end_character":50},"in_reply_to":"df33271e_bac23332","updated":"2020-03-24 21:42:12.000000000","message":"I don\u0027t think we have a bug. I am unsure it is purely a neutron bug and likely more a dnsmasq bug when tied in with neutron.  Then again, this may just go away with the other recent changes.\n\nWhat if we had a driver_info option to enable explicitly setting network card preference?  I\u0027m thinking beyond the first step with this, although most of our v6 changes have been small and incremental on purpose.","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"2f7109e23f5d50428529f044628b1d76262d8f22","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            port \u003d neutron_client.show_port(port_id).get(\u0027port\u0027)"},{"line_number":69,"context_line":"            try:"},{"line_number":70,"context_line":"                if port:"},{"line_number":71,"context_line":"                    fip \u003d port.get(\u0027fixed_ips\u0027)[0]"},{"line_number":72,"context_line":"            except (KeyError, IndexError):"},{"line_number":73,"context_line":"                pass"},{"line_number":74,"context_line":"            update_opts \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_2c9e6306","line":71,"range":{"start_line":71,"start_character":47,"end_line":71,"end_character":50},"in_reply_to":"df33271e_cbb770d8","updated":"2020-04-01 08:21:48.000000000","message":"\u003e so I\u0027m not sure we can do that out of the gate since we know trying\n \u003e to supply both ip version\u0027s data to neutron results in DHCP not\n \u003e working. I kind of like the idea of just treating the first address\n \u003e returned with a dual-stack network as a first pass, and if we can\n \u003e sort out the duality issues with the data then just support both in\n \u003e a later version?\n\nI did a test in neutron and supplying both ipv4 and ipv6 options seem to work.\nI put a details in http://paste.openstack.org/show/791438/ including packet capture output.\n\nI used iPXE as a client and ran:\n IPv4 test: ifconf --configurator dhcp net0\n IPv6 test: ifconf --configurator ipv6 net0","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"e4402ca89e2936ce9b47cb3b0c6cb128cf4de097","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            port \u003d neutron_client.show_port(port_id).get(\u0027port\u0027)"},{"line_number":69,"context_line":"            try:"},{"line_number":70,"context_line":"                if port:"},{"line_number":71,"context_line":"                    fip \u003d port.get(\u0027fixed_ips\u0027)[0]"},{"line_number":72,"context_line":"            except (KeyError, IndexError):"},{"line_number":73,"context_line":"                pass"},{"line_number":74,"context_line":"            update_opts \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_bac23332","line":71,"range":{"start_line":71,"start_character":47,"end_line":71,"end_character":50},"in_reply_to":"df33271e_cbb770d8","updated":"2020-03-24 20:38:12.000000000","message":"This might be problematic. Let\u0027s say you have a network with existing nodes that only support IPv4, i.e the hardware can only network boot on IPv4. You want to migrate to IPv6 so dual stack is enabled. If neutron put\u0027s the IPv6 address in position [0] of the fixed_ips array, we will use IPv6 options, the older systems that only support IPv4 can no longer be deployed, cleaned etc.\n\nMaybe a \"safer\" approach would be to use IPv4 options if any fixed_ip with version 4 is present? (This would make it impossible to configure new systems to only use IPv6.)\n\nDo we have a bug regarding providing options for both ip_version in neutron?","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"cceda1bc3a95f3b06289de7b7aa59859038b66d2","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            port \u003d neutron_client.show_port(port_id).get(\u0027port\u0027)"},{"line_number":69,"context_line":"            try:"},{"line_number":70,"context_line":"                if port:"},{"line_number":71,"context_line":"                    fip \u003d port.get(\u0027fixed_ips\u0027)[0]"},{"line_number":72,"context_line":"            except (KeyError, IndexError):"},{"line_number":73,"context_line":"                pass"},{"line_number":74,"context_line":"            update_opts \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_800a5e23","line":71,"range":{"start_line":71,"start_character":47,"end_line":71,"end_character":50},"in_reply_to":"df33271e_e507fc1b","updated":"2020-03-24 23:17:01.000000000","message":"Added a fairly verbose todo.","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"82bc6991bce9ef1698e8f5c4f2e897caf7e699f5","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            if fip:"},{"line_number":76,"context_line":"                ip_version \u003d netaddr.IPAddress(fip[\u0027ip_address\u0027]).version"},{"line_number":77,"context_line":"                for option in dhcp_options:"},{"line_number":78,"context_line":"                    if option.get(\u0027ip_version\u0027, 4) \u003d\u003d ip_version:"},{"line_number":79,"context_line":"                        update_opts.append(option)"},{"line_number":80,"context_line":"            else:"},{"line_number":81,"context_line":"                LOG.error(\u0027Requested to update port for port %s, \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_86fa8c3f","line":78,"range":{"start_line":78,"start_character":20,"end_line":78,"end_character":65},"updated":"2020-03-24 00:51:34.000000000","message":"what about ip_version 6?","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"cceda1bc3a95f3b06289de7b7aa59859038b66d2","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            if fip:"},{"line_number":76,"context_line":"                ip_version \u003d netaddr.IPAddress(fip[\u0027ip_address\u0027]).version"},{"line_number":77,"context_line":"                for option in dhcp_options:"},{"line_number":78,"context_line":"                    if option.get(\u0027ip_version\u0027, 4) \u003d\u003d ip_version:"},{"line_number":79,"context_line":"                        update_opts.append(option)"},{"line_number":80,"context_line":"            else:"},{"line_number":81,"context_line":"                LOG.error(\u0027Requested to update port for port %s, \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_001f6e6c","line":78,"range":{"start_line":78,"start_character":20,"end_line":78,"end_character":65},"in_reply_to":"df33271e_1aa19faa","updated":"2020-03-24 23:17:01.000000000","message":"No worries!","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"94c2aea7c549a0b8485b0603d89b71ad2565ae1d","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            if fip:"},{"line_number":76,"context_line":"                ip_version \u003d netaddr.IPAddress(fip[\u0027ip_address\u0027]).version"},{"line_number":77,"context_line":"                for option in dhcp_options:"},{"line_number":78,"context_line":"                    if option.get(\u0027ip_version\u0027, 4) \u003d\u003d ip_version:"},{"line_number":79,"context_line":"                        update_opts.append(option)"},{"line_number":80,"context_line":"            else:"},{"line_number":81,"context_line":"                LOG.error(\u0027Requested to update port for port %s, \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_eb9d145a","line":78,"range":{"start_line":78,"start_character":20,"end_line":78,"end_character":65},"in_reply_to":"df33271e_86fa8c3f","updated":"2020-03-24 16:11:45.000000000","message":"ip_version should already be set, I only have a default with the get because of the default existing logic.","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"e4402ca89e2936ce9b47cb3b0c6cb128cf4de097","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            if fip:"},{"line_number":76,"context_line":"                ip_version \u003d netaddr.IPAddress(fip[\u0027ip_address\u0027]).version"},{"line_number":77,"context_line":"                for option in dhcp_options:"},{"line_number":78,"context_line":"                    if option.get(\u0027ip_version\u0027, 4) \u003d\u003d ip_version:"},{"line_number":79,"context_line":"                        update_opts.append(option)"},{"line_number":80,"context_line":"            else:"},{"line_number":81,"context_line":"                LOG.error(\u0027Requested to update port for port %s, \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_1aa19faa","line":78,"range":{"start_line":78,"start_character":20,"end_line":78,"end_character":65},"in_reply_to":"df33271e_eb9d145a","updated":"2020-03-24 20:38:12.000000000","message":"Doh, I completely misread this line of code last night.","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"82bc6991bce9ef1698e8f5c4f2e897caf7e699f5","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        \"\"\"Send or update the DHCP BOOT options for this node."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        :param task: A TaskManager instance."},{"line_number":93,"context_line":"        :param options: this will be a list of dicts, e.g."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"                        ::"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_260f40e2","line":93,"range":{"start_line":93,"start_character":15,"end_line":93,"end_character":22},"updated":"2020-03-24 00:51:34.000000000","message":"Update doc string with \u0027ip_version\u0027. (Also in ironic.dhcp.base.BaseDHCP.update_dhcp_opts)","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"cceda1bc3a95f3b06289de7b7aa59859038b66d2","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        \"\"\"Send or update the DHCP BOOT options for this node."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        :param task: A TaskManager instance."},{"line_number":93,"context_line":"        :param options: this will be a list of dicts, e.g."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"                        ::"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_00680ef3","line":93,"range":{"start_line":93,"start_character":15,"end_line":93,"end_character":22},"in_reply_to":"df33271e_260f40e2","updated":"2020-03-24 23:17:01.000000000","message":"Done","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e2d3de936b98af2e2c56400e89f664a0da8406e8","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import time"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import netaddr"},{"line_number":20,"context_line":"from neutronclient.common import exceptions as neutron_client_exc"},{"line_number":21,"context_line":"from oslo_log import log as logging"},{"line_number":22,"context_line":"from oslo_utils import netutils"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_05dd16df","line":19,"updated":"2020-04-02 08:56:13.000000000","message":"netaddr is not in our requirements and is largely replaced by the built-in ipaddress in python 3. Please use the latter.","commit_id":"e0e51ca4d5016e45fa35cb8b243c5cadc78ba980"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"70240dd0f739f3ae1af15d0b9fbeab99aaa9d676","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import time"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import netaddr"},{"line_number":20,"context_line":"from neutronclient.common import exceptions as neutron_client_exc"},{"line_number":21,"context_line":"from oslo_log import log as logging"},{"line_number":22,"context_line":"from oslo_utils import netutils"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_142df345","line":19,"in_reply_to":"df33271e_05dd16df","updated":"2020-04-16 22:52:58.000000000","message":"Done","commit_id":"e0e51ca4d5016e45fa35cb8b243c5cadc78ba980"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e2d3de936b98af2e2c56400e89f664a0da8406e8","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                    # a little \"weird\"."},{"line_number":81,"context_line":"                    # Ideally, we should work on this in Victoria."},{"line_number":82,"context_line":"                    fip \u003d port.get(\u0027fixed_ips\u0027)[0]"},{"line_number":83,"context_line":"            except (KeyError, IndexError):"},{"line_number":84,"context_line":"                pass"},{"line_number":85,"context_line":"            update_opts \u003d []"},{"line_number":86,"context_line":"            if fip:"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_e5d752be","line":83,"updated":"2020-04-02 08:56:13.000000000","message":"no way to raise KeyError here. you probably meant\n\n fip \u003d port[\u0027fixed_ips\u0027][0]\n\notherwise you need to handle TypeError","commit_id":"e0e51ca4d5016e45fa35cb8b243c5cadc78ba980"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"70240dd0f739f3ae1af15d0b9fbeab99aaa9d676","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                    # a little \"weird\"."},{"line_number":81,"context_line":"                    # Ideally, we should work on this in Victoria."},{"line_number":82,"context_line":"                    fip \u003d port.get(\u0027fixed_ips\u0027)[0]"},{"line_number":83,"context_line":"            except (KeyError, IndexError):"},{"line_number":84,"context_line":"                pass"},{"line_number":85,"context_line":"            update_opts \u003d []"},{"line_number":86,"context_line":"            if fip:"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_54277b65","line":83,"in_reply_to":"df33271e_e5d752be","updated":"2020-04-16 22:52:58.000000000","message":"Done","commit_id":"e0e51ca4d5016e45fa35cb8b243c5cadc78ba980"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e2d3de936b98af2e2c56400e89f664a0da8406e8","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                    # Ideally, we should work on this in Victoria."},{"line_number":82,"context_line":"                    fip \u003d port.get(\u0027fixed_ips\u0027)[0]"},{"line_number":83,"context_line":"            except (KeyError, IndexError):"},{"line_number":84,"context_line":"                pass"},{"line_number":85,"context_line":"            update_opts \u003d []"},{"line_number":86,"context_line":"            if fip:"},{"line_number":87,"context_line":"                ip_version \u003d netaddr.IPAddress(fip[\u0027ip_address\u0027]).version"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_45e39ea4","line":84,"updated":"2020-04-02 08:56:13.000000000","message":"nit: move\n\n fip \u003d None\n\nhere for readability","commit_id":"e0e51ca4d5016e45fa35cb8b243c5cadc78ba980"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"70240dd0f739f3ae1af15d0b9fbeab99aaa9d676","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                    # Ideally, we should work on this in Victoria."},{"line_number":82,"context_line":"                    fip \u003d port.get(\u0027fixed_ips\u0027)[0]"},{"line_number":83,"context_line":"            except (KeyError, IndexError):"},{"line_number":84,"context_line":"                pass"},{"line_number":85,"context_line":"            update_opts \u003d []"},{"line_number":86,"context_line":"            if fip:"},{"line_number":87,"context_line":"                ip_version \u003d netaddr.IPAddress(fip[\u0027ip_address\u0027]).version"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_741d5f0e","line":84,"in_reply_to":"df33271e_45e39ea4","updated":"2020-04-16 22:52:58.000000000","message":"Done","commit_id":"e0e51ca4d5016e45fa35cb8b243c5cadc78ba980"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e2d3de936b98af2e2c56400e89f664a0da8406e8","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                pass"},{"line_number":85,"context_line":"            update_opts \u003d []"},{"line_number":86,"context_line":"            if fip:"},{"line_number":87,"context_line":"                ip_version \u003d netaddr.IPAddress(fip[\u0027ip_address\u0027]).version"},{"line_number":88,"context_line":"                for option in dhcp_options:"},{"line_number":89,"context_line":"                    if option.get(\u0027ip_version\u0027, 4) \u003d\u003d ip_version:"},{"line_number":90,"context_line":"                        update_opts.append(option)"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_25de5ad9","line":87,"updated":"2020-04-02 08:56:13.000000000","message":"please use the built-in ipaddress module, we need to get rid of netaddr eventually.","commit_id":"e0e51ca4d5016e45fa35cb8b243c5cadc78ba980"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"70240dd0f739f3ae1af15d0b9fbeab99aaa9d676","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                pass"},{"line_number":85,"context_line":"            update_opts \u003d []"},{"line_number":86,"context_line":"            if fip:"},{"line_number":87,"context_line":"                ip_version \u003d netaddr.IPAddress(fip[\u0027ip_address\u0027]).version"},{"line_number":88,"context_line":"                for option in dhcp_options:"},{"line_number":89,"context_line":"                    if option.get(\u0027ip_version\u0027, 4) \u003d\u003d ip_version:"},{"line_number":90,"context_line":"                        update_opts.append(option)"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_34e11700","line":87,"in_reply_to":"df33271e_25de5ad9","updated":"2020-04-16 22:52:58.000000000","message":"Done","commit_id":"e0e51ca4d5016e45fa35cb8b243c5cadc78ba980"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e2d3de936b98af2e2c56400e89f664a0da8406e8","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            if fip:"},{"line_number":87,"context_line":"                ip_version \u003d netaddr.IPAddress(fip[\u0027ip_address\u0027]).version"},{"line_number":88,"context_line":"                for option in dhcp_options:"},{"line_number":89,"context_line":"                    if option.get(\u0027ip_version\u0027, 4) \u003d\u003d ip_version:"},{"line_number":90,"context_line":"                        update_opts.append(option)"},{"line_number":91,"context_line":"            else:"},{"line_number":92,"context_line":"                LOG.error(\u0027Requested to update port for port %s, \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_85f2c66e","line":89,"updated":"2020-04-02 08:56:13.000000000","message":"nit: is it always an integer or may we encounter strings?","commit_id":"e0e51ca4d5016e45fa35cb8b243c5cadc78ba980"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"70240dd0f739f3ae1af15d0b9fbeab99aaa9d676","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            if fip:"},{"line_number":87,"context_line":"                ip_version \u003d netaddr.IPAddress(fip[\u0027ip_address\u0027]).version"},{"line_number":88,"context_line":"                for option in dhcp_options:"},{"line_number":89,"context_line":"                    if option.get(\u0027ip_version\u0027, 4) \u003d\u003d ip_version:"},{"line_number":90,"context_line":"                        update_opts.append(option)"},{"line_number":91,"context_line":"            else:"},{"line_number":92,"context_line":"                LOG.error(\u0027Requested to update port for port %s, \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_54dc9b45","line":89,"in_reply_to":"df33271e_85f2c66e","updated":"2020-04-16 22:52:58.000000000","message":"We generate/pass it as an integer, so I suspect we\u0027re fine here...","commit_id":"e0e51ca4d5016e45fa35cb8b243c5cadc78ba980"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"96ab9fa5a9f764d776acf16a3157a9675a3a1eb9","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            if fip:"},{"line_number":87,"context_line":"                ip_version \u003d ipaddress.ip_address(fip[\u0027ip_address\u0027]).version"},{"line_number":88,"context_line":"                for option in dhcp_options:"},{"line_number":89,"context_line":"                    if option.get(\u0027ip_version\u0027, 4) \u003d\u003d ip_version:"},{"line_number":90,"context_line":"                        update_opts.append(option)"},{"line_number":91,"context_line":"            else:"},{"line_number":92,"context_line":"                LOG.error(\u0027Requested to update port for port %s, \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4c43b2_d1cc2bbe","line":89,"range":{"start_line":89,"start_character":35,"end_line":89,"end_character":45},"updated":"2020-04-15 20:14:42.000000000","message":"Should we deprecate this option, and replace it with a cfg.ListOpt named \u0027ip_versions\u0027? Default it to [4] and do \u0027if ip_version in option.get(\u0027ip_version\u0027, [4])\u0027 here?\n\nOr do we want to add a field to node (or port) object to allow the operator to have more granular control?","commit_id":"cf412bc81e4182a7c332545cfeb6e154015e3dc3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"70240dd0f739f3ae1af15d0b9fbeab99aaa9d676","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            if fip:"},{"line_number":87,"context_line":"                ip_version \u003d ipaddress.ip_address(fip[\u0027ip_address\u0027]).version"},{"line_number":88,"context_line":"                for option in dhcp_options:"},{"line_number":89,"context_line":"                    if option.get(\u0027ip_version\u0027, 4) \u003d\u003d ip_version:"},{"line_number":90,"context_line":"                        update_opts.append(option)"},{"line_number":91,"context_line":"            else:"},{"line_number":92,"context_line":"                LOG.error(\u0027Requested to update port for port %s, \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4c43b2_db49d3d0","line":89,"range":{"start_line":89,"start_character":35,"end_line":89,"end_character":45},"in_reply_to":"3f4c43b2_ace141ff","updated":"2020-04-16 22:52:58.000000000","message":"I honestly feel like more granularity is going to be more headache than it will prevent. BUT that is just my perception. I\u0027m kind of more for offficially deprecating later or moving it. I can still see value in the explicit setting though. I guess it depends on how we refactor and we are due to refactor the dhcp code path... badly.","commit_id":"cf412bc81e4182a7c332545cfeb6e154015e3dc3"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"3dabcef23c6da5608097b0f48541de24574460a0","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            if fip:"},{"line_number":87,"context_line":"                ip_version \u003d ipaddress.ip_address(fip[\u0027ip_address\u0027]).version"},{"line_number":88,"context_line":"                for option in dhcp_options:"},{"line_number":89,"context_line":"                    if option.get(\u0027ip_version\u0027, 4) \u003d\u003d ip_version:"},{"line_number":90,"context_line":"                        update_opts.append(option)"},{"line_number":91,"context_line":"            else:"},{"line_number":92,"context_line":"                LOG.error(\u0027Requested to update port for port %s, \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4c43b2_ace141ff","line":89,"range":{"start_line":89,"start_character":35,"end_line":89,"end_character":45},"in_reply_to":"3f4c43b2_d1cc2bbe","updated":"2020-04-16 08:26:40.000000000","message":"Sounds like a good idea i would say","commit_id":"cf412bc81e4182a7c332545cfeb6e154015e3dc3"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"8708a27527650cb28d807cd294bf471916895ba1","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            if fip:"},{"line_number":87,"context_line":"                ip_version \u003d ipaddress.ip_address(fip[\u0027ip_address\u0027]).version"},{"line_number":88,"context_line":"                for option in dhcp_options:"},{"line_number":89,"context_line":"                    if option.get(\u0027ip_version\u0027, 4) \u003d\u003d ip_version:"},{"line_number":90,"context_line":"                        update_opts.append(option)"},{"line_number":91,"context_line":"            else:"},{"line_number":92,"context_line":"                LOG.error(\u0027Requested to update port for port %s, \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4c43b2_95b42f37","line":89,"range":{"start_line":89,"start_character":35,"end_line":89,"end_character":45},"in_reply_to":"3f4c43b2_db49d3d0","updated":"2020-04-17 11:28:10.000000000","message":"+1 on deprecating, and removing it later. :)","commit_id":"cf412bc81e4182a7c332545cfeb6e154015e3dc3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ebe772bb9dd8ceca74f657e8f7b57106128c1afb","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                    if option.get(\u0027ip_version\u0027, 4) \u003d\u003d ip_version:"},{"line_number":90,"context_line":"                        update_opts.append(option)"},{"line_number":91,"context_line":"            else:"},{"line_number":92,"context_line":"                LOG.error(\u0027Requested to update port for port %s, \u0027"},{"line_number":93,"context_line":"                          \u0027however port lacks an IP address.\u0027, port_id)"},{"line_number":94,"context_line":"            port_req_body \u003d {\u0027port\u0027: {\u0027extra_dhcp_opts\u0027: update_opts}}"},{"line_number":95,"context_line":"            neutron.update_neutron_port(context, port_id, port_req_body)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f493fa4_1076c8d9","line":92,"updated":"2020-04-21 11:32:52.000000000","message":"\"update DHCP options for port\"?","commit_id":"cf412bc81e4182a7c332545cfeb6e154015e3dc3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ebe772bb9dd8ceca74f657e8f7b57106128c1afb","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                        update_opts.append(option)"},{"line_number":91,"context_line":"            else:"},{"line_number":92,"context_line":"                LOG.error(\u0027Requested to update port for port %s, \u0027"},{"line_number":93,"context_line":"                          \u0027however port lacks an IP address.\u0027, port_id)"},{"line_number":94,"context_line":"            port_req_body \u003d {\u0027port\u0027: {\u0027extra_dhcp_opts\u0027: update_opts}}"},{"line_number":95,"context_line":"            neutron.update_neutron_port(context, port_id, port_req_body)"},{"line_number":96,"context_line":"        except neutron_client_exc.NeutronClientException:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f493fa4_f0723ce3","line":93,"updated":"2020-04-21 11:32:52.000000000","message":"nit: s/port/it/","commit_id":"cf412bc81e4182a7c332545cfeb6e154015e3dc3"}],"ironic/drivers/modules/pxe_base.py":[{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"82bc6991bce9ef1698e8f5c4f2e897caf7e699f5","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            # or was deleted."},{"line_number":170,"context_line":"            pxe_utils.create_ipxe_boot_script()"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        # Generate options for both IPv4 and IPv6, and they can be"},{"line_number":173,"context_line":"        # filtered down later based upon the port options."},{"line_number":174,"context_line":"        dhcp_opts \u003d pxe_utils.dhcp_options_for_instance("},{"line_number":175,"context_line":"            task, ipxe_enabled\u003dself.ipxe_enabled, ip_version\u003d4)"},{"line_number":176,"context_line":"        dhcp_opts +\u003d pxe_utils.dhcp_options_for_instance("}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_51704073","line":173,"range":{"start_line":172,"start_character":8,"end_line":173,"end_character":58},"updated":"2020-03-24 00:51:34.000000000","message":"Ditto, instead refactor \u0027dhcp_options_for_instance\u0027","commit_id":"cf358676bee14f1dbfcae460a92b848bea9ceca3"}]}
