]> git.proxmox.com Git - proxmox-backup.git/commitdiff
src/bin/proxmox-backup-client.rs: correctly format prune result list.
authorDietmar Maurer <dietmar@proxmox.com>
Tue, 5 May 2020 04:45:37 +0000 (06:45 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Tue, 5 May 2020 04:45:37 +0000 (06:45 +0200)
src/api2/admin/datastore.rs
src/api2/types.rs
src/bin/proxmox-backup-client.rs

index fa7aacd80038f28af77b4905dd2651f32410a697..3203734cda81dde454bb2e9333552f7fd22b404e 100644 (file)
@@ -455,6 +455,11 @@ macro_rules! add_common_prune_prameters {
     }
 }
 
+pub const API_RETURN_SCHEMA_PRUNE: Schema = ArraySchema::new(
+    "Returns the list of snapshots and a flag indicating if there are kept or removed.",
+    PruneListItem::API_SCHEMA
+).schema();
+
 const API_METHOD_PRUNE: ApiMethod = ApiMethod::new(
     &ApiHandler::Sync(&prune),
     &ObjectSchema::new(
@@ -469,8 +474,9 @@ const API_METHOD_PRUNE: ApiMethod = ApiMethod::new(
         ],[
             ("store", false, &DATASTORE_SCHEMA),
         ])
-    )
-).access(None, &Permission::Privilege(
+    ))
+    .returns(&API_RETURN_SCHEMA_PRUNE)
+    .access(None, &Permission::Privilege(
     &["datastore", "{store}"],
     PRIV_DATASTORE_MODIFY | PRIV_DATASTORE_PRUNE,
     true)
index bfd946018d6ba49a4dbfe3f347ef2c78de63950e..62345d768820d8004284289b70608452dd983960 100644 (file)
@@ -391,6 +391,30 @@ pub struct SnapshotListItem {
     pub size: Option<u64>,
 }
 
+#[api(
+    properties: {
+        "backup-type": {
+            schema: BACKUP_TYPE_SCHEMA,
+        },
+        "backup-id": {
+            schema: BACKUP_ID_SCHEMA,
+        },
+        "backup-time": {
+            schema: BACKUP_TIME_SCHEMA,
+        },
+    },
+)]
+#[derive(Serialize, Deserialize)]
+#[serde(rename_all="kebab-case")]
+/// Prune result.
+pub struct PruneListItem {
+    pub backup_type: String, // enum
+    pub backup_id: String,
+    pub backup_time: i64,
+    /// Keep snapshot
+    pub keep: bool,
+}
+
 #[api(
     properties: {
         "filename": {
index 474a0ca5160a54d6a76453017cb03ccd7112b851..5f45ebb93ef4f9f3f0f86cc9eb937a6c049874d6 100644 (file)
@@ -1424,11 +1424,29 @@ async fn prune_async(mut param: Value) -> Result<Value, Error> {
     param["backup-type"] = group.backup_type().into();
     param["backup-id"] = group.backup_id().into();
 
-    let result = client.post(&path, Some(param)).await?;
+    let mut result = client.post(&path, Some(param)).await?;
 
     record_repository(&repo);
 
-    view_task_result(client, result, &output_format).await?;
+    let render_snapshot_path = |_v: &Value, record: &Value| -> Result<String, Error> {
+        let item: PruneListItem = serde_json::from_value(record.to_owned())?;
+        let snapshot = BackupDir::new(item.backup_type, item.backup_id, item.backup_time);
+        Ok(snapshot.relative_path().to_str().unwrap().to_owned())
+    };
+
+    let options = default_table_format_options()
+        .sortby("backup-type", false)
+        .sortby("backup-id", false)
+        .sortby("backup-time", false)
+        .column(ColumnConfig::new("backup-id").renderer(render_snapshot_path).header("snapshot"))
+        .column(ColumnConfig::new("keep"))
+        ;
+
+    let info = &proxmox_backup::api2::admin::datastore::API_RETURN_SCHEMA_PRUNE;
+
+    let mut data = result["data"].take();
+
+    format_and_print_result_full(&mut data, info, &output_format, &options);
 
     Ok(Value::Null)
 }