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'
|
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():
|
def get_root_dir():
|
||||||
"""Returns the directory where the config files and images will live."""
|
"""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':
|
if dhcp_provider_name == 'neutron':
|
||||||
# Neutron use dnsmasq as default DHCP agent, add extra config
|
# Neutron use dnsmasq as default DHCP agent, add extra config
|
||||||
# to neutron "dhcp-match=set:ipxe,175" and use below option
|
# 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})
|
'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})
|
'opt_value': ipxe_script_url})
|
||||||
else:
|
else:
|
||||||
# !175 == non-iPXE.
|
# !175 == non-iPXE.
|
||||||
# http://ipxe.org/howto/dhcpd#ipxe-specific_options
|
# 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})
|
'opt_value': boot_file})
|
||||||
dhcp_opts.append({'opt_name': 'bootfile-name',
|
dhcp_opts.append({'opt_name': DHCP_BOOTFILE_NAME,
|
||||||
'opt_value': ipxe_script_url})
|
'opt_value': ipxe_script_url})
|
||||||
else:
|
else:
|
||||||
dhcp_opts.append({'opt_name': 'bootfile-name',
|
dhcp_opts.append({'opt_name': DHCP_BOOTFILE_NAME,
|
||||||
'opt_value': boot_file})
|
'opt_value': boot_file})
|
||||||
# 210 == tftp server path-prefix or tftp root, will be used to find
|
# 210 == tftp server path-prefix or tftp root, will be used to find
|
||||||
# pxelinux.cfg directory. The pxelinux.0 loader infers this information
|
# pxelinux.cfg directory. The pxelinux.0 loader infers this information
|
||||||
# from it's own path, but Petitboot needs it to be specified by this
|
# from it's own path, but Petitboot needs it to be specified by this
|
||||||
# option since it doesn't use pxelinux.0 loader.
|
# 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()})
|
'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})
|
'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})
|
'opt_value': CONF.pxe.tftp_server})
|
||||||
|
|
||||||
# Append the IP version for all the configuration options
|
# 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(tftp_server='192.0.2.1', group='pxe')
|
||||||
self.config(pxe_bootfile_name='fake-bootfile', group='pxe')
|
self.config(pxe_bootfile_name='fake-bootfile', group='pxe')
|
||||||
self.config(tftp_root='/tftp-path/', 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',
|
'opt_value': 'fake-bootfile',
|
||||||
'ip_version': ip_version},
|
'ip_version': ip_version},
|
||||||
{'opt_name': '210',
|
{'opt_name': '210',
|
||||||
'opt_value': '/tftp-path/',
|
'opt_value': '/tftp-path/',
|
||||||
'ip_version': ip_version},
|
'ip_version': ip_version},
|
||||||
{'opt_name': 'server-ip-address',
|
{'opt_name': '66',
|
||||||
'opt_value': '192.0.2.1',
|
'opt_value': '192.0.2.1',
|
||||||
'ip_version': ip_version},
|
'ip_version': ip_version},
|
||||||
{'opt_name': 'tftp-server',
|
{'opt_name': '150',
|
||||||
'opt_value': '192.0.2.1',
|
'opt_value': '192.0.2.1',
|
||||||
'ip_version': ip_version},
|
'ip_version': ip_version},
|
||||||
]
|
]
|
||||||
@ -689,16 +689,16 @@ class TestPXEUtils(db_base.DbTestCase):
|
|||||||
|
|
||||||
self.config(dhcp_provider='isc', group='dhcp')
|
self.config(dhcp_provider='isc', group='dhcp')
|
||||||
expected_boot_script_url = 'http://192.0.3.2:1234/boot.ipxe'
|
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,
|
'opt_value': boot_file,
|
||||||
'ip_version': 4},
|
'ip_version': 4},
|
||||||
{'opt_name': 'server-ip-address',
|
{'opt_name': '66',
|
||||||
'opt_value': '192.0.2.1',
|
'opt_value': '192.0.2.1',
|
||||||
'ip_version': 4},
|
'ip_version': 4},
|
||||||
{'opt_name': 'tftp-server',
|
{'opt_name': '150',
|
||||||
'opt_value': '192.0.2.1',
|
'opt_value': '192.0.2.1',
|
||||||
'ip_version': 4},
|
'ip_version': 4},
|
||||||
{'opt_name': 'bootfile-name',
|
{'opt_name': '67',
|
||||||
'opt_value': expected_boot_script_url,
|
'opt_value': expected_boot_script_url,
|
||||||
'ip_version': 4}]
|
'ip_version': 4}]
|
||||||
|
|
||||||
@ -707,16 +707,16 @@ class TestPXEUtils(db_base.DbTestCase):
|
|||||||
|
|
||||||
self.config(dhcp_provider='neutron', group='dhcp')
|
self.config(dhcp_provider='neutron', group='dhcp')
|
||||||
expected_boot_script_url = 'http://192.0.3.2:1234/boot.ipxe'
|
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,
|
'opt_value': boot_file,
|
||||||
'ip_version': 4},
|
'ip_version': 4},
|
||||||
{'opt_name': 'server-ip-address',
|
{'opt_name': '66',
|
||||||
'opt_value': '192.0.2.1',
|
'opt_value': '192.0.2.1',
|
||||||
'ip_version': 4},
|
'ip_version': 4},
|
||||||
{'opt_name': 'tftp-server',
|
{'opt_name': '150',
|
||||||
'opt_value': '192.0.2.1',
|
'opt_value': '192.0.2.1',
|
||||||
'ip_version': 4},
|
'ip_version': 4},
|
||||||
{'opt_name': 'tag:ipxe,bootfile-name',
|
{'opt_name': 'tag:ipxe,67',
|
||||||
'opt_value': expected_boot_script_url,
|
'opt_value': expected_boot_script_url,
|
||||||
'ip_version': 4}]
|
'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