From a7e189a63087d173d61912f969ccd02eaeb60bdb Mon Sep 17 00:00:00 2001 From: Dmitry Tantsur Date: Mon, 12 Sep 2022 18:14:28 +0200 Subject: [PATCH] OCPBUGS-1762: add a workaround for a NetworkManager issue See https://bugzilla.redhat.com/show_bug.cgi?id=2111675 for a long discussion. (cherry picked from commit 1f7c3788a3ff1cd2f7a9a9dbe07e1efaa3c7417b) --- provisioning/baremetal_pod.go | 10 +++++++-- provisioning/baremetal_pod_test.go | 36 ++++++++++++++++++++++++------ 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/provisioning/baremetal_pod.go b/provisioning/baremetal_pod.go index a472d487c..d76c64a80 100644 --- a/provisioning/baremetal_pod.go +++ b/provisioning/baremetal_pod.go @@ -238,6 +238,12 @@ func buildEnvVar(name string, baremetalProvisioningConfig *metal3iov1alpha1.Prov } } +func getKernelParams(config *metal3iov1alpha1.ProvisioningSpec, networkStack NetworkStackType) string { + // OCPBUGS-872: workaround for https://bugzilla.redhat.com/show_bug.cgi?id=2111675 + return fmt.Sprintf("rd.net.timeout.carrier=30 %s", + IpOptionForProvisioning(config, networkStack)) +} + func setIronicHtpasswdHash(name string, secretName string) corev1.EnvVar { return corev1.EnvVar{ Name: name, @@ -641,7 +647,7 @@ func createContainerMetal3Ironic(images *Images, info *ProvisioningInfo, config }, { Name: ironicKernelParamsEnvVar, - Value: IpOptionForProvisioning(&info.ProvConfig.Spec, info.NetworkStack), + Value: getKernelParams(&info.ProvConfig.Spec, info.NetworkStack), }, { Name: ironicProxyEnvVar, @@ -724,7 +730,7 @@ func createContainerMetal3IronicInspector(images *Images, info *ProvisioningInfo }, { Name: ironicKernelParamsEnvVar, - Value: IpOptionForProvisioning(&info.ProvConfig.Spec, info.NetworkStack), + Value: getKernelParams(&info.ProvConfig.Spec, info.NetworkStack), }, { Name: inspectorProxyEnvVar, diff --git a/provisioning/baremetal_pod_test.go b/provisioning/baremetal_pod_test.go index 964997bcb..f9b04a846 100644 --- a/provisioning/baremetal_pod_test.go +++ b/provisioning/baremetal_pod_test.go @@ -237,7 +237,7 @@ func TestNewMetal3Containers(t *testing.T) { Env: []corev1.EnvVar{ {Name: "IRONIC_INSECURE", Value: "true"}, {Name: "IRONIC_INSPECTOR_INSECURE", Value: "true"}, - {Name: "IRONIC_KERNEL_PARAMS", Value: "ip=dhcp"}, + {Name: "IRONIC_KERNEL_PARAMS", Value: "rd.net.timeout.carrier=30 ip=dhcp"}, {Name: "IRONIC_REVERSE_PROXY_SETUP", Value: "true"}, {Name: "IRONIC_HTTPD", Value: "true"}, {Name: "IRONIC_PRIVATE_PORT", Value: "6388"}, @@ -259,7 +259,7 @@ func TestNewMetal3Containers(t *testing.T) { Name: "metal3-ironic-inspector", Env: []corev1.EnvVar{ {Name: "IRONIC_INSECURE", Value: "true"}, - {Name: "IRONIC_KERNEL_PARAMS", Value: "ip=dhcp"}, + {Name: "IRONIC_KERNEL_PARAMS", Value: "rd.net.timeout.carrier=30 ip=dhcp"}, {Name: "INSPECTOR_REVERSE_PROXY_SETUP", Value: "true"}, {Name: "IRONIC_INSPECTOR_PRIVATE_PORT", Value: "5049"}, {Name: "PROVISIONING_IP", Value: "172.30.20.3/24"}, @@ -364,9 +364,17 @@ func TestNewMetal3Containers(t *testing.T) { expectedContainers: []corev1.Container{ containers["metal3-baremetal-operator"], withEnv(containers["metal3-httpd"], envWithValue("PROVISIONING_INTERFACE", "")), - withEnv(containers["metal3-ironic"], envWithValue("PROVISIONING_INTERFACE", ""), envWithValue("IRONIC_KERNEL_PARAMS", "ip=dhcp6")), + withEnv( + containers["metal3-ironic"], + envWithValue("PROVISIONING_INTERFACE", ""), + envWithValue("IRONIC_KERNEL_PARAMS", "rd.net.timeout.carrier=30 ip=dhcp6"), + ), containers["metal3-ramdisk-logs"], - withEnv(containers["metal3-ironic-inspector"], envWithValue("PROVISIONING_INTERFACE", ""), envWithValue("IRONIC_KERNEL_PARAMS", "ip=dhcp6")), + withEnv( + containers["metal3-ironic-inspector"], + envWithValue("PROVISIONING_INTERFACE", ""), + envWithValue("IRONIC_KERNEL_PARAMS", "rd.net.timeout.carrier=30 ip=dhcp6"), + ), }, sshkey: "", }, @@ -375,10 +383,24 @@ func TestNewMetal3Containers(t *testing.T) { config: disabledProvisioning().ProvisioningIP("").ProvisioningNetworkCIDR("").build(), expectedContainers: []corev1.Container{ containers["metal3-baremetal-operator"], - withEnv(containers["metal3-httpd"], envWithValue("PROVISIONING_INTERFACE", ""), envWithFieldValue("PROVISIONING_IP", "status.hostIP")), - withEnv(containers["metal3-ironic"], envWithValue("PROVISIONING_INTERFACE", ""), envWithFieldValue("PROVISIONING_IP", "status.hostIP"), envWithValue("IRONIC_KERNEL_PARAMS", "ip=dhcp6")), + withEnv( + containers["metal3-httpd"], + envWithValue("PROVISIONING_INTERFACE", ""), + envWithFieldValue("PROVISIONING_IP", "status.hostIP"), + ), + withEnv( + containers["metal3-ironic"], + envWithValue("PROVISIONING_INTERFACE", ""), + envWithFieldValue("PROVISIONING_IP", "status.hostIP"), + envWithValue("IRONIC_KERNEL_PARAMS", "rd.net.timeout.carrier=30 ip=dhcp6"), + ), containers["metal3-ramdisk-logs"], - withEnv(containers["metal3-ironic-inspector"], envWithValue("PROVISIONING_INTERFACE", ""), envWithFieldValue("PROVISIONING_IP", "status.hostIP"), envWithValue("IRONIC_KERNEL_PARAMS", "ip=dhcp6")), + withEnv( + containers["metal3-ironic-inspector"], + envWithValue("PROVISIONING_INTERFACE", ""), + envWithFieldValue("PROVISIONING_IP", "status.hostIP"), + envWithValue("IRONIC_KERNEL_PARAMS", "rd.net.timeout.carrier=30 ip=dhcp6"), + ), }, sshkey: "", },