snapshots #10
@ -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{
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user