From: Christian Ebner <c.ebner@proxmox.com>
To: pdm-devel@lists.proxmox.com
Subject: [pdm-devel] [PATCH datacenter-manager 3/6] server: api: implement endpoint to scan remote PBS instances
Date: Mon, 22 Sep 2025 13:09:55 +0200 [thread overview]
Message-ID: <20250922110958.369653-4-c.ebner@proxmox.com> (raw)
In-Reply-To: <20250922110958.369653-1-c.ebner@proxmox.com>
Provide the analogous api endpoint as for PVE, but since there is no
cluster information and only a single host for PBS, limit the
implementation to a basic login check using the provided credentials
for now.
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
---
server/src/api/pbs/mod.rs | 69 ++++++++++++++++++++++++++++++++++++---
1 file changed, 65 insertions(+), 4 deletions(-)
diff --git a/server/src/api/pbs/mod.rs b/server/src/api/pbs/mod.rs
index 0ca97cd..2e203ca 100644
--- a/server/src/api/pbs/mod.rs
+++ b/server/src/api/pbs/mod.rs
@@ -1,16 +1,17 @@
-use anyhow::Error;
+use anyhow::{format_err, Error};
use futures::StreamExt;
use proxmox_router::{list_subdirs_api_method, Permission, Router, SubdirMap};
use proxmox_schema::api;
+use proxmox_schema::property_string::PropertyString;
use proxmox_sortable_macro::sortable;
-use pdm_api_types::remotes::{RemoteType, TlsProbeOutcome, REMOTE_ID_SCHEMA};
-use pdm_api_types::{HOST_OPTIONAL_PORT_FORMAT, PRIV_RESOURCE_AUDIT, PRIV_SYS_MODIFY};
+use pdm_api_types::remotes::{NodeUrl, Remote, RemoteType, TlsProbeOutcome, REMOTE_ID_SCHEMA};
+use pdm_api_types::{Authid, HOST_OPTIONAL_PORT_FORMAT, PRIV_RESOURCE_AUDIT, PRIV_SYS_MODIFY};
use crate::{
connection::{self, probe_tls_connection},
- pbs_client::{self, get_remote},
+ pbs_client::{self, get_remote, PbsClient},
};
mod rrddata;
@@ -22,6 +23,7 @@ pub const ROUTER: Router = Router::new()
#[sortable]
const SUBDIRS: SubdirMap = &sorted!([
("remotes", &REMOTES_ROUTER),
+ ("scan", &Router::new().post(&API_METHOD_SCAN_REMOTE_PBS)),
("probe-tls", &Router::new().post(&API_METHOD_PROBE_TLS)),
]);
@@ -146,3 +148,62 @@ async fn probe_tls(
) -> Result<TlsProbeOutcome, Error> {
probe_tls_connection(RemoteType::Pbs, hostname, fingerprint).await
}
+
+pub async fn connect_or_login(remote: &Remote) -> Result<Box<PbsClient>, Error> {
+ connection::make_pbs_client_and_login(remote).await
+}
+
+#[api(
+ input: {
+ properties: {
+ hostname: {
+ type: String,
+ format: &HOST_OPTIONAL_PORT_FORMAT,
+ description: "Hostname (with optional port) of the target remote",
+ },
+ fingerprint: {
+ type: String,
+ description: "Fingerprint of the target remote.",
+ optional: true,
+ },
+ "authid": {
+ type: Authid,
+ },
+ "token": {
+ type: String,
+ description: "The token secret or the user password.",
+ },
+ },
+ },
+ access: {
+ permission:
+ &Permission::Privilege(&["/"], PRIV_SYS_MODIFY, false),
+ },
+)]
+/// Scans the given connection info for pbs host information.
+///
+/// Checks login using the provided credentials.
+pub async fn scan_remote_pbs(
+ hostname: String,
+ fingerprint: Option<String>,
+ authid: Authid,
+ token: String,
+) -> Result<Remote, Error> {
+ let remote = Remote {
+ ty: RemoteType::Pbs,
+ id: hostname.clone(),
+ nodes: vec![PropertyString::new(NodeUrl {
+ hostname,
+ fingerprint,
+ })],
+ authid: authid.clone(),
+ token,
+ web_url: None,
+ };
+
+ let _client = connect_or_login(&remote)
+ .await
+ .map_err(|err| format_err!("could not login: {err}"))?;
+
+ Ok(remote)
+}
--
2.47.3
_______________________________________________
pdm-devel mailing list
pdm-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel
next prev parent reply other threads:[~2025-09-22 11:09 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-22 11:09 [pdm-devel] [PATCH datacenter-manager 0/6] ui/api: implement and expose adding PBS remotes via the ui wizard Christian Ebner
2025-09-22 11:09 ` [pdm-devel] [PATCH datacenter-manager 1/6] server: api: add TLS probe endpoint for PBS Christian Ebner
2025-09-22 11:09 ` [pdm-devel] [PATCH datacenter-manager 2/6] pdm-client: add method to probe TLS connection for PBS remotes Christian Ebner
2025-09-22 11:09 ` Christian Ebner [this message]
2025-09-22 11:09 ` [pdm-devel] [PATCH datacenter-manager 4/6] pdm client: add method to scan remote PBS instances Christian Ebner
2025-09-22 11:09 ` [pdm-devel] [PATCH datacenter-manager 5/6] ui: remote: check connection for PBS remotes in remote add wizard Christian Ebner
2025-09-22 11:09 ` [pdm-devel] [PATCH datacenter-manager 6/6] ui: reorganize remote add button as dropdown menu to allow adding PBS Christian Ebner
2025-09-22 12:50 ` [pdm-devel] [PATCH datacenter-manager 0/6] ui/api: implement and expose adding PBS remotes via the ui wizard Lukas Wagner
2025-09-22 12:56 ` Christian Ebner
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=20250922110958.369653-4-c.ebner@proxmox.com \
--to=c.ebner@proxmox.com \
--cc=pdm-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.