mirror of
https://github.com/rancher/k3k.git
synced 2026-08-18 03:46:31 +00:00
Fix Service reconciliation error loop (#497)
* fix service reconciliation error by adding checks for virtual service annotations * renamed var
This commit is contained in:
@@ -13,7 +13,7 @@ import (
|
||||
"github.com/rancher/k3k/pkg/controller"
|
||||
)
|
||||
|
||||
// newVirtualClient
|
||||
// newVirtualClient creates a new Client that can be used to interact with the virtual cluster
|
||||
func newVirtualClient(ctx context.Context, hostClient ctrlruntimeclient.Client, clusterName, clusterNamespace string) (ctrlruntimeclient.Client, error) {
|
||||
var clusterKubeConfig v1.Secret
|
||||
|
||||
|
||||
@@ -41,12 +41,22 @@ func (r *ServiceReconciler) Reconcile(ctx context.Context, req reconcile.Request
|
||||
log := ctrl.LoggerFrom(ctx)
|
||||
log.Info("ensuring service status to virtual cluster")
|
||||
|
||||
var hostService, virtService v1.Service
|
||||
|
||||
var hostService v1.Service
|
||||
if err := r.HostClient.Get(ctx, req.NamespacedName, &hostService); err != nil {
|
||||
return reconcile.Result{}, ctrlruntimeclient.IgnoreNotFound(err)
|
||||
}
|
||||
|
||||
// Some services are owned by the cluster but don't have the annotations set (i.e. the kubelet svc)
|
||||
// They don't exists in the virtual cluster, so we can skip them
|
||||
|
||||
virtualServiceName, virtualServiceNameFound := hostService.Annotations[translate.ResourceNameAnnotation]
|
||||
virtualServiceNamespace, virtualServiceNamespaceFound := hostService.Annotations[translate.ResourceNamespaceAnnotation]
|
||||
|
||||
if !virtualServiceNameFound || !virtualServiceNamespaceFound {
|
||||
log.V(1).Info(fmt.Sprintf("service %s/%s does not have virtual service annotations, skipping", hostService.Namespace, hostService.Name))
|
||||
return reconcile.Result{}, nil
|
||||
}
|
||||
|
||||
// get cluster from the object
|
||||
cluster := clusterNamespacedName(&hostService)
|
||||
|
||||
@@ -60,17 +70,18 @@ func (r *ServiceReconciler) Reconcile(ctx context.Context, req reconcile.Request
|
||||
}
|
||||
|
||||
virtualServiceKey := types.NamespacedName{
|
||||
Name: hostService.Annotations[translate.ResourceNameAnnotation],
|
||||
Namespace: hostService.Annotations[translate.ResourceNamespaceAnnotation],
|
||||
Name: virtualServiceName,
|
||||
Namespace: virtualServiceNamespace,
|
||||
}
|
||||
|
||||
if err := virtualClient.Get(ctx, virtualServiceKey, &virtService); err != nil {
|
||||
return reconcile.Result{}, fmt.Errorf("failed to get virt service: %v", err)
|
||||
var virtualService v1.Service
|
||||
if err := virtualClient.Get(ctx, virtualServiceKey, &virtualService); err != nil {
|
||||
return reconcile.Result{}, fmt.Errorf("failed to get virtual service: %v", err)
|
||||
}
|
||||
|
||||
if !equality.Semantic.DeepEqual(virtService.Status.LoadBalancer, hostService.Status.LoadBalancer) {
|
||||
virtService.Status.LoadBalancer = hostService.Status.LoadBalancer
|
||||
if err := virtualClient.Status().Update(ctx, &virtService); err != nil {
|
||||
if !equality.Semantic.DeepEqual(virtualService.Status.LoadBalancer, hostService.Status.LoadBalancer) {
|
||||
virtualService.Status.LoadBalancer = hostService.Status.LoadBalancer
|
||||
if err := virtualClient.Status().Update(ctx, &virtualService); err != nil {
|
||||
return reconcile.Result{}, err
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user