73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
package validation
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
corev1 "k8s.io/api/core/v1"
|
|
|
|
policyv1alpha1 "github.com/karmada-io/karmada/pkg/apis/policy/v1alpha1"
|
|
"github.com/karmada-io/karmada/pkg/util"
|
|
)
|
|
|
|
// LabelValueMaxLength is a label's max length
|
|
const LabelValueMaxLength int = 63
|
|
|
|
// ValidatePolicyFieldSelector tests if the fieldSelector of propagation policy is valid.
|
|
func ValidatePolicyFieldSelector(fieldSelector *policyv1alpha1.FieldSelector) error {
|
|
if fieldSelector == nil {
|
|
return nil
|
|
}
|
|
|
|
for _, matchExpression := range fieldSelector.MatchExpressions {
|
|
switch matchExpression.Key {
|
|
case util.ProviderField, util.RegionField, util.ZoneField:
|
|
default:
|
|
return fmt.Errorf("unsupported key %q, must be provider, region, or zone", matchExpression.Key)
|
|
}
|
|
|
|
switch matchExpression.Operator {
|
|
case corev1.NodeSelectorOpIn, corev1.NodeSelectorOpNotIn:
|
|
default:
|
|
return fmt.Errorf("unsupported operator %q, must be In or NotIn", matchExpression.Operator)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// ValidateOverrideSpec tests if the overrideRules and (overriders or targetCluster) co-exist
|
|
func ValidateOverrideSpec(overrideSpec *policyv1alpha1.OverrideSpec) error {
|
|
if overrideSpec == nil {
|
|
return nil
|
|
}
|
|
|
|
if overrideSpec.OverrideRules == nil {
|
|
return nil
|
|
}
|
|
|
|
//nolint:staticcheck
|
|
// disable `deprecation` check for backward compatibility.
|
|
if overrideSpec.TargetCluster != nil || !EmptyOverrides(overrideSpec.Overriders) {
|
|
return fmt.Errorf("overrideRules and (overriders or targetCluster) can't co-exist")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// EmptyOverrides check if the overriders of override policy is empty
|
|
func EmptyOverrides(overriders policyv1alpha1.Overriders) bool {
|
|
if len(overriders.Plaintext) != 0 {
|
|
return false
|
|
}
|
|
if len(overriders.ImageOverrider) != 0 {
|
|
return false
|
|
}
|
|
if len(overriders.CommandOverrider) != 0 {
|
|
return false
|
|
}
|
|
if len(overriders.ArgsOverrider) != 0 {
|
|
return false
|
|
}
|
|
return true
|
|
}
|