public inbox for pbs-devel@lists.proxmox.com
 help / color / mirror / Atom feed
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





  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
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal