in internal/manifests/mutate.go [50:164]
func MutateFuncFor(existing, desired client.Object) controllerutil.MutateFn {
return func() error {
// Get the existing annotations and override any conflicts with the desired annotations
// This will preserve any annotations on the existing set.
existingAnnotations := existing.GetAnnotations()
if err := mergeWithOverride(&existingAnnotations, desired.GetAnnotations()); err != nil {
return err
}
existing.SetAnnotations(existingAnnotations)
// Get the existing labels and override any conflicts with the desired labels
// This will preserve any labels on the existing set.
existingLabels := existing.GetLabels()
if err := mergeWithOverride(&existingLabels, desired.GetLabels()); err != nil {
return err
}
existing.SetLabels(existingLabels)
if ownerRefs := desired.GetOwnerReferences(); len(ownerRefs) > 0 {
existing.SetOwnerReferences(ownerRefs)
}
switch existing.(type) {
case *corev1.ConfigMap:
cm := existing.(*corev1.ConfigMap)
wantCm := desired.(*corev1.ConfigMap)
mutateConfigMap(cm, wantCm)
case *corev1.Service:
svc := existing.(*corev1.Service)
wantSvc := desired.(*corev1.Service)
return mutateService(svc, wantSvc)
case *corev1.ServiceAccount:
sa := existing.(*corev1.ServiceAccount)
wantSa := desired.(*corev1.ServiceAccount)
mutateServiceAccount(sa, wantSa)
case *rbacv1.ClusterRole:
cr := existing.(*rbacv1.ClusterRole)
wantCr := desired.(*rbacv1.ClusterRole)
mutateClusterRole(cr, wantCr)
case *rbacv1.ClusterRoleBinding:
crb := existing.(*rbacv1.ClusterRoleBinding)
wantCrb := desired.(*rbacv1.ClusterRoleBinding)
mutateClusterRoleBinding(crb, wantCrb)
case *rbacv1.Role:
r := existing.(*rbacv1.Role)
wantR := desired.(*rbacv1.Role)
mutateRole(r, wantR)
case *rbacv1.RoleBinding:
rb := existing.(*rbacv1.RoleBinding)
wantRb := desired.(*rbacv1.RoleBinding)
mutateRoleBinding(rb, wantRb)
case *appsv1.Deployment:
dpl := existing.(*appsv1.Deployment)
wantDpl := desired.(*appsv1.Deployment)
return mutateDeployment(dpl, wantDpl)
case *appsv1.DaemonSet:
dpl := existing.(*appsv1.DaemonSet)
wantDpl := desired.(*appsv1.DaemonSet)
return mutateDaemonset(dpl, wantDpl)
case *appsv1.StatefulSet:
sts := existing.(*appsv1.StatefulSet)
wantSts := desired.(*appsv1.StatefulSet)
return mutateStatefulSet(sts, wantSts)
case *monitoringv1.ServiceMonitor:
svcMonitor := existing.(*monitoringv1.ServiceMonitor)
wantSvcMonitor := desired.(*monitoringv1.ServiceMonitor)
mutateServiceMonitor(svcMonitor, wantSvcMonitor)
case *monitoringv1.PodMonitor:
podMonitor := existing.(*monitoringv1.PodMonitor)
wantPodMonitor := desired.(*monitoringv1.PodMonitor)
mutatePodMonitor(podMonitor, wantPodMonitor)
case *networkingv1.Ingress:
ing := existing.(*networkingv1.Ingress)
wantIng := desired.(*networkingv1.Ingress)
mutateIngress(ing, wantIng)
case *autoscalingv2.HorizontalPodAutoscaler:
existingHPA := existing.(*autoscalingv2.HorizontalPodAutoscaler)
desiredHPA := desired.(*autoscalingv2.HorizontalPodAutoscaler)
mutateAutoscalingHPA(existingHPA, desiredHPA)
case *policyV1.PodDisruptionBudget:
existingPDB := existing.(*policyV1.PodDisruptionBudget)
desiredPDB := desired.(*policyV1.PodDisruptionBudget)
mutatePolicyV1PDB(existingPDB, desiredPDB)
case *routev1.Route:
rt := existing.(*routev1.Route)
wantRt := desired.(*routev1.Route)
mutateRoute(rt, wantRt)
case *corev1.Secret:
pr := existing.(*corev1.Secret)
wantPr := desired.(*corev1.Secret)
mutateSecret(pr, wantPr)
default:
t := reflect.TypeOf(existing).String()
return fmt.Errorf("missing mutate implementation for resource type: %s", t)
}
return nil
}
}