diff --git a/diskimage_builder/elements/dhcp-all-interfaces/README.rst b/diskimage_builder/elements/dhcp-all-interfaces/README.rst index a11a4cb3..1fdf7044 100644 --- a/diskimage_builder/elements/dhcp-all-interfaces/README.rst +++ b/diskimage_builder/elements/dhcp-all-interfaces/README.rst @@ -39,3 +39,13 @@ DIB_DHCP_NETWORK_MANAGER_AUTO auto-configure any interface with no configuration, it will use DHCP for IPv4 and Router Advertisements to decide how to initialize IPv6. :Example: DIB_DHCP_NETWORK_MANAGER_AUTO=true + +DIB_DHCP_CLIENT + :Required: no + :Default: internal + :Description: When NetworkManager is in use, this setting conveys which DHCP + client is in use for acquiring a DHCP address for the node. In some specific + cases, where known that dhclient is the tested or most compatible default, + specifically for Centos 7, 8, and 8-Stream, as well as derived distributions. + Otherwise, the "internal" dhcp client is the default. + :Example: DIB_DHCP_CLIENT diff --git a/diskimage_builder/elements/dhcp-all-interfaces/install.d/50-dhcp-all-interfaces b/diskimage_builder/elements/dhcp-all-interfaces/install.d/50-dhcp-all-interfaces index 2b6e4ce6..d885741f 100755 --- a/diskimage_builder/elements/dhcp-all-interfaces/install.d/50-dhcp-all-interfaces +++ b/diskimage_builder/elements/dhcp-all-interfaces/install.d/50-dhcp-all-interfaces @@ -9,12 +9,21 @@ set -o pipefail SCRIPTDIR=$(dirname $0) if [ -e "/etc/redhat-release" ]; then - # NOTE(TheJulia): While the internal client which every networkmanager user - # should have is internal, dhclient has better behavior which includes - # shutting down the port between retries which is critical for recovery - # from LACP port blocking situations. As such, we'll force it to dhclient. + # NOTE(TheJulia): RHEL, prior to RHEL8 used dhclient by default launched + # by NetworkManager. In RHEL8, this default switched to the "internal" + # dhcp client. + # This is problematic in RHEL8, with port blocking situations as dhclient + # has better behavior which includes shutting down the port between + # retries which is critical for recovery from LACP port blocking + # situations. As such, we'll force it to dhclient. # For more information, see https://storyboard.openstack.org/#!/story/2008001 - DIB_DHCP_CLIENT=${DIB_DHCP_CLIENT:-dhclient} + if [[ '7' =~ ${DIB_RELEASE} ]]; then + DIB_DHCP_CLIENT=${DIB_DHCP_CLIENT:-dhclient} + elif [[ '8' =~ ${DIB_RELEASE} ]]; then + DIB_DHCP_CLIENT=${DIB_DHCP_CLIENT:-dhclient} + fi + # NOTE(TheJulia): Centos 9-stream/RHEL9, appear to need to leverage the + # internal interface. See: https://storyboard.openstack.org/#!/story/2010109 fi