From 74012deb27fabe2d933f911155e9c88da20913d2 Mon Sep 17 00:00:00 2001 From: Philip Laine Date: Thu, 30 Apr 2026 13:39:11 +0200 Subject: [PATCH] Enforce import ordering and aliases (#216) This change ensures import ordering and aliases is standardized. Something that is extra important when working with Kuberentes apis that have "standard" import aliases. Signed-off-by: Philip Laine --- .golangci.yml | 76 +++++++-- api/v1/nbgroup_types.go | 3 +- api/v1/nbpolicy_types.go | 3 +- api/v1/nbresource_types.go | 3 +- api/v1/nbroutingpeer_types.go | 3 +- cmd/main.go | 34 ++-- internal/controller/gateway_controller.go | 30 ++-- .../controller/gatewayclass_controller.go | 21 +-- internal/controller/group_controller.go | 5 +- internal/controller/httproute_controller.go | 15 +- internal/controller/nbgroup_controller.go | 29 ++-- .../controller/nbgroup_controller_test.go | 39 ++--- internal/controller/nbpolicy_controller.go | 47 +++--- .../controller/nbpolicy_controller_test.go | 52 +++--- internal/controller/nbresource_controller.go | 93 +++++------ .../controller/nbresource_controller_test.go | 152 +++++++++--------- .../controller/nbroutingpeer_controller.go | 107 ++++++------ .../nbroutingpeer_controller_test.go | 46 +++--- internal/controller/nbsetupkey_controller.go | 42 ++--- .../controller/nbsetupkey_controller_test.go | 33 ++-- .../controller/networkresource_controller.go | 5 +- .../networkresource_controller_test.go | 3 +- .../controller/networkrouter_controller.go | 9 +- .../networkrouter_controller_test.go | 3 +- internal/controller/service_controller.go | 20 +-- .../controller/service_controller_test.go | 79 ++++----- internal/controller/setupkey_controller.go | 5 +- internal/controller/suite_test.go | 15 +- internal/controller/tcproute_controller.go | 14 +- internal/netbirdutil/group.go | 3 +- internal/webhook/v1/nbgroup_webhook.go | 20 +-- internal/webhook/v1/nbgroup_webhook_test.go | 56 +++---- internal/webhook/v1/pod_webhook.go | 6 +- internal/webhook/v1/pod_webhook_test.go | 15 +- internal/webhook/v1/webhook_suite_test.go | 10 +- 35 files changed, 584 insertions(+), 512 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 59bb181..aafd70e 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,6 +1,4 @@ version: "2" -run: - allow-parallel-runners: true linters: default: none enable: @@ -21,12 +19,65 @@ linters: - unconvert - unparam - unused + - importas settings: revive: rules: - name: comment-spacings staticcheck: checks: ["all", "-ST1000", "-ST1003", "-ST1016", "-ST1020", "-ST1021", "-ST1022", "-QF1008", "-SA1019"] + importas: + alias: + - pkg: github.com/netbirdio/netbird/shared/management/client/rest + alias: netbird + + - pkg: github.com/netbirdio/kubernetes-operator/internal/webhook/v1 + alias: nbwebhookv1 + - pkg: github.com/netbirdio/kubernetes-operator/api/v1 + alias: nbv1 + - pkg: github.com/netbirdio/kubernetes-operator/api/v1alpha1 + alias: nbv1alpha1 + - pkg: github.com/netbirdio/kubernetes-operator/pkg/applyconfigurations/api/v1alpha1 + alias: nbv1alpha1ac + + - pkg: sigs.k8s.io/controller-runtime + alias: ctrl + - pkg: sigs.k8s.io/controller-runtime/pkg/log + alias: logf + - pkg: k8s.io/apimachinery/pkg/api/errors + alias: kerrors + - pkg: k8s.io/client-go/kubernetes/scheme + alias: clientgoscheme + - pkg: k8s.io/apimachinery/pkg/runtime + alias: apimachineryruntime + - pkg: k8s.io/apimachinery/pkg/util/runtime + alias: utilruntime + - pkg: sigs.k8s.io/controller-runtime/pkg/metrics/server + alias: metricsserver + - pkg: k8s.io/apimachinery/pkg/apis/meta/v1 + alias: metav1 + - pkg: k8s.io/api/core/v1 + alias: corev1 + - pkg: k8s.io/api/apps/v1 + alias: appsv1 + - pkg: k8s.io/api/admission/v1 + alias: admissionv1 + - pkg: k8s.io/api/policy/v1 + alias: policyv1 + - pkg: k8s.io/client-go/applyconfigurations/meta/v1 + alias: metav1ac + - pkg: k8s.io/client-go/applyconfigurations/core/v1 + alias: corev1ac + - pkg: k8s.io/client-go/applyconfigurations/apps/v1 + alias: appsv1ac + - pkg: k8s.io/client-go/applyconfigurations/policy/v1 + alias: policyv1ac + + - pkg: sigs.k8s.io/gateway-api/apis/v1 + alias: gwv1 + - pkg: sigs.k8s.io/gateway-api/apis/v1alpha2 + alias: gwv1alpha2 + no-extra-aliases: true exclusions: generated: lax rules: @@ -43,11 +94,18 @@ linters: - examples$ formatters: enable: + - gci - gofmt - - goimports - exclusions: - generated: lax - paths: - - third_party$ - - builtin$ - - examples$ + settings: + gci: + sections: + - blank + - standard + - prefix(golang.org/x) + - default + - prefix(github.com/netbirdio) + - localmodule + no-inline-comments: true + no-prefix-comments: true + custom-order: true + diff --git a/api/v1/nbgroup_types.go b/api/v1/nbgroup_types.go index f6610f3..24bb509 100644 --- a/api/v1/nbgroup_types.go +++ b/api/v1/nbgroup_types.go @@ -1,8 +1,9 @@ package v1 import ( - "github.com/netbirdio/kubernetes-operator/internal/util" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/netbirdio/kubernetes-operator/internal/util" ) // NBGroupSpec defines the desired state of NBGroup. diff --git a/api/v1/nbpolicy_types.go b/api/v1/nbpolicy_types.go index b05d32d..f64a53e 100644 --- a/api/v1/nbpolicy_types.go +++ b/api/v1/nbpolicy_types.go @@ -1,8 +1,9 @@ package v1 import ( - "github.com/netbirdio/kubernetes-operator/internal/util" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/netbirdio/kubernetes-operator/internal/util" ) // NBPolicySpec defines the desired state of NBPolicy. diff --git a/api/v1/nbresource_types.go b/api/v1/nbresource_types.go index ebb256e..ef45533 100644 --- a/api/v1/nbresource_types.go +++ b/api/v1/nbresource_types.go @@ -3,8 +3,9 @@ package v1 import ( "maps" - "github.com/netbirdio/kubernetes-operator/internal/util" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/netbirdio/kubernetes-operator/internal/util" ) // NBResourceSpec defines the desired state of NBResource. diff --git a/api/v1/nbroutingpeer_types.go b/api/v1/nbroutingpeer_types.go index 8cc8890..8553374 100644 --- a/api/v1/nbroutingpeer_types.go +++ b/api/v1/nbroutingpeer_types.go @@ -1,9 +1,10 @@ package v1 import ( - "github.com/netbirdio/kubernetes-operator/internal/util" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/netbirdio/kubernetes-operator/internal/util" ) // NBRoutingPeerSpec defines the desired state of NBRoutingPeer. diff --git a/cmd/main.go b/cmd/main.go index b7bfb18..ef5e087 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -17,6 +17,10 @@ limitations under the License. package main import ( + // Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.) + // to ensure that exec-entrypoint and run can make use of them. + _ "k8s.io/client-go/plugin/pkg/client/auth" + "crypto/tls" "errors" "flag" @@ -25,11 +29,6 @@ import ( "path/filepath" "strings" - // Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.) - // to ensure that exec-entrypoint and run can make use of them. - _ "k8s.io/client-go/plugin/pkg/client/auth" - - netbird "github.com/netbirdio/netbird/shared/management/client/rest" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime" @@ -41,14 +40,15 @@ import ( "sigs.k8s.io/controller-runtime/pkg/log/zap" metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" "sigs.k8s.io/controller-runtime/pkg/webhook" - gatewayv1 "sigs.k8s.io/gateway-api/apis/v1" - gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2" + gwv1 "sigs.k8s.io/gateway-api/apis/v1" + gwv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2" - netbirdiov1 "github.com/netbirdio/kubernetes-operator/api/v1" - netbirdiov1alpha1 "github.com/netbirdio/kubernetes-operator/api/v1alpha1" + netbird "github.com/netbirdio/netbird/shared/management/client/rest" + + nbv1 "github.com/netbirdio/kubernetes-operator/api/v1" + nbv1alpha1 "github.com/netbirdio/kubernetes-operator/api/v1alpha1" "github.com/netbirdio/kubernetes-operator/internal/controller" - webhooknetbirdiov1 "github.com/netbirdio/kubernetes-operator/internal/webhook/v1" - // +kubebuilder:scaffold:imports + nbwebhookv1 "github.com/netbirdio/kubernetes-operator/internal/webhook/v1" ) var ( @@ -59,11 +59,11 @@ var ( func init() { utilruntime.Must(clientgoscheme.AddToScheme(scheme)) - utilruntime.Must(netbirdiov1.AddToScheme(scheme)) + utilruntime.Must(nbv1.AddToScheme(scheme)) utilruntime.Must(corev1.AddToScheme(scheme)) - utilruntime.Must(gatewayv1.Install(scheme)) - utilruntime.Must(gatewayv1alpha2.Install(scheme)) - utilruntime.Must(netbirdiov1alpha1.AddToScheme(scheme)) + utilruntime.Must(gwv1.Install(scheme)) + utilruntime.Must(gwv1alpha2.Install(scheme)) + utilruntime.Must(nbv1alpha1.AddToScheme(scheme)) // +kubebuilder:scaffold:scheme } @@ -215,7 +215,7 @@ func main() { } if enableWebhooks { - if err = webhooknetbirdiov1.SetupPodWebhookWithManager(mgr, managementURL, clientImage); err != nil { + if err = nbwebhookv1.SetupPodWebhookWithManager(mgr, managementURL, clientImage); err != nil { setupLog.Error(err, "unable to create webhook", "webhook", "Pod") os.Exit(1) } @@ -281,7 +281,7 @@ func main() { } if enableWebhooks { - if err = webhooknetbirdiov1.SetupNBGroupWebhookWithManager(mgr); err != nil { + if err = nbwebhookv1.SetupNBGroupWebhookWithManager(mgr); err != nil { setupLog.Error(err, "unable to create webhook", "webhook", "NBGroup") os.Exit(1) } diff --git a/internal/controller/gateway_controller.go b/internal/controller/gateway_controller.go index 45d4d69..644ffb9 100644 --- a/internal/controller/gateway_controller.go +++ b/internal/controller/gateway_controller.go @@ -29,7 +29,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" - gatewayv1 "sigs.k8s.io/gateway-api/apis/v1" + gwv1 "sigs.k8s.io/gateway-api/apis/v1" nbv1alpha1 "github.com/netbirdio/kubernetes-operator/api/v1alpha1" "github.com/netbirdio/kubernetes-operator/internal/gatewayutil" @@ -41,7 +41,7 @@ type GatewayReconciler struct { } func (r *GatewayReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { - gw := &gatewayv1.Gateway{} + gw := &gwv1.Gateway{} err := r.Get(ctx, req.NamespacedName, gw) if err != nil { return ctrl.Result{}, client.IgnoreNotFound(err) @@ -49,7 +49,7 @@ func (r *GatewayReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct sp := patch.NewSerialPatcher(gw, r.Client) // Check if referenced class belongs to this controller. - gwc := &gatewayv1.GatewayClass{} + gwc := &gwv1.GatewayClass{} nn := types.NamespacedName{ Name: string(gw.Spec.GatewayClassName), } @@ -60,7 +60,7 @@ func (r *GatewayReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct if string(gwc.Spec.ControllerName) != GatewayControllerName { return ctrl.Result{}, nil } - if !meta.IsStatusConditionTrue(gwc.Status.Conditions, string(gatewayv1.GatewayClassConditionStatusAccepted)) { + if !meta.IsStatusConditionTrue(gwc.Status.Conditions, string(gwv1.GatewayClassConditionStatusAccepted)) { return ctrl.Result{RequeueAfter: 5 * time.Second}, nil } @@ -73,9 +73,9 @@ func (r *GatewayReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct routingPeerName, err := gatewayutil.GetNetworkRouterName(gw.Spec.Listeners) if err != nil { cond := metav1.Condition{ - Type: string(gatewayv1.GatewayConditionAccepted), + Type: string(gwv1.GatewayConditionAccepted), Status: metav1.ConditionFalse, - Reason: string(gatewayv1.GatewayReasonInvalidParameters), + Reason: string(gwv1.GatewayReasonInvalidParameters), Message: err.Error(), } meta.SetStatusCondition(&gw.Status.Conditions, cond) @@ -86,9 +86,9 @@ func (r *GatewayReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct return ctrl.Result{}, nil } cond := metav1.Condition{ - Type: string(gatewayv1.GatewayConditionAccepted), + Type: string(gwv1.GatewayConditionAccepted), Status: metav1.ConditionTrue, - Reason: string(gatewayv1.GatewayReasonAccepted), + Reason: string(gwv1.GatewayReasonAccepted), } meta.SetStatusCondition(&gw.Status.Conditions, cond) controllerutil.AddFinalizer(gw, k8sutil.Finalizer("gateway")) @@ -105,9 +105,9 @@ func (r *GatewayReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct if !conditions.Has(netRouter, nbv1alpha1.ReadyCondition) { // TODO (phillebaba): Should watch routing peer instead of retrying when not found. cond := metav1.Condition{ - Type: string(gatewayv1.GatewayConditionProgrammed), + Type: string(gwv1.GatewayConditionProgrammed), Status: metav1.ConditionFalse, - Reason: string(gatewayv1.GatewayReasonProgrammed), + Reason: string(gwv1.GatewayReasonProgrammed), Message: fmt.Sprintf("NBRoutingPeer %s is not ready", routingPeerName), } meta.SetStatusCondition(&gw.Status.Conditions, cond) @@ -120,9 +120,9 @@ func (r *GatewayReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct // Signal Gateway is programmed. cond = metav1.Condition{ - Type: string(gatewayv1.GatewayConditionProgrammed), + Type: string(gwv1.GatewayConditionProgrammed), Status: metav1.ConditionTrue, - Reason: string(gatewayv1.GatewayReasonProgrammed), + Reason: string(gwv1.GatewayReasonProgrammed), } meta.SetStatusCondition(&gw.Status.Conditions, cond) err = sp.Patch(ctx, gw) @@ -132,8 +132,8 @@ func (r *GatewayReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct return ctrl.Result{}, nil } -func (r *GatewayReconciler) reconcileDelete(ctx context.Context, sp *patch.SerialPatcher, gw *gatewayv1.Gateway) (ctrl.Result, error) { - var httpRouteList gatewayv1.HTTPRouteList +func (r *GatewayReconciler) reconcileDelete(ctx context.Context, sp *patch.SerialPatcher, gw *gwv1.Gateway) (ctrl.Result, error) { + var httpRouteList gwv1.HTTPRouteList err := r.Client.List(ctx, &httpRouteList) if err != nil { return ctrl.Result{}, err @@ -169,6 +169,6 @@ func (r *GatewayReconciler) reconcileDelete(ctx context.Context, sp *patch.Seria func (r *GatewayReconciler) SetupWithManager(mgr ctrl.Manager) error { return ctrl.NewControllerManagedBy(mgr). - For(&gatewayv1.Gateway{}). + For(&gwv1.Gateway{}). Complete(r) } diff --git a/internal/controller/gatewayclass_controller.go b/internal/controller/gatewayclass_controller.go index 3335657..fd95338 100644 --- a/internal/controller/gatewayclass_controller.go +++ b/internal/controller/gatewayclass_controller.go @@ -5,13 +5,14 @@ import ( "time" "github.com/fluxcd/pkg/runtime/patch" - "github.com/netbirdio/kubernetes-operator/internal/k8sutil" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" - gatewayv1 "sigs.k8s.io/gateway-api/apis/v1" + gwv1 "sigs.k8s.io/gateway-api/apis/v1" + + "github.com/netbirdio/kubernetes-operator/internal/k8sutil" ) const ( @@ -23,7 +24,7 @@ type GatewayClassReconciler struct { } func (r *GatewayClassReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { - gwc := &gatewayv1.GatewayClass{} + gwc := &gwv1.GatewayClass{} err := r.Client.Get(ctx, req.NamespacedName, gwc) if err != nil { return ctrl.Result{}, client.IgnoreNotFound(err) @@ -52,9 +53,9 @@ func (r *GatewayClassReconciler) Reconcile(ctx context.Context, req ctrl.Request }() if message != "" { cond := metav1.Condition{ - Type: string(gatewayv1.GatewayClassConditionStatusAccepted), + Type: string(gwv1.GatewayClassConditionStatusAccepted), Status: metav1.ConditionFalse, - Reason: string(gatewayv1.GatewayClassReasonInvalidParameters), + Reason: string(gwv1.GatewayClassReasonInvalidParameters), Message: message, } meta.SetStatusCondition(&gwc.Status.Conditions, cond) @@ -68,9 +69,9 @@ func (r *GatewayClassReconciler) Reconcile(ctx context.Context, req ctrl.Request // Set condition to accepted. controllerutil.AddFinalizer(gwc, k8sutil.Finalizer("gatewayclass")) cond := metav1.Condition{ - Type: string(gatewayv1.GatewayClassConditionStatusAccepted), + Type: string(gwv1.GatewayClassConditionStatusAccepted), Status: metav1.ConditionTrue, - Reason: string(gatewayv1.GatewayClassReasonAccepted), + Reason: string(gwv1.GatewayClassReasonAccepted), Message: "Reconciled by Netbird Operator.", } meta.SetStatusCondition(&gwc.Status.Conditions, cond) @@ -81,8 +82,8 @@ func (r *GatewayClassReconciler) Reconcile(ctx context.Context, req ctrl.Request return ctrl.Result{}, nil } -func (r *GatewayClassReconciler) reconcileDelete(ctx context.Context, sp *patch.SerialPatcher, gwc *gatewayv1.GatewayClass) (ctrl.Result, error) { - var gatewayList gatewayv1.GatewayList +func (r *GatewayClassReconciler) reconcileDelete(ctx context.Context, sp *patch.SerialPatcher, gwc *gwv1.GatewayClass) (ctrl.Result, error) { + var gatewayList gwv1.GatewayList err := r.Client.List(ctx, &gatewayList) if err != nil { return ctrl.Result{}, err @@ -104,6 +105,6 @@ func (r *GatewayClassReconciler) reconcileDelete(ctx context.Context, sp *patch. // SetupWithManager sets up the controller with the Manager. func (r *GatewayClassReconciler) SetupWithManager(mgr ctrl.Manager) error { return ctrl.NewControllerManagedBy(mgr). - For(&gatewayv1.GatewayClass{}). + For(&gwv1.GatewayClass{}). Complete(r) } diff --git a/internal/controller/group_controller.go b/internal/controller/group_controller.go index dd71c39..0e90d83 100644 --- a/internal/controller/group_controller.go +++ b/internal/controller/group_controller.go @@ -5,12 +5,13 @@ import ( "github.com/fluxcd/pkg/runtime/conditions" "github.com/fluxcd/pkg/runtime/patch" - netbird "github.com/netbirdio/netbird/shared/management/client/rest" - "github.com/netbirdio/netbird/shared/management/http/api" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" + netbird "github.com/netbirdio/netbird/shared/management/client/rest" + "github.com/netbirdio/netbird/shared/management/http/api" + nbv1alpha1 "github.com/netbirdio/kubernetes-operator/api/v1alpha1" "github.com/netbirdio/kubernetes-operator/internal/k8sutil" ) diff --git a/internal/controller/httproute_controller.go b/internal/controller/httproute_controller.go index ee9c59f..e53b980 100644 --- a/internal/controller/httproute_controller.go +++ b/internal/controller/httproute_controller.go @@ -6,8 +6,6 @@ import ( "github.com/fluxcd/pkg/runtime/conditions" "github.com/fluxcd/pkg/runtime/patch" - netbird "github.com/netbirdio/netbird/shared/management/client/rest" - "github.com/netbirdio/netbird/shared/management/http/api" corev1 "k8s.io/api/core/v1" kerrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" @@ -15,7 +13,10 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" - gatewayv1 "sigs.k8s.io/gateway-api/apis/v1" + gwv1 "sigs.k8s.io/gateway-api/apis/v1" + + netbird "github.com/netbirdio/netbird/shared/management/client/rest" + "github.com/netbirdio/netbird/shared/management/http/api" nbv1alpha1 "github.com/netbirdio/kubernetes-operator/api/v1alpha1" "github.com/netbirdio/kubernetes-operator/internal/gatewayutil" @@ -38,7 +39,7 @@ type HTTPRouteReconciler struct { func (r *HTTPRouteReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { logger := ctrl.Log.WithName("HTTPRoute").WithValues("namespace", req.Namespace, "name", req.Name) - hr := &gatewayv1.HTTPRoute{} + hr := &gwv1.HTTPRoute{} err := r.Get(ctx, req.NamespacedName, hr) if err != nil { return ctrl.Result{}, client.IgnoreNotFound(err) @@ -57,7 +58,7 @@ func (r *HTTPRouteReconciler) Reconcile(ctx context.Context, req ctrl.Request) ( if gw == nil { continue } - if !meta.IsStatusConditionTrue(gw.Status.Conditions, string(gatewayv1.GatewayConditionProgrammed)) { + if !meta.IsStatusConditionTrue(gw.Status.Conditions, string(gwv1.GatewayConditionProgrammed)) { logger.Info("gateway is not ready", "name", gw.ObjectMeta.Name) continue } @@ -176,7 +177,7 @@ func (r *HTTPRouteReconciler) Reconcile(ctx context.Context, req ctrl.Request) ( return ctrl.Result{}, nil } -func (r *HTTPRouteReconciler) reconcileDelete(ctx context.Context, sp *patch.SerialPatcher, hr *gatewayv1.HTTPRoute) (ctrl.Result, error) { +func (r *HTTPRouteReconciler) reconcileDelete(ctx context.Context, sp *patch.SerialPatcher, hr *gwv1.HTTPRoute) (ctrl.Result, error) { // Index all proxy services. proxyServices, err := r.Netbird.ReverseProxyServices.List(ctx) if err != nil { @@ -266,6 +267,6 @@ func (r *HTTPRouteReconciler) reconcileDelete(ctx context.Context, sp *patch.Ser // SetupWithManager sets up the controller with the Manager. func (r *HTTPRouteReconciler) SetupWithManager(mgr ctrl.Manager) error { return ctrl.NewControllerManagedBy(mgr). - For(&gatewayv1.HTTPRoute{}). + For(&gwv1.HTTPRoute{}). Complete(r) } diff --git a/internal/controller/nbgroup_controller.go b/internal/controller/nbgroup_controller.go index facd28a..1926099 100644 --- a/internal/controller/nbgroup_controller.go +++ b/internal/controller/nbgroup_controller.go @@ -7,13 +7,14 @@ import ( "time" "github.com/go-logr/logr" - netbird "github.com/netbirdio/netbird/shared/management/client/rest" - "github.com/netbirdio/netbird/shared/management/http/api" "k8s.io/apimachinery/pkg/api/errors" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" - netbirdiov1 "github.com/netbirdio/kubernetes-operator/api/v1" + netbird "github.com/netbirdio/netbird/shared/management/client/rest" + "github.com/netbirdio/netbird/shared/management/http/api" + + nbv1 "github.com/netbirdio/kubernetes-operator/api/v1" "github.com/netbirdio/kubernetes-operator/internal/util" ) @@ -39,7 +40,7 @@ func (r *NBGroupReconciler) Reconcile(ctx context.Context, req ctrl.Request) (re logger := ctrl.Log.WithName("NBGroup").WithValues("namespace", req.Namespace, "name", req.Name) logger.Info("Reconciling NBGroup") - nbGroup := netbirdiov1.NBGroup{} + nbGroup := nbv1.NBGroup{} err = r.Client.Get(ctx, req.NamespacedName, &nbGroup) if err != nil { if !errors.IsNotFound(err) { @@ -78,7 +79,7 @@ func (r *NBGroupReconciler) Reconcile(ctx context.Context, req ctrl.Request) (re } // syncNetBirdGroup reconciliation logic for non-deleted objects. -func (r *NBGroupReconciler) syncNetBirdGroup(ctx context.Context, nbGroup *netbirdiov1.NBGroup, logger logr.Logger) (ctrl.Result, error) { +func (r *NBGroupReconciler) syncNetBirdGroup(ctx context.Context, nbGroup *nbv1.NBGroup, logger logr.Logger) (ctrl.Result, error) { // Get all NetBird groups to ensure no group duplication groups, err := r.Netbird.Groups.List(ctx) if err != nil { @@ -99,37 +100,37 @@ func (r *NBGroupReconciler) syncNetBirdGroup(ctx context.Context, nbGroup *netbi Name: nbGroup.Spec.Name, }) if err != nil { - nbGroup.Status.Conditions = netbirdiov1.NBConditionFalse("APIError", fmt.Sprintf("NetBird API Error: %v", err)) + nbGroup.Status.Conditions = nbv1.NBConditionFalse("APIError", fmt.Sprintf("NetBird API Error: %v", err)) logger.Error(errNetBirdAPI, "error creating group", "err", err) return ctrl.Result{}, err } logger.Info("NBGroup: Created group on NetBird", "name", nbGroup.Spec.Name, "id", group.Id) nbGroup.Status.GroupID = &group.Id - nbGroup.Status.Conditions = netbirdiov1.NBConditionTrue() + nbGroup.Status.Conditions = nbv1.NBConditionTrue() } else if nbGroup.Status.GroupID == nil && group != nil { logger.Info("NBGroup: Found group with same name on NetBird", "name", nbGroup.Spec.Name, "id", group.Id) nbGroup.Status.GroupID = &group.Id - nbGroup.Status.Conditions = netbirdiov1.NBConditionTrue() + nbGroup.Status.Conditions = nbv1.NBConditionTrue() } else if group == nil { logger.Info("NBGroup: Group was deleted", "name", nbGroup.Spec.Name, "id", *nbGroup.Status.GroupID) nbGroup.Status.GroupID = nil - nbGroup.Status.Conditions = netbirdiov1.NBConditionFalse("GroupGone", "Group was deleted from NetBird API") + nbGroup.Status.Conditions = nbv1.NBConditionFalse("GroupGone", "Group was deleted from NetBird API") return ctrl.Result{Requeue: true}, nil } else { - nbGroup.Status.Conditions = netbirdiov1.NBConditionTrue() + nbGroup.Status.Conditions = nbv1.NBConditionTrue() } if nbGroup.Status.GroupID != nil && group != nil && *nbGroup.Status.GroupID != group.Id { // There are two possibilities here, either someone deleted and created the group in NetBird, thus the changed ID // Or there's a conflict with something else, either way, we just need to take the new ID here nbGroup.Status.GroupID = &group.Id - nbGroup.Status.Conditions = netbirdiov1.NBConditionTrue() + nbGroup.Status.Conditions = nbv1.NBConditionTrue() } return ctrl.Result{}, nil } -func (r *NBGroupReconciler) handleDelete(ctx context.Context, nbGroup netbirdiov1.NBGroup, logger logr.Logger) error { +func (r *NBGroupReconciler) handleDelete(ctx context.Context, nbGroup nbv1.NBGroup, logger logr.Logger) error { // Group doesn't exist on NetBird, no need for cleanup if nbGroup.Status.GroupID == nil { nbGroup.Finalizers = util.Without(nbGroup.Finalizers, "netbird.io/group-cleanup") @@ -151,7 +152,7 @@ func (r *NBGroupReconciler) handleDelete(ctx context.Context, nbGroup netbirdiov if err != nil && strings.Contains(err.Error(), "linked") && !nbGroup.DeletionTimestamp.Add(time.Minute).Before(time.Now()) { logger.Info("group still linked to resources on netbird", "err", err) // Check if group is defined elsewhere in the cluster - var groups netbirdiov1.NBGroupList + var groups nbv1.NBGroupList listErr := r.Client.List(ctx, &groups) if listErr != nil { logger.Error(errKubernetesAPI, "error listing NBGroups", "err", listErr) @@ -192,7 +193,7 @@ func (r *NBGroupReconciler) handleDelete(ctx context.Context, nbGroup netbirdiov // SetupWithManager sets up the controller with the Manager. func (r *NBGroupReconciler) SetupWithManager(mgr ctrl.Manager) error { return ctrl.NewControllerManagedBy(mgr). - For(&netbirdiov1.NBGroup{}). + For(&nbv1.NBGroup{}). Named("nbgroup"). Complete(r) } diff --git a/internal/controller/nbgroup_controller_test.go b/internal/controller/nbgroup_controller_test.go index b4428ee..615bdf7 100644 --- a/internal/controller/nbgroup_controller_test.go +++ b/internal/controller/nbgroup_controller_test.go @@ -9,14 +9,15 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" "k8s.io/apimachinery/pkg/api/errors" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "sigs.k8s.io/controller-runtime/pkg/reconcile" - netbirdiov1 "github.com/netbirdio/kubernetes-operator/api/v1" - "github.com/netbirdio/kubernetes-operator/internal/util" netbird "github.com/netbirdio/netbird/shared/management/client/rest" "github.com/netbirdio/netbird/shared/management/http/api" + + nbv1 "github.com/netbirdio/kubernetes-operator/api/v1" + "github.com/netbirdio/kubernetes-operator/internal/util" ) var _ = Describe("NBGroup Controller", func() { @@ -33,7 +34,7 @@ var _ = Describe("NBGroup Controller", func() { var netbirdClient *netbird.Client var mux *http.ServeMux var server *httptest.Server - var nbGroup netbirdiov1.NBGroup + var nbGroup nbv1.NBGroup BeforeEach(func() { mux = &http.ServeMux{} @@ -46,13 +47,13 @@ var _ = Describe("NBGroup Controller", func() { Expect(deleteErr).NotTo(HaveOccurred()) } if err == nil || errors.IsNotFound(err) { - nbGroup = netbirdiov1.NBGroup{ - ObjectMeta: v1.ObjectMeta{ + nbGroup = nbv1.NBGroup{ + ObjectMeta: metav1.ObjectMeta{ Name: resourceName, Namespace: typeNamespacedName.Namespace, Finalizers: []string{"netbird.io/group-cleanup"}, }, - Spec: netbirdiov1.NBGroupSpec{ + Spec: nbv1.NBGroupSpec{ Name: resourceName, }, } @@ -63,7 +64,7 @@ var _ = Describe("NBGroup Controller", func() { AfterEach(func() { server.Close() - resource := &netbirdiov1.NBGroup{} + resource := &nbv1.NBGroup{} err := k8sClient.Get(ctx, typeNamespacedName, resource) if errors.IsNotFound(err) { return @@ -113,8 +114,8 @@ var _ = Describe("NBGroup Controller", func() { Expect(nbGroup.Status.GroupID).NotTo(BeNil()) Expect(*nbGroup.Status.GroupID).To(Equal("Test")) Expect(nbGroup.Status.Conditions).To(HaveLen(1)) - Expect(nbGroup.Status.Conditions[0].Status).To(BeEquivalentTo(v1.ConditionTrue)) - Expect(nbGroup.Status.Conditions[0].Type).To(Equal(netbirdiov1.NBSetupKeyReady)) + Expect(nbGroup.Status.Conditions[0].Status).To(BeEquivalentTo(metav1.ConditionTrue)) + Expect(nbGroup.Status.Conditions[0].Type).To(Equal(nbv1.NBSetupKeyReady)) }) }) @@ -148,8 +149,8 @@ var _ = Describe("NBGroup Controller", func() { Expect(nbGroup.Status.GroupID).NotTo(BeNil()) Expect(*nbGroup.Status.GroupID).To(Equal("Test")) Expect(nbGroup.Status.Conditions).To(HaveLen(1)) - Expect(nbGroup.Status.Conditions[0].Status).To(BeEquivalentTo(v1.ConditionTrue)) - Expect(nbGroup.Status.Conditions[0].Type).To(Equal(netbirdiov1.NBSetupKeyReady)) + Expect(nbGroup.Status.Conditions[0].Status).To(BeEquivalentTo(metav1.ConditionTrue)) + Expect(nbGroup.Status.Conditions[0].Type).To(Equal(nbv1.NBSetupKeyReady)) }) }) @@ -222,12 +223,12 @@ var _ = Describe("NBGroup Controller", func() { When("Group already exists in another namespace", func() { It("Should delete NBGroup after linked failure", func() { deleteGroup() - otherGroup := &netbirdiov1.NBGroup{ - ObjectMeta: v1.ObjectMeta{ + otherGroup := &nbv1.NBGroup{ + ObjectMeta: metav1.ObjectMeta{ Name: nbGroup.Name, Namespace: "kube-system", }, - Spec: netbirdiov1.NBGroupSpec{ + Spec: nbv1.NBGroupSpec{ Name: nbGroup.Spec.Name, }, } @@ -294,8 +295,8 @@ var _ = Describe("NBGroup Controller", func() { Expect(nbGroup.Status.GroupID).NotTo(BeNil()) Expect(*nbGroup.Status.GroupID).To(Equal("Test")) Expect(nbGroup.Status.Conditions).To(HaveLen(1)) - Expect(nbGroup.Status.Conditions[0].Status).To(BeEquivalentTo(v1.ConditionTrue)) - Expect(nbGroup.Status.Conditions[0].Type).To(Equal(netbirdiov1.NBSetupKeyReady)) + Expect(nbGroup.Status.Conditions[0].Status).To(BeEquivalentTo(metav1.ConditionTrue)) + Expect(nbGroup.Status.Conditions[0].Type).To(Equal(nbv1.NBSetupKeyReady)) }) }) @@ -340,7 +341,7 @@ var _ = Describe("NBGroup Controller", func() { Expect(nbGroup.Status.GroupID).To(BeNil()) Expect(nbGroup.Status.Conditions).To(HaveLen(1)) - Expect(nbGroup.Status.Conditions[0].Status).To(BeEquivalentTo(v1.ConditionFalse)) + Expect(nbGroup.Status.Conditions[0].Status).To(BeEquivalentTo(metav1.ConditionFalse)) _, err = controllerReconciler.Reconcile(ctx, reconcile.Request{ NamespacedName: typeNamespacedName, @@ -353,7 +354,7 @@ var _ = Describe("NBGroup Controller", func() { Expect(nbGroup.Status.GroupID).NotTo(BeNil()) Expect(*nbGroup.Status.GroupID).To(Equal("Test")) Expect(nbGroup.Status.Conditions).To(HaveLen(1)) - Expect(nbGroup.Status.Conditions[0].Status).To(BeEquivalentTo(v1.ConditionTrue)) + Expect(nbGroup.Status.Conditions[0].Status).To(BeEquivalentTo(metav1.ConditionTrue)) }) }) }) diff --git a/internal/controller/nbpolicy_controller.go b/internal/controller/nbpolicy_controller.go index f6757e7..1669bcf 100644 --- a/internal/controller/nbpolicy_controller.go +++ b/internal/controller/nbpolicy_controller.go @@ -8,14 +8,15 @@ import ( "strings" "github.com/go-logr/logr" - netbird "github.com/netbirdio/netbird/shared/management/client/rest" - "github.com/netbirdio/netbird/shared/management/http/api" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/types" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" - netbirdiov1 "github.com/netbirdio/kubernetes-operator/api/v1" + netbird "github.com/netbirdio/netbird/shared/management/client/rest" + "github.com/netbirdio/netbird/shared/management/http/api" + + nbv1 "github.com/netbirdio/kubernetes-operator/api/v1" "github.com/netbirdio/kubernetes-operator/internal/util" ) @@ -39,16 +40,16 @@ const ( ) // getResources get all NBResource objects in policy.status.managedServiceList -func (r *NBPolicyReconciler) getResources(ctx context.Context, nbPolicy *netbirdiov1.NBPolicy, logger logr.Logger) ([]netbirdiov1.NBResource, error) { - var resourceList []netbirdiov1.NBResource +func (r *NBPolicyReconciler) getResources(ctx context.Context, nbPolicy *nbv1.NBPolicy, logger logr.Logger) ([]nbv1.NBResource, error) { + var resourceList []nbv1.NBResource var updatedManagedServiceList []string for _, rss := range nbPolicy.Status.ManagedServiceList { - var resource netbirdiov1.NBResource + var resource nbv1.NBResource namespacedName := types.NamespacedName{Namespace: strings.Split(rss, "/")[0], Name: strings.Split(rss, "/")[1]} err := r.Client.Get(ctx, namespacedName, &resource) if err != nil && !errors.IsNotFound(err) { logger.Error(errKubernetesAPI, "Error getting NBResource", "namespace", namespacedName.Namespace, "name", namespacedName.Name) - nbPolicy.Status.Conditions = netbirdiov1.NBConditionFalse("internalError", fmt.Sprintf("Error getting NBResource: %v", err)) + nbPolicy.Status.Conditions = nbv1.NBConditionFalse("internalError", fmt.Sprintf("Error getting NBResource: %v", err)) return nil, err } if err == nil && resource.DeletionTimestamp == nil { @@ -64,7 +65,7 @@ func (r *NBPolicyReconciler) getResources(ctx context.Context, nbPolicy *netbird // mapResources map each NBResource ports and protocols into one object to generate the policy // returns map[protocol] => ports, destination group IDs -func (r *NBPolicyReconciler) mapResources(ctx context.Context, nbPolicy *netbirdiov1.NBPolicy, resources []netbirdiov1.NBResource, logger logr.Logger) (map[string][]int32, []string, error) { +func (r *NBPolicyReconciler) mapResources(ctx context.Context, nbPolicy *nbv1.NBPolicy, resources []nbv1.NBResource, logger logr.Logger) (map[string][]int32, []string, error) { portMapping := map[string]map[int32]any{ protocolTCP: make(map[int32]any), protocolUDP: make(map[int32]any), @@ -113,7 +114,7 @@ func (r *NBPolicyReconciler) mapResources(ctx context.Context, nbPolicy *netbird } // createPolicy helper for creating policy with settings -func (r *NBPolicyReconciler) createPolicy(ctx context.Context, nbPolicy *netbirdiov1.NBPolicy, protocol string, sourceGroupIDs, destinationGroupIDs, ports []string, logger logr.Logger) (*string, error) { +func (r *NBPolicyReconciler) createPolicy(ctx context.Context, nbPolicy *nbv1.NBPolicy, protocol string, sourceGroupIDs, destinationGroupIDs, ports []string, logger logr.Logger) (*string, error) { policyName := fmt.Sprintf("%s %s", nbPolicy.Spec.Name, strings.ToUpper(protocol)) logger.Info("Creating NetBird Policy", "name", policyName, "description", nbPolicy.Spec.Description, "protocol", protocol, "sources", sourceGroupIDs, "destinations", destinationGroupIDs, "ports", ports, "bidirectional", nbPolicy.Spec.Bidirectional) policy, err := r.Netbird.Policies.Create(ctx, api.PostApiPoliciesJSONRequestBody{ @@ -137,7 +138,7 @@ func (r *NBPolicyReconciler) createPolicy(ctx context.Context, nbPolicy *netbird if err != nil { logger.Error(errNetBirdAPI, "Error creating Policy", "err", err) - nbPolicy.Status.Conditions = netbirdiov1.NBConditionFalse("APIError", fmt.Sprintf("Error creating policy: %v", err)) + nbPolicy.Status.Conditions = nbv1.NBConditionFalse("APIError", fmt.Sprintf("Error creating policy: %v", err)) return nil, err } @@ -145,7 +146,7 @@ func (r *NBPolicyReconciler) createPolicy(ctx context.Context, nbPolicy *netbird } // updatePolicy helper for updating policy with settings -func (r *NBPolicyReconciler) updatePolicy(ctx context.Context, policyID *string, nbPolicy *netbirdiov1.NBPolicy, protocol string, sourceGroupIDs, destinationGroupIDs, ports []string, logger logr.Logger) (*string, bool, error) { +func (r *NBPolicyReconciler) updatePolicy(ctx context.Context, policyID *string, nbPolicy *nbv1.NBPolicy, protocol string, sourceGroupIDs, destinationGroupIDs, ports []string, logger logr.Logger) (*string, bool, error) { policyName := fmt.Sprintf("%s %s", nbPolicy.Spec.Name, strings.ToUpper(protocol)) logger.Info("Updating NetBird Policy", "name", policyName, "description", nbPolicy.Spec.Description, "protocol", protocol, "sources", sourceGroupIDs, "destinations", destinationGroupIDs, "ports", ports, "bidirectional", nbPolicy.Spec.Bidirectional) _, err := r.Netbird.Policies.Update(ctx, *policyID, api.PutApiPoliciesPolicyIdJSONRequestBody{ @@ -169,7 +170,7 @@ func (r *NBPolicyReconciler) updatePolicy(ctx context.Context, policyID *string, if err != nil && !strings.Contains(err.Error(), "not found") { logger.Error(errNetBirdAPI, "Error updating Policy", "err", err) - nbPolicy.Status.Conditions = netbirdiov1.NBConditionFalse("APIError", fmt.Sprintf("Error updating policy: %v", err)) + nbPolicy.Status.Conditions = nbv1.NBConditionFalse("APIError", fmt.Sprintf("Error updating policy: %v", err)) return policyID, false, err } @@ -179,7 +180,7 @@ func (r *NBPolicyReconciler) updatePolicy(ctx context.Context, policyID *string, logger.Info("Policy deleted from NetBird API, recreating", "protocol", protocol) policyID = nil requeue = true - nbPolicy.Status.Conditions = netbirdiov1.NBConditionFalse("Gone", "Policy deleted from NetBird API") + nbPolicy.Status.Conditions = nbv1.NBConditionFalse("Gone", "Policy deleted from NetBird API") } else if err != nil { return nil, false, err } @@ -193,7 +194,7 @@ func (r *NBPolicyReconciler) Reconcile(ctx context.Context, req ctrl.Request) (r logger := ctrl.Log.WithName("NBPolicy").WithValues("namespace", req.Namespace, "name", req.Name) logger.Info("Reconciling NBPolicy") - var nbPolicy netbirdiov1.NBPolicy + var nbPolicy nbv1.NBPolicy err = r.Client.Get(ctx, req.NamespacedName, &nbPolicy) if err != nil { if errors.IsNotFound(err) { @@ -247,7 +248,7 @@ func (r *NBPolicyReconciler) Reconcile(ctx context.Context, req ctrl.Request) (r sourceGroupIDs, err := r.groupNamesToIDs(ctx, nbPolicy.Spec.SourceGroups, logger) if err != nil { - nbPolicy.Status.Conditions = netbirdiov1.NBConditionFalse("APIError", fmt.Sprintf("Error getting group IDs: %v", err)) + nbPolicy.Status.Conditions = nbv1.NBConditionFalse("APIError", fmt.Sprintf("Error getting group IDs: %v", err)) return ctrl.Result{}, err } @@ -257,13 +258,13 @@ func (r *NBPolicyReconciler) Reconcile(ctx context.Context, req ctrl.Request) (r return ctrl.Result{Requeue: requeue}, err } - nbPolicy.Status.Conditions = netbirdiov1.NBConditionTrue() + nbPolicy.Status.Conditions = nbv1.NBConditionTrue() return ctrl.Result{}, nil } // syncPolicy ensure upstream policy is up-to-date -func (r *NBPolicyReconciler) syncPolicy(ctx context.Context, nbPolicy *netbirdiov1.NBPolicy, sourceGroups, destGroups []string, portMapping map[string][]int32, logger logr.Logger) (bool, error) { +func (r *NBPolicyReconciler) syncPolicy(ctx context.Context, nbPolicy *nbv1.NBPolicy, sourceGroups, destGroups []string, portMapping map[string][]int32, logger logr.Logger) (bool, error) { requeue := false for protocol, ports := range portMapping { @@ -275,7 +276,7 @@ func (r *NBPolicyReconciler) syncPolicy(ctx context.Context, nbPolicy *netbirdio policyID = nbPolicy.Status.UDPPolicyID default: logger.Error(errKubernetesAPI, "Unknown protocol", "protocol", protocol) - nbPolicy.Status.Conditions = netbirdiov1.NBConditionFalse("ConfigError", fmt.Sprintf("Unknown protocol: %s", protocol)) + nbPolicy.Status.Conditions = nbv1.NBConditionFalse("ConfigError", fmt.Sprintf("Unknown protocol: %s", protocol)) return requeue, errUnknownProtocol } @@ -284,7 +285,7 @@ func (r *NBPolicyReconciler) syncPolicy(ctx context.Context, nbPolicy *netbirdio logger.Info("Deleting protocol policy as NBPolicy has restricted protocols", "protocol", protocol) err := r.Netbird.Policies.Delete(ctx, *policyID) if err != nil && !strings.Contains(err.Error(), "not found") { - nbPolicy.Status.Conditions = netbirdiov1.NBConditionFalse("APIError", fmt.Sprintf("Error deleting policy: %v", err)) + nbPolicy.Status.Conditions = nbv1.NBConditionFalse("APIError", fmt.Sprintf("Error deleting policy: %v", err)) return requeue, err } policyID = nil @@ -306,7 +307,7 @@ func (r *NBPolicyReconciler) syncPolicy(ctx context.Context, nbPolicy *netbirdio logger.Info("Deleting policy", "protocol", protocol) err := r.Netbird.Policies.Delete(ctx, *policyID) if err != nil && !strings.Contains(err.Error(), "not found") { - nbPolicy.Status.Conditions = netbirdiov1.NBConditionFalse("APIError", fmt.Sprintf("Error deleting policy: %v", err)) + nbPolicy.Status.Conditions = nbv1.NBConditionFalse("APIError", fmt.Sprintf("Error deleting policy: %v", err)) return requeue, err } policyID = nil @@ -337,7 +338,7 @@ func (r *NBPolicyReconciler) syncPolicy(ctx context.Context, nbPolicy *netbirdio nbPolicy.Status.UDPPolicyID = policyID default: logger.Error(errKubernetesAPI, "Unknown protocol", "protocol", protocol) - nbPolicy.Status.Conditions = netbirdiov1.NBConditionFalse("ConfigError", fmt.Sprintf("Unknown protocol: %s", protocol)) + nbPolicy.Status.Conditions = nbv1.NBConditionFalse("ConfigError", fmt.Sprintf("Unknown protocol: %s", protocol)) return requeue, errUnknownProtocol } } @@ -345,7 +346,7 @@ func (r *NBPolicyReconciler) syncPolicy(ctx context.Context, nbPolicy *netbirdio return requeue, nil } -func (r *NBPolicyReconciler) handleDelete(ctx context.Context, nbPolicy *netbirdiov1.NBPolicy, logger logr.Logger) error { +func (r *NBPolicyReconciler) handleDelete(ctx context.Context, nbPolicy *nbv1.NBPolicy, logger logr.Logger) error { if nbPolicy.Status.TCPPolicyID != nil { err := r.Netbird.Policies.Delete(ctx, *nbPolicy.Status.TCPPolicyID) if err != nil && !strings.Contains("not found", err.Error()) { @@ -395,7 +396,7 @@ func (r *NBPolicyReconciler) groupNamesToIDs(ctx context.Context, groupNames []s // SetupWithManager sets up the controller with the Manager. func (r *NBPolicyReconciler) SetupWithManager(mgr ctrl.Manager) error { return ctrl.NewControllerManagedBy(mgr). - For(&netbirdiov1.NBPolicy{}). + For(&nbv1.NBPolicy{}). Named("nbpolicy"). Complete(r) } diff --git a/internal/controller/nbpolicy_controller_test.go b/internal/controller/nbpolicy_controller_test.go index cea40c8..acfb9d9 100644 --- a/internal/controller/nbpolicy_controller_test.go +++ b/internal/controller/nbpolicy_controller_test.go @@ -11,16 +11,16 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/reconcile" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - - netbirdiov1 "github.com/netbirdio/kubernetes-operator/api/v1" - "github.com/netbirdio/kubernetes-operator/internal/util" netbird "github.com/netbirdio/netbird/shared/management/client/rest" "github.com/netbirdio/netbird/shared/management/http/api" - ctrl "sigs.k8s.io/controller-runtime" + + nbv1 "github.com/netbirdio/kubernetes-operator/api/v1" + "github.com/netbirdio/kubernetes-operator/internal/util" ) var _ = Describe("NBPolicy Controller", func() { @@ -32,7 +32,7 @@ var _ = Describe("NBPolicy Controller", func() { typeNamespacedName := types.NamespacedName{ Name: resourceName, } - nbpolicy := &netbirdiov1.NBPolicy{} + nbpolicy := &nbv1.NBPolicy{} var netbirdClient *netbird.Client var mux *http.ServeMux var server *httptest.Server @@ -46,12 +46,12 @@ var _ = Describe("NBPolicy Controller", func() { By("creating the custom resource for the Kind NBPolicy") err := k8sClient.Get(ctx, typeNamespacedName, nbpolicy) if err != nil && errors.IsNotFound(err) { - resource := &netbirdiov1.NBPolicy{ + resource := &nbv1.NBPolicy{ ObjectMeta: metav1.ObjectMeta{ Name: resourceName, Finalizers: []string{"netbird.io/cleanup"}, }, - Spec: netbirdiov1.NBPolicySpec{ + Spec: nbv1.NBPolicySpec{ Name: "Test", SourceGroups: []string{"All"}, Bidirectional: true, @@ -63,7 +63,7 @@ var _ = Describe("NBPolicy Controller", func() { }) AfterEach(func() { - resource := &netbirdiov1.NBPolicy{} + resource := &nbv1.NBPolicy{} err := k8sClient.Get(ctx, typeNamespacedName, resource) if !errors.IsNotFound(err) { Expect(err).NotTo(HaveOccurred()) @@ -77,7 +77,7 @@ var _ = Describe("NBPolicy Controller", func() { Expect(k8sClient.Delete(ctx, resource)).To(Succeed()) } - nbresource := &netbirdiov1.NBResource{} + nbresource := &nbv1.NBResource{} err = k8sClient.Get(ctx, types.NamespacedName{Namespace: "default", Name: "test"}, nbresource) if !errors.IsNotFound(err) { Expect(err).NotTo(HaveOccurred()) @@ -120,12 +120,12 @@ var _ = Describe("NBPolicy Controller", func() { Netbird: netbirdClient, } - nbResource := &netbirdiov1.NBResource{ + nbResource := &nbv1.NBResource{ ObjectMeta: metav1.ObjectMeta{ Name: "test", Namespace: "default", }, - Spec: netbirdiov1.NBResourceSpec{ + Spec: nbv1.NBResourceSpec{ Name: "meow", Groups: []string{"test"}, NetworkID: "test", @@ -136,7 +136,7 @@ var _ = Describe("NBPolicy Controller", func() { } Expect(k8sClient.Create(ctx, nbResource)).To(Succeed()) - nbResource.Status = netbirdiov1.NBResourceStatus{ + nbResource.Status = nbv1.NBResourceStatus{ TCPPorts: []int32{443}, PolicyName: &resourceName, Groups: []string{"test"}, @@ -258,12 +258,12 @@ var _ = Describe("NBPolicy Controller", func() { Netbird: netbirdClient, } - nbResource := &netbirdiov1.NBResource{ + nbResource := &nbv1.NBResource{ ObjectMeta: metav1.ObjectMeta{ Name: "test", Namespace: "default", }, - Spec: netbirdiov1.NBResourceSpec{ + Spec: nbv1.NBResourceSpec{ Name: "meow", Groups: []string{"test"}, NetworkID: "test", @@ -274,7 +274,7 @@ var _ = Describe("NBPolicy Controller", func() { } Expect(k8sClient.Create(ctx, nbResource)).To(Succeed()) - nbResource.Status = netbirdiov1.NBResourceStatus{ + nbResource.Status = nbv1.NBResourceStatus{ UDPPorts: []int32{443}, PolicyName: &resourceName, Groups: []string{"test"}, @@ -396,12 +396,12 @@ var _ = Describe("NBPolicy Controller", func() { Netbird: netbirdClient, } - nbResource := &netbirdiov1.NBResource{ + nbResource := &nbv1.NBResource{ ObjectMeta: metav1.ObjectMeta{ Name: "test", Namespace: "default", }, - Spec: netbirdiov1.NBResourceSpec{ + Spec: nbv1.NBResourceSpec{ Name: "meow", Groups: []string{"test"}, NetworkID: "test", @@ -412,7 +412,7 @@ var _ = Describe("NBPolicy Controller", func() { } Expect(k8sClient.Create(ctx, nbResource)).To(Succeed()) - nbResource.Status = netbirdiov1.NBResourceStatus{ + nbResource.Status = nbv1.NBResourceStatus{ TCPPorts: []int32{443}, PolicyName: &resourceName, Groups: []string{"test"}, @@ -459,7 +459,7 @@ var _ = Describe("NBPolicy Controller", func() { When("Updating existing policy", func() { AfterEach(func() { - nbresource := &netbirdiov1.NBResource{} + nbresource := &nbv1.NBResource{} err := k8sClient.Get(ctx, types.NamespacedName{Namespace: "default", Name: "test-b"}, nbresource) if !errors.IsNotFound(err) { Expect(err).NotTo(HaveOccurred()) @@ -475,12 +475,12 @@ var _ = Describe("NBPolicy Controller", func() { Netbird: netbirdClient, } - nbResource := &netbirdiov1.NBResource{ + nbResource := &nbv1.NBResource{ ObjectMeta: metav1.ObjectMeta{ Name: "test", Namespace: "default", }, - Spec: netbirdiov1.NBResourceSpec{ + Spec: nbv1.NBResourceSpec{ Name: "meow", Groups: []string{"test"}, NetworkID: "test", @@ -491,19 +491,19 @@ var _ = Describe("NBPolicy Controller", func() { } Expect(k8sClient.Create(ctx, nbResource)).To(Succeed()) - nbResource.Status = netbirdiov1.NBResourceStatus{ + nbResource.Status = nbv1.NBResourceStatus{ TCPPorts: []int32{443}, PolicyName: &resourceName, Groups: []string{"test"}, } Expect(k8sClient.Status().Update(ctx, nbResource)).To(Succeed()) - nbResourceB := &netbirdiov1.NBResource{ + nbResourceB := &nbv1.NBResource{ ObjectMeta: metav1.ObjectMeta{ Name: "test-b", Namespace: "default", }, - Spec: netbirdiov1.NBResourceSpec{ + Spec: nbv1.NBResourceSpec{ Name: "meow-b", Groups: []string{"test-b"}, NetworkID: "test", @@ -514,7 +514,7 @@ var _ = Describe("NBPolicy Controller", func() { } Expect(k8sClient.Create(ctx, nbResourceB)).To(Succeed()) - nbResourceB.Status = netbirdiov1.NBResourceStatus{ + nbResourceB.Status = nbv1.NBResourceStatus{ TCPPorts: []int32{80}, PolicyName: &resourceName, Groups: []string{"test-b"}, diff --git a/internal/controller/nbresource_controller.go b/internal/controller/nbresource_controller.go index 6265c5c..6192724 100644 --- a/internal/controller/nbresource_controller.go +++ b/internal/controller/nbresource_controller.go @@ -2,17 +2,15 @@ package controller import ( "context" - nerrors "errors" + "errors" "fmt" "slices" "strings" "time" "github.com/go-logr/logr" - netbird "github.com/netbirdio/netbird/shared/management/client/rest" - "github.com/netbirdio/netbird/shared/management/http/api" kerrors "k8s.io/apimachinery/pkg/api/errors" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" @@ -21,7 +19,10 @@ import ( "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/reconcile" - netbirdiov1 "github.com/netbirdio/kubernetes-operator/api/v1" + netbird "github.com/netbirdio/netbird/shared/management/client/rest" + "github.com/netbirdio/netbird/shared/management/http/api" + + nbv1 "github.com/netbirdio/kubernetes-operator/api/v1" "github.com/netbirdio/kubernetes-operator/internal/util" ) @@ -49,7 +50,7 @@ func (r *NBResourceReconciler) Reconcile(ctx context.Context, req ctrl.Request) logger := ctrl.Log.WithName("NBResource").WithValues("namespace", req.Namespace, "name", req.Name) logger.Info("Reconciling NBResource") - nbResource := &netbirdiov1.NBResource{} + nbResource := &nbv1.NBResource{} err = r.Client.Get(ctx, req.NamespacedName, nbResource) if err != nil { if !kerrors.IsNotFound(err) { @@ -98,17 +99,17 @@ func (r *NBResourceReconciler) Reconcile(ctx context.Context, req ctrl.Request) groupIDs, result, err := r.handleGroups(ctx, req, nbResource, logger) if result != nil { - nbResource.Status.Conditions = netbirdiov1.NBConditionFalse("internalError", fmt.Sprintf("Error occurred handling groups: %v", err)) + nbResource.Status.Conditions = nbv1.NBConditionFalse("internalError", fmt.Sprintf("Error occurred handling groups: %v", err)) return *result, err } resource, err := r.handleNetBirdResource(ctx, nbResource, groupIDs, logger) - if err != nil && nerrors.Is(err, errDuplicateResource) { + if err != nil && errors.Is(err, errDuplicateResource) { return ctrl.Result{RequeueAfter: defaultRequeueAfter}, nil } if err != nil { - nbResource.Status.Conditions = netbirdiov1.NBConditionFalse("internalError", fmt.Sprintf("Error occurred handling NetBird Network Resource: %v", err)) + nbResource.Status.Conditions = nbv1.NBConditionFalse("internalError", fmt.Sprintf("Error occurred handling NetBird Network Resource: %v", err)) return ctrl.Result{}, err } @@ -119,22 +120,22 @@ func (r *NBResourceReconciler) Reconcile(ctx context.Context, req ctrl.Request) err = r.handleGroupUpdate(ctx, nbResource, groupIDs, resource, logger) if err != nil { - nbResource.Status.Conditions = netbirdiov1.NBConditionFalse("internalError", fmt.Sprintf("Error occurred handling groups: %v", err)) + nbResource.Status.Conditions = nbv1.NBConditionFalse("internalError", fmt.Sprintf("Error occurred handling groups: %v", err)) return ctrl.Result{}, err } err = r.handlePolicy(ctx, req, nbResource, groupIDs, logger) if err != nil { - nbResource.Status.Conditions = netbirdiov1.NBConditionFalse("internalError", fmt.Sprintf("Error occurred handling policy changes: %v", err)) + nbResource.Status.Conditions = nbv1.NBConditionFalse("internalError", fmt.Sprintf("Error occurred handling policy changes: %v", err)) return ctrl.Result{}, err } - nbResource.Status.Conditions = netbirdiov1.NBConditionTrue() + nbResource.Status.Conditions = nbv1.NBConditionTrue() return ctrl.Result{}, nil } -func (r *NBResourceReconciler) handlePolicyCreate(ctx context.Context, nbResource *netbirdiov1.NBResource, req ctrl.Request, policy string, nbPolicy *netbirdiov1.NBPolicy, logger logr.Logger) error { +func (r *NBResourceReconciler) handlePolicyCreate(ctx context.Context, nbResource *nbv1.NBResource, req ctrl.Request, policy string, nbPolicy *nbv1.NBPolicy, logger logr.Logger) error { if len(nbResource.Spec.PolicySourceGroups) == 0 { logger.Error(errInvalidValue, "Cannot auto-generate policy, missing source groups.") return fmt.Errorf("cannot auto-generate policy, missing source groups") @@ -144,14 +145,14 @@ func (r *NBResourceReconciler) handlePolicyCreate(ctx context.Context, nbResourc name = fmt.Sprintf("Autogenerated policy for resource %s/%s in cluster %s", nbResource.Namespace, nbResource.Name, r.ClusterName) } generatedName := fmt.Sprintf("%s-%s-%s", policy, req.Namespace, req.Name) - *nbPolicy = netbirdiov1.NBPolicy{ - ObjectMeta: v1.ObjectMeta{ + *nbPolicy = nbv1.NBPolicy{ + ObjectMeta: metav1.ObjectMeta{ Name: generatedName, Annotations: map[string]string{"netbird.io/generated-by": req.NamespacedName.String()}, Finalizers: []string{"netbird.io/cleanup"}, Labels: r.DefaultLabels, }, - Spec: netbirdiov1.NBPolicySpec{ + Spec: nbv1.NBPolicySpec{ Name: name, Description: "Generated by " + req.NamespacedName.String(), SourceGroups: nbResource.Spec.PolicySourceGroups, @@ -172,7 +173,7 @@ func (r *NBResourceReconciler) handlePolicyCreate(ctx context.Context, nbResourc } nbPolicy.Labels = r.DefaultLabels nbPolicy.Annotations["netbird.io/generated-by"] = req.NamespacedName.String() - nbPolicy.Spec = netbirdiov1.NBPolicySpec{ + nbPolicy.Spec = nbv1.NBPolicySpec{ Name: name, Description: "Generated by " + req.NamespacedName.String(), SourceGroups: nbResource.Spec.PolicySourceGroups, @@ -205,8 +206,8 @@ func (r *NBResourceReconciler) handlePolicyCreate(ctx context.Context, nbResourc return nil } -func (r *NBResourceReconciler) handlePolicyAddUpdate(ctx context.Context, req ctrl.Request, nbResource *netbirdiov1.NBResource, policy string, groupIDs []string, logger logr.Logger) error { - var nbPolicy netbirdiov1.NBPolicy +func (r *NBResourceReconciler) handlePolicyAddUpdate(ctx context.Context, req ctrl.Request, nbResource *nbv1.NBResource, policy string, groupIDs []string, logger logr.Logger) error { + var nbPolicy nbv1.NBPolicy updatePolicyStatus := false kubernetesPolicyName := policy @@ -234,19 +235,19 @@ func (r *NBResourceReconciler) handlePolicyAddUpdate(ctx context.Context, req ct if !util.Equivalent(nbResource.Spec.TCPPorts, nbResource.Status.TCPPorts) { nbResource.Status.TCPPorts = nbResource.Spec.TCPPorts - nbPolicy.Status.LastUpdatedAt = &v1.Time{Time: time.Now()} + nbPolicy.Status.LastUpdatedAt = &metav1.Time{Time: time.Now()} updatePolicyStatus = true } if !util.Equivalent(nbResource.Spec.UDPPorts, nbResource.Status.UDPPorts) { nbResource.Status.UDPPorts = nbResource.Spec.UDPPorts - nbPolicy.Status.LastUpdatedAt = &v1.Time{Time: time.Now()} + nbPolicy.Status.LastUpdatedAt = &metav1.Time{Time: time.Now()} updatePolicyStatus = true } if !util.Equivalent(nbResource.Status.Groups, groupIDs) { nbResource.Status.Groups = groupIDs - nbPolicy.Status.LastUpdatedAt = &v1.Time{Time: time.Now()} + nbPolicy.Status.LastUpdatedAt = &metav1.Time{Time: time.Now()} updatePolicyStatus = true } @@ -301,8 +302,8 @@ func (r *NBResourceReconciler) handlePolicyAddUpdate(ctx context.Context, req ct return nil } -func (r *NBResourceReconciler) handlePolicyDelete(ctx context.Context, req ctrl.Request, nbResource *netbirdiov1.NBResource, specPolicies []string, policy string, logger logr.Logger) error { - var nbPolicy netbirdiov1.NBPolicy +func (r *NBResourceReconciler) handlePolicyDelete(ctx context.Context, req ctrl.Request, nbResource *nbv1.NBResource, specPolicies []string, policy string, logger logr.Logger) error { + var nbPolicy nbv1.NBPolicy if !slices.Contains(specPolicies, policy) { kubeName := policy if v, ok := nbResource.Status.PolicyNameMapping[policy]; ok { @@ -326,7 +327,7 @@ func (r *NBResourceReconciler) handlePolicyDelete(ctx context.Context, req ctrl. delete(nbResource.Status.PolicyNameMapping, policy) } else if slices.Contains(nbPolicy.Status.ManagedServiceList, req.NamespacedName.String()) { nbPolicy.Status.ManagedServiceList = util.Without(nbPolicy.Status.ManagedServiceList, req.NamespacedName.String()) - nbPolicy.Status.LastUpdatedAt = &v1.Time{Time: time.Now()} + nbPolicy.Status.LastUpdatedAt = &metav1.Time{Time: time.Now()} err := r.Client.Status().Update(ctx, &nbPolicy) if err != nil { logger.Error(errKubernetesAPI, "error updating NBPolicy", "err", err, "policyName", policy) @@ -339,7 +340,7 @@ func (r *NBResourceReconciler) handlePolicyDelete(ctx context.Context, req ctrl. } // handlePolicy update NBPolicy if defined to add self reference to policy status -func (r *NBResourceReconciler) handlePolicy(ctx context.Context, req ctrl.Request, nbResource *netbirdiov1.NBResource, groupIDs []string, logger logr.Logger) error { +func (r *NBResourceReconciler) handlePolicy(ctx context.Context, req ctrl.Request, nbResource *nbv1.NBResource, groupIDs []string, logger logr.Logger) error { if nbResource.Status.PolicyName == nil && nbResource.Spec.PolicyName == "" { return nil } @@ -372,7 +373,7 @@ func (r *NBResourceReconciler) handlePolicy(ctx context.Context, req ctrl.Reques } // handleGroupUpdate update network resource groups -func (r *NBResourceReconciler) handleGroupUpdate(ctx context.Context, nbResource *netbirdiov1.NBResource, groupIDs []string, resource *api.NetworkResource, logger logr.Logger) error { +func (r *NBResourceReconciler) handleGroupUpdate(ctx context.Context, nbResource *nbv1.NBResource, groupIDs []string, resource *api.NetworkResource, logger logr.Logger) error { // Handle possible updated group IDs groupIDMap := make(map[string]any) for _, g := range groupIDs { @@ -405,7 +406,7 @@ func (r *NBResourceReconciler) handleGroupUpdate(ctx context.Context, nbResource } // handleNetBirdResource sync NetBird Network Resource -func (r *NBResourceReconciler) handleNetBirdResource(ctx context.Context, nbResource *netbirdiov1.NBResource, groupIDs []string, logger logr.Logger) (*api.NetworkResource, error) { +func (r *NBResourceReconciler) handleNetBirdResource(ctx context.Context, nbResource *nbv1.NBResource, groupIDs []string, logger logr.Logger) (*api.NetworkResource, error) { var resource *api.NetworkResource var err error if nbResource.Status.NetworkResourceID != nil { @@ -428,7 +429,7 @@ func (r *NBResourceReconciler) handleNetBirdResource(ctx context.Context, nbReso if err != nil && strings.Contains(err.Error(), "already exists") { log.Log.Error(errNetBirdAPI, "network resource with the same name already exists", "err", err) - nbResource.Status.Conditions = netbirdiov1.NBConditionFalse("DuplicateName", "Resource name already exists") + nbResource.Status.Conditions = nbv1.NBConditionFalse("DuplicateName", "Resource name already exists") return nil, errDuplicateResource } @@ -469,8 +470,8 @@ func (r *NBResourceReconciler) handleNetBirdResource(ctx context.Context, nbReso } // handleGroups create NBGroup objects for each group specified in NBResource -func (r *NBResourceReconciler) handleGroups(ctx context.Context, req ctrl.Request, nbResource *netbirdiov1.NBResource, logger logr.Logger) ([]string, *ctrl.Result, error) { - nbGroupList := netbirdiov1.NBGroupList{} +func (r *NBResourceReconciler) handleGroups(ctx context.Context, req ctrl.Request, nbResource *nbv1.NBResource, logger logr.Logger) ([]string, *ctrl.Result, error) { + nbGroupList := nbv1.NBGroupList{} err := r.Client.List(ctx, &nbGroupList, &client.ListOptions{Namespace: req.Namespace}) if err != nil { logger.Error(errKubernetesAPI, "error listing NBGroup", "err", err) @@ -511,7 +512,7 @@ func (r *NBResourceReconciler) handleGroups(ctx context.Context, req ctrl.Reques var groupIDs []string for _, groupName := range nbResource.Spec.Groups { - nbGroup := netbirdiov1.NBGroup{} + nbGroup := nbv1.NBGroup{} groupNameRFC := strings.ToLower(groupName) groupNameRFC = strings.ReplaceAll(groupNameRFC, " ", "-") err := r.Client.Get(ctx, types.NamespacedName{Namespace: req.Namespace, Name: groupNameRFC}, &nbGroup) @@ -520,13 +521,13 @@ func (r *NBResourceReconciler) handleGroups(ctx context.Context, req ctrl.Reques return nil, &ctrl.Result{}, err } else if kerrors.IsNotFound(err) { // Create NBGroup - nbGroup = netbirdiov1.NBGroup{ - ObjectMeta: v1.ObjectMeta{ + nbGroup = nbv1.NBGroup{ + ObjectMeta: metav1.ObjectMeta{ Name: groupNameRFC, Namespace: nbResource.Namespace, - OwnerReferences: []v1.OwnerReference{ + OwnerReferences: []metav1.OwnerReference{ { - APIVersion: netbirdiov1.GroupVersion.Identifier(), + APIVersion: nbv1.GroupVersion.Identifier(), Kind: "NBResource", Name: nbResource.Name, UID: nbResource.UID, @@ -536,7 +537,7 @@ func (r *NBResourceReconciler) handleGroups(ctx context.Context, req ctrl.Reques Finalizers: []string{"netbird.io/group-cleanup", "netbird.io/resource-cleanup"}, Labels: r.DefaultLabels, }, - Spec: netbirdiov1.NBGroupSpec{ + Spec: nbv1.NBGroupSpec{ Name: groupName, }, } @@ -558,8 +559,8 @@ func (r *NBResourceReconciler) handleGroups(ctx context.Context, req ctrl.Reques } if !ownerExists { - nbGroup.OwnerReferences = append(nbGroup.OwnerReferences, v1.OwnerReference{ - APIVersion: netbirdiov1.GroupVersion.Identifier(), + nbGroup.OwnerReferences = append(nbGroup.OwnerReferences, metav1.OwnerReference{ + APIVersion: nbv1.GroupVersion.Identifier(), Kind: "NBResource", Name: nbResource.Name, UID: nbResource.UID, @@ -587,10 +588,10 @@ func (r *NBResourceReconciler) handleGroups(ctx context.Context, req ctrl.Reques return groupIDs, nil, nil } -func (r *NBResourceReconciler) reconcileDelete(ctx context.Context, req ctrl.Request, nbResource *netbirdiov1.NBResource) error { +func (r *NBResourceReconciler) reconcileDelete(ctx context.Context, req ctrl.Request, nbResource *nbv1.NBResource) error { if nbResource.Status.PolicyName != nil { for _, policy := range util.SplitTrim(*nbResource.Status.PolicyName, ",") { - var nbPolicy netbirdiov1.NBPolicy + var nbPolicy nbv1.NBPolicy err := r.Client.Get(ctx, types.NamespacedName{Name: policy}, &nbPolicy) if err != nil && !kerrors.IsNotFound(err) { return err @@ -598,7 +599,7 @@ func (r *NBResourceReconciler) reconcileDelete(ctx context.Context, req ctrl.Req if !kerrors.IsNotFound(err) && slices.Contains(nbPolicy.Status.ManagedServiceList, req.NamespacedName.String()) { nbPolicy.Status.ManagedServiceList = util.Without(nbPolicy.Status.ManagedServiceList, req.NamespacedName.String()) - nbPolicy.Status.LastUpdatedAt = &v1.Time{Time: time.Now()} + nbPolicy.Status.LastUpdatedAt = &metav1.Time{Time: time.Now()} err = r.Client.Status().Update(ctx, &nbPolicy) if err != nil { return err @@ -614,7 +615,7 @@ func (r *NBResourceReconciler) reconcileDelete(ctx context.Context, req ctrl.Req } } - nbGroupList := netbirdiov1.NBGroupList{} + nbGroupList := nbv1.NBGroupList{} err := r.Client.List(ctx, &nbGroupList, &client.ListOptions{Namespace: req.Namespace}) if err != nil { return err @@ -658,9 +659,9 @@ func (r *NBResourceReconciler) reconcileDelete(ctx context.Context, req ctrl.Req // SetupWithManager sets up the controller with the Manager. func (r *NBResourceReconciler) SetupWithManager(mgr ctrl.Manager) error { return ctrl.NewControllerManagedBy(mgr). - For(&netbirdiov1.NBResource{}). - Watches(&netbirdiov1.NBGroup{}, handler.EnqueueRequestForOwner(mgr.GetScheme(), mgr.GetRESTMapper(), &netbirdiov1.NBResource{})). - Watches(&netbirdiov1.NBPolicy{}, handler.EnqueueRequestsFromMapFunc(func(ctx context.Context, obj client.Object) []reconcile.Request { + For(&nbv1.NBResource{}). + Watches(&nbv1.NBGroup{}, handler.EnqueueRequestForOwner(mgr.GetScheme(), mgr.GetRESTMapper(), &nbv1.NBResource{})). + Watches(&nbv1.NBPolicy{}, handler.EnqueueRequestsFromMapFunc(func(ctx context.Context, obj client.Object) []reconcile.Request { if v, ok := obj.GetAnnotations()["netbird.io/generated-by"]; ok { return []reconcile.Request{ { diff --git a/internal/controller/nbresource_controller_test.go b/internal/controller/nbresource_controller_test.go index 3b4666b..0278509 100644 --- a/internal/controller/nbresource_controller_test.go +++ b/internal/controller/nbresource_controller_test.go @@ -11,16 +11,16 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/reconcile" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - - netbirdiov1 "github.com/netbirdio/kubernetes-operator/api/v1" - "github.com/netbirdio/kubernetes-operator/internal/util" netbird "github.com/netbirdio/netbird/shared/management/client/rest" "github.com/netbirdio/netbird/shared/management/http/api" + + nbv1 "github.com/netbirdio/kubernetes-operator/api/v1" + "github.com/netbirdio/kubernetes-operator/internal/util" ) var _ = Describe("NBResource Controller", func() { @@ -34,7 +34,7 @@ var _ = Describe("NBResource Controller", func() { Name: resourceName, Namespace: "default", } - nbresource := &netbirdiov1.NBResource{} + nbresource := &nbv1.NBResource{} var netbirdClient *netbird.Client var mux *http.ServeMux var server *httptest.Server @@ -55,13 +55,13 @@ var _ = Describe("NBResource Controller", func() { By("creating the custom resource for the Kind NBResource") err := k8sClient.Get(ctx, typeNamespacedName, nbresource) if err != nil && errors.IsNotFound(err) { - nbresource = &netbirdiov1.NBResource{ + nbresource = &nbv1.NBResource{ ObjectMeta: metav1.ObjectMeta{ Name: resourceName, Namespace: "default", Finalizers: []string{"netbird.io/cleanup"}, }, - Spec: netbirdiov1.NBResourceSpec{ + Spec: nbv1.NBResourceSpec{ Name: "Test", NetworkID: "test", Address: "test.default.svc.cluster.local", @@ -74,7 +74,7 @@ var _ = Describe("NBResource Controller", func() { }) AfterEach(func() { - resource := &netbirdiov1.NBResource{} + resource := &nbv1.NBResource{} err := k8sClient.Get(ctx, typeNamespacedName, resource) if !errors.IsNotFound(err) { Expect(err).NotTo(HaveOccurred()) @@ -107,7 +107,7 @@ var _ = Describe("NBResource Controller", func() { When("Network Resource doesn't exist", Ordered, func() { AfterAll(func() { - nbGroup := &netbirdiov1.NBGroup{} + nbGroup := &nbv1.NBGroup{} err := k8sClient.Get(ctx, types.NamespacedName{Namespace: "default", Name: "meow"}, nbGroup) if !errors.IsNotFound(err) { if len(nbGroup.Finalizers) > 0 { @@ -123,7 +123,7 @@ var _ = Describe("NBResource Controller", func() { NamespacedName: typeNamespacedName, }) Expect(err).NotTo(HaveOccurred()) - nbGroup := &netbirdiov1.NBGroup{} + nbGroup := &nbv1.NBGroup{} Expect(k8sClient.Get(ctx, types.NamespacedName{Namespace: "default", Name: "meow"}, nbGroup)).To(Succeed()) Expect(nbGroup.Labels).To(HaveKeyWithValue("dog", "bark")) nbGroup.Status.GroupID = util.Ptr("test") @@ -181,21 +181,21 @@ var _ = Describe("NBResource Controller", func() { nbresource.Status.NetworkResourceID = util.Ptr("test") Expect(k8sClient.Status().Update(ctx, nbresource)).To(Succeed()) - nbGroup := &netbirdiov1.NBGroup{ + nbGroup := &nbv1.NBGroup{ ObjectMeta: metav1.ObjectMeta{ Name: "meow", Namespace: "default", Finalizers: []string{"netbird.io/resource-cleanup"}, OwnerReferences: []metav1.OwnerReference{ { - APIVersion: netbirdiov1.GroupVersion.Identifier(), + APIVersion: nbv1.GroupVersion.Identifier(), Kind: "NBResource", Name: "test-resource", UID: nbresource.UID, }, }, }, - Spec: netbirdiov1.NBGroupSpec{ + Spec: nbv1.NBGroupSpec{ Name: "meow", }, } @@ -206,7 +206,7 @@ var _ = Describe("NBResource Controller", func() { }) AfterEach(func() { - nbGroup := &netbirdiov1.NBGroup{} + nbGroup := &nbv1.NBGroup{} err := k8sClient.Get(ctx, types.NamespacedName{Namespace: "default", Name: "meow"}, nbGroup) if !errors.IsNotFound(err) { if len(nbGroup.Finalizers) > 0 { @@ -321,22 +321,22 @@ var _ = Describe("NBResource Controller", func() { When("Policy is specified", Ordered, func() { When("Policy Exists", func() { BeforeAll(func() { - nbPolicy := &netbirdiov1.NBPolicy{ + nbPolicy := &nbv1.NBPolicy{ ObjectMeta: metav1.ObjectMeta{ Name: "test-a", }, - Spec: netbirdiov1.NBPolicySpec{ + Spec: nbv1.NBPolicySpec{ Name: "Test A", SourceGroups: []string{"All"}, }, } Expect(k8sClient.Create(ctx, nbPolicy)).To(Succeed()) - nbPolicy = &netbirdiov1.NBPolicy{ + nbPolicy = &nbv1.NBPolicy{ ObjectMeta: metav1.ObjectMeta{ Name: "test-b", }, - Spec: netbirdiov1.NBPolicySpec{ + Spec: nbv1.NBPolicySpec{ Name: "Test B", SourceGroups: []string{"All"}, }, @@ -345,13 +345,13 @@ var _ = Describe("NBResource Controller", func() { }) AfterAll(func() { - nbPolicy := &netbirdiov1.NBPolicy{} + nbPolicy := &nbv1.NBPolicy{} err := k8sClient.Get(ctx, types.NamespacedName{Name: "test-a"}, nbPolicy) if !errors.IsNotFound(err) { Expect(k8sClient.Delete(ctx, nbPolicy)).To(Succeed()) } - nbPolicy = &netbirdiov1.NBPolicy{} + nbPolicy = &nbv1.NBPolicy{} err = k8sClient.Get(ctx, types.NamespacedName{Name: "test-b"}, nbPolicy) if !errors.IsNotFound(err) { Expect(k8sClient.Delete(ctx, nbPolicy)).To(Succeed()) @@ -366,7 +366,7 @@ var _ = Describe("NBResource Controller", func() { }) Expect(err).NotTo(HaveOccurred()) - nbPolicy := &netbirdiov1.NBPolicy{} + nbPolicy := &nbv1.NBPolicy{} Expect(k8sClient.Get(ctx, types.NamespacedName{Name: "test-a"}, nbPolicy)).To(Succeed()) Expect(nbPolicy.Status.ManagedServiceList).To(ContainElement("default/test-resource")) }) @@ -384,11 +384,11 @@ var _ = Describe("NBResource Controller", func() { }) Expect(err).NotTo(HaveOccurred()) - nbPolicy := &netbirdiov1.NBPolicy{} + nbPolicy := &nbv1.NBPolicy{} Expect(k8sClient.Get(ctx, types.NamespacedName{Name: "test-a"}, nbPolicy)).To(Succeed()) Expect(nbPolicy.Status.ManagedServiceList).NotTo(ContainElement("default/test-resource")) - nbPolicy = &netbirdiov1.NBPolicy{} + nbPolicy = &nbv1.NBPolicy{} Expect(k8sClient.Get(ctx, types.NamespacedName{Name: "test-b"}, nbPolicy)).To(Succeed()) Expect(nbPolicy.Status.ManagedServiceList).To(ContainElement("default/test-resource")) }) @@ -396,7 +396,7 @@ var _ = Describe("NBResource Controller", func() { When("Policy is removed", func() { It("should remove old reference", func() { - nbPolicy := &netbirdiov1.NBPolicy{} + nbPolicy := &nbv1.NBPolicy{} Expect(k8sClient.Get(ctx, types.NamespacedName{Name: "test-a"}, nbPolicy)).To(Succeed()) nbPolicy.Status.ManagedServiceList = []string{"default/test-resource"} Expect(k8sClient.Status().Update(ctx, nbPolicy)).To(Succeed()) @@ -412,7 +412,7 @@ var _ = Describe("NBResource Controller", func() { }) Expect(err).NotTo(HaveOccurred()) - nbPolicy = &netbirdiov1.NBPolicy{} + nbPolicy = &nbv1.NBPolicy{} Expect(k8sClient.Get(ctx, types.NamespacedName{Name: "test-a"}, nbPolicy)).To(Succeed()) Expect(nbPolicy.Status.ManagedServiceList).NotTo(ContainElement("default/test-resource")) }) @@ -425,7 +425,7 @@ var _ = Describe("NBResource Controller", func() { controllerReconciler.AllowAutomaticPolicyCreation = true }) AfterEach(func() { - nbPolicy := &netbirdiov1.NBPolicy{} + nbPolicy := &nbv1.NBPolicy{} err := k8sClient.Get(ctx, types.NamespacedName{Name: "test-gen-" + nbresource.Namespace + "-" + nbresource.Name}, nbPolicy) if !errors.IsNotFound(err) { if len(nbPolicy.Finalizers) > 0 { @@ -452,7 +452,7 @@ var _ = Describe("NBResource Controller", func() { Expect(k8sClient.Get(ctx, typeNamespacedName, nbresource)).To(Succeed()) Expect(nbresource.Status.PolicyNameMapping).To(HaveKey(policyGenName)) - nbPolicy := &netbirdiov1.NBPolicy{} + nbPolicy := &nbv1.NBPolicy{} Expect(k8sClient.Get(ctx, types.NamespacedName{Name: nbresource.Status.PolicyNameMapping[policyGenName]}, nbPolicy)).To(Succeed()) Expect(nbPolicy.Status.ManagedServiceList).To(ContainElement("default/test-resource")) Expect(nbPolicy.Labels).To(HaveKeyWithValue("dog", "bark")) @@ -486,7 +486,7 @@ var _ = Describe("NBResource Controller", func() { Expect(k8sClient.Get(ctx, typeNamespacedName, nbresource)).To(Succeed()) Expect(nbresource.Status.PolicyNameMapping).To(HaveKey(policyGenName)) - nbPolicy := &netbirdiov1.NBPolicy{} + nbPolicy := &nbv1.NBPolicy{} Expect(k8sClient.Get(ctx, types.NamespacedName{Name: nbresource.Status.PolicyNameMapping[policyGenName]}, nbPolicy)).To(Succeed()) Expect(nbPolicy.Status.ManagedServiceList).To(ContainElement("default/test-resource")) Expect(nbPolicy.Spec.Name).To(Equal("UnitTest")) @@ -495,11 +495,11 @@ var _ = Describe("NBResource Controller", func() { When("Policy already exists", func() { It("should update it", func() { - nbPolicy := &netbirdiov1.NBPolicy{ + nbPolicy := &nbv1.NBPolicy{ ObjectMeta: metav1.ObjectMeta{ Name: "test-gen-default-test-resource", }, - Spec: netbirdiov1.NBPolicySpec{ + Spec: nbv1.NBPolicySpec{ Name: "Test", Description: "Test", SourceGroups: []string{"toast"}, @@ -520,7 +520,7 @@ var _ = Describe("NBResource Controller", func() { Expect(k8sClient.Get(ctx, typeNamespacedName, nbresource)).To(Succeed()) Expect(nbresource.Status.PolicyNameMapping).To(HaveKey(policyGenName)) - nbPolicy = &netbirdiov1.NBPolicy{} + nbPolicy = &nbv1.NBPolicy{} Expect(k8sClient.Get(ctx, types.NamespacedName{Name: nbresource.Status.PolicyNameMapping[policyGenName]}, nbPolicy)).To(Succeed()) Expect(nbPolicy.Status.ManagedServiceList).To(ContainElement("default/test-resource")) Expect(nbPolicy.Spec.Name).To(Equal("Autogenerated policy for resource default/test-resource in cluster kubernetes")) @@ -552,7 +552,7 @@ var _ = Describe("NBResource Controller", func() { Expect(k8sClient.Get(ctx, typeNamespacedName, nbresource)).To(Succeed()) Expect(nbresource.Status.PolicyNameMapping).To(HaveKey(policyGenName)) - nbPolicy := &netbirdiov1.NBPolicy{} + nbPolicy := &nbv1.NBPolicy{} Expect(k8sClient.Get(ctx, types.NamespacedName{Name: nbresource.Status.PolicyNameMapping[policyGenName]}, nbPolicy)).To(Succeed()) Expect(nbPolicy.Status.ManagedServiceList).To(ContainElement("default/test-resource")) Expect(nbPolicy.Spec.Name).To(Equal("UnitTest")) @@ -573,7 +573,7 @@ var _ = Describe("NBResource Controller", func() { Expect(k8sClient.Get(ctx, typeNamespacedName, nbresource)).To(Succeed()) Expect(nbresource.Status.PolicyNameMapping).To(HaveKey(policyGenName)) - nbPolicy := &netbirdiov1.NBPolicy{} + nbPolicy := &nbv1.NBPolicy{} Expect(k8sClient.Get(ctx, types.NamespacedName{Name: nbresource.Status.PolicyNameMapping[policyGenName]}, nbPolicy)).To(Succeed()) nbPolicy.Spec.Name = "Meow" nbPolicy.Annotations = nil @@ -607,7 +607,7 @@ var _ = Describe("NBResource Controller", func() { Expect(k8sClient.Get(ctx, typeNamespacedName, nbresource)).To(Succeed()) Expect(nbresource.Status.PolicyNameMapping).To(HaveKey(policyGenName)) - nbPolicy := &netbirdiov1.NBPolicy{} + nbPolicy := &nbv1.NBPolicy{} Expect(k8sClient.Get(ctx, types.NamespacedName{Name: nbresource.Status.PolicyNameMapping[policyGenName]}, nbPolicy)).To(Succeed()) nbresource.Spec.PolicyName = "" Expect(k8sClient.Update(ctx, nbresource)).To(Succeed()) @@ -626,33 +626,33 @@ var _ = Describe("NBResource Controller", func() { When("Multiple Policies are specified", Ordered, func() { BeforeAll(func() { - nbPolicy := &netbirdiov1.NBPolicy{ + nbPolicy := &nbv1.NBPolicy{ ObjectMeta: metav1.ObjectMeta{ Name: "test-a", }, - Spec: netbirdiov1.NBPolicySpec{ + Spec: nbv1.NBPolicySpec{ Name: "Test A", SourceGroups: []string{"All"}, }, } Expect(k8sClient.Create(ctx, nbPolicy)).To(Succeed()) - nbPolicy = &netbirdiov1.NBPolicy{ + nbPolicy = &nbv1.NBPolicy{ ObjectMeta: metav1.ObjectMeta{ Name: "test-b", }, - Spec: netbirdiov1.NBPolicySpec{ + Spec: nbv1.NBPolicySpec{ Name: "Test B", SourceGroups: []string{"All"}, }, } Expect(k8sClient.Create(ctx, nbPolicy)).To(Succeed()) - nbPolicy = &netbirdiov1.NBPolicy{ + nbPolicy = &nbv1.NBPolicy{ ObjectMeta: metav1.ObjectMeta{ Name: "test-c", }, - Spec: netbirdiov1.NBPolicySpec{ + Spec: nbv1.NBPolicySpec{ Name: "Test C", SourceGroups: []string{"All"}, }, @@ -661,19 +661,19 @@ var _ = Describe("NBResource Controller", func() { }) AfterAll(func() { - nbPolicy := &netbirdiov1.NBPolicy{} + nbPolicy := &nbv1.NBPolicy{} err := k8sClient.Get(ctx, types.NamespacedName{Name: "test-a"}, nbPolicy) if !errors.IsNotFound(err) { Expect(k8sClient.Delete(ctx, nbPolicy)).To(Succeed()) } - nbPolicy = &netbirdiov1.NBPolicy{} + nbPolicy = &nbv1.NBPolicy{} err = k8sClient.Get(ctx, types.NamespacedName{Name: "test-b"}, nbPolicy) if !errors.IsNotFound(err) { Expect(k8sClient.Delete(ctx, nbPolicy)).To(Succeed()) } - nbPolicy = &netbirdiov1.NBPolicy{} + nbPolicy = &nbv1.NBPolicy{} err = k8sClient.Get(ctx, types.NamespacedName{Name: "test-c"}, nbPolicy) if !errors.IsNotFound(err) { Expect(k8sClient.Delete(ctx, nbPolicy)).To(Succeed()) @@ -689,11 +689,11 @@ var _ = Describe("NBResource Controller", func() { }) Expect(err).NotTo(HaveOccurred()) - nbPolicy := &netbirdiov1.NBPolicy{} + nbPolicy := &nbv1.NBPolicy{} Expect(k8sClient.Get(ctx, types.NamespacedName{Name: "test-a"}, nbPolicy)).To(Succeed()) Expect(nbPolicy.Status.ManagedServiceList).To(ContainElement("default/test-resource")) - nbPolicy = &netbirdiov1.NBPolicy{} + nbPolicy = &nbv1.NBPolicy{} Expect(k8sClient.Get(ctx, types.NamespacedName{Name: "test-b"}, nbPolicy)).To(Succeed()) Expect(nbPolicy.Status.ManagedServiceList).To(ContainElement("default/test-resource")) }) @@ -711,15 +711,15 @@ var _ = Describe("NBResource Controller", func() { }) Expect(err).NotTo(HaveOccurred()) - nbPolicy := &netbirdiov1.NBPolicy{} + nbPolicy := &nbv1.NBPolicy{} Expect(k8sClient.Get(ctx, types.NamespacedName{Name: "test-a"}, nbPolicy)).To(Succeed()) Expect(nbPolicy.Status.ManagedServiceList).NotTo(ContainElement("default/test-resource")) - nbPolicy = &netbirdiov1.NBPolicy{} + nbPolicy = &nbv1.NBPolicy{} Expect(k8sClient.Get(ctx, types.NamespacedName{Name: "test-b"}, nbPolicy)).To(Succeed()) Expect(nbPolicy.Status.ManagedServiceList).To(ContainElement("default/test-resource")) - nbPolicy = &netbirdiov1.NBPolicy{} + nbPolicy = &nbv1.NBPolicy{} Expect(k8sClient.Get(ctx, types.NamespacedName{Name: "test-c"}, nbPolicy)).To(Succeed()) Expect(nbPolicy.Status.ManagedServiceList).To(ContainElement("default/test-resource")) }) @@ -738,15 +738,15 @@ var _ = Describe("NBResource Controller", func() { }) Expect(err).NotTo(HaveOccurred()) - nbPolicy := &netbirdiov1.NBPolicy{} + nbPolicy := &nbv1.NBPolicy{} Expect(k8sClient.Get(ctx, types.NamespacedName{Name: "test-a"}, nbPolicy)).To(Succeed()) Expect(nbPolicy.Status.ManagedServiceList).NotTo(ContainElement("default/test-resource")) - nbPolicy = &netbirdiov1.NBPolicy{} + nbPolicy = &nbv1.NBPolicy{} Expect(k8sClient.Get(ctx, types.NamespacedName{Name: "test-b"}, nbPolicy)).To(Succeed()) Expect(nbPolicy.Status.ManagedServiceList).NotTo(ContainElement("default/test-resource")) - nbPolicy = &netbirdiov1.NBPolicy{} + nbPolicy = &nbv1.NBPolicy{} Expect(k8sClient.Get(ctx, types.NamespacedName{Name: "test-c"}, nbPolicy)).To(Succeed()) Expect(nbPolicy.Status.ManagedServiceList).NotTo(ContainElement("default/test-resource")) }) @@ -764,7 +764,7 @@ var _ = Describe("NBResource Controller", func() { }) Expect(err).NotTo(HaveOccurred()) - nbGroup := &netbirdiov1.NBGroup{} + nbGroup := &nbv1.NBGroup{} Expect(k8sClient.Get(ctx, types.NamespacedName{Namespace: "default", Name: "meow"}, nbGroup)).To(Succeed()) Expect(nbGroup.Finalizers).To(BeEmpty()) Expect(nbGroup.OwnerReferences).To(HaveLen(1)) @@ -773,12 +773,12 @@ var _ = Describe("NBResource Controller", func() { When("Removed groups are referenced by something else", func() { BeforeEach(func() { - otherResource := &netbirdiov1.NBResource{ + otherResource := &nbv1.NBResource{ ObjectMeta: metav1.ObjectMeta{ Name: "not-test", Namespace: "default", }, - Spec: netbirdiov1.NBResourceSpec{ + Spec: nbv1.NBResourceSpec{ Name: "nottest", NetworkID: "test", Address: "test", @@ -787,7 +787,7 @@ var _ = Describe("NBResource Controller", func() { } Expect(k8sClient.Create(ctx, otherResource)).To(Succeed()) - nbGroup := &netbirdiov1.NBGroup{} + nbGroup := &nbv1.NBGroup{} Expect(k8sClient.Get(ctx, types.NamespacedName{Namespace: "default", Name: "meow"}, nbGroup)).To(Succeed()) nbGroup.OwnerReferences = append(nbGroup.OwnerReferences, metav1.OwnerReference{ APIVersion: "netbird.io/v1", @@ -799,7 +799,7 @@ var _ = Describe("NBResource Controller", func() { }) AfterEach(func() { - otherResource := &netbirdiov1.NBResource{} + otherResource := &nbv1.NBResource{} Expect(k8sClient.Get(ctx, types.NamespacedName{Namespace: "default", Name: "not-test"}, otherResource)).To(Succeed()) Expect(k8sClient.Delete(ctx, otherResource)).To(Succeed()) }) @@ -813,7 +813,7 @@ var _ = Describe("NBResource Controller", func() { }) Expect(err).NotTo(HaveOccurred()) - nbGroup := &netbirdiov1.NBGroup{} + nbGroup := &nbv1.NBGroup{} Expect(k8sClient.Get(ctx, types.NamespacedName{Namespace: "default", Name: "meow"}, nbGroup)).To(Succeed()) Expect(nbGroup.Finalizers).To(HaveLen(1)) Expect(nbGroup.OwnerReferences).To(HaveLen(1)) @@ -830,7 +830,7 @@ var _ = Describe("NBResource Controller", func() { }) Expect(err).NotTo(HaveOccurred()) - nbGroup := &netbirdiov1.NBGroup{} + nbGroup := &nbv1.NBGroup{} Expect(k8sClient.Get(ctx, types.NamespacedName{Namespace: "default", Name: "meow3"}, nbGroup)).To(Succeed()) Expect(nbGroup.OwnerReferences).To(HaveLen(1)) Expect(nbGroup.Finalizers).To(ConsistOf([]string{"netbird.io/group-cleanup", "netbird.io/resource-cleanup"})) @@ -872,11 +872,11 @@ var _ = Describe("NBResource Controller", func() { nbresource.Status.NetworkResourceID = util.Ptr("test") Expect(k8sClient.Status().Update(ctx, nbresource)).To(Succeed()) - nbPolicy := &netbirdiov1.NBPolicy{ + nbPolicy := &nbv1.NBPolicy{ ObjectMeta: metav1.ObjectMeta{ Name: "test", }, - Spec: netbirdiov1.NBPolicySpec{ + Spec: nbv1.NBPolicySpec{ Name: "Test", SourceGroups: []string{"All"}, Bidirectional: true, @@ -887,32 +887,32 @@ var _ = Describe("NBResource Controller", func() { nbPolicy.Status.ManagedServiceList = []string{"default/test-resource"} Expect(k8sClient.Status().Update(ctx, nbPolicy)).To(Succeed()) - nbGroup := &netbirdiov1.NBGroup{ + nbGroup := &nbv1.NBGroup{ ObjectMeta: metav1.ObjectMeta{ Name: "meow", Namespace: "default", Finalizers: []string{"netbird.io/resource-cleanup"}, OwnerReferences: []metav1.OwnerReference{ { - APIVersion: netbirdiov1.GroupVersion.Identifier(), + APIVersion: nbv1.GroupVersion.Identifier(), Kind: "NBResource", Name: nbresource.Name, UID: nbresource.UID, }, }, }, - Spec: netbirdiov1.NBGroupSpec{ + Spec: nbv1.NBGroupSpec{ Name: "meow", }, } Expect(k8sClient.Create(ctx, nbGroup)).To(Succeed()) - othernbresource := &netbirdiov1.NBResource{ + othernbresource := &nbv1.NBResource{ ObjectMeta: metav1.ObjectMeta{ Name: "other-resource", Namespace: "default", }, - Spec: netbirdiov1.NBResourceSpec{ + Spec: nbv1.NBResourceSpec{ Name: "test", NetworkID: "test", Address: "test", @@ -921,34 +921,34 @@ var _ = Describe("NBResource Controller", func() { } Expect(k8sClient.Create(ctx, othernbresource)).To(Succeed()) - nbGroup = &netbirdiov1.NBGroup{ + nbGroup = &nbv1.NBGroup{ ObjectMeta: metav1.ObjectMeta{ Name: "meowdelete", Namespace: "default", Finalizers: []string{"netbird.io/resource-cleanup"}, OwnerReferences: []metav1.OwnerReference{ { - APIVersion: netbirdiov1.GroupVersion.Identifier(), + APIVersion: nbv1.GroupVersion.Identifier(), Kind: "NBResource", Name: nbresource.Name, UID: nbresource.UID, }, { - APIVersion: netbirdiov1.GroupVersion.Identifier(), + APIVersion: nbv1.GroupVersion.Identifier(), Kind: "NBResource", Name: othernbresource.Name, UID: othernbresource.UID, }, }, }, - Spec: netbirdiov1.NBGroupSpec{ + Spec: nbv1.NBGroupSpec{ Name: "meow", }, } Expect(k8sClient.Create(ctx, nbGroup)).To(Succeed()) }) AfterAll(func() { - policy := &netbirdiov1.NBPolicy{} + policy := &nbv1.NBPolicy{} err := k8sClient.Get(ctx, types.NamespacedName{Namespace: "default", Name: "test"}, policy) if !errors.IsNotFound(err) { Expect(err).NotTo(HaveOccurred()) @@ -961,7 +961,7 @@ var _ = Describe("NBResource Controller", func() { Expect(k8sClient.Delete(ctx, policy)).To(Succeed()) } - resource := &netbirdiov1.NBResource{} + resource := &nbv1.NBResource{} err = k8sClient.Get(ctx, types.NamespacedName{Namespace: "default", Name: "other-resource"}, resource) if !errors.IsNotFound(err) { Expect(err).NotTo(HaveOccurred()) @@ -974,7 +974,7 @@ var _ = Describe("NBResource Controller", func() { Expect(k8sClient.Delete(ctx, resource)).To(Succeed()) } - group := &netbirdiov1.NBGroup{} + group := &nbv1.NBGroup{} err = k8sClient.Get(ctx, types.NamespacedName{Namespace: "default", Name: "meow"}, group) if !errors.IsNotFound(err) { Expect(err).NotTo(HaveOccurred()) @@ -987,7 +987,7 @@ var _ = Describe("NBResource Controller", func() { Expect(k8sClient.Delete(ctx, group)).To(Succeed()) } - group = &netbirdiov1.NBGroup{} + group = &nbv1.NBGroup{} err = k8sClient.Get(ctx, types.NamespacedName{Namespace: "default", Name: "meowdelete"}, group) if !errors.IsNotFound(err) { Expect(err).NotTo(HaveOccurred()) @@ -1022,7 +1022,7 @@ var _ = Describe("NBResource Controller", func() { Expect(errors.IsNotFound(err)).To(BeTrue()) }) It("should remove resource cleanup finalizer from solely-owned NBGroups", func() { - group := &netbirdiov1.NBGroup{} + group := &nbv1.NBGroup{} err := k8sClient.Get(ctx, types.NamespacedName{Namespace: "default", Name: "meow"}, group) if errors.IsNotFound(err) { return @@ -1030,13 +1030,13 @@ var _ = Describe("NBResource Controller", func() { Expect(group.Finalizers).To(BeEmpty()) }) It("should remove owner reference from shared NBGroups", func() { - group := &netbirdiov1.NBGroup{} + group := &nbv1.NBGroup{} Expect(k8sClient.Get(ctx, types.NamespacedName{Namespace: "default", Name: "meowdelete"}, group)).To(Succeed()) Expect(group.Finalizers).To(HaveLen(1)) Expect(group.OwnerReferences).To(HaveLen(1)) }) It("should remove policy reference", func() { - policy := &netbirdiov1.NBPolicy{} + policy := &nbv1.NBPolicy{} Expect(k8sClient.Get(ctx, types.NamespacedName{Name: "test"}, policy)).To(Succeed()) Expect(policy.Status.ManagedServiceList).NotTo(ContainElement("default/test-resource")) }) diff --git a/internal/controller/nbroutingpeer_controller.go b/internal/controller/nbroutingpeer_controller.go index 048adcc..73686b0 100644 --- a/internal/controller/nbroutingpeer_controller.go +++ b/internal/controller/nbroutingpeer_controller.go @@ -8,19 +8,20 @@ import ( "strings" "time" + "github.com/go-logr/logr" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/handler" - "github.com/go-logr/logr" - netbirdiov1 "github.com/netbirdio/kubernetes-operator/api/v1" - "github.com/netbirdio/kubernetes-operator/internal/util" netbird "github.com/netbirdio/netbird/shared/management/client/rest" "github.com/netbirdio/netbird/shared/management/http/api" + + nbv1 "github.com/netbirdio/kubernetes-operator/api/v1" + "github.com/netbirdio/kubernetes-operator/internal/util" ) // NBRoutingPeerReconciler reconciles a NBRoutingPeer object @@ -41,7 +42,7 @@ func (r *NBRoutingPeerReconciler) Reconcile(ctx context.Context, req ctrl.Reques logger := ctrl.Log.WithName("NBRoutingPeer").WithValues("namespace", req.Namespace, "name", req.Name) logger.Info("Reconciling NBRoutingPeer") - nbrp := &netbirdiov1.NBRoutingPeer{} + nbrp := &nbv1.NBRoutingPeer{} err = r.Get(ctx, req.NamespacedName, nbrp) if err != nil { if !errors.IsNotFound(err) { @@ -109,17 +110,17 @@ func (r *NBRoutingPeerReconciler) Reconcile(ctx context.Context, req ctrl.Reques return ctrl.Result{}, err } - nbrp.Status.Conditions = netbirdiov1.NBConditionTrue() + nbrp.Status.Conditions = nbv1.NBConditionTrue() return ctrl.Result{}, nil } // handleDeployment reconcile routing peer Deployment -func (r *NBRoutingPeerReconciler) handleDeployment(ctx context.Context, req ctrl.Request, nbrp *netbirdiov1.NBRoutingPeer, logger logr.Logger) error { +func (r *NBRoutingPeerReconciler) handleDeployment(ctx context.Context, req ctrl.Request, nbrp *nbv1.NBRoutingPeer, logger logr.Logger) error { routingPeerDeployment := appsv1.Deployment{} err := r.Client.Get(ctx, req.NamespacedName, &routingPeerDeployment) if err != nil && !errors.IsNotFound(err) { logger.Error(errKubernetesAPI, "error getting Deployment", "err", err) - nbrp.Status.Conditions = netbirdiov1.NBConditionFalse("internalError", fmt.Sprintf("error getting Deployment: %v", err)) + nbrp.Status.Conditions = nbv1.NBConditionFalse("internalError", fmt.Sprintf("error getting Deployment: %v", err)) return err } @@ -135,12 +136,12 @@ func (r *NBRoutingPeerReconciler) handleDeployment(ctx context.Context, req ctrl replicas = *nbrp.Spec.Replicas } routingPeerDeployment = appsv1.Deployment{ - ObjectMeta: v1.ObjectMeta{ + ObjectMeta: metav1.ObjectMeta{ Name: nbrp.Name, Namespace: nbrp.Namespace, - OwnerReferences: []v1.OwnerReference{ + OwnerReferences: []metav1.OwnerReference{ { - APIVersion: netbirdiov1.GroupVersion.Identifier(), + APIVersion: nbv1.GroupVersion.Identifier(), Kind: "NBRoutingPeer", Name: nbrp.Name, UID: nbrp.UID, @@ -152,13 +153,13 @@ func (r *NBRoutingPeerReconciler) handleDeployment(ctx context.Context, req ctrl }, Spec: appsv1.DeploymentSpec{ Replicas: &replicas, - Selector: &v1.LabelSelector{ + Selector: &metav1.LabelSelector{ MatchLabels: map[string]string{ "app.kubernetes.io/name": "netbird-router", }, }, Template: corev1.PodTemplateSpec{ - ObjectMeta: v1.ObjectMeta{ + ObjectMeta: metav1.ObjectMeta{ Labels: podLabels, }, Spec: corev1.PodSpec{ @@ -199,16 +200,16 @@ func (r *NBRoutingPeerReconciler) handleDeployment(ctx context.Context, req ctrl err = r.Client.Create(ctx, &routingPeerDeployment) if err != nil { logger.Error(errKubernetesAPI, "error creating Deployment", "err", err) - nbrp.Status.Conditions = netbirdiov1.NBConditionFalse("internalError", fmt.Sprintf("error creating Deployment: %v", err)) + nbrp.Status.Conditions = nbv1.NBConditionFalse("internalError", fmt.Sprintf("error creating Deployment: %v", err)) return err } } else if err == nil { updatedDeployment := routingPeerDeployment.DeepCopy() updatedDeployment.ObjectMeta.Name = nbrp.Name updatedDeployment.ObjectMeta.Namespace = nbrp.Namespace - updatedDeployment.ObjectMeta.OwnerReferences = []v1.OwnerReference{ + updatedDeployment.ObjectMeta.OwnerReferences = []metav1.OwnerReference{ { - APIVersion: netbirdiov1.GroupVersion.Identifier(), + APIVersion: nbv1.GroupVersion.Identifier(), Kind: "NBRoutingPeer", Name: nbrp.Name, UID: nbrp.UID, @@ -224,7 +225,7 @@ func (r *NBRoutingPeerReconciler) handleDeployment(ctx context.Context, req ctrl replicas = *nbrp.Spec.Replicas } updatedDeployment.Spec.Replicas = &replicas - updatedDeployment.Spec.Selector = &v1.LabelSelector{ + updatedDeployment.Spec.Selector = &metav1.LabelSelector{ MatchLabels: map[string]string{ "app.kubernetes.io/name": "netbird-router", }, @@ -269,7 +270,7 @@ func (r *NBRoutingPeerReconciler) handleDeployment(ctx context.Context, req ctrl err = r.Client.Patch(ctx, updatedDeployment, patch) if err != nil { logger.Error(errKubernetesAPI, "error updating Deployment", "err", err) - nbrp.Status.Conditions = netbirdiov1.NBConditionFalse("internalError", fmt.Sprintf("error updating Deployment: %v", err)) + nbrp.Status.Conditions = nbv1.NBConditionFalse("internalError", fmt.Sprintf("error updating Deployment: %v", err)) return err } } @@ -278,13 +279,13 @@ func (r *NBRoutingPeerReconciler) handleDeployment(ctx context.Context, req ctrl } // handleRouter reconcile network routing peer in NetBird management API -func (r *NBRoutingPeerReconciler) handleRouter(ctx context.Context, nbrp *netbirdiov1.NBRoutingPeer, nbGroup netbirdiov1.NBGroup, logger logr.Logger) error { +func (r *NBRoutingPeerReconciler) handleRouter(ctx context.Context, nbrp *nbv1.NBRoutingPeer, nbGroup nbv1.NBGroup, logger logr.Logger) error { // Check NetworkRouter exists routers, err := r.Netbird.Networks.Routers(*nbrp.Status.NetworkID).List(ctx) if err != nil { logger.Error(errNetBirdAPI, "error listing network routers", "err", err) - nbrp.Status.Conditions = netbirdiov1.NBConditionFalse("APIError", fmt.Sprintf("error listing network routers: %v", err)) + nbrp.Status.Conditions = nbv1.NBConditionFalse("APIError", fmt.Sprintf("error listing network routers: %v", err)) return err } @@ -303,7 +304,7 @@ func (r *NBRoutingPeerReconciler) handleRouter(ctx context.Context, nbrp *netbir if err != nil { logger.Error(errNetBirdAPI, "error creating network router", "err", err) - nbrp.Status.Conditions = netbirdiov1.NBConditionFalse("APIError", fmt.Sprintf("error creating network router: %v", err)) + nbrp.Status.Conditions = nbv1.NBConditionFalse("APIError", fmt.Sprintf("error creating network router: %v", err)) return err } @@ -321,7 +322,7 @@ func (r *NBRoutingPeerReconciler) handleRouter(ctx context.Context, nbrp *netbir if err != nil { logger.Error(errNetBirdAPI, "error updating network router", "err", err) - nbrp.Status.Conditions = netbirdiov1.NBConditionFalse("APIError", fmt.Sprintf("error updating network router: %v", err)) + nbrp.Status.Conditions = nbv1.NBConditionFalse("APIError", fmt.Sprintf("error updating network router: %v", err)) return err } } @@ -331,7 +332,7 @@ func (r *NBRoutingPeerReconciler) handleRouter(ctx context.Context, nbrp *netbir } // handleSetupKey reconcile setup key and regenerate if invalid -func (r *NBRoutingPeerReconciler) handleSetupKey(ctx context.Context, req ctrl.Request, nbrp *netbirdiov1.NBRoutingPeer, nbGroup netbirdiov1.NBGroup, logger logr.Logger) (*ctrl.Result, error) { +func (r *NBRoutingPeerReconciler) handleSetupKey(ctx context.Context, req ctrl.Request, nbrp *nbv1.NBRoutingPeer, nbGroup nbv1.NBGroup, logger logr.Logger) (*ctrl.Result, error) { networkName := r.ClusterName if r.NamespacedNetworks { networkName += "-" + req.Namespace @@ -349,19 +350,19 @@ func (r *NBRoutingPeerReconciler) handleSetupKey(ctx context.Context, req ctrl.R if err != nil { logger.Error(errNetBirdAPI, "error creating setup key", "err", err) - nbrp.Status.Conditions = netbirdiov1.NBConditionFalse("APIError", fmt.Sprintf("error creating setup key: %v", err)) + nbrp.Status.Conditions = nbv1.NBConditionFalse("APIError", fmt.Sprintf("error creating setup key: %v", err)) return &ctrl.Result{}, err } nbrp.Status.SetupKeyID = &setupKey.Id skSecret := corev1.Secret{ - ObjectMeta: v1.ObjectMeta{ + ObjectMeta: metav1.ObjectMeta{ Name: nbrp.Name, Namespace: nbrp.Namespace, - OwnerReferences: []v1.OwnerReference{ + OwnerReferences: []metav1.OwnerReference{ { - APIVersion: netbirdiov1.GroupVersion.Identifier(), + APIVersion: nbv1.GroupVersion.Identifier(), Kind: "NBRoutingPeer", Name: nbrp.Name, UID: nbrp.UID, @@ -389,7 +390,7 @@ func (r *NBRoutingPeerReconciler) handleSetupKey(ctx context.Context, req ctrl.R if err != nil { logger.Error(errKubernetesAPI, "error creating Secret", "err", err) - nbrp.Status.Conditions = netbirdiov1.NBConditionFalse("internalError", fmt.Sprintf("error creating secret: %v", err)) + nbrp.Status.Conditions = nbv1.NBConditionFalse("internalError", fmt.Sprintf("error creating secret: %v", err)) return &ctrl.Result{}, err } } else { @@ -397,7 +398,7 @@ func (r *NBRoutingPeerReconciler) handleSetupKey(ctx context.Context, req ctrl.R setupKey, err := r.Netbird.SetupKeys.Get(ctx, *nbrp.Status.SetupKeyID) if err != nil && !strings.Contains(err.Error(), "not found") { logger.Error(errNetBirdAPI, "error getting setup key", "err", err) - nbrp.Status.Conditions = netbirdiov1.NBConditionFalse("APIError", fmt.Sprintf("error getting setup key: %v", err)) + nbrp.Status.Conditions = nbv1.NBConditionFalse("APIError", fmt.Sprintf("error getting setup key: %v", err)) return &ctrl.Result{}, err } @@ -407,7 +408,7 @@ func (r *NBRoutingPeerReconciler) handleSetupKey(ctx context.Context, req ctrl.R if err != nil { logger.Error(errNetBirdAPI, "error deleting setup key", "err", err) - nbrp.Status.Conditions = netbirdiov1.NBConditionFalse("APIError", fmt.Sprintf("error deleting setup key: %v", err)) + nbrp.Status.Conditions = nbv1.NBConditionFalse("APIError", fmt.Sprintf("error deleting setup key: %v", err)) return &ctrl.Result{}, err } } @@ -422,7 +423,7 @@ func (r *NBRoutingPeerReconciler) handleSetupKey(ctx context.Context, req ctrl.R err = r.Client.Get(ctx, req.NamespacedName, &skSecret) if err != nil && !errors.IsNotFound(err) { logger.Error(errKubernetesAPI, "error getting Secret", "err", err) - nbrp.Status.Conditions = netbirdiov1.NBConditionFalse("internalError", fmt.Sprintf("error getting secret: %v", err)) + nbrp.Status.Conditions = nbv1.NBConditionFalse("internalError", fmt.Sprintf("error getting secret: %v", err)) return &ctrl.Result{}, err } @@ -433,13 +434,13 @@ func (r *NBRoutingPeerReconciler) handleSetupKey(ctx context.Context, req ctrl.R if err != nil { logger.Error(errNetBirdAPI, "error deleting setup key", "err", err) - nbrp.Status.Conditions = netbirdiov1.NBConditionFalse("APIError", fmt.Sprintf("error deleting setup key: %v", err)) + nbrp.Status.Conditions = nbv1.NBConditionFalse("APIError", fmt.Sprintf("error deleting setup key: %v", err)) return &ctrl.Result{}, err } nbrp.Status.SetupKeyID = nil - nbrp.Status.Conditions = netbirdiov1.NBConditionFalse("Gone", "generated secret was deleted") + nbrp.Status.Conditions = nbv1.NBConditionFalse("Gone", "generated secret was deleted") // Requeue to avoid repeating code return &ctrl.Result{Requeue: true}, nil } @@ -449,29 +450,29 @@ func (r *NBRoutingPeerReconciler) handleSetupKey(ctx context.Context, req ctrl.R } // handleGroup creates/updates NBGroup for routing peer -func (r *NBRoutingPeerReconciler) handleGroup(ctx context.Context, req ctrl.Request, nbrp *netbirdiov1.NBRoutingPeer, logger logr.Logger) (*netbirdiov1.NBGroup, *ctrl.Result, error) { +func (r *NBRoutingPeerReconciler) handleGroup(ctx context.Context, req ctrl.Request, nbrp *nbv1.NBRoutingPeer, logger logr.Logger) (*nbv1.NBGroup, *ctrl.Result, error) { networkName := r.ClusterName if r.NamespacedNetworks { networkName += "-" + req.Namespace } // Check if NetBird Group exists - nbGroup := netbirdiov1.NBGroup{} + nbGroup := nbv1.NBGroup{} err := r.Client.Get(ctx, req.NamespacedName, &nbGroup) if err != nil && !errors.IsNotFound(err) { logger.Error(errKubernetesAPI, "error getting NBGroup", "err", err) - nbrp.Status.Conditions = netbirdiov1.NBConditionFalse("internalError", fmt.Sprintf("error getting NBGroup: %v", err)) + nbrp.Status.Conditions = nbv1.NBConditionFalse("internalError", fmt.Sprintf("error getting NBGroup: %v", err)) return nil, &ctrl.Result{}, err } if errors.IsNotFound(err) { - nbGroup = netbirdiov1.NBGroup{ - ObjectMeta: v1.ObjectMeta{ + nbGroup = nbv1.NBGroup{ + ObjectMeta: metav1.ObjectMeta{ Name: nbrp.Name, Namespace: nbrp.Namespace, - OwnerReferences: []v1.OwnerReference{ + OwnerReferences: []metav1.OwnerReference{ { - APIVersion: netbirdiov1.GroupVersion.Identifier(), + APIVersion: nbv1.GroupVersion.Identifier(), Kind: "NBRoutingPeer", Name: nbrp.Name, UID: nbrp.UID, @@ -481,7 +482,7 @@ func (r *NBRoutingPeerReconciler) handleGroup(ctx context.Context, req ctrl.Requ Finalizers: []string{"netbird.io/group-cleanup", "netbird.io/routing-peer-cleanup"}, Labels: r.DefaultLabels, }, - Spec: netbirdiov1.NBGroupSpec{ + Spec: nbv1.NBGroupSpec{ Name: networkName, }, } @@ -490,7 +491,7 @@ func (r *NBRoutingPeerReconciler) handleGroup(ctx context.Context, req ctrl.Requ if err != nil { logger.Error(errKubernetesAPI, "error creating NBGroup", "err", err) - nbrp.Status.Conditions = netbirdiov1.NBConditionFalse("internalError", fmt.Sprintf("error creating NBGroup: %v", err)) + nbrp.Status.Conditions = nbv1.NBConditionFalse("internalError", fmt.Sprintf("error creating NBGroup: %v", err)) return nil, &ctrl.Result{}, err } @@ -507,7 +508,7 @@ func (r *NBRoutingPeerReconciler) handleGroup(ctx context.Context, req ctrl.Requ } // handleNetwork Create/Update NetBird Network -func (r *NBRoutingPeerReconciler) handleNetwork(ctx context.Context, req ctrl.Request, nbrp *netbirdiov1.NBRoutingPeer, logger logr.Logger) error { +func (r *NBRoutingPeerReconciler) handleNetwork(ctx context.Context, req ctrl.Request, nbrp *nbv1.NBRoutingPeer, logger logr.Logger) error { networkName := r.ClusterName if r.NamespacedNetworks { networkName += "-" + req.Namespace @@ -518,7 +519,7 @@ func (r *NBRoutingPeerReconciler) handleNetwork(ctx context.Context, req ctrl.Re networks, err := r.Netbird.Networks.List(ctx) if err != nil { logger.Error(errNetBirdAPI, "error listing networks", "err", err) - nbrp.Status.Conditions = netbirdiov1.NBConditionFalse("APIError", fmt.Sprintf("error listing networks: %v", err)) + nbrp.Status.Conditions = nbv1.NBConditionFalse("APIError", fmt.Sprintf("error listing networks: %v", err)) return err } var network *api.Network @@ -539,7 +540,7 @@ func (r *NBRoutingPeerReconciler) handleNetwork(ctx context.Context, req ctrl.Re }) if err != nil { logger.Error(errNetBirdAPI, "error creating network", "err", err) - nbrp.Status.Conditions = netbirdiov1.NBConditionFalse("APIError", fmt.Sprintf("error creating network: %v", err)) + nbrp.Status.Conditions = nbv1.NBConditionFalse("APIError", fmt.Sprintf("error creating network: %v", err)) return err } @@ -549,7 +550,7 @@ func (r *NBRoutingPeerReconciler) handleNetwork(ctx context.Context, req ctrl.Re return nil } -func (r *NBRoutingPeerReconciler) handleDelete(ctx context.Context, req ctrl.Request, nbrp *netbirdiov1.NBRoutingPeer, logger logr.Logger) (ctrl.Result, error) { +func (r *NBRoutingPeerReconciler) handleDelete(ctx context.Context, req ctrl.Request, nbrp *nbv1.NBRoutingPeer, logger logr.Logger) (ctrl.Result, error) { nbDeployment := appsv1.Deployment{} err := r.Client.Get(ctx, req.NamespacedName, &nbDeployment) if err != nil && !errors.IsNotFound(err) { @@ -577,7 +578,7 @@ func (r *NBRoutingPeerReconciler) handleDelete(ctx context.Context, req ctrl.Req logger.Info("Setup key deleted", "id", setupKeyID) } - nbGroup := netbirdiov1.NBGroup{} + nbGroup := nbv1.NBGroup{} err = r.Client.Get(ctx, req.NamespacedName, &nbGroup) if err != nil && !errors.IsNotFound(err) { logger.Error(errKubernetesAPI, "error getting NBGroup", "err", err) @@ -585,7 +586,7 @@ func (r *NBRoutingPeerReconciler) handleDelete(ctx context.Context, req ctrl.Req } if nbrp.Status.NetworkID != nil { - nbResourceList := netbirdiov1.NBResourceList{} + nbResourceList := nbv1.NBResourceList{} err = r.Client.List(ctx, &nbResourceList) if err != nil { logger.Error(errKubernetesAPI, "error listing NBResource", "err", err) @@ -644,7 +645,7 @@ func (r *NBRoutingPeerReconciler) handleDelete(ctx context.Context, req ctrl.Req } // buildSecurityContext creates the appropriate SecurityContext based on the NBRoutingPeer spec -func (r *NBRoutingPeerReconciler) buildSecurityContext(nbrp *netbirdiov1.NBRoutingPeer) *corev1.SecurityContext { +func (r *NBRoutingPeerReconciler) buildSecurityContext(nbrp *nbv1.NBRoutingPeer) *corev1.SecurityContext { securityContext := &corev1.SecurityContext{ Capabilities: &corev1.Capabilities{ Add: []corev1.Capability{ @@ -664,10 +665,10 @@ func (r *NBRoutingPeerReconciler) buildSecurityContext(nbrp *netbirdiov1.NBRouti // SetupWithManager sets up the controller with the Manager. func (r *NBRoutingPeerReconciler) SetupWithManager(mgr ctrl.Manager) error { return ctrl.NewControllerManagedBy(mgr). - For(&netbirdiov1.NBRoutingPeer{}). + For(&nbv1.NBRoutingPeer{}). Named("nbroutingpeer"). - Watches(&appsv1.Deployment{}, handler.EnqueueRequestForOwner(mgr.GetScheme(), mgr.GetRESTMapper(), &netbirdiov1.NBRoutingPeer{})). - Watches(&corev1.Secret{}, handler.EnqueueRequestForOwner(mgr.GetScheme(), mgr.GetRESTMapper(), &netbirdiov1.NBRoutingPeer{})). - Watches(&netbirdiov1.NBGroup{}, handler.EnqueueRequestForOwner(mgr.GetScheme(), mgr.GetRESTMapper(), &netbirdiov1.NBRoutingPeer{})). + Watches(&appsv1.Deployment{}, handler.EnqueueRequestForOwner(mgr.GetScheme(), mgr.GetRESTMapper(), &nbv1.NBRoutingPeer{})). + Watches(&corev1.Secret{}, handler.EnqueueRequestForOwner(mgr.GetScheme(), mgr.GetRESTMapper(), &nbv1.NBRoutingPeer{})). + Watches(&nbv1.NBGroup{}, handler.EnqueueRequestForOwner(mgr.GetScheme(), mgr.GetRESTMapper(), &nbv1.NBRoutingPeer{})). Complete(r) } diff --git a/internal/controller/nbroutingpeer_controller_test.go b/internal/controller/nbroutingpeer_controller_test.go index cc295d5..2df1565 100644 --- a/internal/controller/nbroutingpeer_controller_test.go +++ b/internal/controller/nbroutingpeer_controller_test.go @@ -10,19 +10,19 @@ import ( "github.com/go-logr/logr" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/reconcile" - appsv1 "k8s.io/api/apps/v1" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - - netbirdiov1 "github.com/netbirdio/kubernetes-operator/api/v1" - "github.com/netbirdio/kubernetes-operator/internal/util" netbird "github.com/netbirdio/netbird/shared/management/client/rest" "github.com/netbirdio/netbird/shared/management/http/api" + + nbv1 "github.com/netbirdio/kubernetes-operator/api/v1" + "github.com/netbirdio/kubernetes-operator/internal/util" ) var _ = Describe("NBRoutingPeer Controller", func() { @@ -35,7 +35,7 @@ var _ = Describe("NBRoutingPeer Controller", func() { Name: resourceName, Namespace: "default", } - nbroutingpeer := &netbirdiov1.NBRoutingPeer{} + nbroutingpeer := &nbv1.NBRoutingPeer{} var netbirdClient *netbird.Client var mux *http.ServeMux var server *httptest.Server @@ -58,13 +58,13 @@ var _ = Describe("NBRoutingPeer Controller", func() { By("creating the custom resource for the Kind NBRoutingPeer") err := k8sClient.Get(ctx, typeNamespacedName, nbroutingpeer) if err != nil && errors.IsNotFound(err) { - nbroutingpeer = &netbirdiov1.NBRoutingPeer{ + nbroutingpeer = &nbv1.NBRoutingPeer{ ObjectMeta: metav1.ObjectMeta{ Name: resourceName, Namespace: "default", Finalizers: []string{"netbird.io/cleanup"}, }, - Spec: netbirdiov1.NBRoutingPeerSpec{ + Spec: nbv1.NBRoutingPeerSpec{ Replicas: util.Ptr(int32(0)), }, } @@ -73,7 +73,7 @@ var _ = Describe("NBRoutingPeer Controller", func() { }) AfterEach(func() { - resource := &netbirdiov1.NBRoutingPeer{} + resource := &nbv1.NBRoutingPeer{} err := k8sClient.Get(ctx, typeNamespacedName, resource) if !errors.IsNotFound(err) { Expect(err).NotTo(HaveOccurred()) @@ -89,7 +89,7 @@ var _ = Describe("NBRoutingPeer Controller", func() { } } - group := &netbirdiov1.NBGroup{} + group := &nbv1.NBGroup{} err = k8sClient.Get(ctx, typeNamespacedName, group) if !errors.IsNotFound(err) { Expect(err).NotTo(HaveOccurred()) @@ -137,7 +137,7 @@ var _ = Describe("NBRoutingPeer Controller", func() { } } - nbresource := &netbirdiov1.NBResource{} + nbresource := &nbv1.NBResource{} err = k8sClient.Get(ctx, typeNamespacedName, nbresource) if !errors.IsNotFound(err) { Expect(err).NotTo(HaveOccurred()) @@ -156,12 +156,12 @@ var _ = Describe("NBRoutingPeer Controller", func() { When("Network doesn't exist", func() { BeforeEach(func() { - group := &netbirdiov1.NBGroup{ + group := &nbv1.NBGroup{ ObjectMeta: metav1.ObjectMeta{ Name: typeNamespacedName.Name, Namespace: typeNamespacedName.Namespace, }, - Spec: netbirdiov1.NBGroupSpec{ + Spec: nbv1.NBGroupSpec{ Name: controllerReconciler.ClusterName, }, } @@ -230,12 +230,12 @@ var _ = Describe("NBRoutingPeer Controller", func() { }) Describe("Network Router changes", func() { BeforeEach(func() { - group := &netbirdiov1.NBGroup{ + group := &nbv1.NBGroup{ ObjectMeta: metav1.ObjectMeta{ Name: typeNamespacedName.Name, Namespace: typeNamespacedName.Namespace, }, - Spec: netbirdiov1.NBGroupSpec{ + Spec: nbv1.NBGroupSpec{ Name: controllerReconciler.ClusterName, }, } @@ -445,7 +445,7 @@ var _ = Describe("NBRoutingPeer Controller", func() { Expect(err).NotTo(HaveOccurred()) Expect(res.RequeueAfter).To(BeNumerically(">", 0)) - group := &netbirdiov1.NBGroup{} + group := &nbv1.NBGroup{} Expect(k8sClient.Get(ctx, typeNamespacedName, group)).To(Succeed()) Expect(group.Spec.Name).To(Equal(controllerReconciler.ClusterName)) Expect(group.Labels).To(HaveKeyWithValue("dog", "bark")) @@ -461,13 +461,13 @@ var _ = Describe("NBRoutingPeer Controller", func() { }) When("Group exists", func() { BeforeEach(func() { - group := &netbirdiov1.NBGroup{ + group := &nbv1.NBGroup{ ObjectMeta: metav1.ObjectMeta{ Name: typeNamespacedName.Name, Namespace: typeNamespacedName.Namespace, Finalizers: []string{"netbird.io/routing-peer-cleanup", "netbird.io/group-cleanup"}, }, - Spec: netbirdiov1.NBGroupSpec{ + Spec: nbv1.NBGroupSpec{ Name: controllerReconciler.ClusterName, }, } @@ -1102,7 +1102,7 @@ var _ = Describe("NBRoutingPeer Controller", func() { NamespacedName: typeNamespacedName, }) Expect(err).NotTo(HaveOccurred()) - group := &netbirdiov1.NBGroup{} + group := &nbv1.NBGroup{} Expect(k8sClient.Get(ctx, typeNamespacedName, group)).To(Succeed()) Expect(group.Finalizers).NotTo(ContainElement("netbird.io/routing-peer-cleanup")) }) @@ -1137,12 +1137,12 @@ var _ = Describe("NBRoutingPeer Controller", func() { }) It("should delete any hanging NBResources", func() { - nbResource := &netbirdiov1.NBResource{ + nbResource := &nbv1.NBResource{ ObjectMeta: metav1.ObjectMeta{ Name: typeNamespacedName.Name, Namespace: typeNamespacedName.Namespace, }, - Spec: netbirdiov1.NBResourceSpec{ + Spec: nbv1.NBResourceSpec{ Name: "test", NetworkID: *nbroutingpeer.Status.NetworkID, Address: "test", @@ -1155,7 +1155,7 @@ var _ = Describe("NBRoutingPeer Controller", func() { NamespacedName: typeNamespacedName, }) Expect(err).NotTo(HaveOccurred()) - nbResource = &netbirdiov1.NBResource{} + nbResource = &nbv1.NBResource{} err = k8sClient.Get(ctx, typeNamespacedName, nbResource) Expect(errors.IsNotFound(err)).To(BeTrue()) }) diff --git a/internal/controller/nbsetupkey_controller.go b/internal/controller/nbsetupkey_controller.go index c8c732a..7941a2a 100644 --- a/internal/controller/nbsetupkey_controller.go +++ b/internal/controller/nbsetupkey_controller.go @@ -23,14 +23,14 @@ import ( "github.com/google/uuid" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/reconcile" - netbirdiov1 "github.com/netbirdio/kubernetes-operator/api/v1" + nbv1 "github.com/netbirdio/kubernetes-operator/api/v1" ) // NBSetupKeyReconciler reconciles a NBSetupKey object @@ -46,7 +46,7 @@ func (r *NBSetupKeyReconciler) Reconcile(ctx context.Context, req ctrl.Request) logger := ctrl.Log.WithName("NBSetupKey").WithValues("namespace", req.Namespace, "name", req.Name) logger.Info("Reconciling NBSetupKey") - nbSetupKey := netbirdiov1.NBSetupKey{} + nbSetupKey := nbv1.NBSetupKey{} err := r.Get(ctx, req.NamespacedName, &nbSetupKey) if err != nil { logger.Error(fmt.Errorf("internalError"), "error getting NBSetupKey", "err", err) @@ -55,12 +55,12 @@ func (r *NBSetupKeyReconciler) Reconcile(ctx context.Context, req ctrl.Request) if nbSetupKey.Spec.SecretKeyRef.Name == "" || nbSetupKey.Spec.SecretKeyRef.Key == "" { logger.Error(fmt.Errorf("invalid NBSetupKey"), "secretKeyRef must contain both secret name and secret key") - return ctrl.Result{}, r.setStatus(ctx, &nbSetupKey, netbirdiov1.NBSetupKeyStatus{ - Conditions: []netbirdiov1.NBCondition{ + return ctrl.Result{}, r.setStatus(ctx, &nbSetupKey, nbv1.NBSetupKeyStatus{ + Conditions: []nbv1.NBCondition{ { - Type: netbirdiov1.NBSetupKeyReady, + Type: nbv1.NBSetupKeyReady, Status: corev1.ConditionFalse, - LastProbeTime: v1.Now(), + LastProbeTime: metav1.Now(), Reason: "InvalidConfig", Message: "secretKeyRef must contain both secret name and secret key.", }, @@ -85,10 +85,10 @@ func (r *NBSetupKeyReconciler) Reconcile(ctx context.Context, req ctrl.Request) return ctrl.Result{}, err } logger.Error(fmt.Errorf("invalid NBSetupKey"), "secret referenced not found", "err", err) - return ctrl.Result{}, r.setStatus(ctx, &nbSetupKey, netbirdiov1.NBSetupKeyStatus{Conditions: []netbirdiov1.NBCondition{{ - Type: netbirdiov1.NBSetupKeyReady, + return ctrl.Result{}, r.setStatus(ctx, &nbSetupKey, nbv1.NBSetupKeyStatus{Conditions: []nbv1.NBCondition{{ + Type: nbv1.NBSetupKeyReady, Status: corev1.ConditionFalse, - LastProbeTime: v1.Now(), + LastProbeTime: metav1.Now(), Reason: "SecretNotExists", Message: "Referenced secret does not exist", }}}) @@ -97,10 +97,10 @@ func (r *NBSetupKeyReconciler) Reconcile(ctx context.Context, req ctrl.Request) uuidBytes, ok := secret.Data[nbSetupKey.Spec.SecretKeyRef.Key] if !ok { logger.Error(fmt.Errorf("invalid NBSetupKey"), "secret key referenced not found") - return ctrl.Result{}, r.setStatus(ctx, &nbSetupKey, netbirdiov1.NBSetupKeyStatus{Conditions: []netbirdiov1.NBCondition{{ - Type: netbirdiov1.NBSetupKeyReady, + return ctrl.Result{}, r.setStatus(ctx, &nbSetupKey, nbv1.NBSetupKeyStatus{Conditions: []nbv1.NBCondition{{ + Type: nbv1.NBSetupKeyReady, Status: corev1.ConditionFalse, - LastProbeTime: v1.Now(), + LastProbeTime: metav1.Now(), Reason: "SecretKeyNotExists", Message: "Referenced secret key does not exist", }}}) @@ -109,22 +109,22 @@ func (r *NBSetupKeyReconciler) Reconcile(ctx context.Context, req ctrl.Request) _, err = uuid.Parse(string(uuidBytes)) if err != nil { logger.Error(fmt.Errorf("invalid NBSetupKey"), "setupKey is not a valid UUID", "err", err) - return ctrl.Result{}, r.setStatus(ctx, &nbSetupKey, netbirdiov1.NBSetupKeyStatus{Conditions: []netbirdiov1.NBCondition{{ - Type: netbirdiov1.NBSetupKeyReady, + return ctrl.Result{}, r.setStatus(ctx, &nbSetupKey, nbv1.NBSetupKeyStatus{Conditions: []nbv1.NBCondition{{ + Type: nbv1.NBSetupKeyReady, Status: corev1.ConditionFalse, - LastProbeTime: v1.Now(), + LastProbeTime: metav1.Now(), Reason: "InvalidSetupKey", Message: "Referenced secret is not a valid SetupKey", }}}) } - return ctrl.Result{}, r.setStatus(ctx, &nbSetupKey, netbirdiov1.NBSetupKeyStatus{Conditions: []netbirdiov1.NBCondition{{ - Type: netbirdiov1.NBSetupKeyReady, + return ctrl.Result{}, r.setStatus(ctx, &nbSetupKey, nbv1.NBSetupKeyStatus{Conditions: []nbv1.NBCondition{{ + Type: nbv1.NBSetupKeyReady, Status: corev1.ConditionTrue, - LastProbeTime: v1.Now(), + LastProbeTime: metav1.Now(), }}}) } -func (r *NBSetupKeyReconciler) setStatus(ctx context.Context, nbsetupkey *netbirdiov1.NBSetupKey, status netbirdiov1.NBSetupKeyStatus) error { +func (r *NBSetupKeyReconciler) setStatus(ctx context.Context, nbsetupkey *nbv1.NBSetupKey, status nbv1.NBSetupKeyStatus) error { nbsetupkey.Status = status err := r.Status().Update(ctx, nbsetupkey) return err @@ -135,7 +135,7 @@ func (r *NBSetupKeyReconciler) SetupWithManager(mgr ctrl.Manager) error { r.ReferencedSecrets = make(map[string]types.NamespacedName) return ctrl.NewControllerManagedBy(mgr). - For(&netbirdiov1.NBSetupKey{}). + For(&nbv1.NBSetupKey{}). Named("nbsetupkey"). Watches( &corev1.Secret{}, diff --git a/internal/controller/nbsetupkey_controller_test.go b/internal/controller/nbsetupkey_controller_test.go index f417e8e..412fd20 100644 --- a/internal/controller/nbsetupkey_controller_test.go +++ b/internal/controller/nbsetupkey_controller_test.go @@ -21,13 +21,12 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - v1 "k8s.io/api/core/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "sigs.k8s.io/controller-runtime/pkg/reconcile" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - - netbirdiov1 "github.com/netbirdio/kubernetes-operator/api/v1" + nbv1 "github.com/netbirdio/kubernetes-operator/api/v1" ) var _ = Describe("NBSetupKey Controller", func() { @@ -40,20 +39,20 @@ var _ = Describe("NBSetupKey Controller", func() { Name: resourceName, Namespace: "default", } - nbsetupkey := &netbirdiov1.NBSetupKey{} - secret := &v1.Secret{} + nbsetupkey := &nbv1.NBSetupKey{} + secret := &corev1.Secret{} BeforeEach(func() { By("creating the custom resource for the Kind NBSetupKey") err := k8sClient.Get(ctx, typeNamespacedName, nbsetupkey) - resource := &netbirdiov1.NBSetupKey{ + resource := &nbv1.NBSetupKey{ ObjectMeta: metav1.ObjectMeta{ Name: resourceName, Namespace: "default", }, - Spec: netbirdiov1.NBSetupKeySpec{ - SecretKeyRef: v1.SecretKeySelector{ - LocalObjectReference: v1.LocalObjectReference{ + Spec: nbv1.NBSetupKeySpec{ + SecretKeyRef: corev1.SecretKeySelector{ + LocalObjectReference: corev1.LocalObjectReference{ Name: resourceName, }, Key: "setupkey", @@ -67,7 +66,7 @@ var _ = Describe("NBSetupKey Controller", func() { }) AfterEach(func() { - resource := &netbirdiov1.NBSetupKey{} + resource := &nbv1.NBSetupKey{} err := k8sClient.Get(ctx, typeNamespacedName, resource) Expect(err).NotTo(HaveOccurred()) @@ -92,7 +91,7 @@ var _ = Describe("NBSetupKey Controller", func() { Expect(nbsetupkey.Status.Conditions).NotTo(BeNil()) Expect(nbsetupkey.Status.Conditions).To(HaveLen(1)) - Expect(nbsetupkey.Status.Conditions[0].Status).To(Equal(v1.ConditionFalse)) + Expect(nbsetupkey.Status.Conditions[0].Status).To(Equal(corev1.ConditionFalse)) Expect(nbsetupkey.Status.Conditions[0].Reason).To(Equal("SecretNotExists")) Expect(controllerReconciler.ReferencedSecrets).To(HaveKey("default/test-resource")) }) @@ -100,7 +99,7 @@ var _ = Describe("NBSetupKey Controller", func() { When("Secret present", Ordered, func() { createSecret := func(secretkey, setupkey string) { - resource := &v1.Secret{ + resource := &corev1.Secret{ ObjectMeta: metav1.ObjectMeta{ Namespace: "default", Name: resourceName, @@ -110,7 +109,7 @@ var _ = Describe("NBSetupKey Controller", func() { }, } - secret = &v1.Secret{} + secret = &corev1.Secret{} err := k8sClient.Get(ctx, types.NamespacedName{Namespace: "default", Name: resourceName}, secret) if err == nil { Expect(k8sClient.Delete(ctx, secret)).To(Succeed()) @@ -137,7 +136,7 @@ var _ = Describe("NBSetupKey Controller", func() { Expect(nbsetupkey.Status.Conditions).NotTo(BeNil()) Expect(nbsetupkey.Status.Conditions).To(HaveLen(1)) - Expect(nbsetupkey.Status.Conditions[0].Status).To(Equal(v1.ConditionFalse)) + Expect(nbsetupkey.Status.Conditions[0].Status).To(Equal(corev1.ConditionFalse)) Expect(nbsetupkey.Status.Conditions[0].Reason).To(Equal("InvalidSetupKey")) Expect(controllerReconciler.ReferencedSecrets).To(HaveKey("default/test-resource")) }) @@ -162,7 +161,7 @@ var _ = Describe("NBSetupKey Controller", func() { Expect(nbsetupkey.Status.Conditions).NotTo(BeNil()) Expect(nbsetupkey.Status.Conditions).To(HaveLen(1)) - Expect(nbsetupkey.Status.Conditions[0].Status).To(Equal(v1.ConditionFalse)) + Expect(nbsetupkey.Status.Conditions[0].Status).To(Equal(corev1.ConditionFalse)) Expect(nbsetupkey.Status.Conditions[0].Reason).To(Equal("SecretKeyNotExists")) Expect(controllerReconciler.ReferencedSecrets).To(HaveKey("default/test-resource")) }) @@ -187,7 +186,7 @@ var _ = Describe("NBSetupKey Controller", func() { Expect(nbsetupkey.Status.Conditions).NotTo(BeNil()) Expect(nbsetupkey.Status.Conditions).To(HaveLen(1)) - Expect(nbsetupkey.Status.Conditions[0].Status).To(Equal(v1.ConditionTrue)) + Expect(nbsetupkey.Status.Conditions[0].Status).To(Equal(corev1.ConditionTrue)) Expect(controllerReconciler.ReferencedSecrets).To(HaveKey("default/test-resource")) }) }) diff --git a/internal/controller/networkresource_controller.go b/internal/controller/networkresource_controller.go index 55a5088..bfe540a 100644 --- a/internal/controller/networkresource_controller.go +++ b/internal/controller/networkresource_controller.go @@ -8,8 +8,6 @@ import ( "github.com/fluxcd/pkg/runtime/conditions" "github.com/fluxcd/pkg/runtime/patch" - netbird "github.com/netbirdio/netbird/shared/management/client/rest" - "github.com/netbirdio/netbird/shared/management/http/api" corev1 "k8s.io/api/core/v1" kerrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -23,6 +21,9 @@ import ( "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/controller-runtime/pkg/reconcile" + netbird "github.com/netbirdio/netbird/shared/management/client/rest" + "github.com/netbirdio/netbird/shared/management/http/api" + nbv1alpha1 "github.com/netbirdio/kubernetes-operator/api/v1alpha1" "github.com/netbirdio/kubernetes-operator/internal/k8sutil" "github.com/netbirdio/kubernetes-operator/internal/netbirdutil" diff --git a/internal/controller/networkresource_controller_test.go b/internal/controller/networkresource_controller_test.go index e88d228..a513b76 100644 --- a/internal/controller/networkresource_controller_test.go +++ b/internal/controller/networkresource_controller_test.go @@ -12,9 +12,10 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/reconcile" + "github.com/netbirdio/netbird/shared/management/http/api" + nbv1alpha1 "github.com/netbirdio/kubernetes-operator/api/v1alpha1" "github.com/netbirdio/kubernetes-operator/internal/netbirdmock" - "github.com/netbirdio/netbird/shared/management/http/api" ) var _ = Describe("NetworkResource Controller", func() { diff --git a/internal/controller/networkrouter_controller.go b/internal/controller/networkrouter_controller.go index 2928460..da0c82a 100644 --- a/internal/controller/networkrouter_controller.go +++ b/internal/controller/networkrouter_controller.go @@ -10,10 +10,6 @@ import ( "github.com/fluxcd/pkg/runtime/conditions" "github.com/fluxcd/pkg/runtime/patch" - "github.com/netbirdio/kubernetes-operator/internal/k8sutil" - "github.com/netbirdio/kubernetes-operator/internal/netbirdutil" - netbird "github.com/netbirdio/netbird/shared/management/client/rest" - "github.com/netbirdio/netbird/shared/management/http/api" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" policyv1 "k8s.io/api/policy/v1" @@ -31,7 +27,12 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" + netbird "github.com/netbirdio/netbird/shared/management/client/rest" + "github.com/netbirdio/netbird/shared/management/http/api" + nbv1alpha1 "github.com/netbirdio/kubernetes-operator/api/v1alpha1" + "github.com/netbirdio/kubernetes-operator/internal/k8sutil" + "github.com/netbirdio/kubernetes-operator/internal/netbirdutil" nbv1alpha1ac "github.com/netbirdio/kubernetes-operator/pkg/applyconfigurations/api/v1alpha1" ) diff --git a/internal/controller/networkrouter_controller_test.go b/internal/controller/networkrouter_controller_test.go index 1eb95c6..761c1e4 100644 --- a/internal/controller/networkrouter_controller_test.go +++ b/internal/controller/networkrouter_controller_test.go @@ -13,9 +13,10 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/reconcile" + "github.com/netbirdio/netbird/shared/management/http/api" + nbv1alpha1 "github.com/netbirdio/kubernetes-operator/api/v1alpha1" "github.com/netbirdio/kubernetes-operator/internal/netbirdmock" - "github.com/netbirdio/netbird/shared/management/http/api" ) var _ = Describe("NetworkRouter Controller", func() { diff --git a/internal/controller/service_controller.go b/internal/controller/service_controller.go index d3b5f8c..f669423 100644 --- a/internal/controller/service_controller.go +++ b/internal/controller/service_controller.go @@ -11,12 +11,12 @@ import ( "github.com/go-logr/logr" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" - netbirdiov1 "github.com/netbirdio/kubernetes-operator/api/v1" + nbv1 "github.com/netbirdio/kubernetes-operator/api/v1" "github.com/netbirdio/kubernetes-operator/internal/util" ) @@ -82,7 +82,7 @@ func (r *ServiceReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct // hideService deletes NBResource for Service func (r *ServiceReconciler) hideService(ctx context.Context, req ctrl.Request, svc corev1.Service, logger logr.Logger) (ctrl.Result, error) { - var nbResource netbirdiov1.NBResource + var nbResource nbv1.NBResource err := r.Client.Get(ctx, req.NamespacedName, &nbResource) if err != nil && !errors.IsNotFound(err) { logger.Error(errKubernetesAPI, "error getting NBResource", "err", err) @@ -125,7 +125,7 @@ func (r *ServiceReconciler) exposeService(ctx context.Context, req ctrl.Request, } } - var routingPeer netbirdiov1.NBRoutingPeer + var routingPeer nbv1.NBRoutingPeer // Check if NBRoutingPeer exists err := r.Client.Get(ctx, types.NamespacedName{Namespace: routerNamespace, Name: "router"}, &routingPeer) if err != nil && !errors.IsNotFound(err) { @@ -135,14 +135,14 @@ func (r *ServiceReconciler) exposeService(ctx context.Context, req ctrl.Request, // Create NBRoutingPeer with default values if not exists if errors.IsNotFound(err) { - routingPeer = netbirdiov1.NBRoutingPeer{ - ObjectMeta: v1.ObjectMeta{ + routingPeer = nbv1.NBRoutingPeer{ + ObjectMeta: metav1.ObjectMeta{ Name: "router", Namespace: routerNamespace, Finalizers: []string{"netbird.io/cleanup"}, Labels: r.DefaultLabels, }, - Spec: netbirdiov1.NBRoutingPeerSpec{}, + Spec: nbv1.NBRoutingPeerSpec{}, } err = r.Client.Create(ctx, &routingPeer) @@ -161,7 +161,7 @@ func (r *ServiceReconciler) exposeService(ctx context.Context, req ctrl.Request, return ctrl.Result{RequeueAfter: 5 * time.Second}, nil } - var nbResource netbirdiov1.NBResource + var nbResource nbv1.NBResource err = r.Client.Get(ctx, req.NamespacedName, &nbResource) if err != nil && !errors.IsNotFound(err) { logger.Error(errKubernetesAPI, "error getting NBResource", "err", err) @@ -192,7 +192,7 @@ func (r *ServiceReconciler) exposeService(ctx context.Context, req ctrl.Request, } // reconcileNBResource ensures NBResource settings are in-line with Service definition and annotations -func (r *ServiceReconciler) reconcileNBResource(nbResource *netbirdiov1.NBResource, req ctrl.Request, svc corev1.Service, routingPeer netbirdiov1.NBRoutingPeer, logger logr.Logger) error { +func (r *ServiceReconciler) reconcileNBResource(nbResource *nbv1.NBResource, req ctrl.Request, svc corev1.Service, routingPeer nbv1.NBRoutingPeer, logger logr.Logger) error { groups := []string{fmt.Sprintf("%s-%s-%s", r.ClusterName, req.Namespace, req.Name)} if v, ok := svc.Annotations[serviceGroupsAnnotation]; ok { //nolint:prealloc @@ -230,7 +230,7 @@ func (r *ServiceReconciler) reconcileNBResource(nbResource *netbirdiov1.NBResour return nil } -func (r *ServiceReconciler) applyPolicy(nbResource *netbirdiov1.NBResource, svc corev1.Service, logger logr.Logger) error { +func (r *ServiceReconciler) applyPolicy(nbResource *nbv1.NBResource, svc corev1.Service, logger logr.Logger) error { nbResource.Spec.PolicyName = svc.Annotations[servicePolicyAnnotation] var filterProtocols []string if v, ok := svc.Annotations[serviceProtocolAnnotation]; ok { diff --git a/internal/controller/service_controller_test.go b/internal/controller/service_controller_test.go index 50bb605..4221958 100644 --- a/internal/controller/service_controller_test.go +++ b/internal/controller/service_controller_test.go @@ -1,16 +1,17 @@ package controller import ( - netbirdiov1 "github.com/netbirdio/kubernetes-operator/api/v1" - "github.com/netbirdio/kubernetes-operator/internal/util" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/intstr" "sigs.k8s.io/controller-runtime/pkg/reconcile" + + nbv1 "github.com/netbirdio/kubernetes-operator/api/v1" + "github.com/netbirdio/kubernetes-operator/internal/util" ) var _ = Describe("Service Controller", func() { @@ -26,7 +27,7 @@ var _ = Describe("Service Controller", func() { BeforeEach(func() { service = &corev1.Service{ - ObjectMeta: v1.ObjectMeta{ + ObjectMeta: metav1.ObjectMeta{ Name: "test-resource", Namespace: "default", }, @@ -85,7 +86,7 @@ var _ = Describe("Service Controller", func() { } } - nbrp := &netbirdiov1.NBRoutingPeer{} + nbrp := &nbv1.NBRoutingPeer{} err = k8sClient.Get(ctx, types.NamespacedName{Namespace: "default", Name: "router"}, nbrp) if !errors.IsNotFound(err) { if len(nbrp.Finalizers) > 0 { @@ -99,7 +100,7 @@ var _ = Describe("Service Controller", func() { } } - nbResource := &netbirdiov1.NBResource{} + nbResource := &nbv1.NBResource{} err = k8sClient.Get(ctx, typeNamespacedName, nbResource) if !errors.IsNotFound(err) { if len(nbResource.Finalizers) > 0 { @@ -123,7 +124,7 @@ var _ = Describe("Service Controller", func() { Expect(err).NotTo(HaveOccurred()) Expect(k8sClient.Get(ctx, typeNamespacedName, service)).To(Succeed()) Expect(service.Finalizers).To(BeEmpty()) - nbResource := &netbirdiov1.NBResource{} + nbResource := &nbv1.NBResource{} Expect(k8sClient.Get(ctx, typeNamespacedName, nbResource)).NotTo(Succeed()) }) }) @@ -142,7 +143,7 @@ var _ = Describe("Service Controller", func() { }) Expect(err).NotTo(HaveOccurred()) Expect(res.RequeueAfter).NotTo(BeZero()) - nbrp := &netbirdiov1.NBRoutingPeer{} + nbrp := &nbv1.NBRoutingPeer{} Expect(k8sClient.Get(ctx, types.NamespacedName{Namespace: typeNamespacedName.Namespace, Name: "router"}, nbrp)).To(Succeed()) Expect(nbrp.Labels).To(HaveKeyWithValue("dog", "bark")) res, err = controllerReconciler.Reconcile(ctx, reconcile.Request{ @@ -161,12 +162,12 @@ var _ = Describe("Service Controller", func() { }) When("NBRoutingPeer exists", func() { BeforeEach(func() { - nbrp := &netbirdiov1.NBRoutingPeer{ - ObjectMeta: v1.ObjectMeta{ + nbrp := &nbv1.NBRoutingPeer{ + ObjectMeta: metav1.ObjectMeta{ Namespace: typeNamespacedName.Namespace, Name: "router", }, - Spec: netbirdiov1.NBRoutingPeerSpec{}, + Spec: nbv1.NBRoutingPeerSpec{}, } Expect(k8sClient.Create(ctx, nbrp)).To(Succeed()) @@ -195,7 +196,7 @@ var _ = Describe("Service Controller", func() { NamespacedName: typeNamespacedName, }) Expect(err).NotTo(HaveOccurred()) - nbResource := &netbirdiov1.NBResource{} + nbResource := &nbv1.NBResource{} Expect(k8sClient.Get(ctx, typeNamespacedName, nbResource)).To(Succeed()) Expect(nbResource.Spec.Address).To(Equal(typeNamespacedName.Name + "." + typeNamespacedName.Namespace + "." + controllerReconciler.ClusterDNS)) Expect(nbResource.Spec.Groups).To(ConsistOf([]string{controllerReconciler.ClusterName + "-" + typeNamespacedName.Namespace + "-" + typeNamespacedName.Name})) @@ -218,7 +219,7 @@ var _ = Describe("Service Controller", func() { NamespacedName: typeNamespacedName, }) Expect(err).NotTo(HaveOccurred()) - nbResource := &netbirdiov1.NBResource{} + nbResource := &nbv1.NBResource{} Expect(k8sClient.Get(ctx, typeNamespacedName, nbResource)).To(Succeed()) Expect(nbResource.Spec.PolicyName).To(Equal(policyName)) Expect(nbResource.Spec.TCPPorts).To(ConsistOf([]int32{443, 80})) @@ -234,7 +235,7 @@ var _ = Describe("Service Controller", func() { NamespacedName: typeNamespacedName, }) Expect(err).NotTo(HaveOccurred()) - nbResource := &netbirdiov1.NBResource{} + nbResource := &nbv1.NBResource{} Expect(k8sClient.Get(ctx, typeNamespacedName, nbResource)).To(Succeed()) Expect(nbResource.Spec.PolicyName).To(Equal(policyName)) Expect(nbResource.Spec.TCPPorts).To(ConsistOf([]int32{80})) @@ -250,7 +251,7 @@ var _ = Describe("Service Controller", func() { NamespacedName: typeNamespacedName, }) Expect(err).NotTo(HaveOccurred()) - nbResource := &netbirdiov1.NBResource{} + nbResource := &nbv1.NBResource{} Expect(k8sClient.Get(ctx, typeNamespacedName, nbResource)).To(Succeed()) Expect(nbResource.Spec.PolicyName).To(Equal(policyName)) Expect(nbResource.Spec.TCPPorts).To(ConsistOf([]int32{80, 443})) @@ -266,7 +267,7 @@ var _ = Describe("Service Controller", func() { NamespacedName: typeNamespacedName, }) Expect(err).NotTo(HaveOccurred()) - nbResource := &netbirdiov1.NBResource{} + nbResource := &nbv1.NBResource{} Expect(k8sClient.Get(ctx, typeNamespacedName, nbResource)).To(Succeed()) Expect(nbResource.Spec.Name).To(Equal("meow")) }) @@ -279,7 +280,7 @@ var _ = Describe("Service Controller", func() { NamespacedName: typeNamespacedName, }) Expect(err).NotTo(HaveOccurred()) - nbResource := &netbirdiov1.NBResource{} + nbResource := &nbv1.NBResource{} Expect(k8sClient.Get(ctx, typeNamespacedName, nbResource)).To(Succeed()) Expect(nbResource.Spec.Groups).To(ConsistOf([]string{"meow", "wow", policyName})) }) @@ -289,12 +290,12 @@ var _ = Describe("Service Controller", func() { }) When("Service is already exposed", func() { BeforeEach(func() { - nbResource := &netbirdiov1.NBResource{ - ObjectMeta: v1.ObjectMeta{ + nbResource := &nbv1.NBResource{ + ObjectMeta: metav1.ObjectMeta{ Name: typeNamespacedName.Name, Namespace: typeNamespacedName.Namespace, }, - Spec: netbirdiov1.NBResourceSpec{ + Spec: nbv1.NBResourceSpec{ Name: typeNamespacedName.Namespace + "-" + typeNamespacedName.Name, Address: typeNamespacedName.Name + "." + typeNamespacedName.Namespace + "." + controllerReconciler.ClusterDNS, Groups: []string{controllerReconciler.ClusterName + "-" + typeNamespacedName.Namespace + "-" + typeNamespacedName.Name}, @@ -309,12 +310,12 @@ var _ = Describe("Service Controller", func() { service.Annotations[ServiceExposeAnnotation] = "true" Expect(k8sClient.Update(ctx, service)).To(Succeed()) - nbrp := &netbirdiov1.NBRoutingPeer{ - ObjectMeta: v1.ObjectMeta{ + nbrp := &nbv1.NBRoutingPeer{ + ObjectMeta: metav1.ObjectMeta{ Namespace: typeNamespacedName.Namespace, Name: "router", }, - Spec: netbirdiov1.NBRoutingPeerSpec{}, + Spec: nbv1.NBRoutingPeerSpec{}, } Expect(k8sClient.Create(ctx, nbrp)).To(Succeed()) @@ -332,7 +333,7 @@ var _ = Describe("Service Controller", func() { NamespacedName: typeNamespacedName, }) Expect(err).NotTo(HaveOccurred()) - nbResource := &netbirdiov1.NBResource{} + nbResource := &nbv1.NBResource{} err = k8sClient.Get(ctx, typeNamespacedName, nbResource) if !errors.IsNotFound(err) { Expect(nbResource.DeletionTimestamp).NotTo(BeNil()) @@ -349,7 +350,7 @@ var _ = Describe("Service Controller", func() { }) When("Nothing changes", func() { It("should do nothing", func() { - nbResource := &netbirdiov1.NBResource{} + nbResource := &nbv1.NBResource{} Expect(k8sClient.Get(ctx, typeNamespacedName, nbResource)).To(Succeed()) resourceVersion := nbResource.ResourceVersion @@ -358,7 +359,7 @@ var _ = Describe("Service Controller", func() { }) Expect(err).NotTo(HaveOccurred()) - nbResource = &netbirdiov1.NBResource{} + nbResource = &nbv1.NBResource{} Expect(k8sClient.Get(ctx, typeNamespacedName, nbResource)).To(Succeed()) Expect(resourceVersion).To(BeEquivalentTo(nbResource.ResourceVersion)) }) @@ -372,14 +373,14 @@ var _ = Describe("Service Controller", func() { }) Expect(err).NotTo(HaveOccurred()) - nbResource := &netbirdiov1.NBResource{} + nbResource := &nbv1.NBResource{} Expect(k8sClient.Get(ctx, typeNamespacedName, nbResource)).To(Succeed()) Expect(nbResource.Spec.PolicyName).To(Equal(policyName)) }) }) When("policy is removed", func() { It("should remove policy in NBResource spec", func() { - nbResource := &netbirdiov1.NBResource{} + nbResource := &nbv1.NBResource{} Expect(k8sClient.Get(ctx, typeNamespacedName, nbResource)).To(Succeed()) nbResource.Spec.PolicyName = policyName Expect(k8sClient.Update(ctx, nbResource)).To(Succeed()) @@ -389,14 +390,14 @@ var _ = Describe("Service Controller", func() { }) Expect(err).NotTo(HaveOccurred()) - nbResource = &netbirdiov1.NBResource{} + nbResource = &nbv1.NBResource{} Expect(k8sClient.Get(ctx, typeNamespacedName, nbResource)).To(Succeed()) Expect(nbResource.Spec.PolicyName).To(Equal("")) }) }) When("policy ports changes", func() { It("should update ports in NBResource spec", func() { - nbResource := &netbirdiov1.NBResource{} + nbResource := &nbv1.NBResource{} Expect(k8sClient.Get(ctx, typeNamespacedName, nbResource)).To(Succeed()) nbResource.Spec.PolicyName = policyName nbResource.Spec.TCPPorts = []int32{443, 80} @@ -412,7 +413,7 @@ var _ = Describe("Service Controller", func() { }) Expect(err).NotTo(HaveOccurred()) - nbResource = &netbirdiov1.NBResource{} + nbResource = &nbv1.NBResource{} Expect(k8sClient.Get(ctx, typeNamespacedName, nbResource)).To(Succeed()) Expect(nbResource.Spec.TCPPorts).To(ConsistOf([]int32{80})) Expect(nbResource.Spec.UDPPorts).To(ConsistOf([]int32{80})) @@ -420,7 +421,7 @@ var _ = Describe("Service Controller", func() { }) When("policy protocol changes", func() { It("should update protocol in NBResource spec", func() { - nbResource := &netbirdiov1.NBResource{} + nbResource := &nbv1.NBResource{} Expect(k8sClient.Get(ctx, typeNamespacedName, nbResource)).To(Succeed()) nbResource.Spec.PolicyName = policyName nbResource.Spec.TCPPorts = []int32{443, 80} @@ -436,7 +437,7 @@ var _ = Describe("Service Controller", func() { }) Expect(err).NotTo(HaveOccurred()) - nbResource = &netbirdiov1.NBResource{} + nbResource = &nbv1.NBResource{} Expect(k8sClient.Get(ctx, typeNamespacedName, nbResource)).To(Succeed()) Expect(nbResource.Spec.TCPPorts).To(ConsistOf([]int32{80, 443})) Expect(nbResource.Spec.UDPPorts).To(BeEmpty()) @@ -444,7 +445,7 @@ var _ = Describe("Service Controller", func() { }) When("policy friendly name changes", func() { It("should update policy friendly name in NBResource spec", func() { - nbResource := &netbirdiov1.NBResource{} + nbResource := &nbv1.NBResource{} Expect(k8sClient.Get(ctx, typeNamespacedName, nbResource)).To(Succeed()) nbResource.Spec.PolicyName = policyName Expect(k8sClient.Update(ctx, nbResource)).To(Succeed()) @@ -458,14 +459,14 @@ var _ = Describe("Service Controller", func() { }) Expect(err).NotTo(HaveOccurred()) - nbResource = &netbirdiov1.NBResource{} + nbResource = &nbv1.NBResource{} Expect(k8sClient.Get(ctx, typeNamespacedName, nbResource)).To(Succeed()) Expect(nbResource.Spec.PolicyFriendlyName).To(BeEquivalentTo(map[string]string{"test": "toast", "meow": "meow"})) }) }) When("policy source groups changes", func() { It("should update policy source groups in NBResource spec", func() { - nbResource := &netbirdiov1.NBResource{} + nbResource := &nbv1.NBResource{} Expect(k8sClient.Get(ctx, typeNamespacedName, nbResource)).To(Succeed()) nbResource.Spec.PolicyName = policyName Expect(k8sClient.Update(ctx, nbResource)).To(Succeed()) @@ -479,7 +480,7 @@ var _ = Describe("Service Controller", func() { }) Expect(err).NotTo(HaveOccurred()) - nbResource = &netbirdiov1.NBResource{} + nbResource = &nbv1.NBResource{} Expect(k8sClient.Get(ctx, typeNamespacedName, nbResource)).To(Succeed()) Expect(nbResource.Spec.PolicySourceGroups).To(BeEquivalentTo([]string{"test"})) }) @@ -493,7 +494,7 @@ var _ = Describe("Service Controller", func() { }) Expect(err).NotTo(HaveOccurred()) - nbResource := &netbirdiov1.NBResource{} + nbResource := &nbv1.NBResource{} Expect(k8sClient.Get(ctx, typeNamespacedName, nbResource)).To(Succeed()) Expect(nbResource.Spec.Name).To(Equal("meow")) }) @@ -507,7 +508,7 @@ var _ = Describe("Service Controller", func() { }) Expect(err).NotTo(HaveOccurred()) - nbResource := &netbirdiov1.NBResource{} + nbResource := &nbv1.NBResource{} Expect(k8sClient.Get(ctx, typeNamespacedName, nbResource)).To(Succeed()) Expect(nbResource.Spec.Groups).To(ConsistOf([]string{"a7medmo7sen", "pewpewpew"})) }) diff --git a/internal/controller/setupkey_controller.go b/internal/controller/setupkey_controller.go index 157f9d1..bc8cb05 100644 --- a/internal/controller/setupkey_controller.go +++ b/internal/controller/setupkey_controller.go @@ -7,8 +7,6 @@ import ( "github.com/fluxcd/pkg/runtime/conditions" "github.com/fluxcd/pkg/runtime/patch" - netbird "github.com/netbirdio/netbird/shared/management/client/rest" - "github.com/netbirdio/netbird/shared/management/http/api" corev1 "k8s.io/api/core/v1" kerrors "k8s.io/apimachinery/pkg/api/errors" corev1ac "k8s.io/client-go/applyconfigurations/core/v1" @@ -17,6 +15,9 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" + netbird "github.com/netbirdio/netbird/shared/management/client/rest" + "github.com/netbirdio/netbird/shared/management/http/api" + nbv1alpha1 "github.com/netbirdio/kubernetes-operator/api/v1alpha1" "github.com/netbirdio/kubernetes-operator/internal/k8sutil" "github.com/netbirdio/kubernetes-operator/internal/netbirdutil" diff --git a/internal/controller/suite_test.go b/internal/controller/suite_test.go index 3e6333b..86fd012 100644 --- a/internal/controller/suite_test.go +++ b/internal/controller/suite_test.go @@ -24,7 +24,7 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - + corev1 "k8s.io/api/core/v1" "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/rest" "sigs.k8s.io/controller-runtime/pkg/client" @@ -32,11 +32,8 @@ import ( logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log/zap" - foobarv1 "k8s.io/api/core/v1" - - netbirdiov1 "github.com/netbirdio/kubernetes-operator/api/v1" - netbirdiov1alpha1 "github.com/netbirdio/kubernetes-operator/api/v1alpha1" - // +kubebuilder:scaffold:imports + nbv1 "github.com/netbirdio/kubernetes-operator/api/v1" + nbv1alpha1 "github.com/netbirdio/kubernetes-operator/api/v1alpha1" ) // These tests use Ginkgo (BDD-style Go testing framework). Refer to @@ -62,13 +59,13 @@ var _ = BeforeSuite(func() { ctx, cancel = context.WithCancel(context.TODO()) var err error - err = netbirdiov1.AddToScheme(scheme.Scheme) + err = nbv1.AddToScheme(scheme.Scheme) Expect(err).NotTo(HaveOccurred()) - err = foobarv1.AddToScheme(scheme.Scheme) + err = corev1.AddToScheme(scheme.Scheme) Expect(err).NotTo(HaveOccurred()) - err = netbirdiov1alpha1.AddToScheme(scheme.Scheme) + err = nbv1alpha1.AddToScheme(scheme.Scheme) Expect(err).NotTo(HaveOccurred()) // +kubebuilder:scaffold:scheme diff --git a/internal/controller/tcproute_controller.go b/internal/controller/tcproute_controller.go index 3ed2b71..2e2b187 100644 --- a/internal/controller/tcproute_controller.go +++ b/internal/controller/tcproute_controller.go @@ -3,6 +3,7 @@ package controller import ( "context" + "github.com/fluxcd/pkg/runtime/patch" corev1 "k8s.io/api/core/v1" kerrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" @@ -10,10 +11,9 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" - gatewayv1 "sigs.k8s.io/gateway-api/apis/v1" - gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2" + gwv1 "sigs.k8s.io/gateway-api/apis/v1" + gwv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2" - "github.com/fluxcd/pkg/runtime/patch" nbv1alpha1 "github.com/netbirdio/kubernetes-operator/api/v1alpha1" "github.com/netbirdio/kubernetes-operator/internal/gatewayutil" "github.com/netbirdio/kubernetes-operator/internal/k8sutil" @@ -28,7 +28,7 @@ type TCPRouteReconciler struct { func (r *TCPRouteReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { logger := ctrl.Log.WithName("TCPRoute").WithValues("namespace", req.Namespace, "name", req.Name) - tr := &gatewayv1alpha2.TCPRoute{} + tr := &gwv1alpha2.TCPRoute{} err := r.Get(ctx, req.NamespacedName, tr) if err != nil { return ctrl.Result{}, client.IgnoreNotFound(err) @@ -47,7 +47,7 @@ func (r *TCPRouteReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c if gw == nil { continue } - if !meta.IsStatusConditionTrue(gw.Status.Conditions, string(gatewayv1.GatewayConditionProgrammed)) { + if !meta.IsStatusConditionTrue(gw.Status.Conditions, string(gwv1.GatewayConditionProgrammed)) { logger.Info("gateway is not ready", "name", gw.ObjectMeta.Name) continue } @@ -102,7 +102,7 @@ func (r *TCPRouteReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c return ctrl.Result{}, nil } -func (r *TCPRouteReconciler) reconcileDelete(ctx context.Context, sp *patch.SerialPatcher, tr *gatewayv1alpha2.TCPRoute) (ctrl.Result, error) { +func (r *TCPRouteReconciler) reconcileDelete(ctx context.Context, sp *patch.SerialPatcher, tr *gwv1alpha2.TCPRoute) (ctrl.Result, error) { for _, parent := range tr.Spec.ParentRefs { gw, err := gatewayutil.GetParentGateway(ctx, r.Client, parent, tr.Namespace, GatewayControllerName) if err != nil { @@ -170,6 +170,6 @@ func (r *TCPRouteReconciler) reconcileDelete(ctx context.Context, sp *patch.Seri // SetupWithManager sets up the controller with the Manager. func (r *TCPRouteReconciler) SetupWithManager(mgr ctrl.Manager) error { return ctrl.NewControllerManagedBy(mgr). - For(&gatewayv1alpha2.TCPRoute{}). + For(&gwv1alpha2.TCPRoute{}). Complete(r) } diff --git a/internal/netbirdutil/group.go b/internal/netbirdutil/group.go index 9d2c5aa..09b7762 100644 --- a/internal/netbirdutil/group.go +++ b/internal/netbirdutil/group.go @@ -4,10 +4,11 @@ import ( "context" "fmt" - netbird "github.com/netbirdio/netbird/shared/management/client/rest" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "sigs.k8s.io/controller-runtime/pkg/client" + netbird "github.com/netbirdio/netbird/shared/management/client/rest" + nbv1alpha1 "github.com/netbirdio/kubernetes-operator/api/v1alpha1" ) diff --git a/internal/webhook/v1/nbgroup_webhook.go b/internal/webhook/v1/nbgroup_webhook.go index f655547..3e0ef10 100644 --- a/internal/webhook/v1/nbgroup_webhook.go +++ b/internal/webhook/v1/nbgroup_webhook.go @@ -11,7 +11,7 @@ import ( logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" - netbirdiov1 "github.com/netbirdio/kubernetes-operator/api/v1" + nbv1 "github.com/netbirdio/kubernetes-operator/api/v1" ) // nolint:unused @@ -20,7 +20,7 @@ var nbgrouplog = logf.Log.WithName("nbgroup-resource") // SetupNBGroupWebhookWithManager registers the webhook for NBGroup in the manager. func SetupNBGroupWebhookWithManager(mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr, &netbirdiov1.NBGroup{}). + return ctrl.NewWebhookManagedBy(mgr, &nbv1.NBGroup{}). WithValidator(&NBGroupCustomValidator{client: mgr.GetClient()}). Complete() } @@ -31,25 +31,25 @@ type NBGroupCustomValidator struct { client client.Client } -var _ admission.Validator[*netbirdiov1.NBGroup] = &NBGroupCustomValidator{} +var _ admission.Validator[*nbv1.NBGroup] = &NBGroupCustomValidator{} // ValidateCreate implements webhook.CustomValidator so a webhook will be registered for the type NBGroup. -func (v *NBGroupCustomValidator) ValidateCreate(ctx context.Context, group *netbirdiov1.NBGroup) (admission.Warnings, error) { +func (v *NBGroupCustomValidator) ValidateCreate(ctx context.Context, group *nbv1.NBGroup) (admission.Warnings, error) { return nil, nil } // ValidateUpdate implements webhook.CustomValidator so a webhook will be registered for the type NBGroup. -func (v *NBGroupCustomValidator) ValidateUpdate(ctx context.Context, old, new *netbirdiov1.NBGroup) (admission.Warnings, error) { +func (v *NBGroupCustomValidator) ValidateUpdate(ctx context.Context, old, new *nbv1.NBGroup) (admission.Warnings, error) { return nil, nil } // ValidateDelete implements webhook.CustomValidator so a webhook will be registered for the type NBGroup. -func (v *NBGroupCustomValidator) ValidateDelete(ctx context.Context, nbgroup *netbirdiov1.NBGroup) (admission.Warnings, error) { +func (v *NBGroupCustomValidator) ValidateDelete(ctx context.Context, nbgroup *nbv1.NBGroup) (admission.Warnings, error) { nbgrouplog.Info("Validation for NBGroup upon deletion", "name", nbgroup.GetName()) for _, o := range nbgroup.OwnerReferences { - if o.Kind == (&netbirdiov1.NBResource{}).Kind { - var nbResource netbirdiov1.NBResource + if o.Kind == (&nbv1.NBResource{}).Kind { + var nbResource nbv1.NBResource err := v.client.Get(ctx, types.NamespacedName{Namespace: nbgroup.Namespace, Name: o.Name}, &nbResource) if err != nil && !errors.IsNotFound(err) { return nil, err @@ -58,8 +58,8 @@ func (v *NBGroupCustomValidator) ValidateDelete(ctx context.Context, nbgroup *ne return nil, fmt.Errorf("group attached to NBResource %s/%s", nbgroup.Namespace, o.Name) } } - if o.Kind == (&netbirdiov1.NBRoutingPeer{}).Kind { - var nbResource netbirdiov1.NBRoutingPeer + if o.Kind == (&nbv1.NBRoutingPeer{}).Kind { + var nbResource nbv1.NBRoutingPeer err := v.client.Get(ctx, types.NamespacedName{Namespace: nbgroup.Namespace, Name: o.Name}, &nbResource) if err != nil && !errors.IsNotFound(err) { return nil, err diff --git a/internal/webhook/v1/nbgroup_webhook_test.go b/internal/webhook/v1/nbgroup_webhook_test.go index 9cb01de..7e02053 100644 --- a/internal/webhook/v1/nbgroup_webhook_test.go +++ b/internal/webhook/v1/nbgroup_webhook_test.go @@ -4,22 +4,22 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" "k8s.io/apimachinery/pkg/api/errors" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" - netbirdiov1 "github.com/netbirdio/kubernetes-operator/api/v1" + nbv1 "github.com/netbirdio/kubernetes-operator/api/v1" ) var _ = Describe("NBGroup Webhook", func() { var ( - obj *netbirdiov1.NBGroup - oldObj *netbirdiov1.NBGroup + obj *nbv1.NBGroup + oldObj *nbv1.NBGroup validator NBGroupCustomValidator ) BeforeEach(func() { - obj = &netbirdiov1.NBGroup{} - oldObj = &netbirdiov1.NBGroup{} + obj = &nbv1.NBGroup{} + oldObj = &nbv1.NBGroup{} validator = NBGroupCustomValidator{ client: k8sClient, } @@ -40,8 +40,8 @@ var _ = Describe("NBGroup Webhook", func() { }) When("There are no owners", func() { It("should allow deletion", func() { - obj = &netbirdiov1.NBGroup{ - ObjectMeta: v1.ObjectMeta{ + obj = &nbv1.NBGroup{ + ObjectMeta: metav1.ObjectMeta{ Name: "test", Namespace: "default", OwnerReferences: nil, @@ -52,13 +52,13 @@ var _ = Describe("NBGroup Webhook", func() { }) When("There deleted owners", func() { It("should allow deletion", func() { - obj = &netbirdiov1.NBGroup{ - ObjectMeta: v1.ObjectMeta{ + obj = &nbv1.NBGroup{ + ObjectMeta: metav1.ObjectMeta{ Name: "test", Namespace: "default", - OwnerReferences: []v1.OwnerReference{ + OwnerReferences: []metav1.OwnerReference{ { - APIVersion: netbirdiov1.GroupVersion.Identifier(), + APIVersion: nbv1.GroupVersion.Identifier(), Kind: "NBResource", Name: "notexist", UID: obj.UID, @@ -71,12 +71,12 @@ var _ = Describe("NBGroup Webhook", func() { }) When("NBResource owner exists", func() { BeforeEach(func() { - nbResource := &netbirdiov1.NBResource{ - ObjectMeta: v1.ObjectMeta{ + nbResource := &nbv1.NBResource{ + ObjectMeta: metav1.ObjectMeta{ Name: "isexist", Namespace: "default", }, - Spec: netbirdiov1.NBResourceSpec{ + Spec: nbv1.NBResourceSpec{ Name: "test1", NetworkID: "test2", Address: "test3", @@ -86,13 +86,13 @@ var _ = Describe("NBGroup Webhook", func() { Expect(k8sClient.Create(ctx, nbResource)).To(Succeed()) - obj = &netbirdiov1.NBGroup{ - ObjectMeta: v1.ObjectMeta{ + obj = &nbv1.NBGroup{ + ObjectMeta: metav1.ObjectMeta{ Name: "test", Namespace: "default", - OwnerReferences: []v1.OwnerReference{ + OwnerReferences: []metav1.OwnerReference{ { - APIVersion: netbirdiov1.GroupVersion.Identifier(), + APIVersion: nbv1.GroupVersion.Identifier(), Kind: nbResource.Kind, Name: nbResource.Name, UID: nbResource.UID, @@ -102,7 +102,7 @@ var _ = Describe("NBGroup Webhook", func() { } }) AfterEach(func() { - nbResource := &netbirdiov1.NBResource{} + nbResource := &nbv1.NBResource{} err := k8sClient.Get(ctx, types.NamespacedName{Namespace: "default", Name: "isexist"}, nbResource) if !errors.IsNotFound(err) { Expect(err).NotTo(HaveOccurred()) @@ -122,23 +122,23 @@ var _ = Describe("NBGroup Webhook", func() { }) When("NBRoutingPeer owner exists", func() { BeforeEach(func() { - nbrp := &netbirdiov1.NBRoutingPeer{ - ObjectMeta: v1.ObjectMeta{ + nbrp := &nbv1.NBRoutingPeer{ + ObjectMeta: metav1.ObjectMeta{ Name: "isexist", Namespace: "default", }, - Spec: netbirdiov1.NBRoutingPeerSpec{}, + Spec: nbv1.NBRoutingPeerSpec{}, } Expect(k8sClient.Create(ctx, nbrp)).To(Succeed()) - obj = &netbirdiov1.NBGroup{ - ObjectMeta: v1.ObjectMeta{ + obj = &nbv1.NBGroup{ + ObjectMeta: metav1.ObjectMeta{ Name: "test", Namespace: "default", - OwnerReferences: []v1.OwnerReference{ + OwnerReferences: []metav1.OwnerReference{ { - APIVersion: netbirdiov1.GroupVersion.Identifier(), + APIVersion: nbv1.GroupVersion.Identifier(), Kind: nbrp.Kind, Name: nbrp.Name, UID: nbrp.UID, @@ -148,7 +148,7 @@ var _ = Describe("NBGroup Webhook", func() { } }) AfterEach(func() { - nbrp := &netbirdiov1.NBRoutingPeer{} + nbrp := &nbv1.NBRoutingPeer{} err := k8sClient.Get(ctx, types.NamespacedName{Namespace: "default", Name: "isexist"}, nbrp) if !errors.IsNotFound(err) { Expect(err).NotTo(HaveOccurred()) diff --git a/internal/webhook/v1/pod_webhook.go b/internal/webhook/v1/pod_webhook.go index 73ce861..31d6a02 100644 --- a/internal/webhook/v1/pod_webhook.go +++ b/internal/webhook/v1/pod_webhook.go @@ -34,7 +34,7 @@ import ( logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" - netbirdiov1 "github.com/netbirdio/kubernetes-operator/api/v1" + nbv1 "github.com/netbirdio/kubernetes-operator/api/v1" nbv1alpha1 "github.com/netbirdio/kubernetes-operator/api/v1alpha1" "github.com/netbirdio/kubernetes-operator/internal/controller" ) @@ -195,7 +195,7 @@ func (d *PodNetbirdInjector) legacyInjector(ctx context.Context, pod *corev1.Pod podlog.Info("Defaulting for Pod", "name", pod.GetName()) // retrieve the NBSetupKey resource - var nbSetupKey netbirdiov1.NBSetupKey + var nbSetupKey nbv1.NBSetupKey err := d.client.Get(ctx, types.NamespacedName{Namespace: pod.Namespace, Name: pod.Annotations[setupKeyAnnotation]}, &nbSetupKey) if err != nil { return err @@ -204,7 +204,7 @@ func (d *PodNetbirdInjector) legacyInjector(ctx context.Context, pod *corev1.Pod // ensure the NBSetupKey is ready. ready := false for _, c := range nbSetupKey.Status.Conditions { - if c.Type == netbirdiov1.NBSetupKeyReady { + if c.Type == nbv1.NBSetupKeyReady { ready = c.Status == corev1.ConditionTrue } } diff --git a/internal/webhook/v1/pod_webhook_test.go b/internal/webhook/v1/pod_webhook_test.go index f74405d..579041f 100644 --- a/internal/webhook/v1/pod_webhook_test.go +++ b/internal/webhook/v1/pod_webhook_test.go @@ -19,12 +19,13 @@ package v1 import ( "context" - netbirdiov1 "github.com/netbirdio/kubernetes-operator/api/v1" - nbv1alpha1 "github.com/netbirdio/kubernetes-operator/api/v1alpha1" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + nbv1 "github.com/netbirdio/kubernetes-operator/api/v1" + nbv1alpha1 "github.com/netbirdio/kubernetes-operator/api/v1alpha1" ) var _ = Describe("Pod Webhook", func() { @@ -82,12 +83,12 @@ var _ = Describe("Pod Webhook", func() { When("NBSetupKey exists", Ordered, func() { BeforeAll(func() { - sk := netbirdiov1.NBSetupKey{ + sk := nbv1.NBSetupKey{ ObjectMeta: metav1.ObjectMeta{ Name: "test", Namespace: "test", }, - Spec: netbirdiov1.NBSetupKeySpec{ + Spec: nbv1.NBSetupKeySpec{ SecretKeyRef: corev1.SecretKeySelector{ LocalObjectReference: corev1.LocalObjectReference{ Name: "test", @@ -107,10 +108,10 @@ var _ = Describe("Pod Webhook", func() { err = k8sClient.Create(context.Background(), &sk) Expect(err).NotTo(HaveOccurred()) - sk.Status = netbirdiov1.NBSetupKeyStatus{ - Conditions: []netbirdiov1.NBCondition{ + sk.Status = nbv1.NBSetupKeyStatus{ + Conditions: []nbv1.NBCondition{ { - Type: netbirdiov1.NBSetupKeyReady, + Type: nbv1.NBSetupKeyReady, Status: corev1.ConditionTrue, }, }, diff --git a/internal/webhook/v1/webhook_suite_test.go b/internal/webhook/v1/webhook_suite_test.go index 023b8f1..226b963 100644 --- a/internal/webhook/v1/webhook_suite_test.go +++ b/internal/webhook/v1/webhook_suite_test.go @@ -28,9 +28,8 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - admissionv1 "k8s.io/api/admission/v1" - k8siov1 "k8s.io/api/core/v1" + corev1 "k8s.io/api/core/v1" apimachineryruntime "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/rest" ctrl "sigs.k8s.io/controller-runtime" @@ -41,9 +40,8 @@ import ( metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" "sigs.k8s.io/controller-runtime/pkg/webhook" - netbirdiov1 "github.com/netbirdio/kubernetes-operator/api/v1" + nbv1 "github.com/netbirdio/kubernetes-operator/api/v1" nbv1alpha1 "github.com/netbirdio/kubernetes-operator/api/v1alpha1" - // +kubebuilder:scaffold:imports ) // These tests use Ginkgo (BDD-style Go testing framework). Refer to @@ -70,13 +68,13 @@ var _ = BeforeSuite(func() { var err error scheme := apimachineryruntime.NewScheme() - err = k8siov1.AddToScheme(scheme) + err = corev1.AddToScheme(scheme) Expect(err).NotTo(HaveOccurred()) err = admissionv1.AddToScheme(scheme) Expect(err).NotTo(HaveOccurred()) - err = netbirdiov1.AddToScheme(scheme) + err = nbv1.AddToScheme(scheme) Expect(err).NotTo(HaveOccurred()) err = nbv1alpha1.AddToScheme(scheme)