Skip to content

Commit 92158c6

Browse files
committed
add e2e test script
Signed-off-by: clyi <clyi@alauda.io>
1 parent d8198f3 commit 92158c6

File tree

2 files changed

+55
-27
lines changed

2 files changed

+55
-27
lines changed

pkg/controller/pod.go

+23-27
Original file line numberDiff line numberDiff line change
@@ -1163,10 +1163,12 @@ func (c *Controller) syncKubeOvnNet(cachedPod, pod *v1.Pod, podNets []*kubeovnNe
11631163
portName := ovs.PodNameToPortName(podName, pod.Namespace, podNet.ProviderName)
11641164
targetPortNameList.Add(portName)
11651165
if podNet.IPRequest != "" {
1166+
klog.Infof("pod %s/%s use custom IP %s for provider %s", pod.Namespace, pod.Name, podNet.IPRequest, podNet.ProviderName)
11661167
annotationsNeedToAdd[fmt.Sprintf(util.IPAddressAnnotationTemplate, podNet.ProviderName)] = podNet.IPRequest
11671168
}
11681169

11691170
if podNet.MacRequest != "" {
1171+
klog.Infof("pod %s/%s use custom MAC %s for provider %s", pod.Namespace, pod.Name, podNet.MacRequest, podNet.ProviderName)
11701172
annotationsNeedToAdd[fmt.Sprintf(util.MacAddressAnnotationTemplate, podNet.ProviderName)] = podNet.MacRequest
11711173
}
11721174
}
@@ -1194,42 +1196,39 @@ func (c *Controller) syncKubeOvnNet(cachedPod, pod *v1.Pod, podNets []*kubeovnNe
11941196
return pod, nil
11951197
}
11961198

1197-
if len(portsNeedToDel) > 0 {
1198-
for _, portNeedDel := range portsNeedToDel {
1199-
klog.Infof("release port %s for pod %s", portNeedDel, podName)
1200-
if subnet, ok := c.ipam.Subnets[subnetUsedByPort[portNeedDel]]; ok {
1201-
subnet.ReleaseAddressWithNicName(podName, portNeedDel)
1202-
}
1203-
if err := c.OVNNbClient.DeleteLogicalSwitchPort(portNeedDel); err != nil {
1204-
klog.Errorf("failed to delete lsp %s, %v", portNeedDel, err)
1199+
for _, portNeedDel := range portsNeedToDel {
1200+
klog.Infof("release port %s for pod %s", portNeedDel, podName)
1201+
if subnet, ok := c.ipam.Subnets[subnetUsedByPort[portNeedDel]]; ok {
1202+
subnet.ReleaseAddressWithNicName(podName, portNeedDel)
1203+
}
1204+
if err := c.OVNNbClient.DeleteLogicalSwitchPort(portNeedDel); err != nil {
1205+
klog.Errorf("failed to delete lsp %s, %v", portNeedDel, err)
1206+
return nil, err
1207+
}
1208+
if err := c.config.KubeOvnClient.KubeovnV1().IPs().Delete(context.Background(), portNeedDel, metav1.DeleteOptions{}); err != nil {
1209+
if !k8serrors.IsNotFound(err) {
1210+
klog.Errorf("failed to delete ip %s, %v", portNeedDel, err)
12051211
return nil, err
12061212
}
1207-
if err := c.config.KubeOvnClient.KubeovnV1().IPs().Delete(context.Background(), portNeedDel, metav1.DeleteOptions{}); err != nil {
1208-
if !k8serrors.IsNotFound(err) {
1209-
klog.Errorf("failed to delete ip %s, %v", portNeedDel, err)
1210-
return nil, err
1211-
}
1212-
}
12131213
}
1214+
}
12141215

1215-
for _, providerName := range annotationsNeedToDel {
1216-
for annotationKey := range pod.Annotations {
1217-
if strings.HasPrefix(annotationKey, providerName) {
1218-
delete(pod.Annotations, annotationKey)
1219-
}
1216+
for _, providerName := range annotationsNeedToDel {
1217+
for annotationKey := range pod.Annotations {
1218+
if strings.HasPrefix(annotationKey, providerName) {
1219+
delete(pod.Annotations, annotationKey)
12201220
}
12211221
}
12221222
}
12231223

1224-
if len(annotationsNeedToAdd) > 0 {
1225-
for annotationKey, annotationValue := range annotationsNeedToAdd {
1226-
pod.Annotations[annotationKey] = annotationValue
1227-
}
1224+
for annotationKey, annotationValue := range annotationsNeedToAdd {
1225+
pod.Annotations[annotationKey] = annotationValue
12281226
}
12291227

12301228
if len(cachedPod.Annotations) == len(pod.Annotations) {
12311229
return pod, nil
12321230
}
1231+
12331232
patch, err := util.GenerateMergePatchPayload(cachedPod, pod)
12341233
if err != nil {
12351234
klog.Errorf("failed to generate patch payload for pod '%s', %v", pod.Name, err)
@@ -1572,10 +1571,7 @@ func (c *Controller) getPodAttachmentNet(pod *v1.Pod) ([]*kubeovnNet, error) {
15721571
ret.IPRequest = attach.IPRequest[0]
15731572
}
15741573

1575-
if attach.MacRequest != "" {
1576-
ret.MacRequest = attach.MacRequest
1577-
}
1578-
1574+
ret.MacRequest = attach.MacRequest
15791575
result = append(result, ret)
15801576
} else {
15811577
providerName = fmt.Sprintf("%s.%s", attach.Name, attach.Namespace)

test/e2e/multus/e2e_test.go

+32
Original file line numberDiff line numberDiff line change
@@ -431,4 +431,36 @@ var _ = framework.SerialDescribe("[group:multus]", func() {
431431
framework.ExpectContainElement(actualRoutes, request.Route{Destination: ipv6RouteDst, Gateway: ipv6RouteGw})
432432
}
433433
})
434+
435+
framework.ConformanceIt("should be able to use mac and ip provided by k8s.v1.cni.cncf.io/networks annotation", func() {
436+
provider := fmt.Sprintf("%s.%s.%s", nadName, namespaceName, util.OvnProvider)
437+
ginkgo.By("Creating network attachment definition " + nadName)
438+
nad := framework.MakeOVNNetworkAttachmentDefinition(nadName, namespaceName, provider, nil)
439+
nad = nadClient.Create(nad)
440+
framework.Logf("created network attachment definition config:\n%s", nad.Spec.Config)
441+
442+
ginkgo.By("Creating subnet " + subnetName)
443+
subnet = framework.MakeSubnet(subnetName, "", cidr, "", "", provider, nil, nil, nil)
444+
subnet = subnetClient.CreateSync(subnet)
445+
446+
ginkgo.By("Creating pod " + podName)
447+
mac := "00:00:00:11:22:33"
448+
randomIP := framework.RandomIPs(subnet.Spec.CIDRBlock, "", 1)
449+
450+
annotations := map[string]string{nadv1.NetworkAttachmentAnnot: fmt.Sprintf(`[{"name": "%s", "namespace": "%s", "mac": "%s", "ips": ["%s"]}]`, nad.Name, nad.Namespace, mac, randomIP)}
451+
annotations[fmt.Sprintf(util.LogicalSwitchAnnotationTemplate, provider)] = subnetName
452+
453+
cmd := []string{"sh", "-c", "sleep infinity"}
454+
pod := framework.MakePrivilegedPod(namespaceName, podName, nil, annotations, f.KubeOVNImage, cmd, nil)
455+
pod = podClient.CreateSync(pod)
456+
457+
ginkgo.By("Validating pod annotations")
458+
framework.ExpectHaveKey(pod.Annotations, nadv1.NetworkStatusAnnot)
459+
framework.Logf("pod network status:\n%s", pod.Annotations[nadv1.NetworkStatusAnnot])
460+
retMac := pod.Annotations[fmt.Sprintf(util.MacAddressAnnotationTemplate, provider)]
461+
retIP := pod.Annotations[fmt.Sprintf(util.IPAddressAnnotationTemplate, provider)]
462+
463+
framework.ExpectEqual(mac, retMac)
464+
framework.ExpectEqual(randomIP, retIP)
465+
})
434466
})

0 commit comments

Comments
 (0)