Change pxe dhcp options name to codes.
There is difference between dhcp option names in different backends. This patch changes options name to code according to [0]. [0] https://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp-parameters.xhtml Closes-Bug: 1717236 Change-Id: Idbc2f7496d10d92d8dc481eb4173ed1c6f35d412
This commit is contained in:
parent
a4d23f3230
commit
c377f5cbbd
@ -33,6 +33,12 @@ LOG = logging.getLogger(__name__)
|
||||
|
||||
PXE_CFG_DIR_NAME = 'pxelinux.cfg'
|
||||
|
||||
DHCP_TFTP_SERVER_NAME = '66' # rfc2132
|
||||
DHCP_BOOTFILE_NAME = '67' # rfc2132
|
||||
DHCP_TFTP_SERVER_ADDRESS = '150' # rfc5859
|
||||
DHCP_IPXE_ENCAP_OPTS = '175' # Tentatively Assigned
|
||||
DHCP_TFTP_PATH_PREFIX = '210' # rfc5071
|
||||
|
||||
|
||||
def get_root_dir():
|
||||
"""Returns the directory where the config files and images will live."""
|
||||
@ -317,30 +323,31 @@ def dhcp_options_for_instance(task):
|
||||
if dhcp_provider_name == 'neutron':
|
||||
# Neutron use dnsmasq as default DHCP agent, add extra config
|
||||
# to neutron "dhcp-match=set:ipxe,175" and use below option
|
||||
dhcp_opts.append({'opt_name': 'tag:!ipxe,bootfile-name',
|
||||
dhcp_opts.append({'opt_name': "tag:!ipxe,%s" % DHCP_BOOTFILE_NAME,
|
||||
'opt_value': boot_file})
|
||||
dhcp_opts.append({'opt_name': 'tag:ipxe,bootfile-name',
|
||||
dhcp_opts.append({'opt_name': "tag:ipxe,%s" % DHCP_BOOTFILE_NAME,
|
||||
'opt_value': ipxe_script_url})
|
||||
else:
|
||||
# !175 == non-iPXE.
|
||||
# http://ipxe.org/howto/dhcpd#ipxe-specific_options
|
||||
dhcp_opts.append({'opt_name': '!175,bootfile-name',
|
||||
dhcp_opts.append({'opt_name': "!%s,%s" % (DHCP_IPXE_ENCAP_OPTS,
|
||||
DHCP_BOOTFILE_NAME),
|
||||
'opt_value': boot_file})
|
||||
dhcp_opts.append({'opt_name': 'bootfile-name',
|
||||
dhcp_opts.append({'opt_name': DHCP_BOOTFILE_NAME,
|
||||
'opt_value': ipxe_script_url})
|
||||
else:
|
||||
dhcp_opts.append({'opt_name': 'bootfile-name',
|
||||
dhcp_opts.append({'opt_name': DHCP_BOOTFILE_NAME,
|
||||
'opt_value': boot_file})
|
||||
# 210 == tftp server path-prefix or tftp root, will be used to find
|
||||
# pxelinux.cfg directory. The pxelinux.0 loader infers this information
|
||||
# from it's own path, but Petitboot needs it to be specified by this
|
||||
# option since it doesn't use pxelinux.0 loader.
|
||||
dhcp_opts.append({'opt_name': '210',
|
||||
dhcp_opts.append({'opt_name': DHCP_TFTP_PATH_PREFIX,
|
||||
'opt_value': get_tftp_path_prefix()})
|
||||
|
||||
dhcp_opts.append({'opt_name': 'server-ip-address',
|
||||
dhcp_opts.append({'opt_name': DHCP_TFTP_SERVER_NAME,
|
||||
'opt_value': CONF.pxe.tftp_server})
|
||||
dhcp_opts.append({'opt_name': 'tftp-server',
|
||||
dhcp_opts.append({'opt_name': DHCP_TFTP_SERVER_ADDRESS,
|
||||
'opt_value': CONF.pxe.tftp_server})
|
||||
|
||||
# Append the IP version for all the configuration options
|
||||
|
@ -621,16 +621,16 @@ class TestPXEUtils(db_base.DbTestCase):
|
||||
self.config(tftp_server='192.0.2.1', group='pxe')
|
||||
self.config(pxe_bootfile_name='fake-bootfile', group='pxe')
|
||||
self.config(tftp_root='/tftp-path/', group='pxe')
|
||||
expected_info = [{'opt_name': 'bootfile-name',
|
||||
expected_info = [{'opt_name': '67',
|
||||
'opt_value': 'fake-bootfile',
|
||||
'ip_version': ip_version},
|
||||
{'opt_name': '210',
|
||||
'opt_value': '/tftp-path/',
|
||||
'ip_version': ip_version},
|
||||
{'opt_name': 'server-ip-address',
|
||||
{'opt_name': '66',
|
||||
'opt_value': '192.0.2.1',
|
||||
'ip_version': ip_version},
|
||||
{'opt_name': 'tftp-server',
|
||||
{'opt_name': '150',
|
||||
'opt_value': '192.0.2.1',
|
||||
'ip_version': ip_version},
|
||||
]
|
||||
@ -689,16 +689,16 @@ class TestPXEUtils(db_base.DbTestCase):
|
||||
|
||||
self.config(dhcp_provider='isc', group='dhcp')
|
||||
expected_boot_script_url = 'http://192.0.3.2:1234/boot.ipxe'
|
||||
expected_info = [{'opt_name': '!175,bootfile-name',
|
||||
expected_info = [{'opt_name': '!175,67',
|
||||
'opt_value': boot_file,
|
||||
'ip_version': 4},
|
||||
{'opt_name': 'server-ip-address',
|
||||
{'opt_name': '66',
|
||||
'opt_value': '192.0.2.1',
|
||||
'ip_version': 4},
|
||||
{'opt_name': 'tftp-server',
|
||||
{'opt_name': '150',
|
||||
'opt_value': '192.0.2.1',
|
||||
'ip_version': 4},
|
||||
{'opt_name': 'bootfile-name',
|
||||
{'opt_name': '67',
|
||||
'opt_value': expected_boot_script_url,
|
||||
'ip_version': 4}]
|
||||
|
||||
@ -707,16 +707,16 @@ class TestPXEUtils(db_base.DbTestCase):
|
||||
|
||||
self.config(dhcp_provider='neutron', group='dhcp')
|
||||
expected_boot_script_url = 'http://192.0.3.2:1234/boot.ipxe'
|
||||
expected_info = [{'opt_name': 'tag:!ipxe,bootfile-name',
|
||||
expected_info = [{'opt_name': 'tag:!ipxe,67',
|
||||
'opt_value': boot_file,
|
||||
'ip_version': 4},
|
||||
{'opt_name': 'server-ip-address',
|
||||
{'opt_name': '66',
|
||||
'opt_value': '192.0.2.1',
|
||||
'ip_version': 4},
|
||||
{'opt_name': 'tftp-server',
|
||||
{'opt_name': '150',
|
||||
'opt_value': '192.0.2.1',
|
||||
'ip_version': 4},
|
||||
{'opt_name': 'tag:ipxe,bootfile-name',
|
||||
{'opt_name': 'tag:ipxe,67',
|
||||
'opt_value': expected_boot_script_url,
|
||||
'ip_version': 4}]
|
||||
|
||||
|
@ -0,0 +1,5 @@
|
||||
---
|
||||
fixes:
|
||||
- |
|
||||
Fixes compatibility with Neutron DHCP backends other than dnsmasq by using
|
||||
standard DHCP option codes instead of dnsmasq-specific option names.
|
Loading…
Reference in New Issue
Block a user