Skip to content

Commit 55b1cb3

Browse files
authored
refactor: unify type constants (#6081)
Signed-off-by: zhangzujian <zhangzujian.7@gmail.com>
1 parent 475cf53 commit 55b1cb3

File tree

19 files changed

+217
-178
lines changed

19 files changed

+217
-178
lines changed

cmd/controller/controller.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"sigs.k8s.io/controller-runtime/pkg/manager"
2626
"sigs.k8s.io/controller-runtime/pkg/manager/signals"
2727

28+
"github.com/kubeovn/kube-ovn/pkg/apis/kubeovn"
2829
kubeovnv1 "github.com/kubeovn/kube-ovn/pkg/apis/kubeovn/v1"
2930
"github.com/kubeovn/kube-ovn/pkg/controller"
3031
"github.com/kubeovn/kube-ovn/pkg/metrics"
@@ -137,7 +138,7 @@ func CmdMain() {
137138
Component: ovnLeaderResource,
138139
Host: os.Getenv(util.HostnameEnv),
139140
})
140-
rl, err := resourcelock.NewFromKubeconfig("leases",
141+
rl, err := resourcelock.NewFromKubeconfig(resourcelock.LeasesResourceLock,
141142
config.PodNamespace,
142143
ovnLeaderResource,
143144
resourcelock.ResourceLockConfig{
@@ -183,7 +184,7 @@ func checkPermission(config *controller.Configuration) error {
183184
Spec: v1.SelfSubjectAccessReviewSpec{
184185
ResourceAttributes: &v1.ResourceAttributes{
185186
Verb: "watch",
186-
Group: "kubeovn.io",
187+
Group: kubeovn.GroupName,
187188
Resource: res,
188189
},
189190
},

pkg/controller/controller.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@ import (
1313
"github.com/puzpuzpuz/xsync/v4"
1414
"golang.org/x/time/rate"
1515
corev1 "k8s.io/api/core/v1"
16+
k8serrors "k8s.io/apimachinery/pkg/api/errors"
1617
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1718
"k8s.io/apimachinery/pkg/labels"
1819
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
1920
"k8s.io/apimachinery/pkg/util/wait"
21+
"k8s.io/client-go/discovery"
2022
kubeinformers "k8s.io/client-go/informers"
2123
"k8s.io/client-go/kubernetes/scheme"
2224
typedcorev1 "k8s.io/client-go/kubernetes/typed/core/v1"
@@ -30,6 +32,7 @@ import (
3032
"k8s.io/client-go/util/workqueue"
3133
"k8s.io/klog/v2"
3234
"k8s.io/utils/keymutex"
35+
"k8s.io/utils/set"
3336
v1alpha1 "sigs.k8s.io/network-policy-api/apis/v1alpha1"
3437
netpolv1alpha2 "sigs.k8s.io/network-policy-api/apis/v1alpha2"
3538
anpinformer "sigs.k8s.io/network-policy-api/pkg/client/informers/externalversions"
@@ -1573,3 +1576,26 @@ func runWorker[T comparable](action string, queue workqueue.TypedRateLimitingInt
15731576
}
15741577
}
15751578
}
1579+
1580+
// apiResourceExists checks if all specified kinds exist in the given group version.
1581+
// It returns true if all kinds are found, false otherwise.
1582+
// Parameters:
1583+
// - discoveryClient: The discovery client to use for querying API resources.
1584+
// - gv: The group version string (e.g., "apps/v1").
1585+
// - kinds: A variadic list of kind names to check for existence (e.g., "Deployment", "StatefulSet").
1586+
func apiResourceExists(discoveryClient discovery.DiscoveryInterface, gv string, kinds ...string) (bool, error) {
1587+
apiResourceLists, err := discoveryClient.ServerResourcesForGroupVersion(gv)
1588+
if err != nil {
1589+
if k8serrors.IsNotFound(err) {
1590+
return false, nil
1591+
}
1592+
return false, fmt.Errorf("failed to discover api resources for %s: %w", gv, err)
1593+
}
1594+
1595+
existingKinds := set.New[string]()
1596+
for _, apiResource := range apiResourceLists.APIResources {
1597+
existingKinds.Insert(apiResource.Kind)
1598+
}
1599+
1600+
return existingKinds.HasAll(kinds...), nil
1601+
}

pkg/controller/dns_name_resolver.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -199,10 +199,6 @@ func (c *Controller) createOrUpdateDNSNameResolver(anpName, domainName string) e
199199

200200
klog.Infof("Creating or updating DNSNameResolver %s for domain %s in ANP %s", dnsNameResolverName, domainName, anpName)
201201
dnsNameResolver := &kubeovnv1.DNSNameResolver{
202-
TypeMeta: metav1.TypeMeta{
203-
Kind: "DNSNameResolver",
204-
APIVersion: "kubeovn.io/v1",
205-
},
206202
ObjectMeta: metav1.ObjectMeta{
207203
Name: dnsNameResolverName,
208204
Labels: map[string]string{

pkg/controller/gc.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ func (c *Controller) checkIPOwnerExists(ip *kubeovnv1.IP) (bool, error) {
334334
}
335335

336336
// Check if VM exists
337-
if ip.Spec.PodType == util.VM {
337+
if ip.Spec.PodType == util.KindVirtualMachine {
338338
_, err := c.config.KubevirtClient.VirtualMachine(ip.Spec.Namespace).Get(context.Background(), ip.Spec.PodName, metav1.GetOptions{})
339339
if err != nil && k8serrors.IsNotFound(err) {
340340
return false, nil
@@ -343,7 +343,7 @@ func (c *Controller) checkIPOwnerExists(ip *kubeovnv1.IP) (bool, error) {
343343
}
344344

345345
// Check if StatefulSet exists
346-
if ip.Spec.PodType == util.StatefulSet {
346+
if ip.Spec.PodType == util.KindStatefulSet {
347347
// Extract StatefulSet name from pod name by removing the last part after '-'
348348
// e.g., "vpc-nat-gw-rg-f6d4e7973976430-default-sto-1-0" -> "vpc-nat-gw-rg-f6d4e7973976430-default-sto-1"
349349
stsName := ip.Spec.PodName

pkg/controller/init.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,8 @@ func (c *Controller) InitIPAM() error {
405405
continue
406406
}
407407
// recover sts and kubevirt vm ip, other ip recover in later pod loop
408-
if ip.Spec.PodType != util.StatefulSet && ip.Spec.PodType != util.VM {
408+
if ip.Spec.PodType != util.KindStatefulSet &&
409+
ip.Spec.PodType != util.KindVirtualMachine {
409410
continue
410411
}
411412

@@ -673,7 +674,7 @@ func (c *Controller) syncIPCR() error {
673674
changed := false
674675
ip = ip.DeepCopy()
675676
if ipMap.Has(ip.Name) && ip.Spec.PodType == "" {
676-
ip.Spec.PodType = util.VM
677+
ip.Spec.PodType = util.KindVirtualMachine
677678
changed = true
678679
}
679680

pkg/controller/ip.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,9 @@ func (c *Controller) handleAddReservedIP(key string) error {
149149
return err
150150
}
151151

152-
if ip.Spec.PodType != "" && ip.Spec.PodType != util.VM && ip.Spec.PodType != util.StatefulSet {
152+
if ip.Spec.PodType != "" &&
153+
ip.Spec.PodType != util.KindVirtualMachine &&
154+
ip.Spec.PodType != util.KindStatefulSet {
153155
err := fmt.Errorf("podType %s is not supported", ip.Spec.PodType)
154156
klog.Error(err)
155157
return err

pkg/controller/kubevirt.go

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ func (c *Controller) handleAddOrUpdateVMIMigration(key string) error {
141141
case kubevirtv1.MigrationScheduling:
142142
selector, err := metav1.LabelSelectorAsSelector(&metav1.LabelSelector{
143143
MatchLabels: map[string]string{
144-
"kubevirt.io/migrationJobUID": string(vmiMigration.UID),
144+
kubevirtv1.MigrationJobLabel: string(vmiMigration.UID),
145145
},
146146
})
147147
if err != nil {
@@ -204,15 +204,13 @@ func (c *Controller) handleAddOrUpdateVMIMigration(key string) error {
204204
return nil
205205
}
206206

207-
func (c *Controller) isKubevirtCRDInstalled() bool {
208-
for _, crd := range util.KubeVirtCRD {
209-
_, err := c.config.ExtClient.ApiextensionsV1().CustomResourceDefinitions().Get(context.TODO(), crd, metav1.GetOptions{})
210-
if err != nil {
211-
return false
212-
}
213-
}
214-
klog.Info("Found KubeVirt CRDs")
215-
return true
207+
func (c *Controller) isKubevirtCRDInstalled() (bool, error) {
208+
return apiResourceExists(c.config.KubevirtClient.Discovery(),
209+
kubevirtv1.GroupVersion.String(),
210+
util.KindVirtualMachine,
211+
util.KindVirtualMachineInstance,
212+
util.KindVirtualMachineInstanceMigration,
213+
)
216214
}
217215

218216
func (c *Controller) StartKubevirtInformerFactory(ctx context.Context, kubevirtInformerFactory informer.KubeVirtInformerFactory) {
@@ -222,7 +220,12 @@ func (c *Controller) StartKubevirtInformerFactory(ctx context.Context, kubevirtI
222220
for {
223221
select {
224222
case <-ticker.C:
225-
if c.isKubevirtCRDInstalled() {
223+
ok, err := c.isKubevirtCRDInstalled()
224+
if err != nil {
225+
klog.Errorf("checking kubevirt CRD exists: %v", err)
226+
continue
227+
}
228+
if ok {
226229
klog.Info("Start kubevirt informer")
227230
vmiMigrationInformer := kubevirtInformerFactory.VirtualMachineInstanceMigration()
228231
vmInformer := kubevirtInformerFactory.VirtualMachine()

pkg/controller/network_attachment.go

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,23 @@ package controller
33
import (
44
"context"
55
"encoding/json"
6-
"fmt"
76
"time"
87

8+
nadv1 "github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/apis/k8s.cni.cncf.io/v1"
99
"gopkg.in/k8snetworkplumbingwg/multus-cni.v4/pkg/logging"
1010
multustypes "gopkg.in/k8snetworkplumbingwg/multus-cni.v4/pkg/types"
11-
k8serrors "k8s.io/apimachinery/pkg/api/errors"
1211
"k8s.io/client-go/tools/cache"
1312
"k8s.io/klog/v2"
1413

1514
"github.com/kubeovn/kube-ovn/pkg/util"
1615
)
1716

1817
func (c *Controller) isNetAttachCRDInstalled() (bool, error) {
19-
resources, err := c.config.AttachNetClient.Discovery().ServerResourcesForGroupVersion("k8s.cni.cncf.io/v1")
20-
if err != nil {
21-
if k8serrors.IsNotFound(err) {
22-
return false, nil
23-
}
24-
return false, fmt.Errorf("getting server resources for k8s.cni.cncf.io/v1; %w", err)
25-
}
26-
27-
for _, resource := range resources.APIResources {
28-
if resource.Name == "network-attachment-definitions" {
29-
return true, nil
30-
}
31-
}
32-
return false, nil
18+
return apiResourceExists(
19+
c.config.AttachNetClient.Discovery(),
20+
nadv1.SchemeGroupVersion.String(),
21+
util.ObjectKind[*nadv1.NetworkAttachmentDefinition](),
22+
)
3323
}
3424

3525
// the network-attachment-definition CRD is not required to be installed so

pkg/controller/pod.go

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
nadv1 "github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/apis/k8s.cni.cncf.io/v1"
1717
nadutils "github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/utils"
1818
"github.com/scylladb/go-set/strset"
19+
appsv1 "k8s.io/api/apps/v1"
1920
v1 "k8s.io/api/core/v1"
2021
k8serrors "k8s.io/apimachinery/pkg/api/errors"
2122
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -26,6 +27,7 @@ import (
2627
"k8s.io/client-go/tools/cache"
2728
"k8s.io/klog/v2"
2829
"k8s.io/utils/ptr"
30+
kubevirtv1 "kubevirt.io/api/core/v1"
2931

3032
kubeovnv1 "github.com/kubeovn/kube-ovn/pkg/apis/kubeovn/v1"
3133
"github.com/kubeovn/kube-ovn/pkg/ipam"
@@ -1049,7 +1051,7 @@ func (c *Controller) handleDeletePod(key string) (err error) {
10491051
}
10501052
}
10511053
if keepIPCR {
1052-
isDelete, err := appendCheckPodNonMultusNetToDel(c, pod, stsName, util.StatefulSet)
1054+
isDelete, err := appendCheckPodNonMultusNetToDel(c, pod, stsName, util.KindStatefulSet)
10531055
if err != nil {
10541056
klog.Error(err)
10551057
return err
@@ -1083,7 +1085,7 @@ func (c *Controller) handleDeletePod(key string) (err error) {
10831085
}
10841086
}
10851087
if keepIPCR {
1086-
isDelete, err := appendCheckPodNonMultusNetToDel(c, pod, vmName, util.VMInstance)
1088+
isDelete, err := appendCheckPodNonMultusNetToDel(c, pod, vmName, util.KindVirtualMachineInstance)
10871089
if err != nil {
10881090
klog.Error(err)
10891091
return err
@@ -1399,7 +1401,7 @@ func (c *Controller) syncKubeOvnNet(pod *v1.Pod, podNets []*kubeovnNet) (*v1.Pod
13991401

14001402
func isStatefulSetPod(pod *v1.Pod) (bool, string, types.UID) {
14011403
for _, owner := range pod.OwnerReferences {
1402-
if owner.Kind == util.StatefulSet && strings.HasPrefix(owner.APIVersion, "apps/") {
1404+
if owner.Kind == util.KindStatefulSet && strings.HasPrefix(owner.APIVersion, appsv1.SchemeGroupVersion.Group+"/") {
14031405
if strings.HasPrefix(pod.Name, owner.Name) {
14041406
return true, owner.Name, owner.UID
14051407
}
@@ -1543,7 +1545,7 @@ func needAllocateSubnets(pod *v1.Pod, nets []*kubeovnNet) []*kubeovnNet {
15431545
}
15441546

15451547
migrate := false
1546-
if job, ok := pod.Annotations[util.MigrationJobAnnotation]; ok {
1548+
if job, ok := pod.Annotations[kubevirtv1.MigrationJobNameAnnotation]; ok {
15471549
klog.Infof("pod %s/%s is in the migration job %s", pod.Namespace, pod.Name, job)
15481550
migrate = true
15491551
}
@@ -1844,7 +1846,7 @@ func (c *Controller) getPodAttachmentNet(pod *v1.Pod) ([]*kubeovnNet, error) {
18441846
isDefault := util.IsDefaultNet(pod.Annotations[util.DefaultNetworkAnnotation], attach)
18451847

18461848
providerName = fmt.Sprintf("%s.%s.%s", attach.Name, attach.Namespace, util.OvnProvider)
1847-
if pod.Annotations[util.MigrationJobAnnotation] != "" {
1849+
if pod.Annotations[kubevirtv1.MigrationJobNameAnnotation] != "" {
18481850
allowLiveMigration = true
18491851
}
18501852

@@ -2222,7 +2224,7 @@ func appendCheckPodNonMultusNetToDel(c *Controller, pod *v1.Pod, ownerRefName, o
22222224
var ownerRefSubnetExist bool
22232225
var ownerRefSubnet string
22242226
switch ownerRefKind {
2225-
case util.StatefulSet:
2227+
case util.KindStatefulSet:
22262228
ss, err := c.config.KubeClient.AppsV1().StatefulSets(pod.Namespace).Get(context.Background(), ownerRefName, metav1.GetOptions{})
22272229
if err != nil {
22282230
if k8serrors.IsNotFound(err) {
@@ -2236,7 +2238,7 @@ func appendCheckPodNonMultusNetToDel(c *Controller, pod *v1.Pod, ownerRefName, o
22362238
ownerRefSubnet = ss.Spec.Template.Annotations[util.LogicalSwitchAnnotation]
22372239
}
22382240

2239-
case util.VMInstance:
2241+
case util.KindVirtualMachineInstance:
22402242
vm, err := c.config.KubevirtClient.VirtualMachine(pod.Namespace).Get(context.Background(), ownerRefName, metav1.GetOptions{})
22412243
if err != nil {
22422244
if k8serrors.IsNotFound(err) {
@@ -2311,7 +2313,8 @@ func appendCheckPodNonMultusNetToDel(c *Controller, pod *v1.Pod, ownerRefName, o
23112313
func isVMPod(pod *v1.Pod) (bool, string) {
23122314
for _, owner := range pod.OwnerReferences {
23132315
// The name of vmi is consistent with vm's name.
2314-
if owner.Kind == util.VMInstance && strings.HasPrefix(owner.APIVersion, "kubevirt.io") {
2316+
if owner.Kind == util.KindVirtualMachineInstance &&
2317+
strings.HasPrefix(owner.APIVersion, kubevirtv1.SchemeGroupVersion.Group+"/") {
23152318
return true, owner.Name
23162319
}
23172320
}
@@ -2320,7 +2323,8 @@ func isVMPod(pod *v1.Pod) (bool, string) {
23202323

23212324
func isOwnsByTheVM(vmi metav1.Object) (bool, string) {
23222325
for _, owner := range vmi.GetOwnerReferences() {
2323-
if owner.Kind == util.VM && strings.HasPrefix(owner.APIVersion, "kubevirt.io") {
2326+
if owner.Kind == util.KindVirtualMachine &&
2327+
strings.HasPrefix(owner.APIVersion, kubevirtv1.SchemeGroupVersion.Group+"/") {
23242328
return true, owner.Name
23252329
}
23262330
}
@@ -2422,11 +2426,11 @@ func (c *Controller) getNsAvailableSubnets(pod *v1.Pod, podNet *kubeovnNet) ([]*
24222426

24232427
func getPodType(pod *v1.Pod) string {
24242428
if ok, _, _ := isStatefulSetPod(pod); ok {
2425-
return util.StatefulSet
2429+
return util.KindStatefulSet
24262430
}
24272431

24282432
if isVMPod, _ := isVMPod(pod); isVMPod {
2429-
return util.VM
2433+
return util.KindVirtualMachine
24302434
}
24312435
return ""
24322436
}

pkg/daemon/controller.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"k8s.io/client-go/util/workqueue"
2828
"k8s.io/klog/v2"
2929
k8sexec "k8s.io/utils/exec"
30+
kubevirtv1 "kubevirt.io/api/core/v1"
3031

3132
kubeovnv1 "github.com/kubeovn/kube-ovn/pkg/apis/kubeovn/v1"
3233
kubeovninformer "github.com/kubeovn/kube-ovn/pkg/client/informers/externalversions"
@@ -766,7 +767,7 @@ func (c *Controller) gcInterfaces() {
766767
// The actual launcher pod has the label 'vm.kubevirt.io/name' with the VM name as value.
767768
// Try to find launcher pods by this label.
768769
if k8serrors.IsNotFound(err) {
769-
selector := labels.SelectorFromSet(map[string]string{util.KubeVirtVMNameLabel: podName})
770+
selector := labels.SelectorFromSet(map[string]string{kubevirtv1.DeprecatedVirtualMachineNameLabel: podName})
770771
launcherPods, listErr := c.podsLister.Pods(podNamespace).List(selector)
771772
if listErr != nil {
772773
klog.Errorf("failed to list launcher pods for vm %s/%s: %v", podNamespace, podName, listErr)

0 commit comments

Comments
 (0)