in pkg/utils/common.go [557:600]
func ShouldPropagateObj(informerManager informer.Manager, uObj *unstructured.Unstructured) (bool, error) {
// TODO: add more special handling for different resource kind
switch uObj.GroupVersionKind() {
case corev1.SchemeGroupVersion.WithKind(ConfigMapKind):
// Skip the built-in custom CA certificate created in the namespace
if uObj.GetName() == "kube-root-ca.crt" {
return false, nil
}
case corev1.SchemeGroupVersion.WithKind("ServiceAccount"):
// Skip the default service account created in the namespace
if uObj.GetName() == "default" {
return false, nil
}
case corev1.SchemeGroupVersion.WithKind("Secret"):
// The secret, with type 'kubernetes.io/service-account-token', is created along with `ServiceAccount` should be
// prevented from propagating.
var secret corev1.Secret
if err := runtime.DefaultUnstructuredConverter.FromUnstructured(uObj.Object, &secret); err != nil {
return false, controller.NewUnexpectedBehaviorError(fmt.Errorf("failed to convert a secret object %s in namespace %s: %w", uObj.GetName(), uObj.GetNamespace(), err))
}
if secret.Type == corev1.SecretTypeServiceAccountToken {
return false, nil
}
case corev1.SchemeGroupVersion.WithKind("Endpoints"):
// we assume that all endpoints with the same name of a service is created by the service controller
if _, err := informerManager.Lister(ServiceGVR).ByNamespace(uObj.GetNamespace()).Get(uObj.GetName()); err != nil {
if apierrors.IsNotFound(err) {
// there is no service of the same name as the end point,
// we assume that this endpoint is created by the user
return true, nil
}
return false, controller.NewAPIServerError(true, fmt.Errorf("failed to get the service %s in namespace %s: %w", uObj.GetName(), uObj.GetNamespace(), err))
}
// we find a service of the same name as the endpoint, we assume it's created by the service
return false, nil
case discoveryv1.SchemeGroupVersion.WithKind("EndpointSlice"):
// all EndpointSlice created by the EndpointSlice controller has a managed by label
if _, exist := uObj.GetLabels()[discoveryv1.LabelManagedBy]; exist {
// do not propagate hub cluster generated endpoint slice
return false, nil
}
}
return true, nil
}