From: Christoph Heiss <c.heiss@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [pbs-devel] [RFC PATCH v2 proxmox-backup 1/7] api2: Introduce server features discovery mechanism
Date: Wed, 25 Jan 2023 13:18:56 +0100 [thread overview]
Message-ID: <20230125121902.404950-2-c.heiss@proxmox.com> (raw)
In-Reply-To: <20230125121902.404950-1-c.heiss@proxmox.com>
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@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
next prev parent reply other threads:[~2023-01-25 12:19 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-25 12:18 [pbs-devel] [RFC PATCH v2 proxmox-backup{, -qemu}, pve-{qemu, manager}, qemu-server 0/7] fix #4289: Set protected flag on backup creation Christoph Heiss
2023-01-25 12:18 ` Christoph Heiss [this message]
2023-01-25 15:56 ` [pbs-devel] [RFC PATCH v2 proxmox-backup 1/7] api2: Introduce server features discovery mechanism Thomas Lamprecht
2023-01-26 12:33 ` Christoph Heiss
2023-01-25 12:18 ` [pbs-devel] [RFC PATCH v2 proxmox-backup 2/7] api2: Add `protected` parameter to `finish` endpoint Christoph Heiss
2023-01-25 12:18 ` [pbs-devel] [RFC PATCH v2 proxmox-backup 3/3] client: Add `--protected` CLI flag to backup command Christoph Heiss
2023-01-25 12:18 ` [pbs-devel] [RFC PATCH v2 proxmox-backup-qemu 4/7] api: Supply `protected` parameter to the `finish` API call Christoph Heiss
2023-01-25 12:19 ` [pbs-devel] [RFC PATCH v2 pve-qemu 5/7] pve: Add patch to support new proxmox-backup-qemu API Christoph Heiss
2023-01-25 12:19 ` [pbs-devel] [RFC PATCH v2 qemu-server 6/7] vzdump: Set protected flag on backup start if supported Christoph Heiss
2023-01-25 12:19 ` [pbs-devel] [RFC PATCH v2 pve-manager 7/7] vzdump: Only set protected attribute if not already done Christoph Heiss
2023-01-25 16:00 ` [pbs-devel] [RFC PATCH v2 proxmox-backup{, -qemu}, pve-{qemu, manager}, qemu-server 0/7] fix #4289: Set protected flag on backup creation Thomas Lamprecht
2023-01-26 12:44 ` Christoph Heiss
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=20230125121902.404950-2-c.heiss@proxmox.com \
--to=c.heiss@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