github.com/ironcore-dev/gardener-extension-provider-ironcore@v0.3.2-0.20240314231816-8336447fb9a0/pkg/controller/healthcheck/add.go (about)

     1  // SPDX-FileCopyrightText: 2022 SAP SE or an SAP affiliate company and IronCore contributors
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package healthcheck
     5  
     6  import (
     7  	"context"
     8  	"time"
     9  
    10  	healthcheckconfig "github.com/gardener/gardener/extensions/pkg/apis/config"
    11  	genericcontrolplaneactuator "github.com/gardener/gardener/extensions/pkg/controller/controlplane/genericactuator"
    12  	"github.com/gardener/gardener/extensions/pkg/controller/healthcheck"
    13  	"github.com/gardener/gardener/extensions/pkg/controller/healthcheck/general"
    14  	"github.com/gardener/gardener/extensions/pkg/controller/healthcheck/worker"
    15  	extensionspredicate "github.com/gardener/gardener/extensions/pkg/predicate"
    16  	gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1"
    17  	extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1"
    18  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    19  	"k8s.io/apimachinery/pkg/util/sets"
    20  	"k8s.io/utils/ptr"
    21  	"sigs.k8s.io/controller-runtime/pkg/client"
    22  	"sigs.k8s.io/controller-runtime/pkg/manager"
    23  	"sigs.k8s.io/controller-runtime/pkg/predicate"
    24  
    25  	"github.com/ironcore-dev/gardener-extension-provider-ironcore/pkg/ironcore"
    26  )
    27  
    28  var (
    29  	defaultSyncPeriod = time.Second * 30
    30  	// DefaultAddOptions are the default DefaultAddArgs for AddToManager.
    31  	DefaultAddOptions = healthcheck.DefaultAddArgs{
    32  		HealthCheckConfig: healthcheckconfig.HealthCheckConfig{
    33  			SyncPeriod: metav1.Duration{Duration: defaultSyncPeriod},
    34  			ShootRESTOptions: &healthcheckconfig.RESTOptions{
    35  				QPS:   ptr.To[float32](100),
    36  				Burst: ptr.To[int](130),
    37  			},
    38  		},
    39  	}
    40  	// GardenletManagesMCM specifies whether the machine-controller-manager is managed by gardenlet.
    41  	GardenletManagesMCM bool
    42  )
    43  
    44  // RegisterHealthChecks registers health checks for each extension resource
    45  func RegisterHealthChecks(ctx context.Context, mgr manager.Manager, opts healthcheck.DefaultAddArgs) error {
    46  	if err := healthcheck.DefaultRegistration(ctx,
    47  		ironcore.Type,
    48  		extensionsv1alpha1.SchemeGroupVersion.WithKind(extensionsv1alpha1.ControlPlaneResource),
    49  		func() client.ObjectList { return &extensionsv1alpha1.ControlPlaneList{} },
    50  		func() extensionsv1alpha1.Object { return &extensionsv1alpha1.ControlPlane{} },
    51  		mgr,
    52  		opts,
    53  		[]predicate.Predicate{extensionspredicate.HasPurpose(extensionsv1alpha1.Normal)},
    54  		[]healthcheck.ConditionTypeToHealthCheck{
    55  			{
    56  				ConditionType: string(gardencorev1beta1.ShootControlPlaneHealthy),
    57  				HealthCheck:   general.NewSeedDeploymentHealthChecker(ironcore.CloudControllerManagerName),
    58  			},
    59  			{
    60  				ConditionType: string(gardencorev1beta1.ShootControlPlaneHealthy),
    61  				HealthCheck:   general.NewSeedDeploymentHealthChecker(ironcore.CSIControllerName),
    62  			},
    63  			{
    64  				ConditionType: string(gardencorev1beta1.ShootSystemComponentsHealthy),
    65  				HealthCheck:   general.CheckManagedResource(genericcontrolplaneactuator.ControlPlaneShootChartResourceName),
    66  			},
    67  			{
    68  				ConditionType: string(gardencorev1beta1.ShootSystemComponentsHealthy),
    69  				HealthCheck:   general.CheckManagedResource(genericcontrolplaneactuator.StorageClassesChartResourceName),
    70  			},
    71  		},
    72  		sets.New[gardencorev1beta1.ConditionType](gardencorev1beta1.ShootSystemComponentsHealthy),
    73  	); err != nil {
    74  		return err
    75  	}
    76  
    77  	var (
    78  		workerHealthChecks = []healthcheck.ConditionTypeToHealthCheck{{
    79  			ConditionType: string(gardencorev1beta1.ShootEveryNodeReady),
    80  			HealthCheck:   worker.NewNodesChecker(),
    81  		}}
    82  		workerConditionTypesToRemove = sets.New(gardencorev1beta1.ShootControlPlaneHealthy)
    83  	)
    84  
    85  	if !GardenletManagesMCM {
    86  		workerHealthChecks = append(workerHealthChecks, healthcheck.ConditionTypeToHealthCheck{
    87  			ConditionType: string(gardencorev1beta1.ShootControlPlaneHealthy),
    88  			HealthCheck:   general.NewSeedDeploymentHealthChecker(ironcore.MachineControllerManagerName),
    89  		})
    90  		workerConditionTypesToRemove = workerConditionTypesToRemove.Delete(gardencorev1beta1.ShootControlPlaneHealthy)
    91  	}
    92  
    93  	return healthcheck.DefaultRegistration(ctx,
    94  		ironcore.Type,
    95  		extensionsv1alpha1.SchemeGroupVersion.WithKind(extensionsv1alpha1.WorkerResource),
    96  		func() client.ObjectList { return &extensionsv1alpha1.WorkerList{} },
    97  		func() extensionsv1alpha1.Object { return &extensionsv1alpha1.Worker{} },
    98  		mgr,
    99  		opts,
   100  		nil,
   101  		workerHealthChecks,
   102  		workerConditionTypesToRemove,
   103  	)
   104  }
   105  
   106  // AddToManager adds a controller with the default Options.
   107  func AddToManager(ctx context.Context, mgr manager.Manager) error {
   108  	return RegisterHealthChecks(ctx, mgr, DefaultAddOptions)
   109  }