From: Markus Frank <m.frank@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: Re: [pbs-devel] [PATCH v2 proxmox-backup] fix #3323: dry-run for cli backup subcommand
Date: Fri, 18 Feb 2022 11:12:57 +0100 [thread overview]
Message-ID: <9a8310b6-ac1a-ffa9-abdc-fd0c762e59a4@proxmox.com> (raw)
In-Reply-To: <20220218095538.2868974-1-m.frank@proxmox.com>
I gave git two Froms. Should I make a new patch?
If not and the code is okay, please delete the first line, thanks.
On 2/18/22 10:55, markus frank wrote:
> 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)
next prev parent reply other threads:[~2022-02-18 10:13 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-18 9:55 markus frank
2022-02-18 10:12 ` Markus Frank [this message]
2022-02-18 14:10 ` [pbs-devel] applied: " Thomas Lamprecht
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=9a8310b6-ac1a-ffa9-abdc-fd0c762e59a4@proxmox.com \
--to=m.frank@proxmox.com \
--cc=pbs-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.