Skip to content

Commit dd3c1f2

Browse files
committed
MGMT-21314: CNO enable advanced gateway detection in ovnkube in dpu host mode
Adding required gateway value for ovnk in dpu-host mode
1 parent c97d85b commit dd3c1f2

File tree

2 files changed

+103
-2
lines changed

2 files changed

+103
-2
lines changed

bindata/network/ovn-kubernetes/common/008-script-lib.yaml

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -512,10 +512,19 @@ data:
512512

513513
echo "I$(date "+%m%d %H:%M:%S.%N") - starting ovnkube-node"
514514

515+
516+
if [ "{{.OVN_NODE_MODE}}" == "dpu-host" ]; then
517+
// this is required for the dpu-host mode to configure right gateway interface
518+
// https://github.com/ovn-kubernetes/ovn-kubernetes/pull/5327/files
519+
gateway_interface=derive-from-mgmt-port
520+
else
521+
gateway_interface=br-ex
522+
fi
523+
515524
if [ "{{.OVN_GATEWAY_MODE}}" == "shared" ]; then
516-
gateway_mode_flags="--gateway-mode shared --gateway-interface br-ex"
525+
gateway_mode_flags="--gateway-mode shared --gateway-interface ${gateway_interface}"
517526
elif [ "{{.OVN_GATEWAY_MODE}}" == "local" ]; then
518-
gateway_mode_flags="--gateway-mode local --gateway-interface br-ex"
527+
gateway_mode_flags="--gateway-mode local --gateway-interface ${gateway_interface}"
519528
else
520529
echo "Invalid OVN_GATEWAY_MODE: \"{{.OVN_GATEWAY_MODE}}\". Must be \"local\" or \"shared\"."
521530
exit 1

pkg/network/ovn_kubernetes_test.go

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import (
3636
cnofake "github.com/openshift/cluster-network-operator/pkg/client/fake"
3737
"github.com/openshift/cluster-network-operator/pkg/hypershift"
3838
"github.com/openshift/cluster-network-operator/pkg/names"
39+
"github.com/openshift/cluster-network-operator/pkg/render"
3940
)
4041

4142
var (
@@ -4110,3 +4111,94 @@ func Test_renderOVNKubernetes(t *testing.T) {
41104111
})
41114112
}
41124113
}
4114+
4115+
func TestOVNKubernetesScriptLibGatewayInterface(t *testing.T) {
4116+
g := NewGomegaWithT(t)
4117+
4118+
testCases := []struct {
4119+
name string
4120+
ovnNodeMode string
4121+
expectedGatewayInterface string
4122+
}{
4123+
{
4124+
name: "dpu-host mode uses derive-from-mgmt-port",
4125+
ovnNodeMode: "dpu-host",
4126+
expectedGatewayInterface: "derive-from-mgmt-port",
4127+
},
4128+
{
4129+
name: "non-dpu-host mode uses br-ex",
4130+
ovnNodeMode: "full",
4131+
expectedGatewayInterface: "br-ex",
4132+
},
4133+
}
4134+
4135+
for _, tc := range testCases {
4136+
t.Run(tc.name, func(t *testing.T) {
4137+
// Create render data
4138+
data := render.MakeRenderData()
4139+
data.Data["OVN_NODE_MODE"] = tc.ovnNodeMode
4140+
data.Data["OVN_GATEWAY_MODE"] = "shared"
4141+
4142+
// Set all required template variables for 008-script-lib.yaml
4143+
data.Data["ReleaseVersion"] = "4.15.0"
4144+
data.Data["OVNPolicyAuditDestination"] = "null"
4145+
data.Data["OVNPolicyAuditSyslogFacility"] = "local0"
4146+
data.Data["OVN_LOG_PATTERN_CONSOLE"] = "%D{%Y-%m-%dT%H:%M:%S.###Z}|%05N|%c%T|%p|%m"
4147+
data.Data["NorthdThreads"] = "1"
4148+
data.Data["OVNPolicyAuditMaxFileSize"] = "50"
4149+
data.Data["OVNPolicyAuditMaxLogFiles"] = "5"
4150+
data.Data["OVN_NB_INACTIVITY_PROBE"] = "60000"
4151+
data.Data["OVN_NORTHD_BACKOFF_MS"] = "300"
4152+
data.Data["PlatformType"] = "AWS"
4153+
data.Data["OVN_CONTROLLER_INACTIVITY_PROBE"] = "30000"
4154+
data.Data["GenevePort"] = "8061"
4155+
data.Data["OVNHybridOverlayVXLANPort"] = ""
4156+
data.Data["OVN_MULTI_NETWORK_ENABLE"] = "false"
4157+
data.Data["OVN_NETWORK_SEGMENTATION_ENABLE"] = "false"
4158+
data.Data["OVN_ROUTE_ADVERTISEMENTS_ENABLE"] = "false"
4159+
data.Data["OVN_OBSERVABILITY_ENABLE"] = "false"
4160+
data.Data["OVN_MULTI_NETWORK_POLICY_ENABLE"] = "false"
4161+
data.Data["OVN_ADMIN_NETWORK_POLICY_ENABLE"] = "false"
4162+
data.Data["DNS_NAME_RESOLVER_ENABLE"] = "false"
4163+
data.Data["IP_FORWARDING_MODE"] = "Restricted"
4164+
data.Data["NETWORK_NODE_IDENTITY_ENABLE"] = "false"
4165+
data.Data["NodeIdentityCertDuration"] = "24h"
4166+
data.Data["V4JoinSubnet"] = ""
4167+
data.Data["V6JoinSubnet"] = ""
4168+
data.Data["V4MasqueradeSubnet"] = ""
4169+
data.Data["V6MasqueradeSubnet"] = ""
4170+
data.Data["V4TransitSwitchSubnet"] = ""
4171+
data.Data["V6TransitSwitchSubnet"] = ""
4172+
data.Data["OVNPolicyAuditRateLimit"] = "20"
4173+
data.Data["IsNetworkTypeLiveMigration"] = false
4174+
data.Data["OVNIPsecEnable"] = false
4175+
data.Data["OVNIPsecEncap"] = "Auto"
4176+
4177+
// Render the script-lib template
4178+
scriptLibPath := "../../bindata/network/ovn-kubernetes/common/008-script-lib.yaml"
4179+
objs, err := render.RenderTemplate(scriptLibPath, &data)
4180+
g.Expect(err).NotTo(HaveOccurred(), "Template rendering should succeed for %s", tc.name)
4181+
g.Expect(objs).To(HaveLen(1), "Should render exactly one object")
4182+
4183+
// Verify it's a ConfigMap with the expected name
4184+
obj := objs[0]
4185+
g.Expect(obj.GetKind()).To(Equal("ConfigMap"))
4186+
g.Expect(obj.GetName()).To(Equal("ovnkube-script-lib"))
4187+
4188+
// Extract the script content from the ConfigMap
4189+
scriptData, found, err := uns.NestedString(obj.Object, "data", "ovnkube-lib.sh")
4190+
g.Expect(err).NotTo(HaveOccurred())
4191+
g.Expect(found).To(BeTrue(), "Should find ovnkube-lib.sh in ConfigMap data")
4192+
4193+
// Validate gateway interface assignment
4194+
expectedGatewayAssignment := fmt.Sprintf("gateway_interface=%s", tc.expectedGatewayInterface)
4195+
g.Expect(scriptData).To(ContainSubstring(expectedGatewayAssignment),
4196+
"Script should contain correct gateway interface assignment for %s mode", tc.ovnNodeMode)
4197+
4198+
// Validate that gateway_mode_flags uses the variable
4199+
g.Expect(scriptData).To(ContainSubstring("--gateway-interface ${gateway_interface}"),
4200+
"Script should use gateway_interface variable in gateway_mode_flags")
4201+
4202+
})
4203+
}
4204+
}

0 commit comments

Comments
 (0)