diff --git a/ironic/common/pxe_utils.py b/ironic/common/pxe_utils.py index 901d81d912..3b2d9795fb 100644 --- a/ironic/common/pxe_utils.py +++ b/ironic/common/pxe_utils.py @@ -139,9 +139,18 @@ def _link_ip_address_pxe_configs(task, hex_form, ipxe_enabled=False): api = dhcp_factory.DHCPFactory().provider ip_addrs = api.get_ip_addresses(task) if not ip_addrs: - raise exception.FailedToGetIPAddressOnPort(_( - "Failed to get IP address for any port on node %s.") % - task.node.uuid) + + if ip_addrs == []: + LOG.warning("No IP addresses assigned for node %(node)s.", + {'node': task.node.uuid}) + else: + LOG.warning( + "DHCP address management is not available for node " + "%(node)s. Operators without Neutron can ignore this " + "warning.", + {'node': task.node.uuid}) + # Just in case, reset to empty list if we got nothing. + ip_addrs = [] for port_ip_address in ip_addrs: ip_address_path = _get_pxe_ip_address_path(port_ip_address, hex_form) diff --git a/ironic/dhcp/base.py b/ironic/dhcp/base.py index 88dd3e4e0d..39fa34c7cd 100644 --- a/ironic/dhcp/base.py +++ b/ironic/dhcp/base.py @@ -83,7 +83,6 @@ class BaseDHCP(object): :raises: FailedToUpdateDHCPOptOnPort """ - @abc.abstractmethod def get_ip_addresses(self, task): """Get IP addresses for all ports/portgroups in `task`. @@ -91,6 +90,7 @@ class BaseDHCP(object): :returns: List of IP addresses associated with task's ports and portgroups. """ + return [] def clean_dhcp_opts(self, task): """Clean up the DHCP BOOT options for all ports in `task`. diff --git a/releasenotes/notes/fixes-noop-network-with-grub-8fd99a73b593ddba.yaml b/releasenotes/notes/fixes-noop-network-with-grub-8fd99a73b593ddba.yaml new file mode 100644 index 0000000000..1d8f0e8308 --- /dev/null +++ b/releasenotes/notes/fixes-noop-network-with-grub-8fd99a73b593ddba.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Fixes an issue where users attempting to leverage non-iPXE UEFI booting + would experience failures when their ``dhcp_provider`` was set to + ``none``.