all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pbs-devel] [PATCH proxmox-backup] close #4763: client: added command to forget backup group
@ 2023-08-29 11:13 Gabriel Goller
  2023-08-29 11:13 ` [pbs-devel] [PATCH proxmox] router: cli: added `ask_for_confirmation` helper Gabriel Goller
  2023-08-30  7:37 ` [pbs-devel] [PATCH proxmox-backup] close #4763: client: added command to forget backup group Fiona Ebner
  0 siblings, 2 replies; 5+ messages in thread
From: Gabriel Goller @ 2023-08-29 11:13 UTC (permalink / raw)
  To: pbs-devel

Added the command `proxmox-backup-client group forget <group>` so
that we can forget (delete) whole groups with all the containing
snapshots. As this is quite dangerous, we added a prompt, so the
user has to confirm the operation.
Fixed paths for local dependencies in Cargo.toml.

Signed-off-by: Gabriel Goller <g.goller@proxmox.com>
---
 Cargo.toml                         |  4 +-
 proxmox-backup-client/src/group.rs | 68 ++++++++++++++++++++++++++++++
 proxmox-backup-client/src/main.rs  |  4 +-
 3 files changed, 73 insertions(+), 3 deletions(-)
 create mode 100644 proxmox-backup-client/src/group.rs

diff --git a/Cargo.toml b/Cargo.toml
index c7773f0e..e0f12806 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -264,8 +264,8 @@ proxmox-rrd.workspace = true
 #proxmox-sortable-macro = { path = "../proxmox/proxmox-sortable-macro" }
 #proxmox-human-byte = { path = "../proxmox/proxmox-human-byte" }
 
-#proxmox-apt = { path = "../proxmox-apt" }
-#proxmox-openid = { path = "../proxmox-openid-rs" }
+#proxmox-apt = { path = "../proxmox/proxmox-apt" }
+#proxmox-openid = { path = "../proxmox/proxmox-openid" }
 #pathpatterns = {path = "../pathpatterns" }
 
 #pxar = { path = "../pxar" }
diff --git a/proxmox-backup-client/src/group.rs b/proxmox-backup-client/src/group.rs
new file mode 100644
index 00000000..84b73b67
--- /dev/null
+++ b/proxmox-backup-client/src/group.rs
@@ -0,0 +1,68 @@
+use anyhow::{bail, Error};
+use pbs_api_types::{BackupGroup, BackupNamespace};
+use pbs_client::tools::{connect, extract_repository_from_value};
+use proxmox_router::cli::{ask_for_confirmation, CliCommand, CliCommandMap};
+use proxmox_schema::api;
+use serde_json::Value;
+
+use crate::{
+    complete_backup_group, complete_namespace, complete_repository, merge_group_into,
+    REPO_URL_SCHEMA,
+};
+
+pub fn group_mgtm_cli() -> CliCommandMap {
+    CliCommandMap::new().insert(
+        "forget",
+        CliCommand::new(&API_METHOD_FORGET_GROUP)
+            .arg_param(&["group"])
+            .completion_cb("ns", complete_namespace)
+            .completion_cb("repository", complete_repository)
+            .completion_cb("group", complete_backup_group),
+    )
+}
+
+#[api(
+    input: {
+        properties: {
+            group: {
+                type: String,
+                description: "Backup group",
+            },
+            repository: {
+                schema: REPO_URL_SCHEMA,
+                optional: true,
+            },
+            ns: {
+                type: BackupNamespace,
+                optional: true,
+            },
+        }
+    }
+)]
+/// Forget (remove) backup snapshots.
+async fn forget_group(group: String, param: Value) -> Result<Value, Error> {
+    let backup_group: BackupGroup = group.parse()?;
+    let repo = extract_repository_from_value(&param)?;
+    let client = connect(&repo)?;
+
+    let mut api_params = param;
+    merge_group_into(api_params.as_object_mut().unwrap(), backup_group.clone());
+
+    let path = format!("api2/json/admin/datastore/{}/snapshots", repo.store());
+    let result = client.get(&path, Some(api_params.clone())).await?;
+    let snapshots = result["data"].as_array().unwrap().len();
+    if snapshots == 0 {
+        bail!("Backup group doesn't exist.");
+    }
+
+    ask_for_confirmation(format!(
+        "Delete group \"{}\" with {} snapshots?",
+        backup_group, snapshots
+    ))?;
+
+    let path = format!("api2/json/admin/datastore/{}/groups", repo.store());
+    let _ = client.delete(&path, Some(api_params)).await?;
+
+    println!("Successfully deleted group!");
+    Ok(Value::Null)
+}
diff --git a/proxmox-backup-client/src/main.rs b/proxmox-backup-client/src/main.rs
index 1a13291a..76d45b84 100644
--- a/proxmox-backup-client/src/main.rs
+++ b/proxmox-backup-client/src/main.rs
@@ -72,6 +72,8 @@ mod catalog;
 pub use catalog::*;
 mod snapshot;
 pub use snapshot::*;
+mod group;
+pub use group::*;
 pub mod key;
 pub mod namespace;
 
@@ -1606,7 +1608,6 @@ async fn prune(
     }
 
     format_and_print_result_full(&mut data, return_type, &output_format, &options);
-
     Ok(Value::Null)
 }
 
@@ -1783,6 +1784,7 @@ fn main() {
         .insert("benchmark", benchmark_cmd_def)
         .insert("change-owner", change_owner_cmd_def)
         .insert("namespace", namespace::cli_map())
+        .insert("group", group_mgtm_cli())
         .alias(&["files"], &["snapshot", "files"])
         .alias(&["forget"], &["snapshot", "forget"])
         .alias(&["upload-log"], &["snapshot", "upload-log"])
-- 
2.39.2





^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-08-30  8:58 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-29 11:13 [pbs-devel] [PATCH proxmox-backup] close #4763: client: added command to forget backup group Gabriel Goller
2023-08-29 11:13 ` [pbs-devel] [PATCH proxmox] router: cli: added `ask_for_confirmation` helper Gabriel Goller
2023-08-30  7:37 ` [pbs-devel] [PATCH proxmox-backup] close #4763: client: added command to forget backup group Fiona Ebner
2023-08-30  7:41   ` Gabriel Goller
2023-08-30  8:58     ` Gabriel Goller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal