[pdm-devel] [PATCH datacenter-manager 06/13] api: pve/pbs: add passthrough endpoint for APT repo configuration
Lukas Wagner
l.wagner at proxmox.com
Thu Nov 27 11:44:40 CET 2025
This enables us to read the APT repository configuration of a remote
node.
Signed-off-by: Lukas Wagner <l.wagner at proxmox.com>
---
lib/pdm-api-types/src/lib.rs | 1 +
server/src/api/remote_updates.rs | 53 ++++++++++++++++++++++++++++----
2 files changed, 48 insertions(+), 6 deletions(-)
diff --git a/lib/pdm-api-types/src/lib.rs b/lib/pdm-api-types/src/lib.rs
index 5bce1b07..1ca573ae 100644
--- a/lib/pdm-api-types/src/lib.rs
+++ b/lib/pdm-api-types/src/lib.rs
@@ -32,6 +32,7 @@ pub use proxy::HTTP_PROXY_SCHEMA;
mod translation;
pub use translation::Translation;
+pub use proxmox_apt_api_types::APTRepositoriesResult;
pub use proxmox_apt_api_types::APTUpdateInfo;
pub use proxmox_auth_api::types::{Authid, Userid};
diff --git a/server/src/api/remote_updates.rs b/server/src/api/remote_updates.rs
index bea2d864..591200b0 100644
--- a/server/src/api/remote_updates.rs
+++ b/server/src/api/remote_updates.rs
@@ -2,10 +2,11 @@
use anyhow::Error;
-use pdm_api_types::remotes::Remote;
+use pdm_api_types::remotes::{Remote, RemoteType};
+use pdm_api_types::PRIV_RESOURCE_AUDIT;
use pdm_api_types::{
- remote_updates::UpdateSummary, remotes::REMOTE_ID_SCHEMA, RemoteUpid, NODE_SCHEMA,
- PRIV_RESOURCE_MODIFY, UPID,
+ remote_updates::UpdateSummary, remotes::REMOTE_ID_SCHEMA, APTRepositoriesResult, RemoteUpid,
+ NODE_SCHEMA, PRIV_RESOURCE_MODIFY, UPID,
};
use proxmox_access_control::CachedUserInfo;
use proxmox_apt_api_types::{APTGetChangelogOptions, APTUpdateInfo};
@@ -16,7 +17,7 @@ use proxmox_router::{
use proxmox_schema::api;
use proxmox_sortable_macro::sortable;
-use crate::remote_updates;
+use crate::{connection, remote_updates};
use super::remotes::get_remote;
@@ -204,18 +205,58 @@ async fn apt_get_changelog(
remote_updates::get_changelog(remote, &node, options.name).await
}
-const APT_SUBDIRS: SubdirMap = &[
+#[api(
+ input: {
+ properties: {
+ remote: {
+ schema: REMOTE_ID_SCHEMA,
+ },
+ node: {
+ schema: NODE_SCHEMA,
+ },
+ },
+ },
+ access: {
+ permission: &Permission::Privilege(&["resource", "{remote}", "node", "{node}", "system"], PRIV_RESOURCE_AUDIT, false),
+ },
+)]
+/// Get configured APT repositories.
+async fn get_apt_repositories(
+ remote: String,
+ node: String,
+) -> Result<APTRepositoriesResult, Error> {
+ let (config, _digest) = pdm_config::remotes::config()?;
+ let remote = get_remote(&config, &remote)?;
+
+ Ok(match remote.ty {
+ RemoteType::Pve => {
+ let client = connection::make_pve_client(remote)?;
+ client.get_apt_repositories(&node).await?
+ }
+ RemoteType::Pbs => {
+ let client = connection::make_pbs_client(remote)?;
+ client.get_apt_repositories().await?
+ }
+ })
+}
+
+#[sortable]
+const APT_SUBDIRS: SubdirMap = &sorted!([
(
"changelog",
&Router::new().get(&API_METHOD_APT_GET_CHANGELOG),
),
+ (
+ "repositories",
+ &Router::new().get(&API_METHOD_GET_APT_REPOSITORIES),
+ ),
(
"update",
&Router::new()
.get(&API_METHOD_APT_UPDATE_AVAILABLE)
.post(&API_METHOD_APT_UPDATE_DATABASE),
),
-];
+]);
pub const APT_ROUTER: Router = Router::new()
.get(&list_subdirs_api_method!(APT_SUBDIRS))
--
2.47.3
More information about the pdm-devel
mailing list