diff --git a/doc/source/deploy/install-guide.rst b/doc/source/deploy/install-guide.rst index 0a3f109b8cd..b3f0aa7fcdb 100644 --- a/doc/source/deploy/install-guide.rst +++ b/doc/source/deploy/install-guide.rst @@ -849,12 +849,13 @@ DHCP client to chainload the iPXE image (undionly.kpxe). Neutron needs to be configured to create this DHCP tag, since it isn't create by default. #. Create a custom ``dnsmasq.conf`` file with a setting for the ipxe tag. For - example, the following creates the file ``/etc/dnsmasq-ironic.conf`` :: + example, create the file ``/etc/dnsmasq-ironic.conf`` with the content:: - cat > /etc/dnsmasq-ironic.conf << EOF - dhcp-match=ipxe,175 - EOF + # Create the "ipxe" tag if request comes from iPXE user class + dhcp-userclass=set:ipxe,iPXE + # Alternatively, create the "ipxe" tag if request comes from DHCP option 175 + # dhcp-match=set:ipxe,175 #. In the Neutron DHCP Agent configuration file (typically located at /etc/neutron/dhcp_agent.ini), set the custom ``/etc/dnsmasq-ironic.conf`` diff --git a/ironic/common/pxe_utils.py b/ironic/common/pxe_utils.py index 3791f96ee68..7895ac88718 100644 --- a/ironic/common/pxe_utils.py +++ b/ironic/common/pxe_utils.py @@ -260,15 +260,15 @@ def dhcp_options_for_instance(task): # to neutron "dhcp-match=set:ipxe,175" and use below option dhcp_opts.append({'opt_name': 'tag:!ipxe,bootfile-name', 'opt_value': CONF.pxe.pxe_bootfile_name}) + dhcp_opts.append({'opt_name': 'tag:ipxe,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', 'opt_value': CONF.pxe.pxe_bootfile_name}) - # If the request comes from iPXE, direct it to boot from the - # iPXE script - dhcp_opts.append({'opt_name': 'bootfile-name', - 'opt_value': ipxe_script_url}) + dhcp_opts.append({'opt_name': 'bootfile-name', + 'opt_value': ipxe_script_url}) else: if deploy_utils.get_boot_mode_for_deploy(task.node) == 'uefi': boot_file = CONF.pxe.uefi_pxe_bootfile_name diff --git a/ironic/tests/test_pxe_utils.py b/ironic/tests/test_pxe_utils.py index 4eb22c8e533..29ffaccf9e6 100644 --- a/ironic/tests/test_pxe_utils.py +++ b/ironic/tests/test_pxe_utils.py @@ -358,7 +358,7 @@ class TestPXEUtils(db_base.DbTestCase): 'opt_value': '192.0.2.1'}, {'opt_name': 'tftp-server', 'opt_value': '192.0.2.1'}, - {'opt_name': 'bootfile-name', + {'opt_name': 'tag:ipxe,bootfile-name', 'opt_value': expected_boot_script_url}] with task_manager.acquire(self.context, self.node.uuid) as task: self.assertItemsEqual(expected_info,