public inbox for pbs-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [pbs-devel] [PATCH proxmox-backup v3] close #4763: client: added command to forget backup group
@ 2023-09-08 11:44 Gabriel Goller
  2023-09-08 11:44 ` [pbs-devel] [PATCH proxmox v3] router: cli: added `ask_for_confirmation` helper Gabriel Goller
  2023-12-07 12:51 ` [pbs-devel] [PATCH proxmox-backup v3] close #4763: client: added command to forget backup group Gabriel Goller
  0 siblings, 2 replies; 6+ messages in thread
From: Gabriel Goller @ 2023-09-08 11:44 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>
---
 proxmox-backup-client/src/group.rs | 66 ++++++++++++++++++++++++++++++
 proxmox-backup-client/src/main.rs  |  3 ++
 2 files changed, 69 insertions(+)
 create mode 100644 proxmox-backup-client/src/group.rs

diff --git a/proxmox-backup-client/src/group.rs b/proxmox-backup-client/src/group.rs
new file mode 100644
index 00000000..93b97a59
--- /dev/null
+++ b/proxmox-backup-client/src/group.rs
@@ -0,0 +1,66 @@
+use anyhow::Error;
+use serde_json::Value;
+
+use proxmox_router::cli::{ask_for_confirmation, CliCommand, CliCommandMap};
+use proxmox_schema::api;
+
+use pbs_api_types::{BackupGroup, BackupNamespace};
+use pbs_client::tools::{connect, extract_repository_from_value};
+use crate::{
+    complete_backup_group, complete_namespace, complete_repository, merge_group_into,
+    REPO_URL_SCHEMA,
+};
+
+pub fn group_mgmt_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();
+
+    ask_for_confirmation(format!(
+        "Delete group \"{}\" with {} snapshot(s)?",
+        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..975682de 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;
 
@@ -1783,6 +1785,7 @@ fn main() {
         .insert("benchmark", benchmark_cmd_def)
         .insert("change-owner", change_owner_cmd_def)
         .insert("namespace", namespace::cli_map())
+        .insert("group", group_mgmt_cli())
         .alias(&["files"], &["snapshot", "files"])
         .alias(&["forget"], &["snapshot", "forget"])
         .alias(&["upload-log"], &["snapshot", "upload-log"])
-- 
2.39.2





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

end of thread, other threads:[~2023-12-07 12:51 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-08 11:44 [pbs-devel] [PATCH proxmox-backup v3] close #4763: client: added command to forget backup group Gabriel Goller
2023-09-08 11:44 ` [pbs-devel] [PATCH proxmox v3] router: cli: added `ask_for_confirmation` helper Gabriel Goller
2023-09-27 10:13   ` Wolfgang Bumiller
2023-09-27 10:48     ` Fabian Grünbichler
2023-09-27 14:45       ` Gabriel Goller
2023-12-07 12:51 ` [pbs-devel] [PATCH proxmox-backup v3] close #4763: client: added command to forget backup group Gabriel Goller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal