From 8be787adc500acc2d6f16c0c13450a3efdad8f45 Mon Sep 17 00:00:00 2001 From: Dario Tranchitella Date: Sat, 28 May 2022 17:46:29 +0200 Subject: [PATCH] reorg: marking loadbalancer errors as debug --- api/v1alpha1/tenantcontrolplane_funcs.go | 7 ++++--- .../kamaji_v1alpha1_tenantcontrolplane.yaml | 2 +- controllers/tenantcontrolplane_controller.go | 7 +++++++ deploy/kind/kind-kamaji.yaml | 5 ++++- internal/errors/errors.go | 16 ++++++++++++++++ internal/errors/utils_controllers.go | 10 ++++++++++ 6 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 internal/errors/errors.go create mode 100644 internal/errors/utils_controllers.go diff --git a/api/v1alpha1/tenantcontrolplane_funcs.go b/api/v1alpha1/tenantcontrolplane_funcs.go index a7c5aca..fc32779 100644 --- a/api/v1alpha1/tenantcontrolplane_funcs.go +++ b/api/v1alpha1/tenantcontrolplane_funcs.go @@ -5,12 +5,13 @@ package v1alpha1 import ( "context" - "fmt" "github.com/pkg/errors" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" "sigs.k8s.io/controller-runtime/pkg/client" + + kamajierrors "github.com/clastix/kamaji/internal/errors" ) func (in *TenantControlPlane) GetAddress(ctx context.Context, client client.Client) (string, error) { @@ -29,7 +30,7 @@ func (in *TenantControlPlane) GetAddress(ctx context.Context, client client.Clie case svc.Spec.Type == corev1.ServiceTypeLoadBalancer: loadBalancerStatus = svc.Status.LoadBalancer if len(loadBalancerStatus.Ingress) == 0 { - return "", fmt.Errorf("cannot retrieve the TenantControlPlane address, Service resource is not yet exposed as LoadBalancer") + return "", kamajierrors.NonExposedLoadBalancerError{} } for _, lb := range loadBalancerStatus.Ingress { @@ -39,5 +40,5 @@ func (in *TenantControlPlane) GetAddress(ctx context.Context, client client.Clie } } - return "", fmt.Errorf("the actual resource doesn't have yet a valid IP address") + return "", kamajierrors.MissingValidIPError{} } diff --git a/config/samples/kamaji_v1alpha1_tenantcontrolplane.yaml b/config/samples/kamaji_v1alpha1_tenantcontrolplane.yaml index 374dc87..a415d8f 100644 --- a/config/samples/kamaji_v1alpha1_tenantcontrolplane.yaml +++ b/config/samples/kamaji_v1alpha1_tenantcontrolplane.yaml @@ -21,7 +21,7 @@ spec: labels: tenant.clastix.io: test kind.clastix.io: service - serviceType: ClusterIP + serviceType: LoadBalancer ingress: enabled: true hostname: kamaji.local diff --git a/controllers/tenantcontrolplane_controller.go b/controllers/tenantcontrolplane_controller.go index 069d6db..c19d443 100644 --- a/controllers/tenantcontrolplane_controller.go +++ b/controllers/tenantcontrolplane_controller.go @@ -21,6 +21,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/log" kamajiv1alpha1 "github.com/clastix/kamaji/api/v1alpha1" + kamajierrors "github.com/clastix/kamaji/internal/errors" "github.com/clastix/kamaji/internal/resources" ) @@ -259,6 +260,12 @@ func (r *TenantControlPlaneReconciler) Reconcile(ctx context.Context, req ctrl.R for _, resource := range registeredResources { result, err := resources.Handle(ctx, resource, tenantControlPlane) if err != nil { + if kamajierrors.ShouldReconcileErrorBeIgnored(err) { + log.V(1).Info("sentinel error, enqueuing back request", "error", err.Error()) + + return ctrl.Result{Requeue: true}, nil + } + return ctrl.Result{}, err } diff --git a/deploy/kind/kind-kamaji.yaml b/deploy/kind/kind-kamaji.yaml index aa401b4..9fdee75 100644 --- a/deploy/kind/kind-kamaji.yaml +++ b/deploy/kind/kind-kamaji.yaml @@ -10,6 +10,10 @@ nodes: nodeRegistration: kubeletExtraArgs: node-labels: "ingress-ready=true" + ## required for Cluster API local development + extraMounts: + - hostPath: /var/run/docker.sock + containerPath: /var/run/docker.sock extraPortMappings: ## expose port 80 of the node to port 80 on the host - containerPort: 80 @@ -27,4 +31,3 @@ nodes: - containerPort: 6443 hostPort: 8443 protocol: TCP - diff --git a/internal/errors/errors.go b/internal/errors/errors.go new file mode 100644 index 0000000..ddd7edc --- /dev/null +++ b/internal/errors/errors.go @@ -0,0 +1,16 @@ +// Copyright 2022 Clastix Labs +// SPDX-License-Identifier: Apache-2.0 + +package errors + +type NonExposedLoadBalancerError struct{} + +func (n NonExposedLoadBalancerError) Error() string { + return "cannot retrieve the TenantControlPlane address, Service resource is not yet exposed as LoadBalancer" +} + +type MissingValidIPError struct{} + +func (m MissingValidIPError) Error() string { + return "the actual resource doesn't have yet a valid IP address" +} diff --git a/internal/errors/utils_controllers.go b/internal/errors/utils_controllers.go new file mode 100644 index 0000000..9af147c --- /dev/null +++ b/internal/errors/utils_controllers.go @@ -0,0 +1,10 @@ +// Copyright 2022 Clastix Labs +// SPDX-License-Identifier: Apache-2.0 + +package errors + +import "github.com/pkg/errors" + +func ShouldReconcileErrorBeIgnored(err error) bool { + return errors.As(err, &NonExposedLoadBalancerError{}) || errors.As(err, &MissingValidIPError{}) +}