diff --git a/api/v1alpha1/backupconfiguration_types.go b/api/v1alpha1/backupconfiguration_types.go index a00afa1..206f949 100644 --- a/api/v1alpha1/backupconfiguration_types.go +++ b/api/v1alpha1/backupconfiguration_types.go @@ -41,17 +41,25 @@ const ( JobKind BackupType = "Job" ) -func GetTargetObjects(kind TargetKind) (targetObject client.Object, targetPodSpec *corev1.PodSpec) { +func GetTargetObjects(kind TargetKind) (targetObject client.Object, targetPodSpec *corev1.PodSpec, targetPodMeta *metav1.ObjectMeta) { switch kind { case Deployment: deployment := appsv1.Deployment{} targetObject = &deployment targetPodSpec = &deployment.Spec.Template.Spec + targetPodMeta = &deployment.Spec.Template.ObjectMeta case StatefulSet: statefulSet := appsv1.StatefulSet{} targetObject = &statefulSet targetPodSpec = &statefulSet.Spec.Template.Spec + targetPodMeta = &statefulSet.Spec.Template.ObjectMeta + + case Pod: + pod := corev1.Pod{} + targetObject = &pod + targetPodSpec = &pod.Spec + targetPodMeta = &pod.ObjectMeta } return @@ -60,6 +68,7 @@ func GetTargetObjects(kind TargetKind) (targetObject client.Object, targetPodSpe const ( BACKUP_PREFIX_PATH = `backup` FORMOL_SHARED_VOLUME = `formol-shared` + FORMOL_LABEL = `formol-target` ) type Step struct { diff --git a/controllers/backupconfiguration_controller_helpers.go b/controllers/backupconfiguration_controller_helpers.go index b6e49bc..9f719f2 100644 --- a/controllers/backupconfiguration_controller_helpers.go +++ b/controllers/backupconfiguration_controller_helpers.go @@ -162,7 +162,7 @@ func (r *BackupConfigurationReconciler) DeleteSidecar(backupConf formolv1alpha1. } r.Log.V(1).Info("Got Repository", "repo", repo) for _, target := range backupConf.Spec.Targets { - targetObject, targetPodSpec := formolv1alpha1.GetTargetObjects(target.TargetKind) + targetObject, targetPodSpec, targetPodMeta := formolv1alpha1.GetTargetObjects(target.TargetKind) if err := r.Get(r.Context, client.ObjectKey{ Namespace: backupConf.Namespace, Name: target.TargetName, @@ -170,6 +170,9 @@ func (r *BackupConfigurationReconciler) DeleteSidecar(backupConf formolv1alpha1. r.Log.Error(err, "cannot get target", "target", target.TargetName) return err } + if _, ok := targetPodMeta.Labels[formolv1alpha1.FORMOL_LABEL]; ok { + delete(targetPodMeta.Labels, formolv1alpha1.FORMOL_LABEL) + } restoreContainers := []corev1.Container{} for _, container := range targetPodSpec.Containers { if container.Name == formolv1alpha1.SIDECARCONTAINER_NAME { @@ -219,7 +222,7 @@ func (r *BackupConfigurationReconciler) addSidecar(backupConf formolv1alpha1.Bac return err } r.Log.V(1).Info("Got Repository", "repo", repo) - targetObject, targetPodSpec := formolv1alpha1.GetTargetObjects(target.TargetKind) + targetObject, targetPodSpec, targetPodMeta := formolv1alpha1.GetTargetObjects(target.TargetKind) if err := r.Get(r.Context, client.ObjectKey{ Namespace: backupConf.Namespace, Name: target.TargetName, @@ -227,6 +230,9 @@ func (r *BackupConfigurationReconciler) addSidecar(backupConf formolv1alpha1.Bac r.Log.Error(err, "cannot get target", "target", target.TargetName) return err } + if _, ok := targetPodMeta.Labels[formolv1alpha1.FORMOL_LABEL]; !ok { + targetPodMeta.Labels[formolv1alpha1.FORMOL_LABEL] = target.TargetName + } hasSidecar := func(podSpec *corev1.PodSpec) int { for i, container := range podSpec.Containers { if container.Name == formolv1alpha1.SIDECARCONTAINER_NAME {