label has been added to the target pod to allow pod anti affinity

This commit is contained in:
Jean-Marc ANDRE 2023-04-27 15:42:26 +02:00
parent 9ed5e3aea7
commit 92ea7f3872
2 changed files with 18 additions and 3 deletions

View File

@ -41,17 +41,25 @@ const (
JobKind BackupType = "Job" 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 { switch kind {
case Deployment: case Deployment:
deployment := appsv1.Deployment{} deployment := appsv1.Deployment{}
targetObject = &deployment targetObject = &deployment
targetPodSpec = &deployment.Spec.Template.Spec targetPodSpec = &deployment.Spec.Template.Spec
targetPodMeta = &deployment.Spec.Template.ObjectMeta
case StatefulSet: case StatefulSet:
statefulSet := appsv1.StatefulSet{} statefulSet := appsv1.StatefulSet{}
targetObject = &statefulSet targetObject = &statefulSet
targetPodSpec = &statefulSet.Spec.Template.Spec targetPodSpec = &statefulSet.Spec.Template.Spec
targetPodMeta = &statefulSet.Spec.Template.ObjectMeta
case Pod:
pod := corev1.Pod{}
targetObject = &pod
targetPodSpec = &pod.Spec
targetPodMeta = &pod.ObjectMeta
} }
return return
@ -60,6 +68,7 @@ func GetTargetObjects(kind TargetKind) (targetObject client.Object, targetPodSpe
const ( const (
BACKUP_PREFIX_PATH = `backup` BACKUP_PREFIX_PATH = `backup`
FORMOL_SHARED_VOLUME = `formol-shared` FORMOL_SHARED_VOLUME = `formol-shared`
FORMOL_LABEL = `formol-target`
) )
type Step struct { type Step struct {

View File

@ -162,7 +162,7 @@ func (r *BackupConfigurationReconciler) DeleteSidecar(backupConf formolv1alpha1.
} }
r.Log.V(1).Info("Got Repository", "repo", repo) r.Log.V(1).Info("Got Repository", "repo", repo)
for _, target := range backupConf.Spec.Targets { 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{ if err := r.Get(r.Context, client.ObjectKey{
Namespace: backupConf.Namespace, Namespace: backupConf.Namespace,
Name: target.TargetName, Name: target.TargetName,
@ -170,6 +170,9 @@ func (r *BackupConfigurationReconciler) DeleteSidecar(backupConf formolv1alpha1.
r.Log.Error(err, "cannot get target", "target", target.TargetName) r.Log.Error(err, "cannot get target", "target", target.TargetName)
return err return err
} }
if _, ok := targetPodMeta.Labels[formolv1alpha1.FORMOL_LABEL]; ok {
delete(targetPodMeta.Labels, formolv1alpha1.FORMOL_LABEL)
}
restoreContainers := []corev1.Container{} restoreContainers := []corev1.Container{}
for _, container := range targetPodSpec.Containers { for _, container := range targetPodSpec.Containers {
if container.Name == formolv1alpha1.SIDECARCONTAINER_NAME { if container.Name == formolv1alpha1.SIDECARCONTAINER_NAME {
@ -219,7 +222,7 @@ func (r *BackupConfigurationReconciler) addSidecar(backupConf formolv1alpha1.Bac
return err return err
} }
r.Log.V(1).Info("Got Repository", "repo", repo) 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{ if err := r.Get(r.Context, client.ObjectKey{
Namespace: backupConf.Namespace, Namespace: backupConf.Namespace,
Name: target.TargetName, Name: target.TargetName,
@ -227,6 +230,9 @@ func (r *BackupConfigurationReconciler) addSidecar(backupConf formolv1alpha1.Bac
r.Log.Error(err, "cannot get target", "target", target.TargetName) r.Log.Error(err, "cannot get target", "target", target.TargetName)
return err return err
} }
if _, ok := targetPodMeta.Labels[formolv1alpha1.FORMOL_LABEL]; !ok {
targetPodMeta.Labels[formolv1alpha1.FORMOL_LABEL] = target.TargetName
}
hasSidecar := func(podSpec *corev1.PodSpec) int { hasSidecar := func(podSpec *corev1.PodSpec) int {
for i, container := range podSpec.Containers { for i, container := range podSpec.Containers {
if container.Name == formolv1alpha1.SIDECARCONTAINER_NAME { if container.Name == formolv1alpha1.SIDECARCONTAINER_NAME {