github.com/ironcore-dev/gardener-extension-provider-ironcore@v0.3.2-0.20240314231816-8336447fb9a0/pkg/admission/validator/secret.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 validator
     5  
     6  import (
     7  	"context"
     8  	"fmt"
     9  
    10  	extensionswebhook "github.com/gardener/gardener/extensions/pkg/webhook"
    11  	corev1 "k8s.io/api/core/v1"
    12  	"k8s.io/apimachinery/pkg/api/equality"
    13  	"sigs.k8s.io/controller-runtime/pkg/client"
    14  
    15  	ironcorevalidation "github.com/ironcore-dev/gardener-extension-provider-ironcore/pkg/apis/ironcore/validation"
    16  )
    17  
    18  type secret struct{}
    19  
    20  // NewSecretValidator returns a new instance of a secret validator.
    21  func NewSecretValidator() extensionswebhook.Validator {
    22  	return &secret{}
    23  }
    24  
    25  // Validate checks whether the given new secret contains a valid ironcore service account.
    26  func (s *secret) Validate(_ context.Context, newObj, oldObj client.Object) error {
    27  	secret, ok := newObj.(*corev1.Secret)
    28  	if !ok {
    29  		return fmt.Errorf("wrong object type %T", newObj)
    30  	}
    31  
    32  	if oldObj != nil {
    33  		oldSecret, ok := oldObj.(*corev1.Secret)
    34  		if !ok {
    35  			return fmt.Errorf("wrong object type %T for old object", oldObj)
    36  		}
    37  
    38  		if equality.Semantic.DeepEqual(secret.Data, oldSecret.Data) {
    39  			return nil
    40  		}
    41  	}
    42  
    43  	return ironcorevalidation.ValidateCloudProviderSecret(secret)
    44  }