@@ -11,8 +11,8 @@ import (
1111 "k8s.io/apimachinery/pkg/types"
1212 ctrl "sigs.k8s.io/controller-runtime"
1313 "sigs.k8s.io/controller-runtime/pkg/client"
14- "sigs.k8s.io/controller-runtime/pkg/log"
1514
15+ "github.com/go-logr/logr"
1616 netbirdiov1 "github.com/netbirdio/kubernetes-operator/api/v1"
1717 "github.com/netbirdio/kubernetes-operator/internal/util"
1818 netbird "github.com/netbirdio/netbird/management/client/rest"
@@ -35,15 +35,15 @@ var (
3535 errNetBirdAPI = fmt .Errorf ("netbird API error" )
3636)
3737
38- func (r * NBPolicyReconciler ) getResources (ctx context.Context , nbPolicy * netbirdiov1.NBPolicy ) ([]netbirdiov1.NBResource , error ) {
38+ func (r * NBPolicyReconciler ) getResources (ctx context.Context , nbPolicy * netbirdiov1.NBPolicy , logger logr. Logger ) ([]netbirdiov1.NBResource , error ) {
3939 var resourceList []netbirdiov1.NBResource
4040 var updatedManagedServiceList []string
4141 for _ , rss := range nbPolicy .Status .ManagedServiceList {
4242 var resource netbirdiov1.NBResource
4343 namespacedName := types.NamespacedName {Namespace : strings .Split (rss , "/" )[0 ], Name : strings .Split (rss , "/" )[1 ]}
4444 err := r .Client .Get (ctx , namespacedName , & resource )
4545 if err != nil && ! errors .IsNotFound (err ) {
46- ctrl . Log .Error (errKubernetesAPI , "Error getting NBResource" , "namespace" , namespacedName .Namespace , "name" , namespacedName .Name )
46+ logger .Error (errKubernetesAPI , "Error getting NBResource" , "namespace" , namespacedName .Namespace , "name" , namespacedName .Name )
4747 nbPolicy .Status .Conditions = netbirdiov1 .NBConditionFalse ("internalError" , fmt .Sprintf ("Error getting NBResource: %v" , err ))
4848 return nil , err
4949 }
@@ -58,12 +58,12 @@ func (r *NBPolicyReconciler) getResources(ctx context.Context, nbPolicy *netbird
5858 return resourceList , nil
5959}
6060
61- func (r * NBPolicyReconciler ) mapResources (ctx context.Context , req ctrl. Request , nbPolicy * netbirdiov1.NBPolicy , resources []netbirdiov1.NBResource ) (map [string ][]int32 , []string , error ) {
61+ func (r * NBPolicyReconciler ) mapResources (ctx context.Context , nbPolicy * netbirdiov1.NBPolicy , resources []netbirdiov1.NBResource , logger logr. Logger ) (map [string ][]int32 , []string , error ) {
6262 portMapping := map [string ]map [int32 ]interface {}{
6363 "tcp" : make (map [int32 ]interface {}),
6464 "udp" : make (map [int32 ]interface {}),
6565 }
66- groups , err := r .groupNamesToIDs (ctx , req , nbPolicy .Spec .DestinationGroups )
66+ groups , err := r .groupNamesToIDs (ctx , nbPolicy .Spec .DestinationGroups , logger )
6767 if err != nil {
6868 return nil , nil , err
6969 }
@@ -92,9 +92,9 @@ func (r *NBPolicyReconciler) mapResources(ctx context.Context, req ctrl.Request,
9292 return ports , groups , nil
9393}
9494
95- func (r * NBPolicyReconciler ) createPolicy (ctx context.Context , req ctrl. Request , nbPolicy * netbirdiov1.NBPolicy , protocol string , sourceGroupIDs , destinationGroupIDs , ports []string ) (* string , error ) {
95+ func (r * NBPolicyReconciler ) createPolicy (ctx context.Context , nbPolicy * netbirdiov1.NBPolicy , protocol string , sourceGroupIDs , destinationGroupIDs , ports []string , logger logr. Logger ) (* string , error ) {
9696 policyName := fmt .Sprintf ("%s %s" , nbPolicy .Spec .Name , strings .ToUpper (protocol ))
97- ctrl . Log .Info ("Creating NetBird Policy" , "name" , policyName , "description" , nbPolicy .Spec .Description , "protocol" , protocol , "sources" , sourceGroupIDs , "destinations" , destinationGroupIDs , "ports" , ports , "bidirectional" , nbPolicy .Spec .Bidirectional )
97+ logger .Info ("Creating NetBird Policy" , "name" , policyName , "description" , nbPolicy .Spec .Description , "protocol" , protocol , "sources" , sourceGroupIDs , "destinations" , destinationGroupIDs , "ports" , ports , "bidirectional" , nbPolicy .Spec .Bidirectional )
9898 policy , err := r .netbird .Policies .Create (ctx , api.PostApiPoliciesJSONRequestBody {
9999 Enabled : true ,
100100 Name : policyName ,
@@ -115,17 +115,17 @@ func (r *NBPolicyReconciler) createPolicy(ctx context.Context, req ctrl.Request,
115115 })
116116
117117 if err != nil {
118- ctrl . Log . Error (errNetBirdAPI , "Error creating Policy" , "namespace" , req . Namespace , "name" , req . Name , "err" , err )
118+ logger . Error (errNetBirdAPI , "Error creating Policy" , "err" , err )
119119 nbPolicy .Status .Conditions = netbirdiov1 .NBConditionFalse ("APIError" , fmt .Sprintf ("Error creating policy: %v" , err ))
120120 return nil , err
121121 }
122122
123123 return policy .Id , nil
124124}
125125
126- func (r * NBPolicyReconciler ) updatePolicy (ctx context.Context , req ctrl. Request , policyID * string , nbPolicy * netbirdiov1.NBPolicy , protocol string , sourceGroupIDs , destinationGroupIDs , ports []string ) (* string , bool , error ) {
126+ func (r * NBPolicyReconciler ) updatePolicy (ctx context.Context , policyID * string , nbPolicy * netbirdiov1.NBPolicy , protocol string , sourceGroupIDs , destinationGroupIDs , ports []string , logger logr. Logger ) (* string , bool , error ) {
127127 policyName := fmt .Sprintf ("%s %s" , nbPolicy .Spec .Name , strings .ToUpper (protocol ))
128- ctrl . Log .Info ("Updating NetBird Policy" , "name" , policyName , "description" , nbPolicy .Spec .Description , "protocol" , protocol , "sources" , sourceGroupIDs , "destinations" , destinationGroupIDs , "ports" , ports , "bidirectional" , nbPolicy .Spec .Bidirectional )
128+ logger .Info ("Updating NetBird Policy" , "name" , policyName , "description" , nbPolicy .Spec .Description , "protocol" , protocol , "sources" , sourceGroupIDs , "destinations" , destinationGroupIDs , "ports" , ports , "bidirectional" , nbPolicy .Spec .Bidirectional )
129129 policy , err := r .netbird .Policies .Update (ctx , * policyID , api.PutApiPoliciesPolicyIdJSONRequestBody {
130130 Enabled : true ,
131131 Name : policyName ,
@@ -146,15 +146,15 @@ func (r *NBPolicyReconciler) updatePolicy(ctx context.Context, req ctrl.Request,
146146 })
147147
148148 if err != nil && ! strings .Contains (err .Error (), "not found" ) {
149- ctrl . Log . Error (errNetBirdAPI , "Error updating Policy" , "namespace" , req . Namespace , "name" , req . Name , "err" , err )
149+ logger . Error (errNetBirdAPI , "Error updating Policy" , "err" , err )
150150 nbPolicy .Status .Conditions = netbirdiov1 .NBConditionFalse ("APIError" , fmt .Sprintf ("Error updating policy: %v" , err ))
151151 return policyID , false , err
152152 }
153153
154154 requeue := false
155155
156156 if err != nil && strings .Contains (err .Error (), "not found" ) {
157- ctrl . Log . Info ("Policy deleted from NetBird API, recreating" , "namespace" , req . Namespace , "name" , req . Name , "protocol" , protocol )
157+ logger . Info ("Policy deleted from NetBird API, recreating" , "protocol" , protocol )
158158 policyID = nil
159159 requeue = true
160160 nbPolicy .Status .Conditions = netbirdiov1 .NBConditionFalse ("Gone" , "Policy deleted from NetBird API" )
@@ -169,9 +169,8 @@ func (r *NBPolicyReconciler) updatePolicy(ctx context.Context, req ctrl.Request,
169169// Reconcile is part of the main kubernetes reconciliation loop which aims to
170170// move the current state of the cluster closer to the desired state.
171171func (r * NBPolicyReconciler ) Reconcile (ctx context.Context , req ctrl.Request ) (res ctrl.Result , err error ) {
172- _ = log .FromContext (ctx )
173-
174- ctrl .Log .Info ("NBPolicy: Reconciling" , "namespace" , req .Namespace , "name" , req .Name )
172+ logger := ctrl .Log .WithName ("NBPolicy" ).WithValues ("namespace" , req .Namespace , "name" , req .Name )
173+ logger .Info ("Reconciling NBPolicy" )
175174
176175 var nbPolicy netbirdiov1.NBPolicy
177176 err = r .Client .Get (ctx , req .NamespacedName , & nbPolicy )
@@ -180,7 +179,7 @@ func (r *NBPolicyReconciler) Reconcile(ctx context.Context, req ctrl.Request) (r
180179 err = nil
181180 }
182181 if err != nil {
183- ctrl . Log . Error (errKubernetesAPI , "error getting NBPolicy" , "err" , err , "namespace" , req . Namespace , "name" , req . Name )
182+ logger . Error (errKubernetesAPI , "error getting NBPolicy" , "err" , err )
184183 }
185184 return ctrl.Result {RequeueAfter : defaultRequeueAfter }, err
186185 }
@@ -203,26 +202,26 @@ func (r *NBPolicyReconciler) Reconcile(ctx context.Context, req ctrl.Request) (r
203202 if len (nbPolicy .Finalizers ) == 0 {
204203 return ctrl.Result {}, nil
205204 }
206- return ctrl.Result {}, r .handleDelete (ctx , req , nbPolicy )
205+ return ctrl.Result {}, r .handleDelete (ctx , nbPolicy , logger )
207206 }
208207
209- resourceList , err := r .getResources (ctx , & nbPolicy )
208+ resourceList , err := r .getResources (ctx , & nbPolicy , logger )
210209 if err != nil {
211210 return ctrl.Result {}, err
212211 }
213212
214- portMapping , destGroups , err := r .mapResources (ctx , req , & nbPolicy , resourceList )
213+ portMapping , destGroups , err := r .mapResources (ctx , & nbPolicy , resourceList , logger )
215214 if err != nil {
216215 return ctrl.Result {}, err
217216 }
218217
219- sourceGroupIDs , err := r .groupNamesToIDs (ctx , req , nbPolicy .Spec .SourceGroups )
218+ sourceGroupIDs , err := r .groupNamesToIDs (ctx , nbPolicy .Spec .SourceGroups , logger )
220219 if err != nil {
221220 nbPolicy .Status .Conditions = netbirdiov1 .NBConditionFalse ("APIError" , fmt .Sprintf ("Error getting group IDs: %v" , err ))
222221 return ctrl.Result {}, err
223222 }
224223
225- requeue , err := r .handlePolicies (ctx , req , & nbPolicy , sourceGroupIDs , destGroups , portMapping )
224+ requeue , err := r .handlePolicies (ctx , & nbPolicy , sourceGroupIDs , destGroups , portMapping , logger )
226225
227226 if requeue || err != nil {
228227 return ctrl.Result {Requeue : requeue }, err
@@ -233,7 +232,7 @@ func (r *NBPolicyReconciler) Reconcile(ctx context.Context, req ctrl.Request) (r
233232 return ctrl.Result {}, nil
234233}
235234
236- func (r * NBPolicyReconciler ) handlePolicies (ctx context.Context , req ctrl. Request , nbPolicy * netbirdiov1.NBPolicy , sourceGroups , destGroups []string , portMapping map [string ][]int32 ) (bool , error ) {
235+ func (r * NBPolicyReconciler ) handlePolicies (ctx context.Context , nbPolicy * netbirdiov1.NBPolicy , sourceGroups , destGroups []string , portMapping map [string ][]int32 , logger logr. Logger ) (bool , error ) {
237236 requeue := false
238237
239238 for protocol , ports := range portMapping {
@@ -244,14 +243,14 @@ func (r *NBPolicyReconciler) handlePolicies(ctx context.Context, req ctrl.Reques
244243 case "udp" :
245244 policyID = nbPolicy .Status .UDPPolicyID
246245 default :
247- ctrl . Log . Error (errKubernetesAPI , "Unknown protocol" , "namespace" , req . Namespace , "name" , req . Name , "protocol" , protocol )
246+ logger . Error (errKubernetesAPI , "Unknown protocol" , "protocol" , protocol )
248247 nbPolicy .Status .Conditions = netbirdiov1 .NBConditionFalse ("ConfigError" , fmt .Sprintf ("Unknown protocol: %s" , protocol ))
249248 return requeue , errUnknownProtocol
250249 }
251250
252251 if len (nbPolicy .Spec .Protocols ) > 0 && ! util .Contains (nbPolicy .Spec .Protocols , protocol ) {
253252 if policyID != nil {
254- ctrl . Log .Info ("Deleting protocol policy as NBPolicy has restricted protocols" , "protocol" , protocol )
253+ logger .Info ("Deleting protocol policy as NBPolicy has restricted protocols" , "protocol" , protocol )
255254 err := r .netbird .Policies .Delete (ctx , * policyID )
256255 if err != nil && ! strings .Contains (err .Error (), "not found" ) {
257256 nbPolicy .Status .Conditions = netbirdiov1 .NBConditionFalse ("APIError" , fmt .Sprintf ("Error deleting policy: %v" , err ))
@@ -260,20 +259,20 @@ func (r *NBPolicyReconciler) handlePolicies(ctx context.Context, req ctrl.Reques
260259 policyID = nil
261260
262261 } else {
263- ctrl . Log .Info ("Ignoring protocol as NBPolicy has restricted protocols" , "protocol" , protocol )
262+ logger .Info ("Ignoring protocol as NBPolicy has restricted protocols" , "protocol" , protocol )
264263 }
265264 } else if len (ports ) == 0 && policyID == nil {
266- ctrl . Log . Info ("0 ports found for protocol in policy" , "namespace" , req . Namespace , "name" , req . Name , "protocol" , protocol )
265+ logger . Info ("0 ports found for protocol in policy" , "protocol" , protocol )
267266 continue
268267 } else if len (destGroups ) == 0 && policyID == nil {
269- ctrl . Log . Info ("no destinations found for protocol in policy" , "namespace" , req . Namespace , "name" , req . Name , "protocol" , protocol )
268+ logger . Info ("no destinations found for protocol in policy" , "protocol" , protocol )
270269 continue
271270 } else if len (sourceGroups ) == 0 && policyID == nil {
272- ctrl . Log . Info ("no sources found for protocol in policy" , "namespace" , req . Namespace , "name" , req . Name , "protocol" , protocol )
271+ logger . Info ("no sources found for protocol in policy" , "protocol" , protocol )
273272 continue
274273 } else if len (ports ) == 0 || len (destGroups ) == 0 || len (sourceGroups ) == 0 {
275274 // Delete policy
276- ctrl . Log . Info ("Deleting policy" , "namespace" , req . Namespace , "name" , req . Name , "protocol" , protocol )
275+ logger . Info ("Deleting policy" , "protocol" , protocol )
277276 err := r .netbird .Policies .Delete (ctx , * policyID )
278277 if err != nil && ! strings .Contains (err .Error (), "not found" ) {
279278 nbPolicy .Status .Conditions = netbirdiov1 .NBConditionFalse ("APIError" , fmt .Sprintf ("Error deleting policy: %v" , err ))
@@ -291,9 +290,9 @@ func (r *NBPolicyReconciler) handlePolicies(ctx context.Context, req ctrl.Reques
291290
292291 var err error
293292 if policyID == nil {
294- policyID , err = r .createPolicy (ctx , req , nbPolicy , protocol , sourceGroups , destGroups , stringPorts )
293+ policyID , err = r .createPolicy (ctx , nbPolicy , protocol , sourceGroups , destGroups , stringPorts , logger )
295294 } else {
296- policyID , requeue , err = r .updatePolicy (ctx , req , policyID , nbPolicy , protocol , sourceGroups , destGroups , stringPorts )
295+ policyID , requeue , err = r .updatePolicy (ctx , policyID , nbPolicy , protocol , sourceGroups , destGroups , stringPorts , logger )
297296 }
298297 if err != nil {
299298 return requeue , err
@@ -306,7 +305,7 @@ func (r *NBPolicyReconciler) handlePolicies(ctx context.Context, req ctrl.Reques
306305 case "udp" :
307306 nbPolicy .Status .UDPPolicyID = policyID
308307 default :
309- ctrl . Log . Error (errKubernetesAPI , "Unknown protocol" , "namespace" , req . Namespace , "name" , req . Name , "protocol" , protocol )
308+ logger . Error (errKubernetesAPI , "Unknown protocol" , "protocol" , protocol )
310309 nbPolicy .Status .Conditions = netbirdiov1 .NBConditionFalse ("ConfigError" , fmt .Sprintf ("Unknown protocol: %s" , protocol ))
311310 return requeue , errUnknownProtocol
312311 }
@@ -315,7 +314,7 @@ func (r *NBPolicyReconciler) handlePolicies(ctx context.Context, req ctrl.Reques
315314 return requeue , nil
316315}
317316
318- func (r * NBPolicyReconciler ) handleDelete (ctx context.Context , req ctrl. Request , nbPolicy netbirdiov1. NBPolicy ) error {
317+ func (r * NBPolicyReconciler ) handleDelete (ctx context.Context , nbPolicy netbirdiov1. NBPolicy , logger logr. Logger ) error {
319318 if nbPolicy .Status .TCPPolicyID != nil {
320319 err := r .netbird .Policies .Delete (ctx , * nbPolicy .Status .TCPPolicyID )
321320 if err != nil {
@@ -325,7 +324,7 @@ func (r *NBPolicyReconciler) handleDelete(ctx context.Context, req ctrl.Request,
325324 }
326325 if nbPolicy .Status .UDPPolicyID != nil {
327326 err := r .netbird .Policies .Delete (ctx , * nbPolicy .Status .UDPPolicyID )
328- if err != nil {
327+ if err != nil && ! strings . Contains ( "not found" , err . Error ()) {
329328 return err
330329 }
331330 nbPolicy .Status .UDPPolicyID = nil
@@ -334,17 +333,17 @@ func (r *NBPolicyReconciler) handleDelete(ctx context.Context, req ctrl.Request,
334333 nbPolicy .Finalizers = util .Without (nbPolicy .Finalizers , "netbird.io/cleanup" )
335334 err := r .Client .Update (ctx , & nbPolicy )
336335 if err != nil {
337- ctrl . Log . Error (errKubernetesAPI , "Error updating NBPolicy" , "namespace" , req . Namespace , "name" , req . Name , "err" , err )
336+ logger . Error (errKubernetesAPI , "Error updating NBPolicy" , "err" , err )
338337 return err
339338 }
340339 }
341340 return nil
342341}
343342
344- func (r * NBPolicyReconciler ) groupNamesToIDs (ctx context.Context , req ctrl. Request , groupNames []string ) ([]string , error ) {
343+ func (r * NBPolicyReconciler ) groupNamesToIDs (ctx context.Context , groupNames []string , logger logr. Logger ) ([]string , error ) {
345344 groups , err := r .netbird .Groups .List (ctx )
346345 if err != nil {
347- ctrl . Log . Error (errNetBirdAPI , "Error listing Groups" , "namespace" , req . Namespace , "name" , req . Name , "err" , err )
346+ logger . Error (errNetBirdAPI , "Error listing Groups" , "err" , err )
348347 return nil , err
349348 }
350349
0 commit comments