src/bin/proxmox-backup-client.rs: correctly format prune result list.

This commit is contained in:
Dietmar Maurer 2020-05-05 06:45:37 +02:00
parent 96feecd621
commit db1e061dcb
3 changed files with 52 additions and 4 deletions

View 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( const API_METHOD_PRUNE: ApiMethod = ApiMethod::new(
&ApiHandler::Sync(&prune), &ApiHandler::Sync(&prune),
&ObjectSchema::new( &ObjectSchema::new(
@ -469,8 +474,9 @@ const API_METHOD_PRUNE: ApiMethod = ApiMethod::new(
],[ ],[
("store", false, &DATASTORE_SCHEMA), ("store", false, &DATASTORE_SCHEMA),
]) ])
) ))
).access(None, &Permission::Privilege( .returns(&API_RETURN_SCHEMA_PRUNE)
.access(None, &Permission::Privilege(
&["datastore", "{store}"], &["datastore", "{store}"],
PRIV_DATASTORE_MODIFY | PRIV_DATASTORE_PRUNE, PRIV_DATASTORE_MODIFY | PRIV_DATASTORE_PRUNE,
true) true)

View File

@ -391,6 +391,30 @@ pub struct SnapshotListItem {
pub size: Option<u64>, 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( #[api(
properties: { properties: {
"filename": { "filename": {

View File

@ -1424,11 +1424,29 @@ async fn prune_async(mut param: Value) -> Result<Value, Error> {
param["backup-type"] = group.backup_type().into(); param["backup-type"] = group.backup_type().into();
param["backup-id"] = group.backup_id().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); 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) Ok(Value::Null)
} }