all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pbs-devel] [PATCH v2 proxmox-backup] fix #3323: dry-run for cli backup subcommand
@ 2022-02-18  9:55 markus frank
  2022-02-18 10:12 ` Markus Frank
  2022-02-18 14:10 ` [pbs-devel] applied: " Thomas Lamprecht
  0 siblings, 2 replies; 3+ messages in thread
From: markus frank @ 2022-02-18  9:55 UTC (permalink / raw)
  To: pbs-devel

From: Markus Frank <m.frank@proxmox.com>

adds a dry-run parameter for "proxmox-backup-client backup".
With this parameter on it simply prints out what would be uploaded,
instead of uploading it.

Signed-off-by: Markus Frank <m.frank@proxmox.com>
---
version 2:
 * tuple matching
 * print closure

 proxmox-backup-client/src/main.rs | 50 +++++++++++++++++++++++++------
 1 file changed, 41 insertions(+), 9 deletions(-)

diff --git a/proxmox-backup-client/src/main.rs b/proxmox-backup-client/src/main.rs
index 081028f2..437c1400 100644
--- a/proxmox-backup-client/src/main.rs
+++ b/proxmox-backup-client/src/main.rs
@@ -613,6 +613,11 @@ fn spawn_catalog_upload(
                description: "Verbose output.",
                optional: true,
            },
+           "dry-run": {
+               type: Boolean,
+               description: "Just show what backup would do, but do not upload anything.",
+               optional: true,
+           },
        }
    }
 )]
@@ -633,6 +638,8 @@ async fn create_backup(
 
     let verbose = param["verbose"].as_bool().unwrap_or(false);
 
+    let dry_run = param["dry-run"].as_bool().unwrap_or(false);
+
     let backup_time_opt = param["backup-time"].as_i64();
 
     let chunk_size_opt = param["chunk-size"].as_u64().map(|v| (v*1024) as usize);
@@ -844,35 +851,55 @@ async fn create_backup(
     let mut catalog = None;
     let mut catalog_result_rx = None;
 
+    let printfileinfo = |butype:&str, filename:&str, repo:&pbs_client::BackupRepository, target:&str| {
+        if dry_run{
+            println!("Would upload {} '{}' to '{}' as {}", butype, filename, repo, target);
+        } else {
+            println!("Upload {} '{}' to '{}' as {}", butype, filename, repo, target);
+        }
+    };
+
     for (backup_type, filename, target, size) in upload_list {
-        match backup_type {
-            BackupSpecificationType::CONFIG => {
+        match (backup_type, dry_run) {
+            (BackupSpecificationType::CONFIG, true) => {
+                printfileinfo("config file", &filename, &repo, &target);
+            }
+            (BackupSpecificationType::LOGFILE, true) => {
+                printfileinfo("log file", &filename, &repo, &target);
+            }
+            (BackupSpecificationType::PXAR, true) => {
+                printfileinfo("directory", &filename, &repo, &target);
+            }
+            (BackupSpecificationType::IMAGE, true) => {
+                printfileinfo("image", &filename, &repo, &target);
+            }
+            (BackupSpecificationType::CONFIG, false) => {
                 let upload_options = UploadOptions {
                     compress: true,
                     encrypt: crypto.mode == CryptMode::Encrypt,
                     ..UploadOptions::default()
                 };
 
-                println!("Upload config file '{}' to '{}' as {}", filename, repo, target);
+                printfileinfo("config file", &filename, &repo, &target);
                 let stats = client
                     .upload_blob_from_file(&filename, &target, upload_options)
                     .await?;
                 manifest.add_file(target, stats.size, stats.csum, crypto.mode)?;
             }
-            BackupSpecificationType::LOGFILE => { // fixme: remove - not needed anymore ?
+            (BackupSpecificationType::LOGFILE, false) => { // fixme: remove - not needed anymore ?
                 let upload_options = UploadOptions {
                     compress: true,
                     encrypt: crypto.mode == CryptMode::Encrypt,
                     ..UploadOptions::default()
                 };
 
-                println!("Upload log file '{}' to '{}' as {}", filename, repo, target);
+                printfileinfo("log file", &filename, &repo, &target);
                 let stats = client
                     .upload_blob_from_file(&filename, &target, upload_options)
                     .await?;
                 manifest.add_file(target, stats.size, stats.csum, crypto.mode)?;
             }
-            BackupSpecificationType::PXAR => {
+            (BackupSpecificationType::PXAR, false) => {
                 // start catalog upload on first use
                 if catalog.is_none() {
                     let catalog_upload_res = spawn_catalog_upload(client.clone(), crypto.mode == CryptMode::Encrypt)?;
@@ -881,7 +908,7 @@ async fn create_backup(
                 }
                 let catalog = catalog.as_ref().unwrap();
 
-                println!("Upload directory '{}' to '{}' as {}", filename, repo, target);
+                printfileinfo("directory", &filename, &repo, &target);
                 catalog.lock().unwrap().start_directory(std::ffi::CString::new(target.as_str())?.as_c_str())?;
 
                 let pxar_options = pbs_client::pxar::PxarCreateOptions {
@@ -911,8 +938,8 @@ async fn create_backup(
                 manifest.add_file(target, stats.size, stats.csum, crypto.mode)?;
                 catalog.lock().unwrap().end_directory()?;
             }
-            BackupSpecificationType::IMAGE => {
-                println!("Upload image '{}' to '{:?}' as {}", filename, repo, target);
+            (BackupSpecificationType::IMAGE, false) => {
+                printfileinfo("image", &filename, &repo, &target);
 
                 let upload_options = UploadOptions {
                     previous_manifest: previous_manifest.clone(),
@@ -933,6 +960,11 @@ async fn create_backup(
         }
     }
 
+    if dry_run {
+        println!("dry-run: no upload happend");
+        return Ok(Value::Null);
+    }
+
     // finalize and upload catalog
     if let Some(catalog) = catalog {
         let mutex = Arc::try_unwrap(catalog)
-- 
2.30.2





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

end of thread, other threads:[~2022-02-18 14:10 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-18  9:55 [pbs-devel] [PATCH v2 proxmox-backup] fix #3323: dry-run for cli backup subcommand markus frank
2022-02-18 10:12 ` Markus Frank
2022-02-18 14:10 ` [pbs-devel] applied: " Thomas Lamprecht

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