in pkg/util/platform/platform.go [149:196]
func SetControllerReference(owner, object metav1.Object, scheme *runtime.Scheme, isController bool) error {
runtimeObject, ok := owner.(runtime.Object)
if !ok {
return fmt.Errorf("failed to call SetControllerReference: owner of type %T, should be of type runtime.Object", owner)
}
groupVersionKind, err := apiutil.GVKForObject(runtimeObject, scheme)
if err != nil {
return fmt.Errorf("failed to get Group Version Kind for object: %w", err)
}
// Create a new ref
ref := *newControllerRef(
owner,
schema.GroupVersionKind{
Group: groupVersionKind.Group,
Version: groupVersionKind.Version,
Kind: groupVersionKind.Kind,
},
isController,
)
existingRefs := object.GetOwnerReferences()
foundIndex := -1
for i := 0; i < len(existingRefs); i++ {
if referSameObject(&ref, &existingRefs[i]) {
foundIndex = i
break
}
if existingRefs[i].Controller != nil && *existingRefs[i].Controller {
return newAlreadyOwnedError(object, &existingRefs[i])
}
}
if foundIndex == -1 {
existingRefs = append(existingRefs, ref)
} else {
existingRefs[foundIndex] = ref
}
// Update owner references
object.SetOwnerReferences(existingRefs)
return nil
}