mirror of
https://github.com/kubevela/kubevela.git
synced 2026-08-18 12:06:38 +00:00
fix validating-webhook about Trait-ApplyTo feature
Signed-off-by: roy wang <seiwy2010@gmail.com>
This commit is contained in:
@@ -8,10 +8,10 @@ import (
|
||||
|
||||
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1alpha2"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/oam"
|
||||
"github.com/oam-dev/kubevela/pkg/oam/discoverymapper"
|
||||
|
||||
admissionv1beta1 "k8s.io/api/admission/v1beta1"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
||||
"k8s.io/apimachinery/pkg/util/validation/field"
|
||||
"k8s.io/klog"
|
||||
@@ -168,13 +168,20 @@ func ValidateTraitAppliableToWorkloadFn(_ context.Context, v ValidatingAppConfig
|
||||
klog.Info("validate trait is appliable to workload", "name", v.appConfig.Name)
|
||||
var allErrs []error
|
||||
for _, c := range v.validatingComps {
|
||||
workloadType := c.component.GetLabels()[oam.WorkloadTypeLabel]
|
||||
workloadDefRefName := c.workloadDefinition.Spec.Reference.Name
|
||||
// TODO(roywang) consider a CRD group could have multiple versions
|
||||
// and maybe we need to specify the minimum version here in the future
|
||||
workloadGroup := c.workloadDefinition.GetObjectKind().GroupVersionKind().Group
|
||||
workloadDefRefName := c.workloadDefinition.Spec.Reference.Name
|
||||
workloadDefName := c.workloadDefinition.GetName()
|
||||
workloadGroup := schema.ParseGroupResource(workloadDefRefName).Group
|
||||
|
||||
klog.Info("validate trait is appliable to workload: ",
|
||||
fmt.Sprintf("workloadDefRefName:%s, workloadDefName(type):%s, workloadGroup:%s",
|
||||
workloadDefRefName, workloadDefName, workloadGroup))
|
||||
ValidateApplyTo:
|
||||
for _, t := range c.validatingTraits {
|
||||
klog.Info("validate trait is appliable to workload: ",
|
||||
fmt.Sprintf("trait %q is allowed to apply to %s",
|
||||
t.traitDefinition.GetName(), t.traitDefinition.Spec.AppliesToWorkloads))
|
||||
if len(t.traitDefinition.Spec.AppliesToWorkloads) == 0 {
|
||||
// AppliesToWorkloads is empty, the trait can be applied to ANY workload
|
||||
continue
|
||||
@@ -187,14 +194,14 @@ func ValidateTraitAppliableToWorkloadFn(_ context.Context, v ValidatingAppConfig
|
||||
if strings.HasPrefix(applyTo, "*.") && workloadGroup == applyTo[2:] {
|
||||
continue ValidateApplyTo
|
||||
}
|
||||
if workloadType == applyTo ||
|
||||
workloadDefRefName == applyTo {
|
||||
if workloadDefRefName == applyTo ||
|
||||
workloadDefName == applyTo {
|
||||
continue ValidateApplyTo
|
||||
}
|
||||
}
|
||||
allErrs = append(allErrs, fmt.Errorf(errFmtUnappliableTrait,
|
||||
t.traitDefinition.GetObjectKind().GroupVersionKind().String(),
|
||||
c.workloadDefinition.GetObjectKind().GroupVersionKind().String(),
|
||||
t.traitDefinition.GetName(),
|
||||
c.workloadDefinition.GetName(),
|
||||
c.compName, t.traitDefinition.Spec.AppliesToWorkloads))
|
||||
}
|
||||
}
|
||||
|
||||
+30
-24
@@ -9,8 +9,6 @@ import (
|
||||
|
||||
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1alpha2"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/oam"
|
||||
|
||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
||||
@@ -260,13 +258,13 @@ func TestValidateTraitAppliableToWorkloadFn(t *testing.T) {
|
||||
want: nil,
|
||||
},
|
||||
{
|
||||
caseName: "apply trait to workload with specific type",
|
||||
caseName: "apply trait to workload with specific workloadDefinition name",
|
||||
validatingAppConfig: ValidatingAppConfig{
|
||||
validatingComps: []ValidatingComponent{
|
||||
{
|
||||
component: v1alpha2.Component{ObjectMeta: v1.ObjectMeta{
|
||||
Labels: map[string]string{oam.WorkloadTypeLabel: "TestWorkload"},
|
||||
}},
|
||||
workloadDefinition: v1alpha2.WorkloadDefinition{
|
||||
ObjectMeta: v1.ObjectMeta{Name: "TestWorkload"},
|
||||
},
|
||||
validatingTraits: []ValidatingTrait{
|
||||
{traitDefinition: v1alpha2.TraitDefinition{
|
||||
Spec: v1alpha2.TraitDefinitionSpec{
|
||||
@@ -309,9 +307,26 @@ func TestValidateTraitAppliableToWorkloadFn(t *testing.T) {
|
||||
validatingComps: []ValidatingComponent{
|
||||
{
|
||||
workloadDefinition: v1alpha2.WorkloadDefinition{
|
||||
TypeMeta: v1.TypeMeta{
|
||||
APIVersion: "example.com/v1",
|
||||
Kind: "TestWorkload",
|
||||
Spec: v1alpha2.WorkloadDefinitionSpec{
|
||||
Reference: v1alpha2.DefinitionReference{
|
||||
Name: "testworkloads.example.com",
|
||||
},
|
||||
},
|
||||
},
|
||||
validatingTraits: []ValidatingTrait{
|
||||
{traitDefinition: v1alpha2.TraitDefinition{
|
||||
Spec: v1alpha2.TraitDefinitionSpec{
|
||||
AppliesToWorkloads: []string{"*.example.com"},
|
||||
},
|
||||
}},
|
||||
},
|
||||
},
|
||||
{
|
||||
workloadDefinition: v1alpha2.WorkloadDefinition{
|
||||
Spec: v1alpha2.WorkloadDefinitionSpec{
|
||||
Reference: v1alpha2.DefinitionReference{
|
||||
Name: "testworkload2s.example.com",
|
||||
},
|
||||
},
|
||||
},
|
||||
validatingTraits: []ValidatingTrait{
|
||||
@@ -332,28 +347,19 @@ func TestValidateTraitAppliableToWorkloadFn(t *testing.T) {
|
||||
validatingComps: []ValidatingComponent{
|
||||
{
|
||||
compName: "example-comp",
|
||||
component: v1alpha2.Component{ObjectMeta: v1.ObjectMeta{
|
||||
Labels: map[string]string{oam.WorkloadTypeLabel: "TestWorkload0"},
|
||||
}},
|
||||
workloadDefinition: v1alpha2.WorkloadDefinition{
|
||||
TypeMeta: v1.TypeMeta{
|
||||
APIVersion: "unknown.group/v1",
|
||||
Kind: "TestWorkload1",
|
||||
},
|
||||
ObjectMeta: v1.ObjectMeta{Name: "TestWorkload"},
|
||||
Spec: v1alpha2.WorkloadDefinitionSpec{
|
||||
Reference: v1alpha2.DefinitionReference{
|
||||
Name: "TestWorkload2",
|
||||
Name: "TestWorkload1",
|
||||
},
|
||||
},
|
||||
},
|
||||
validatingTraits: []ValidatingTrait{
|
||||
{traitDefinition: v1alpha2.TraitDefinition{
|
||||
TypeMeta: v1.TypeMeta{
|
||||
APIVersion: "example.com/v1",
|
||||
Kind: "TestTrait",
|
||||
},
|
||||
ObjectMeta: v1.ObjectMeta{Name: "TestTrait"},
|
||||
Spec: v1alpha2.TraitDefinitionSpec{
|
||||
AppliesToWorkloads: []string{"example.com", "TestWorkload"},
|
||||
AppliesToWorkloads: []string{"example.com", "TestWorkload2"},
|
||||
},
|
||||
}},
|
||||
},
|
||||
@@ -361,8 +367,8 @@ func TestValidateTraitAppliableToWorkloadFn(t *testing.T) {
|
||||
},
|
||||
},
|
||||
want: []error{fmt.Errorf(errFmtUnappliableTrait,
|
||||
"example.com/v1, Kind=TestTrait", "unknown.group/v1, Kind=TestWorkload1", "example-comp",
|
||||
[]string{"example.com", "TestWorkload"})},
|
||||
"TestTrait", "TestWorkload", "example-comp",
|
||||
[]string{"example.com", "TestWorkload2"})},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user