mirror of
https://github.com/netbirdio/kubernetes-operator.git
synced 2026-05-22 17:11:40 -07:00
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 <philip.laine@gmail.com>
This commit is contained in:
+67
-9
@@ -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
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
+17
-17
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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))
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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"},
|
||||
|
||||
@@ -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{
|
||||
{
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
})
|
||||
|
||||
@@ -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{},
|
||||
|
||||
@@ -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"))
|
||||
})
|
||||
})
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user