[pbs-devel] [RFC PATCH v2 proxmox-backup 1/7] api2: Introduce server features discovery mechanism
Christoph Heiss
c.heiss at proxmox.com
Wed Jan 25 13:18:56 CET 2023
This is vaguely based on the idea to introduce some sort of API
compatibility mechansim, to detect whether e.g. a new API parameter is
supported by the server or not. [0]
Essentially, a new `features` field is added to the `/version` endpoint,
which is an array (of strings) of supported (backwards-incompatible)
features by the server. Clients can retrieve this and act accordingly.
Features are internally described as an enum, with kebab-case'd names
for external consumption through the API.
Some inspriration was taken from how proxmox backup support in QEMU
works, using `query-proxmox-support` command.
This is intended as a first proposal on how this mechanism could work.
[0] https://lists.proxmox.com/pipermail/pbs-devel/2023-January/005867.html ff.
Signed-off-by: Christoph Heiss <c.heiss at proxmox.com>
---
Changes v1 -> v2:
* New patch
pbs-api-types/src/lib.rs | 9 +++++++++
src/api2/version.rs | 4 +++-
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/pbs-api-types/src/lib.rs b/pbs-api-types/src/lib.rs
index 5e043954..dda2bd5b 100644
--- a/pbs-api-types/src/lib.rs
+++ b/pbs-api-types/src/lib.rs
@@ -531,3 +531,12 @@ pub struct BasicRealmInfo {
#[serde(skip_serializing_if = "Option::is_none")]
pub comment: Option<String>,
}
+
+#[api]
+#[derive(Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(rename_all = "kebab-case")]
+/// List of features a server can supported.
+pub enum ServerFeature {
+ /// Indicates that the `protected` parameter on the /finish endpoint is suppported
+ FinishHasProtectedParam,
+}
diff --git a/src/api2/version.rs b/src/api2/version.rs
index 0e91688b..0d6e66c4 100644
--- a/src/api2/version.rs
+++ b/src/api2/version.rs
@@ -3,6 +3,7 @@
use anyhow::Error;
use serde_json::{json, Value};
+use pbs_api_types::ServerFeature;
use proxmox_router::{ApiHandler, ApiMethod, Permission, Router, RpcEnvironment};
use proxmox_schema::ObjectSchema;
@@ -14,7 +15,8 @@ fn get_version(
Ok(json!({
"version": pbs_buildcfg::PROXMOX_PKG_VERSION,
"release": pbs_buildcfg::PROXMOX_PKG_RELEASE,
- "repoid": pbs_buildcfg::PROXMOX_PKG_REPOID
+ "repoid": pbs_buildcfg::PROXMOX_PKG_REPOID,
+ "features": [ServerFeature::FinishHasProtectedParam],
}))
}
--
2.34.1
More information about the pbs-devel
mailing list