snapshots #10

Merged
jandre merged 69 commits from snapshots into master 2023-04-24 06:49:52 +00:00
Showing only changes of commit 2ac8bc2c71 - Show all commits

View File

@ -130,6 +130,36 @@ func (r *BackupConfigurationReconciler) AddCronJob(backupConf formolv1alpha1.Bac
} }
} }
func (r *BackupConfigurationReconciler) getTargetObjects(kind formolv1alpha1.TargetKind, namespace string, name string) (targetObject client.Object, targetPodSpec *corev1.PodSpec, err error) {
switch kind {
case formolv1alpha1.Deployment:
deployment := appsv1.Deployment{}
if err = r.Get(r.Context, client.ObjectKey{
Namespace: namespace,
Name: name,
}, &deployment); err != nil {
r.Log.Error(err, "cannot get deployment", "Deployment", name)
return
}
targetObject = &deployment
targetPodSpec = &deployment.Spec.Template.Spec
case formolv1alpha1.StatefulSet:
statefulSet := appsv1.StatefulSet{}
if err = r.Get(r.Context, client.ObjectKey{
Namespace: namespace,
Name: name,
}, &statefulSet); err != nil {
r.Log.Error(err, "cannot get StatefulSet", "StatefulSet", name)
return
}
targetObject = &statefulSet
targetPodSpec = &statefulSet.Spec.Template.Spec
}
return
}
func (r *BackupConfigurationReconciler) DeleteSidecar(backupConf formolv1alpha1.BackupConfiguration) error { func (r *BackupConfigurationReconciler) DeleteSidecar(backupConf formolv1alpha1.BackupConfiguration) error {
removeTags := func(podSpec *corev1.PodSpec, target formolv1alpha1.Target) { removeTags := func(podSpec *corev1.PodSpec, target formolv1alpha1.Target) {
for i, container := range podSpec.Containers { for i, container := range podSpec.Containers {
@ -160,33 +190,10 @@ 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 {
var targetObject client.Object targetObject, targetPodSpec, err := r.getTargetObjects(target.TargetKind, backupConf.Namespace, target.TargetName)
var targetPodSpec *corev1.PodSpec if err != nil {
switch target.TargetKind { r.Log.Error(err, "unable to get target objects")
case formolv1alpha1.Deployment: return err
deployment := appsv1.Deployment{}
if err := r.Get(r.Context, client.ObjectKey{
Namespace: backupConf.Namespace,
Name: target.TargetName,
}, &deployment); err != nil {
r.Log.Error(err, "cannot get deployment", "Deployment", target.TargetName)
return err
}
targetObject = &deployment
targetPodSpec = &deployment.Spec.Template.Spec
case formolv1alpha1.StatefulSet:
statefulSet := appsv1.StatefulSet{}
if err := r.Get(r.Context, client.ObjectKey{
Namespace: backupConf.Namespace,
Name: target.TargetName,
}, &statefulSet); err != nil {
r.Log.Error(err, "cannot get deployment", "Deployment", target.TargetName)
return err
}
targetObject = &statefulSet
targetPodSpec = &statefulSet.Spec.Template.Spec
} }
restoreContainers := []corev1.Container{} restoreContainers := []corev1.Container{}
for _, container := range targetPodSpec.Containers { for _, container := range targetPodSpec.Containers {
@ -218,7 +225,7 @@ func (r *BackupConfigurationReconciler) DeleteSidecar(backupConf formolv1alpha1.
} }
targetPodSpec.Volumes = restoreVolumes targetPodSpec.Volumes = restoreVolumes
removeTags(targetPodSpec, target) removeTags(targetPodSpec, target)
if err := r.Update(r.Context, targetObject); err != nil { if err = r.Update(r.Context, targetObject); err != nil {
r.Log.Error(err, "unable to remove sidecar", "targetObject", targetObject) r.Log.Error(err, "unable to remove sidecar", "targetObject", targetObject)
return err return err
} }
@ -269,31 +276,10 @@ func (r *BackupConfigurationReconciler) addSidecar(backupConf formolv1alpha1.Bac
Privileged: func() *bool { b := true; return &b }(), Privileged: func() *bool { b := true; return &b }(),
}, },
} }
var targetObject client.Object targetObject, targetPodSpec, err := r.getTargetObjects(target.TargetKind, backupConf.Namespace, target.TargetName)
var targetPodSpec *corev1.PodSpec if err != nil {
switch target.TargetKind { r.Log.Error(err, "unable to get target objects")
case formolv1alpha1.Deployment: return err
deployment := appsv1.Deployment{}
if err = r.Get(r.Context, client.ObjectKey{
Namespace: backupConf.Namespace,
Name: target.TargetName,
}, &deployment); err != nil {
r.Log.Error(err, "cannot get deployment", "Deployment", target.TargetName)
return
}
targetObject = &deployment
targetPodSpec = &deployment.Spec.Template.Spec
case formolv1alpha1.StatefulSet:
statefulSet := appsv1.StatefulSet{}
if err = r.Get(r.Context, client.ObjectKey{
Namespace: backupConf.Namespace,
Name: target.TargetName,
}, &statefulSet); err != nil {
r.Log.Error(err, "cannot get deployment", "Deployment", target.TargetName)
return
}
targetObject = &statefulSet
targetPodSpec = &statefulSet.Spec.Template.Spec
} }
if !hasSidecar(targetPodSpec) { if !hasSidecar(targetPodSpec) {
if err = r.createRBACSidecar(corev1.ServiceAccount{ if err = r.createRBACSidecar(corev1.ServiceAccount{