public inbox for pbs-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Wolfgang Bumiller <w.bumiller@proxmox.com>
To: Hannes Laimer <h.laimer@proxmox.com>
Cc: pbs-devel@lists.proxmox.com
Subject: Re: [pbs-devel] [PATCH proxmox-backup v3 3/6] manager: add completion for opt. Remote in SyncJob
Date: Thu, 24 Aug 2023 11:24:32 +0200	[thread overview]
Message-ID: <u7moh5ccud3zjakzrym5buwacclo6pooe26l4u7eyprhoaxnny@lbl4gwpwokqy> (raw)
In-Reply-To: <20230808121344.199500-4-h.laimer@proxmox.com>

On Tue, Aug 08, 2023 at 02:13:41PM +0200, Hannes Laimer wrote:
> Signed-off-by: Hannes Laimer <h.laimer@proxmox.com>
> ---
>  src/bin/proxmox-backup-manager.rs | 67 +++++++++++++++++++------------
>  1 file changed, 41 insertions(+), 26 deletions(-)
> 
> diff --git a/src/bin/proxmox-backup-manager.rs b/src/bin/proxmox-backup-manager.rs
> index b4cb6cb3..eadfe547 100644
> --- a/src/bin/proxmox-backup-manager.rs
> +++ b/src/bin/proxmox-backup-manager.rs
> @@ -535,35 +535,33 @@ fn get_remote(param: &HashMap<String, String>) -> Option<String> {
>      param.get("remote").map(|r| r.to_owned()).or_else(|| {
>          if let Some(id) = param.get("id") {
>              if let Ok(job) = get_sync_job(id) {
> -                return Some(job.remote);
> +                return job.remote;

^ belongs in patch 1

>              }
>          }
>          None
>      })
>  }
>  
> -fn get_remote_store(param: &HashMap<String, String>) -> Option<(String, String)> {
> +fn get_remote_store(param: &HashMap<String, String>) -> Option<(Option<String>, String)> {
>      let mut job: Option<SyncJobConfig> = None;
>  
>      let remote = param.get("remote").map(|r| r.to_owned()).or_else(|| {
>          if let Some(id) = param.get("id") {
>              job = get_sync_job(id).ok();
>              if let Some(ref job) = job {
> -                return Some(job.remote.clone());
> +                return job.remote.clone();

^ belongs in patch 1

>              }
>          }
>          None
>      });
>  
> -    if let Some(remote) = remote {
> -        let store = param
> -            .get("remote-store")
> -            .map(|r| r.to_owned())
> -            .or_else(|| job.map(|job| job.remote_store));
> +    let store = param
> +        .get("remote-store")
> +        .map(|r| r.to_owned())
> +        .or_else(|| job.map(|job| job.remote_store));
>  
> -        if let Some(store) = store {
> -            return Some((remote, store));
> -        }
> +    if let Some(store) = store {
> +        return Some((remote, store));
>      }
>  
>      None
> @@ -584,7 +582,7 @@ fn get_remote_ns(param: &HashMap<String, String>) -> Option<BackupNamespace> {
>  }
>  
>  // shell completion helper
> -pub fn complete_remote_datastore_name(_arg: &str, param: &HashMap<String, String>) -> Vec<String> {
> +pub fn complete_remote_datastore_name(arg: &str, param: &HashMap<String, String>) -> Vec<String> {
>      let mut list = Vec::new();
>  
>      if let Some(remote) = get_remote(param) {
> @@ -595,7 +593,9 @@ pub fn complete_remote_datastore_name(_arg: &str, param: &HashMap<String, String
>                  list.push(item.store);
>              }
>          }
> -    }
> +    } else {
> +        list = pbs_config::datastore::complete_datastore_name(arg, param);
> +    };
>  
>      list
>  }
> @@ -607,17 +607,25 @@ pub fn complete_remote_datastore_namespace(
>  ) -> Vec<String> {
>      let mut list = Vec::new();
>  
> -    if let Some((remote, remote_store)) = get_remote_store(param) {
> -        if let Ok(data) = proxmox_async::runtime::block_on(async move {
> +    if let Some(data) = match get_remote_store(param) {
> +        Some((Some(remote), remote_store)) => proxmox_async::runtime::block_on(async move {
>              crate::api2::config::remote::scan_remote_namespaces(
>                  remote.clone(),
>                  remote_store.clone(),
>              )
>              .await
> -        }) {
> -            for item in data {
> -                list.push(item.ns.name());
> -            }
> +            .ok()
> +        }),
> +        Some((None, source_store)) => {

Something about "remote store" vs "source store" just bugs me here...
Pull jobs should altogether just have a 'source' instead of a 'remote'
:-/

> +            let mut rpcenv = CliEnvironment::new();
> +            rpcenv.set_auth_id(Some(String::from("root@pam")));
> +            crate::api2::admin::namespace::list_namespaces(source_store, None, None, &mut rpcenv)
> +                .ok()
> +        }
> +        _ => None,
> +    } {
> +        for item in data {
> +            list.push(item.ns.name());
>          }
>      }
>  
> @@ -662,19 +670,26 @@ pub fn complete_sync_local_datastore_namespace(
>  pub fn complete_remote_datastore_group(_arg: &str, param: &HashMap<String, String>) -> Vec<String> {
>      let mut list = Vec::new();
>  
> -    if let Some((remote, remote_store)) = get_remote_store(param) {
> -        let ns = get_remote_ns(param);
> -        if let Ok(data) = proxmox_async::runtime::block_on(async move {
> +    let ns = get_remote_ns(param);
> +    if let Some(data) = match get_remote_store(param) {
> +        Some((Some(remote), remote_store)) => proxmox_async::runtime::block_on(async move {
>              crate::api2::config::remote::scan_remote_groups(
>                  remote.clone(),
>                  remote_store.clone(),
>                  ns,
>              )
>              .await
> -        }) {
> -            for item in data {
> -                list.push(format!("{}/{}", item.backup.ty, item.backup.id));
> -            }
> +            .ok()
> +        }),
> +        Some((None, source_store)) => {
> +            let mut rpcenv = CliEnvironment::new();
> +            rpcenv.set_auth_id(Some(String::from("root@pam")));
> +            crate::api2::admin::datastore::list_groups(source_store, ns, &mut rpcenv).ok()
> +        }
> +        _ => None,
> +    } {
> +        for item in data {
> +            list.push(format!("{}/{}", item.backup.ty, item.backup.id));
>          }
>      }
>  
> -- 
> 2.39.2




  reply	other threads:[~2023-08-24  9:25 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-08 12:13 [pbs-devel] [PATCH proxmox-backup v3 0/6] local sync-jobs Hannes Laimer
2023-08-08 12:13 ` [pbs-devel] [PATCH proxmox-backup v3 1/6] api2: make Remote for SyncJob optional Hannes Laimer
2023-08-23 11:37   ` Wolfgang Bumiller
2023-09-21 11:06   ` Lukas Wagner
2023-08-08 12:13 ` [pbs-devel] [PATCH proxmox-backup v3 2/6] ui: add support for optional Remote in SyncJob Hannes Laimer
2023-08-08 12:13 ` [pbs-devel] [PATCH proxmox-backup v3 3/6] manager: add completion for opt. " Hannes Laimer
2023-08-24  9:24   ` Wolfgang Bumiller [this message]
2023-08-08 12:13 ` [pbs-devel] [PATCH proxmox-backup v3 4/6] accept a ref to a HttpClient Hannes Laimer
2023-08-08 12:13 ` [pbs-devel] [PATCH proxmox-backup v3 5/6] pull: refactor pulling from a datastore Hannes Laimer
2023-08-24 13:09   ` Wolfgang Bumiller
2023-09-21 11:10   ` Lukas Wagner
2023-08-08 12:13 ` [pbs-devel] [PATCH proxmox-backup v3 6/6] pull: add support for pulling from local datastore Hannes Laimer
2023-09-21 10:01 ` [pbs-devel] [PATCH proxmox-backup v3 0/6] local sync-jobs Lukas Wagner

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=u7moh5ccud3zjakzrym5buwacclo6pooe26l4u7eyprhoaxnny@lbl4gwpwokqy \
    --to=w.bumiller@proxmox.com \
    --cc=h.laimer@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal