all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Christian Ebner <c.ebner@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [PATCH proxmox-backup v3 5/6] config: move node config into pbs-config, including helper tools
Date: Thu, 12 Mar 2026 12:42:07 +0100	[thread overview]
Message-ID: <20260312114208.514373-8-c.ebner@proxmox.com> (raw)
In-Reply-To: <20260312114208.514373-1-c.ebner@proxmox.com>

None of the helpers are required in proxmox-backup anymore, all
encapsulated in the pbs-config crate. Keep however the same
`tools::config` module layout.

Adapt all callsides to use pbs_config::node to interact with the node
config.

Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
---
 pbs-config/Cargo.toml                   | 1 +
 pbs-config/src/lib.rs                   | 2 ++
 {src/config => pbs-config/src}/node.rs  | 7 ++++---
 {src => pbs-config/src}/tools/config.rs | 0
 pbs-config/src/tools/mod.rs             | 1 +
 src/api2/config/remote.rs               | 2 +-
 src/api2/node/apt.rs                    | 2 +-
 src/api2/node/certificates.rs           | 4 ++--
 src/api2/node/config.rs                 | 8 ++++----
 src/api2/node/subscription.rs           | 2 +-
 src/bin/proxmox-backup-proxy.rs         | 9 ++++-----
 src/bin/proxmox-daily-update.rs         | 2 +-
 src/config/mod.rs                       | 1 -
 src/tools/mod.rs                        | 1 -
 14 files changed, 22 insertions(+), 20 deletions(-)
 rename {src/config => pbs-config/src}/node.rs (89%)
 rename {src => pbs-config/src}/tools/config.rs (100%)
 create mode 100644 pbs-config/src/tools/mod.rs

diff --git a/pbs-config/Cargo.toml b/pbs-config/Cargo.toml
index 74afb3c64..2040be0b2 100644
--- a/pbs-config/Cargo.toml
+++ b/pbs-config/Cargo.toml
@@ -17,6 +17,7 @@ regex.workspace = true
 serde.workspace = true
 serde_json.workspace = true
 
+proxmox-http.workspace = true
 proxmox-notify.workspace = true
 proxmox-router = { workspace = true, default-features = false }
 proxmox-s3-client.workspace = true
diff --git a/pbs-config/src/lib.rs b/pbs-config/src/lib.rs
index 1ed472385..9eb83ac6a 100644
--- a/pbs-config/src/lib.rs
+++ b/pbs-config/src/lib.rs
@@ -6,6 +6,7 @@ pub mod domains;
 pub mod drive;
 pub mod media_pool;
 pub mod metrics;
+pub mod node;
 pub mod notifications;
 pub mod prune;
 pub mod remote;
@@ -13,6 +14,7 @@ pub mod s3;
 pub mod sync;
 pub mod tape_job;
 pub mod token_shadow;
+pub(crate) mod tools;
 pub mod traffic_control;
 pub mod user;
 pub mod verify;
diff --git a/src/config/node.rs b/pbs-config/src/node.rs
similarity index 89%
rename from src/config/node.rs
rename to pbs-config/src/node.rs
index 6e44495f8..cb6158c30 100644
--- a/src/config/node.rs
+++ b/pbs-config/src/node.rs
@@ -8,7 +8,8 @@ use proxmox_http::ProxyConfig;
 use proxmox_schema::ApiType;
 
 use pbs_buildcfg::configdir;
-use pbs_config::{open_backup_lockfile, BackupLockGuard};
+
+use crate::{open_backup_lockfile, BackupLockGuard};
 
 const CONF_FILE: &str = configdir!("/node.cfg");
 const LOCK_FILE: &str = configdir!("/.node.lck");
@@ -45,10 +46,10 @@ pub fn save_config(config: &NodeConfig) -> Result<(), Error> {
     }
 
     let raw = crate::tools::config::to_bytes(config, &NodeConfig::API_SCHEMA)?;
-    pbs_config::replace_backup_config(CONF_FILE, &raw)
+    crate::replace_backup_config(CONF_FILE, &raw)
 }
 
-pub(crate) fn node_http_proxy_config() -> Result<Option<ProxyConfig>, Error> {
+pub fn node_http_proxy_config() -> Result<Option<ProxyConfig>, Error> {
     let (node_config, _digest) = self::config()?;
     Ok(node_config.http_proxy())
 }
diff --git a/src/tools/config.rs b/pbs-config/src/tools/config.rs
similarity index 100%
rename from src/tools/config.rs
rename to pbs-config/src/tools/config.rs
diff --git a/pbs-config/src/tools/mod.rs b/pbs-config/src/tools/mod.rs
new file mode 100644
index 000000000..30e489dae
--- /dev/null
+++ b/pbs-config/src/tools/mod.rs
@@ -0,0 +1 @@
+pub(crate) mod config;
diff --git a/src/api2/config/remote.rs b/src/api2/config/remote.rs
index 1996ee91b..03eae24dc 100644
--- a/src/api2/config/remote.rs
+++ b/src/api2/config/remote.rs
@@ -320,7 +320,7 @@ pub fn remote_client_config(
         options = options.rate_limit(limit);
     }
     if remote.config.use_node_proxy.unwrap_or(false) {
-        let proxy = crate::config::node::node_http_proxy_config()?;
+        let proxy = pbs_config::node::node_http_proxy_config()?;
         options = options.proxy(proxy);
     }
 
diff --git a/src/api2/node/apt.rs b/src/api2/node/apt.rs
index c696adb1e..32dfe7def 100644
--- a/src/api2/node/apt.rs
+++ b/src/api2/node/apt.rs
@@ -15,7 +15,7 @@ use proxmox_sys::fs::{replace_file, CreateOptions};
 
 use pbs_api_types::{NODE_SCHEMA, PRIV_SYS_AUDIT, PRIV_SYS_MODIFY, UPID_SCHEMA};
 
-use crate::config::node;
+use pbs_config::node;
 
 #[api(
     input: {
diff --git a/src/api2/node/certificates.rs b/src/api2/node/certificates.rs
index e5761e5f5..a69f6511f 100644
--- a/src/api2/node/certificates.rs
+++ b/src/api2/node/certificates.rs
@@ -328,7 +328,7 @@ fn spawn_certificate_worker(
     // custom one too hard... We keep the parameter because the widget-toolkit may be using it...
     let _ = force;
 
-    let (node_config, _digest) = crate::config::node::config()?;
+    let (node_config, _digest) = pbs_config::node::config()?;
 
     let auth_id = rpcenv.get_auth_id().unwrap();
 
@@ -381,7 +381,7 @@ fn spawn_certificate_worker(
 /// Renew the current ACME certificate if it expires within 30 days (or always if the `force`
 /// parameter is set).
 pub fn revoke_acme_cert(rpcenv: &mut dyn RpcEnvironment) -> Result<String, Error> {
-    let (node_config, _digest) = crate::config::node::config()?;
+    let (node_config, _digest) = pbs_config::node::config()?;
 
     let cert_pem = get_certificate_pem()?;
 
diff --git a/src/api2/node/config.rs b/src/api2/node/config.rs
index 619e2b022..fbec79118 100644
--- a/src/api2/node/config.rs
+++ b/src/api2/node/config.rs
@@ -28,7 +28,7 @@ pub const ROUTER: Router = Router::new()
 )]
 /// Get the node configuration
 pub fn get_node_config(rpcenv: &mut dyn RpcEnvironment) -> Result<NodeConfig, Error> {
-    let (config, digest) = crate::config::node::config()?;
+    let (config, digest) = pbs_config::node::config()?;
     rpcenv["digest"] = hex::encode(digest).into();
     Ok(config)
 }
@@ -104,8 +104,8 @@ pub fn update_node_config(
     delete: Option<Vec<DeletableProperty>>,
     digest: Option<String>,
 ) -> Result<(), Error> {
-    let _lock = crate::config::node::lock()?;
-    let (mut config, expected_digest) = crate::config::node::config()?;
+    let _lock = pbs_config::node::lock()?;
+    let (mut config, expected_digest) = pbs_config::node::config()?;
     if let Some(digest) = digest {
         // FIXME: GUI doesn't handle our non-inlined digest part here properly...
         if !digest.is_empty() {
@@ -206,7 +206,7 @@ pub fn update_node_config(
         config.consent_text = update.consent_text;
     }
 
-    crate::config::node::save_config(&config)?;
+    pbs_config::node::save_config(&config)?;
 
     update_apt_proxy_config(config.http_proxy().as_ref())?;
 
diff --git a/src/api2/node/subscription.rs b/src/api2/node/subscription.rs
index 7d9678fc5..03d613ee2 100644
--- a/src/api2/node/subscription.rs
+++ b/src/api2/node/subscription.rs
@@ -12,10 +12,10 @@ use pbs_api_types::{
     Authid, NODE_SCHEMA, PRIV_SYS_AUDIT, PRIV_SYS_MODIFY, SUBSCRIPTION_KEY_SCHEMA,
 };
 
-use crate::config::node;
 use crate::tools::{DEFAULT_USER_AGENT_STRING, PROXMOX_BACKUP_TCP_KEEPALIVE_TIME};
 
 use pbs_buildcfg::PROXMOX_BACKUP_SUBSCRIPTION_FN;
+use pbs_config::node;
 use pbs_config::CachedUserInfo;
 
 const PRODUCT_URL: &str = "https://www.proxmox.com/en/proxmox-backup-server/pricing";
diff --git a/src/bin/proxmox-backup-proxy.rs b/src/bin/proxmox-backup-proxy.rs
index c1fe3ac15..b04eb7e8e 100644
--- a/src/bin/proxmox-backup-proxy.rs
+++ b/src/bin/proxmox-backup-proxy.rs
@@ -45,7 +45,6 @@ use pbs_api_types::{
 };
 
 use proxmox_backup::auth_helpers::*;
-use proxmox_backup::config;
 use proxmox_backup::server::{self, metric_collection};
 use proxmox_backup::tools::PROXMOX_BACKUP_TCP_KEEPALIVE_TIME;
 
@@ -80,7 +79,7 @@ fn get_language(headers: &hyper::http::HeaderMap) -> String {
 
     match cookie_from_header(headers, "PBSLangCookie") {
         Some(cookie_lang) if exists(&cookie_lang) => cookie_lang,
-        _ => match config::node::config().map(|(cfg, _)| cfg.default_lang) {
+        _ => match pbs_config::node::config().map(|(cfg, _)| cfg.default_lang) {
             Ok(Some(default_lang)) if exists(&default_lang) => default_lang,
             _ => String::from(""),
         },
@@ -145,7 +144,7 @@ async fn get_index_future(env: RestEnvironment, parts: Parts) -> Response<Body>
 
     let theme = get_theme(&parts.headers);
 
-    let consent = config::node::config()
+    let consent = pbs_config::node::config()
         .ok()
         .and_then(|config| config.0.consent_text)
         .unwrap_or("".to_string());
@@ -430,7 +429,7 @@ fn make_tls_acceptor() -> Result<SslAcceptor, Error> {
     let key_path = configdir!("/proxy.key");
     let cert_path = configdir!("/proxy.pem");
 
-    let (config, _) = config::node::config()?;
+    let (config, _) = pbs_config::node::config()?;
     let ciphers_tls_1_3 = config.ciphers_tls_1_3;
     let ciphers_tls_1_2 = config.ciphers_tls_1_2;
 
@@ -799,7 +798,7 @@ async fn schedule_task_log_rotate() {
                 let max_size = 512 * 1024 - 1; // an entry has ~ 100b, so > 5000 entries/file
                 let max_files = 20; // times twenty files gives > 100000 task entries
 
-                let max_days = proxmox_backup::config::node::config()
+                let max_days = pbs_config::node::config()
                     .map(|(cfg, _)| cfg.task_log_max_days)
                     .ok()
                     .flatten();
diff --git a/src/bin/proxmox-daily-update.rs b/src/bin/proxmox-daily-update.rs
index 025eb47fd..c4d68e306 100644
--- a/src/bin/proxmox-daily-update.rs
+++ b/src/bin/proxmox-daily-update.rs
@@ -67,7 +67,7 @@ async fn do_update(rpcenv: &mut dyn RpcEnvironment) -> Result<(), Error> {
 }
 
 async fn check_acme_certificates(rpcenv: &mut dyn RpcEnvironment) -> Result<(), Error> {
-    let (config, _) = proxmox_backup::config::node::config()?;
+    let (config, _) = pbs_config::node::config()?;
 
     // do we even have any acme domains configures?
     if config.acme_domains().next().is_none() {
diff --git a/src/config/mod.rs b/src/config/mod.rs
index f05af90d8..2de76bb14 100644
--- a/src/config/mod.rs
+++ b/src/config/mod.rs
@@ -15,7 +15,6 @@ use proxmox_lang::try_block;
 use pbs_api_types::{PamRealmConfig, PbsRealmConfig};
 use pbs_buildcfg::{self, configdir};
 
-pub mod node;
 pub mod tfa;
 
 /// Check configuration directory permissions
diff --git a/src/tools/mod.rs b/src/tools/mod.rs
index 6a975bde2..05225a843 100644
--- a/src/tools/mod.rs
+++ b/src/tools/mod.rs
@@ -13,7 +13,6 @@ use proxmox_http::{client::Client, HttpOptions, ProxyConfig};
 use pbs_datastore::backup_info::{BackupDir, BackupInfo};
 use pbs_datastore::manifest::BackupManifest;
 
-pub mod config;
 pub mod disks;
 pub mod fs;
 pub mod statistics;
-- 
2.47.3





  parent reply	other threads:[~2026-03-12 11:43 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-12 11:42 [PATCH proxmox{,-backup} v3 0/8] fix #6716: Add support for http proxy configuration for S3 endpoints Christian Ebner
2026-03-12 11:42 ` [PATCH proxmox v3 1/2] http: move http proxy schema from PBS to crate's api types Christian Ebner
2026-03-12 11:42 ` [PATCH proxmox v3 2/2] pbs-api-types: move over NodeConfig and related api type from PBS Christian Ebner
2026-03-12 11:42 ` [PATCH proxmox-backup v3 1/6] pbs-config: use http proxy schema moved to proxmox-http crate Christian Ebner
2026-03-12 11:42 ` [PATCH proxmox-backup v3 2/6] config: inline NodeConfig::validate() to its only call side Christian Ebner
2026-03-12 11:42 ` [PATCH proxmox-backup v3 3/6] config: use moved NodeConfig definitions in pbs-api-types Christian Ebner
2026-03-12 11:42 ` [PATCH proxmox-backup v3 4/6] tools: drop unused from_property_string() helper Christian Ebner
2026-03-12 11:42 ` Christian Ebner [this message]
2026-03-12 11:42 ` [PATCH proxmox-backup v3 6/6] fix #6716: pass node http proxy config to s3 backend 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=20260312114208.514373-8-c.ebner@proxmox.com \
    --to=c.ebner@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.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal