mirror of
https://github.com/YuzuZensai/netbird-kubernetes-operator.git
synced 2026-09-13 18:59:09 +00: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:
@@ -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{
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user