Fix IPv6 Option Passing

Turns out that adding option6 was incorrect... and neutron
does it incorrectly as well. Removing from ironic, as neutron
does the completely wrong thing when a field number is used with
dnsmasq and ipv6.

Change-Id: Icf88419925abb9b9f10f31aa3a66daea5afe3bb4
Related-Change: I87c15908087111367358043f7a63dd02dd9d16ac
Task: 28218
Story: 2004501
This commit is contained in:
Julia Kreger 2018-12-02 08:08:32 -08:00
parent 9dd732a695
commit 78708835d0
3 changed files with 26 additions and 8 deletions

View File

@ -441,11 +441,7 @@ def dhcp_options_for_instance(task, ipxe_enabled=False, url_boot=False):
else:
# NOTE(TheJulia): Booting with v6 means it is always
# a URL reply.
if dhcp_provider_name == 'neutron':
# dnsmasq requires ipv6 options be explicitly flagged. :(
boot_file_param = "option6:{}".format(DHCPV6_BOOTFILE_NAME)
else:
boot_file_param = DHCPV6_BOOTFILE_NAME
boot_file_param = DHCPV6_BOOTFILE_NAME
url_boot = True
# NOTE(TheJulia): The ip_version value config from the PXE config is
# guarded in the configuration, so there is no real sense in having
@ -454,6 +450,12 @@ def dhcp_options_for_instance(task, ipxe_enabled=False, url_boot=False):
boot_file = _dhcp_option_file_or_url(task, url_boot)
if ipxe_enabled:
# TODO(TheJulia): DHCPv6 through dnsmasq + ipxe matching simply
# does not work as the dhcp client is tracked via a different
# identity mechanism in the exchange. This means if we really
# want ipv6 + ipxe, we should be prepared to build a custom
# iso with ipxe inside. Likely this is more secure and better
# aligns with some of the mega-scale ironic operators.
script_name = os.path.basename(CONF.pxe.ipxe_boot_script)
# TODO(TheJulia): We should make this smarter to handle unwrapped v6
# addresses, since the format is http://[ff80::1]:80/boot.ipxe.

View File

@ -728,7 +728,7 @@ class TestPXEUtils(db_base.DbTestCase):
# options are not imported, although they may be supported
# by vendors. The apparent proper option is to return a
# URL in the field https://tools.ietf.org/html/rfc5970#section-3
expected_info = [{'opt_name': 'option6:59',
expected_info = [{'opt_name': '59',
'opt_value': 'tftp://[ff80::1]/fake-bootfile',
'ip_version': ip_version}]
elif ip_version == 4:
@ -857,10 +857,10 @@ class TestPXEUtils(db_base.DbTestCase):
self.config(dhcp_provider='neutron', group='dhcp')
if ip_version == 6:
# Boot URL variable set from prior test of isc parameters.
expected_info = [{'opt_name': 'tag:!ipxe,option6:59',
expected_info = [{'opt_name': 'tag:!ipxe,59',
'opt_value': 'tftp://[ff80::1]/fake-bootfile',
'ip_version': ip_version},
{'opt_name': 'tag:ipxe,option6:59',
{'opt_name': 'tag:ipxe,59',
'opt_value': expected_boot_script_url,
'ip_version': ip_version}]
elif ip_version == 4:

View File

@ -0,0 +1,16 @@
---
issues:
- |
Support for IPv6 and iPXE is restricted and is unlikely to work in default
scenarios and configurations without external intervention. This is due to
the way DHCPv6 and dnsmasq operate. At present this issue is being tracked
in story `2005402 <https://storyboard.openstack.org/#!/story/2004502>`_.
fixes:
- |
Fixes an issue introduced during the Stein development cycle in an attempt
to fix IPv6 support where the networking service was also prepending the
DHCP option indicator to the number. A fix has been been submitted to the
Networking service to address this issue, and the prepending code has been
removed from ironic. See story
`2004501 <https://storyboard.openstack.org/#!/story/2004501>`_ for more
information.