From 35fc604cf2dcb933abf803c8ea797167e53a562a Mon Sep 17 00:00:00 2001 From: Mateusz Kowalski Date: Fri, 29 May 2026 13:33:53 +0200 Subject: [PATCH] OCPBUGS-86571: templates: pass --dual-stack to nodeip-configuration Pass the new --dual-stack flag to baremetal-runtimecfg's node-ip set command when the cluster is configured as dual-stack (DualStack or DualStackIPv6Primary). This tells nodeip-configuration to wait for both IPv4 and IPv6 addresses before writing the kubelet/crio config. On RHEL 10, IPv4 ACD (Address Conflict Detection) delays IPv4 assignment by ~200ms-3s, causing a race where only IPv6 is seen on dual-stack clusters. The flag is added to all 4 nodeip-configuration service templates: - _base (None/External platforms) - on-prem (BareMetal/OpenStack/oVirt/Nutanix) - kubevirt - vsphere UPI Note: on-prem deployments also auto-detect dual-stack from VIPs, so the flag provides an explicit signal as belt-and-suspenders. Non-on-prem deployments (None/External) have no VIPs, so the flag is required there. Depends on: openshift/baremetal-runtimecfg#391 Signed-off-by: Mateusz Kowalski Generated-by: OpenClaw (f066dd2) AI-model: claude-opus-4 Signed-off-by: Mateusz Kowalski --- templates/common/_base/units/nodeip-configuration.service.yaml | 3 +++ .../common/kubevirt/units/nodeip-configuration.service.yaml | 3 +++ .../common/on-prem/units/nodeip-configuration.service.yaml | 3 +++ .../units/nodeip-configuration-vsphere-upi.service.yaml | 3 +++ 4 files changed, 12 insertions(+) diff --git a/templates/common/_base/units/nodeip-configuration.service.yaml b/templates/common/_base/units/nodeip-configuration.service.yaml index 23336f5127..02a7ad5090 100644 --- a/templates/common/_base/units/nodeip-configuration.service.yaml +++ b/templates/common/_base/units/nodeip-configuration.service.yaml @@ -31,6 +31,9 @@ contents: | {{if or (eq .IPFamilies "IPv6") (eq .IPFamilies "DualStackIPv6Primary") -}} --prefer-ipv6 \ {{end -}} + {{if or (eq .IPFamilies "DualStack") (eq .IPFamilies "DualStackIPv6Primary") -}} + --dual-stack \ + {{end -}} --retry-on-failure \ --network-type {{.NetworkType}} \ ${NODEIP_HINT:-${KUBELET_NODEIP_HINT:-}}; \ diff --git a/templates/common/kubevirt/units/nodeip-configuration.service.yaml b/templates/common/kubevirt/units/nodeip-configuration.service.yaml index 4ffd06e82e..da40c14283 100644 --- a/templates/common/kubevirt/units/nodeip-configuration.service.yaml +++ b/templates/common/kubevirt/units/nodeip-configuration.service.yaml @@ -28,6 +28,9 @@ contents: | {{if or (eq .IPFamilies "IPv6") (eq .IPFamilies "DualStackIPv6Primary") -}} --prefer-ipv6 \ {{end -}} + {{if or (eq .IPFamilies "DualStack") (eq .IPFamilies "DualStackIPv6Primary") -}} + --dual-stack \ + {{end -}} --retry-on-failure \ --network-type {{.NetworkType}} \ ${NODEIP_HINT:-${KUBELET_NODEIP_HINT:-}}; \ diff --git a/templates/common/on-prem/units/nodeip-configuration.service.yaml b/templates/common/on-prem/units/nodeip-configuration.service.yaml index 77944e0bcc..f1964fae48 100644 --- a/templates/common/on-prem/units/nodeip-configuration.service.yaml +++ b/templates/common/on-prem/units/nodeip-configuration.service.yaml @@ -36,6 +36,9 @@ contents: | {{if or (eq .IPFamilies "IPv6") (eq .IPFamilies "DualStackIPv6Primary") -}} --prefer-ipv6 \ {{end -}} + {{if or (eq .IPFamilies "DualStack") (eq .IPFamilies "DualStackIPv6Primary") -}} + --dual-stack \ + {{end -}} --retry-on-failure \ ${NODEIP_HINT:-} \ {{ range onPremPlatformAPIServerInternalIPs . }}{{.}} {{end}} \ diff --git a/templates/common/vsphere/units/nodeip-configuration-vsphere-upi.service.yaml b/templates/common/vsphere/units/nodeip-configuration-vsphere-upi.service.yaml index 4e0e46563d..87b01bc068 100644 --- a/templates/common/vsphere/units/nodeip-configuration-vsphere-upi.service.yaml +++ b/templates/common/vsphere/units/nodeip-configuration-vsphere-upi.service.yaml @@ -42,6 +42,9 @@ contents: | {{if or (eq .IPFamilies "IPv6") (eq .IPFamilies "DualStackIPv6Primary") -}} --prefer-ipv6 \ {{end -}} + {{if or (eq .IPFamilies "DualStack") (eq .IPFamilies "DualStackIPv6Primary") -}} + --dual-stack \ + {{end -}} --retry-on-failure \ ${NODEIP_HINT:-${KUBELET_NODEIP_HINT:-}}; \ do \