Fix ownerRef controller validate err

This commit is contained in:
astraw99 2022-09-04 10:37:57 +08:00
parent e7192a4955
commit 69dbc74417
2 changed files with 10 additions and 9 deletions

View File

@ -91,15 +91,16 @@ func validateOwnerReference(ownerReference metav1.OwnerReference, fldPath *field
// ValidateOwnerReferences validates that a set of owner references are correctly defined. // ValidateOwnerReferences validates that a set of owner references are correctly defined.
func ValidateOwnerReferences(ownerReferences []metav1.OwnerReference, fldPath *field.Path) field.ErrorList { func ValidateOwnerReferences(ownerReferences []metav1.OwnerReference, fldPath *field.Path) field.ErrorList {
allErrs := field.ErrorList{} allErrs := field.ErrorList{}
controllerName := "" firstControllerName := ""
for _, ref := range ownerReferences { for _, ref := range ownerReferences {
allErrs = append(allErrs, validateOwnerReference(ref, fldPath)...) allErrs = append(allErrs, validateOwnerReference(ref, fldPath)...)
if ref.Controller != nil && *ref.Controller { if ref.Controller != nil && *ref.Controller {
if controllerName != "" { curControllerName := ref.Kind + "/" + ref.Name
if firstControllerName != "" {
allErrs = append(allErrs, field.Invalid(fldPath, ownerReferences, allErrs = append(allErrs, field.Invalid(fldPath, ownerReferences,
fmt.Sprintf("Only one reference can have Controller set to true. Found \"true\" in references for %v and %v", controllerName, ref.Name))) fmt.Sprintf("Only one reference can have Controller set to true. Found \"true\" in references for %v and %v", firstControllerName, curControllerName)))
} else { } else {
controllerName = ref.Name firstControllerName = curControllerName
} }
} }
} }

View File

@ -163,34 +163,34 @@ func TestValidateObjectMetaOwnerReferences(t *testing.T) {
ownerReferences: []metav1.OwnerReference{ ownerReferences: []metav1.OwnerReference{
{ {
APIVersion: "customresourceVersion", APIVersion: "customresourceVersion",
Kind: "customresourceKind", Kind: "customresourceKind1",
Name: "name", Name: "name",
UID: "1", UID: "1",
Controller: &falseVar, Controller: &falseVar,
}, },
{ {
APIVersion: "customresourceVersion", APIVersion: "customresourceVersion",
Kind: "customresourceKind", Kind: "customresourceKind2",
Name: "name", Name: "name",
UID: "2", UID: "2",
Controller: &trueVar, Controller: &trueVar,
}, },
{ {
APIVersion: "customresourceVersion", APIVersion: "customresourceVersion",
Kind: "customresourceKind", Kind: "customresourceKind3",
Name: "name", Name: "name",
UID: "3", UID: "3",
Controller: &trueVar, Controller: &trueVar,
}, },
{ {
APIVersion: "customresourceVersion", APIVersion: "customresourceVersion",
Kind: "customresourceKind", Kind: "customresourceKind4",
Name: "name", Name: "name",
UID: "4", UID: "4",
}, },
}, },
expectError: true, expectError: true,
expectedErrorMessage: "Only one reference can have Controller set to true", expectedErrorMessage: "Only one reference can have Controller set to true. Found \"true\" in references for customresourceKind2/name and customresourceKind3/name",
}, },
} }