Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion service/cluster_webhook_validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,11 @@ func ValidateClusterDelete(ctx context.Context, c *controllerv1alpha1.Cluster) (
// validateAppliedInProjectNamespace is a function to validate the if the cluster is applied in project namespace or not
func validateAppliedInProjectNamespace(ctx context.Context, c *controllerv1alpha1.Cluster) *field.Error {
namespace := &corev1.Namespace{}
exist, _ := util.GetResourceIfExist(ctx, client.ObjectKey{Name: c.Namespace}, namespace)
exist, err := util.GetResourceIfExist(ctx, client.ObjectKey{Name: c.Namespace}, namespace)
if err != nil {
return field.InternalError(field.NewPath("metadata").Child("namespace"),
fmt.Errorf("failed to look up namespace %s: %w", c.Namespace, err))
}
if !exist || !util.CheckForProjectNamespace(namespace) {
return field.Invalid(field.NewPath("metadata").Child("namespace"), c.Namespace, "cluster must be applied on project namespace")
}
Expand Down
30 changes: 25 additions & 5 deletions service/service_export_config_webhook_validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,17 @@ func ValidateServiceExportConfigDelete(ctx context.Context, serviceExportConfig

func validateServiceExportClusterAndSlice(ctx context.Context, serviceExport *controllerv1alpha1.ServiceExportConfig) *field.Error {
cluster := &controllerv1alpha1.Cluster{}
clusterExist, _ := util.GetResourceIfExist(ctx, client.ObjectKey{Name: serviceExport.Spec.SourceCluster, Namespace: serviceExport.Namespace}, cluster)
clusterExist, err := util.GetResourceIfExist(ctx, client.ObjectKey{Name: serviceExport.Spec.SourceCluster, Namespace: serviceExport.Namespace}, cluster)
if err != nil {
return field.InternalError(field.NewPath("Spec").Child("SourceCluster"),
fmt.Errorf("failed to look up cluster %s: %w", serviceExport.Spec.SourceCluster, err))
}
sliceConfig := &controllerv1alpha1.SliceConfig{}
sliceExist, _ := util.GetResourceIfExist(ctx, client.ObjectKey{Name: serviceExport.Spec.SliceName, Namespace: serviceExport.Namespace}, sliceConfig)
sliceExist, err := util.GetResourceIfExist(ctx, client.ObjectKey{Name: serviceExport.Spec.SliceName, Namespace: serviceExport.Namespace}, sliceConfig)
if err != nil {
return field.InternalError(field.NewPath("Spec").Child("SliceName"),
fmt.Errorf("failed to look up slice %s: %w", serviceExport.Spec.SliceName, err))
}
if !sliceExist {
return field.Invalid(field.NewPath("Spec").Child("SliceName"), serviceExport.Spec.SliceName, "There is no valid slice with this name")
}
Expand All @@ -90,9 +98,17 @@ func validateServiceEndpoint(ctx context.Context, serviceExport *controllerv1alp
for _, serviceDiscoveryEndPoint := range serviceExport.Spec.ServiceDiscoveryEndpoints {
clusterName := serviceDiscoveryEndPoint.Cluster
cluster := &controllerv1alpha1.Cluster{}
clusterExist, _ := util.GetResourceIfExist(ctx, client.ObjectKey{Name: clusterName, Namespace: serviceExport.Namespace}, cluster)
clusterExist, err := util.GetResourceIfExist(ctx, client.ObjectKey{Name: clusterName, Namespace: serviceExport.Namespace}, cluster)
if err != nil {
return field.InternalError(field.NewPath("Spec").Child("ServiceDiscoveryEndpoints").Child("Cluster"),
fmt.Errorf("failed to look up cluster %s: %w", clusterName, err))
}
sliceConfig := &controllerv1alpha1.SliceConfig{}
sliceExist, _ := util.GetResourceIfExist(ctx, client.ObjectKey{Name: sliceName, Namespace: serviceExport.Namespace}, sliceConfig)
sliceExist, err := util.GetResourceIfExist(ctx, client.ObjectKey{Name: sliceName, Namespace: serviceExport.Namespace}, sliceConfig)
if err != nil {
return field.InternalError(field.NewPath("Spec").Child("SliceName"),
fmt.Errorf("failed to look up slice %s: %w", sliceName, err))
}
if !sliceExist {
return field.Invalid(field.NewPath("Spec").Child("SliceName"), serviceExport.Spec.SliceName, "There is no valid slice with this name")
}
Expand All @@ -116,7 +132,11 @@ func validateServiceEndpoint(ctx context.Context, serviceExport *controllerv1alp

func validateServiceExportConfigNamespace(ctx context.Context, serviceExport *controllerv1alpha1.ServiceExportConfig) *field.Error {
namespace := &corev1.Namespace{}
exist, _ := util.GetResourceIfExist(ctx, client.ObjectKey{Name: serviceExport.Namespace}, namespace)
exist, err := util.GetResourceIfExist(ctx, client.ObjectKey{Name: serviceExport.Namespace}, namespace)
if err != nil {
return field.InternalError(field.NewPath("metadata").Child("namespace"),
fmt.Errorf("failed to look up namespace %s: %w", serviceExport.Namespace, err))
}
if !exist || !util.CheckForProjectNamespace(namespace) {
return field.Invalid(field.NewPath("metadata").Child("namespace"), serviceExport.Namespace, "ServiceExportConfig must be applied on project namespace")
}
Expand Down
7 changes: 6 additions & 1 deletion service/slice_qos_config_webhook_validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package service

import (
"context"
"fmt"
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"

controllerv1alpha1 "github.com/kubeslice/kubeslice-controller/apis/controller/v1alpha1"
Expand Down Expand Up @@ -57,7 +58,11 @@ func validateSliceQosConfigSpec(ctx context.Context, sliceQosConfig *controllerv
// validateAppliedInProjectNamespace is a function to validate the if the SliceQosConfig is applied in project namespace or not
func validateSliceQosConfigAppliedInProjectNamespace(ctx context.Context, sliceQoSConfig *controllerv1alpha1.SliceQoSConfig) *field.Error {
namespace := &corev1.Namespace{}
exist, _ := util.GetResourceIfExist(ctx, client.ObjectKey{Name: sliceQoSConfig.Namespace}, namespace)
exist, err := util.GetResourceIfExist(ctx, client.ObjectKey{Name: sliceQoSConfig.Namespace}, namespace)
if err != nil {
return field.InternalError(field.NewPath("metadata").Child("namespace"),
fmt.Errorf("failed to look up namespace %s: %w", sliceQoSConfig.Namespace, err))
}
if !exist || !util.CheckForProjectNamespace(namespace) {
return field.Invalid(field.NewPath("metadata").Child("namespace"), sliceQoSConfig.Name, "SliceQosConfig must be applied on project namespace")
}
Expand Down