snapshots #5
24
cmd/root.go
24
cmd/root.go
@ -56,6 +56,22 @@ var backupSessionCmd = &cobra.Command{
|
|||||||
Short: "All the BackupSession related commands",
|
Short: "All the BackupSession related commands",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var snapshotCmd = &cobra.Command{
|
||||||
|
Use: "snapshot",
|
||||||
|
Short: "All the snapshot related commands",
|
||||||
|
}
|
||||||
|
|
||||||
|
var deleteSnapshotCmd = &cobra.Command{
|
||||||
|
Use: "delete",
|
||||||
|
Short: "Delete a snapshot",
|
||||||
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
name, _ := cmd.Flags().GetString("name")
|
||||||
|
namespace, _ := cmd.Flags().GetString("namespace")
|
||||||
|
snapshotId, _ := cmd.Flags().GetString("snapshot-id")
|
||||||
|
standalone.DeleteSnapshot(namespace, name, snapshotId)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
// rootCmd represents the base command when called without any subcommands
|
// rootCmd represents the base command when called without any subcommands
|
||||||
var rootCmd = &cobra.Command{
|
var rootCmd = &cobra.Command{
|
||||||
Use: "formolcli",
|
Use: "formolcli",
|
||||||
@ -83,8 +99,10 @@ func Execute() {
|
|||||||
func init() {
|
func init() {
|
||||||
rootCmd.AddCommand(backupSessionCmd)
|
rootCmd.AddCommand(backupSessionCmd)
|
||||||
rootCmd.AddCommand(restoreSessionCmd)
|
rootCmd.AddCommand(restoreSessionCmd)
|
||||||
|
rootCmd.AddCommand(snapshotCmd)
|
||||||
backupSessionCmd.AddCommand(createBackupSessionCmd)
|
backupSessionCmd.AddCommand(createBackupSessionCmd)
|
||||||
restoreSessionCmd.AddCommand(startRestoreSessionCmd)
|
restoreSessionCmd.AddCommand(startRestoreSessionCmd)
|
||||||
|
snapshotCmd.AddCommand(deleteSnapshotCmd)
|
||||||
rootCmd.AddCommand(startServerCmd)
|
rootCmd.AddCommand(startServerCmd)
|
||||||
createBackupSessionCmd.Flags().String("namespace", "", "The namespace of the BackupConfiguration containing the information about the backup.")
|
createBackupSessionCmd.Flags().String("namespace", "", "The namespace of the BackupConfiguration containing the information about the backup.")
|
||||||
createBackupSessionCmd.Flags().String("name", "", "The name of the BackupConfiguration containing the information about the backup.")
|
createBackupSessionCmd.Flags().String("name", "", "The name of the BackupConfiguration containing the information about the backup.")
|
||||||
@ -96,4 +114,10 @@ func init() {
|
|||||||
startRestoreSessionCmd.MarkFlagRequired("namespace")
|
startRestoreSessionCmd.MarkFlagRequired("namespace")
|
||||||
startRestoreSessionCmd.MarkFlagRequired("name")
|
startRestoreSessionCmd.MarkFlagRequired("name")
|
||||||
startRestoreSessionCmd.MarkFlagRequired("target-name")
|
startRestoreSessionCmd.MarkFlagRequired("target-name")
|
||||||
|
deleteSnapshotCmd.Flags().String("snapshot-id", "", "The snapshot id to delete")
|
||||||
|
deleteSnapshotCmd.Flags().String("namespace", "", "The namespace of the BackupConfiguration containing the information about the backup.")
|
||||||
|
deleteSnapshotCmd.Flags().String("name", "", "The name of the BackupConfiguration containing the information about the backup.")
|
||||||
|
deleteSnapshotCmd.MarkFlagRequired("snapshot-id")
|
||||||
|
deleteSnapshotCmd.MarkFlagRequired("namespace")
|
||||||
|
deleteSnapshotCmd.MarkFlagRequired("name")
|
||||||
}
|
}
|
||||||
|
|||||||
@ -67,7 +67,7 @@ func (r *BackupSessionReconciler) Reconcile(ctx context.Context, req ctrl.Reques
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Do preliminary checks with the repository
|
// Do preliminary checks with the repository
|
||||||
if err = r.setResticEnv(backupConf); err != nil {
|
if err = r.SetResticEnv(backupConf); err != nil {
|
||||||
r.Log.Error(err, "unable to set restic env")
|
r.Log.Error(err, "unable to set restic env")
|
||||||
return ctrl.Result{}, err
|
return ctrl.Result{}, err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -68,7 +68,7 @@ func (r *RestoreSessionReconciler) Reconcile(ctx context.Context, req ctrl.Reque
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Do preliminary checks with the repository
|
// Do preliminary checks with the repository
|
||||||
if err = r.setResticEnv(backupConf); err != nil {
|
if err = r.SetResticEnv(backupConf); err != nil {
|
||||||
r.Log.Error(err, "unable to set restic env")
|
r.Log.Error(err, "unable to set restic env")
|
||||||
return ctrl.Result{}, err
|
return ctrl.Result{}, err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -69,7 +69,7 @@ func (s Session) getResticEnv(backupConf formolv1alpha1.BackupConfiguration) (en
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s Session) setResticEnv(backupConf formolv1alpha1.BackupConfiguration) error {
|
func (s Session) SetResticEnv(backupConf formolv1alpha1.BackupConfiguration) error {
|
||||||
envs, err := s.getResticEnv(backupConf)
|
envs, err := s.getResticEnv(backupConf)
|
||||||
for _, env := range envs {
|
for _, env := range envs {
|
||||||
os.Setenv(env.Name, env.Value)
|
os.Setenv(env.Name, env.Value)
|
||||||
@ -95,9 +95,8 @@ func (s Session) CheckRepo() error {
|
|||||||
|
|
||||||
func (s Session) getSecretData(name string) map[string][]byte {
|
func (s Session) getSecretData(name string) map[string][]byte {
|
||||||
secret := corev1.Secret{}
|
secret := corev1.Secret{}
|
||||||
namespace := os.Getenv(formolv1alpha1.POD_NAMESPACE)
|
|
||||||
if err := s.Get(s.Context, client.ObjectKey{
|
if err := s.Get(s.Context, client.ObjectKey{
|
||||||
Namespace: namespace,
|
Namespace: s.Namespace,
|
||||||
Name: name,
|
Name: name,
|
||||||
}, &secret); err != nil {
|
}, &secret); err != nil {
|
||||||
s.Log.Error(err, "unable to get Secret", "Secret", name)
|
s.Log.Error(err, "unable to get Secret", "Secret", name)
|
||||||
|
|||||||
2
formol
2
formol
@ -1 +1 @@
|
|||||||
Subproject commit e73ef7c3f24ee612421b62963f443ff1a1e790dc
|
Subproject commit f890962221bf05fb54c9d46d839957a59d644cc8
|
||||||
@ -141,3 +141,26 @@ func CreateBackupSession(ref corev1.ObjectReference) {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func DeleteSnapshot(namespace string, name string, snapshotId string) {
|
||||||
|
log := session.Log.WithName("DeleteSnapshot")
|
||||||
|
session.Namespace = namespace
|
||||||
|
backupConf := formolv1alpha1.BackupConfiguration{}
|
||||||
|
if err := session.Get(session.Context, client.ObjectKey{
|
||||||
|
Namespace: namespace,
|
||||||
|
Name: name,
|
||||||
|
}, &backupConf); err != nil {
|
||||||
|
log.Error(err, "unable to get the BackupConf")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := session.SetResticEnv(backupConf); err != nil {
|
||||||
|
log.Error(err, "unable to set the restic env")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.V(0).Info("deleting restic snapshot", "snapshotId", snapshotId)
|
||||||
|
cmd := exec.Command(controllers.RESTIC_EXEC, "forget", "--prune", snapshotId)
|
||||||
|
_, err := cmd.CombinedOutput()
|
||||||
|
if err != nil {
|
||||||
|
log.Error(err, "unable to delete snapshot", "snapshoId", snapshotId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user