• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

kubeovn / kube-ovn / 16612141263

30 Jul 2025 02:41AM UTC coverage: 21.453% (+0.03%) from 21.423%
16612141263

push

github

web-flow
support nodeselector for providerNetwork (#5518)

* support nodeselector for providerNetwork

Signed-off-by: Mengxin Liu <liumengxinfly@gmail.com>

* add codegen

Signed-off-by: Mengxin Liu <liumengxinfly@gmail.com>

---------

Signed-off-by: Mengxin Liu <liumengxinfly@gmail.com>

22 of 39 new or added lines in 5 files covered. (56.41%)

2 existing lines in 1 file now uncovered.

10561 of 49229 relevant lines covered (21.45%)

0.25 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/pkg/controller/provider_network.go
1
package controller
2

3
import (
4
        "context"
5
        "fmt"
6
        "slices"
7

8
        corev1 "k8s.io/api/core/v1"
9
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
10
        "k8s.io/apimachinery/pkg/labels"
11
        "k8s.io/klog/v2"
12

13
        "github.com/kubeovn/kube-ovn/pkg/util"
14
)
15

16
func (c *Controller) resyncProviderNetworkStatus() {
×
17
        klog.V(3).Infof("start to sync ProviderNetwork status")
×
18
        pns, err := c.providerNetworksLister.List(labels.Everything())
×
19
        if err != nil {
×
20
                klog.Errorf("failed to list provider network: %v", err)
×
21
                return
×
22
        }
×
23

24
        nodes, err := c.nodesLister.List(labels.Everything())
×
25
        if err != nil {
×
26
                klog.Errorf("failed to list nodes: %v", err)
×
27
                return
×
28
        }
×
29

30
        pods, err := c.podsLister.Pods("").List(labels.Set{"app": "kube-ovn-cni"}.AsSelector())
×
31
        if err != nil {
×
32
                klog.Errorf("failed to list kube-ovn-cni pods: %v", err)
×
33
                return
×
34
        }
×
35

36
        podMap := make(map[string]*corev1.Pod, len(pods))
×
37
        for _, pod := range pods {
×
38
                podMap[pod.Spec.NodeName] = pod
×
39
        }
×
40

41
        for _, cachedPn := range pns {
×
42
                pn := cachedPn.DeepCopy()
×
43
                var readyNodes, notReadyNodes, expectNodes []string
×
44
                pnReadyAnnotation := fmt.Sprintf(util.ProviderNetworkReadyTemplate, pn.Name)
×
45
                pnErrMsgAnnotation := fmt.Sprintf(util.ProviderNetworkErrMessageTemplate, pn.Name)
×
46

×
47
                var conditionsUpdated bool
×
48
                for _, node := range nodes {
×
NEW
49
                        excluded, err := util.IsNodeExcludedFromProviderNetwork(node, pn)
×
NEW
50
                        if err != nil {
×
NEW
51
                                klog.Errorf("failed to check if node %s is excluded from provider network %s: %v", node.Name, pn.Name, err)
×
NEW
52
                                continue
×
53
                        }
NEW
54
                        if excluded {
×
55
                                if pn.Status.RemoveNodeConditions(node.Name) {
×
56
                                        conditionsUpdated = true
×
57
                                }
×
58
                                continue
×
59
                        }
60
                        if node.Labels[pnReadyAnnotation] == "true" {
×
61
                                if pn.Status.SetNodeReady(node.Name, "InitOVSBridgeSucceeded", "") {
×
62
                                        conditionsUpdated = true
×
63
                                }
×
64
                                readyNodes = append(readyNodes, node.Name)
×
65
                        } else {
×
66
                                var errMsg string
×
67
                                if pod := podMap[node.Name]; pod == nil {
×
68
                                        errMsg = fmt.Sprintf("kube-ovn-cni pod on node %s not found", node.Name)
×
69
                                        klog.Error(errMsg)
×
70
                                } else {
×
71
                                        if len(pod.Annotations) != 0 {
×
72
                                                errMsg = pod.Annotations[pnErrMsgAnnotation]
×
73
                                        }
×
74
                                        if errMsg == "" {
×
75
                                                errMsg = "unknown error"
×
76
                                        }
×
77
                                }
78

79
                                if pn.Status.SetNodeNotReady(node.Name, "InitOVSBridgeFailed", errMsg) {
×
80
                                        conditionsUpdated = true
×
81
                                }
×
82
                                notReadyNodes = append(notReadyNodes, node.Name)
×
83
                        }
84
                }
85

86
                expectNodes = append(readyNodes, notReadyNodes...)
×
87
                for _, c := range pn.Status.Conditions {
×
88
                        if !slices.Contains(expectNodes, c.Node) {
×
89
                                if pn.Status.RemoveNodeConditions(c.Node) {
×
90
                                        conditionsUpdated = true
×
91
                                }
×
92
                        }
93
                }
94

95
                if conditionsUpdated || len(util.DiffStringSlice(pn.Status.ReadyNodes, readyNodes)) != 0 ||
×
96
                        len(util.DiffStringSlice(pn.Status.NotReadyNodes, notReadyNodes)) != 0 {
×
97
                        pn.Status.ReadyNodes = readyNodes
×
98
                        pn.Status.NotReadyNodes = notReadyNodes
×
99
                        pn.Status.Ready = (len(notReadyNodes) == 0)
×
100
                        if _, err = c.config.KubeOvnClient.KubeovnV1().ProviderNetworks().UpdateStatus(context.Background(), pn, metav1.UpdateOptions{}); err != nil {
×
101
                                klog.Errorf("failed to update status of provider network %s: %v", pn.Name, err)
×
102
                        }
×
103
                }
104
        }
105
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc