src/bin/proxmox-backup-client.rs: correctly format prune result list.
This commit is contained in:
		@ -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)
 | 
			
		||||
 | 
			
		||||
@ -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": {
 | 
			
		||||
 | 
			
		||||
@ -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)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user