From: Wolfgang Bumiller <w.bumiller@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH v8 storage 5/8] plugin api: bump api version and age
Date: Thu, 3 Apr 2025 14:30:55 +0200 [thread overview]
Message-ID: <20250403123118.264974-16-w.bumiller@proxmox.com> (raw)
In-Reply-To: <20250403123118.264974-1-w.bumiller@proxmox.com>
From: Fiona Ebner <f.ebner@proxmox.com>
Changes for version 11:
* Allow declaring storage features via plugin data.
* Introduce new_backup_provider() plugin method.
* Allow declaring sensitive properties via plugin data.
See the api changelog file for details.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---
No changes to v7.
ApiChangeLog | 32 ++++++++++++++++++++++++++++++++
src/PVE/Storage.pm | 4 ++--
2 files changed, 34 insertions(+), 2 deletions(-)
diff --git a/ApiChangeLog b/ApiChangeLog
index 98b5893..987da54 100644
--- a/ApiChangeLog
+++ b/ApiChangeLog
@@ -6,6 +6,38 @@ without breaking anything unaware of it.)
Future changes should be documented in here.
+## Version 11:
+
+* Allow declaring storage features via plugin data
+
+ A new `storage_has_feature()` helper function was added that checks a storage plugin's features.
+ Plugins can indicate support for certain features in their `plugindata`. The first such feature is
+ `backup-provider`, see below for more details. To declare support for this feature, return
+ `features => { 'backup-provider' => 1 }` as part of the plugin data.
+
+* Introduce new_backup_provider() plugin method
+
+ Proxmox VE now supports a `Backup Provider API` that can be used to implement custom backup
+ solutions tightly integrated in the Proxmox VE stack. See the `PVE::BackupProvider::Plugin::Base`
+ module for detailed documentation. A backup provider also needs to implement an associated storage
+ plugin for user-facing integration in Proxmox VE. Such a plugin needds to opt-in to the
+ `backup-provider` feature (see above) and implement the new_backup_provider() method, returning a
+ blessed reference to the backup provider class. The rest of the plugin methods, e.g. listing
+ content, providing usage information, etc., follow the same API as usual.
+
+* Allow declaring sensitive properties via plugin data
+
+ A new `sensitive_properties()` helper function was added to get the list of sensitive properties
+ a plugin uses via the plugin's `plugindata`. The sensitive properties are passed separately from
+ other properties to the `on_add_hook()` and `on_update_hook()` methods and should not be written
+ to the storage configuration file directly, but stored in the more restricted
+ `/etc/pve/priv/storage` directory on the Proxmox Cluster File System. For example, to declare that
+ a `ssh-private-key` property used by the plugin is sensitive, return
+ `'sensitive-properties' => { 'ssh-private-key' => 1 }` as part of the plugin data. The list of
+ sensitive properties was hard-coded previously, as `encryption-key`, `keyring`, `master-pubkey`,
+ `password`. For backwards compatibility, this list is still used if a plugin doesn't declare its
+ own sensitive properties.
+
## Version 10:
* a new `rename_volume` method has been added
diff --git a/src/PVE/Storage.pm b/src/PVE/Storage.pm
index 7fd97b7..10a4abc 100755
--- a/src/PVE/Storage.pm
+++ b/src/PVE/Storage.pm
@@ -42,11 +42,11 @@ use PVE::Storage::BTRFSPlugin;
use PVE::Storage::ESXiPlugin;
# Storage API version. Increment it on changes in storage API interface.
-use constant APIVER => 10;
+use constant APIVER => 11;
# Age is the number of versions we're backward compatible with.
# This is like having 'current=APIVER' and age='APIAGE' in libtool,
# see https://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html
-use constant APIAGE => 1;
+use constant APIAGE => 2;
our $KNOWN_EXPORT_FORMATS = ['raw+size', 'tar+size', 'qcow2+size', 'vmdk+size', 'zfs', 'btrfs'];
--
2.39.5
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
next prev parent reply other threads:[~2025-04-03 12:34 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-03 12:30 [pve-devel] [PATCH v8 storage 0/9] backup provider API Wolfgang Bumiller
2025-04-03 12:30 ` [pve-devel] [PATCH v8 qemu 01/10] PVE backup: clean up directly in setup_snapshot_access() when it fails Wolfgang Bumiller
2025-04-03 12:30 ` [pve-devel] [PATCH v8 qemu 02/10] PVE backup: factor out helper to clear backup state's bitmap list Wolfgang Bumiller
2025-04-03 12:30 ` [pve-devel] [PATCH v8 qemu 03/10] PVE backup: factor out helper to initialize backup state stat struct Wolfgang Bumiller
2025-04-03 12:30 ` [pve-devel] [PATCH v8 qemu 04/10] PVE backup: add target ID in backup state Wolfgang Bumiller
2025-04-03 12:30 ` [pve-devel] [PATCH v8 qemu 05/10] PVE backup: get device info: allow caller to specify filter for which devices use fleecing Wolfgang Bumiller
2025-04-03 12:30 ` [pve-devel] [PATCH v8 qemu 06/10] PVE backup: implement backup access setup and teardown API for external providers Wolfgang Bumiller
2025-04-03 12:30 ` [pve-devel] [PATCH v8 qemu 07/10] PVE backup: factor out get_single_device_info() helper Wolfgang Bumiller
2025-04-03 12:30 ` [pve-devel] [PATCH v8 qemu 08/10] PVE backup: implement bitmap support for external backup access Wolfgang Bumiller
2025-04-03 12:30 ` [pve-devel] [PATCH v8 qemu 09/10] PVE backup: backup-access api: indicate situation where a bitmap was recreated Wolfgang Bumiller
2025-04-03 12:30 ` [pve-devel] [PATCH v8 qemu 10/10] PVE backup: backup-access-api: explicit bitmap-mode parameter Wolfgang Bumiller
2025-04-03 12:30 ` [pve-devel] [PATCH v8 storage 1/8] add storage_has_feature() helper function Wolfgang Bumiller
2025-04-03 12:30 ` [pve-devel] [PATCH v8 storage 2/8] common: add deallocate " Wolfgang Bumiller
2025-04-03 12:30 ` [pve-devel] [PATCH v8 storage 3/8] plugin: introduce new_backup_provider() method Wolfgang Bumiller
2025-04-03 12:30 ` [pve-devel] [PATCH v8 storage 4/8] config api/plugins: let plugins define sensitive properties themselves Wolfgang Bumiller
2025-04-03 12:30 ` Wolfgang Bumiller [this message]
2025-04-03 12:30 ` [pve-devel] [PATCH v8 storage 6/8] extract backup config: delegate to backup provider for storages that support it Wolfgang Bumiller
2025-04-03 12:30 ` [pve-devel] [POC v8 storage 7/8] add backup provider example Wolfgang Bumiller
2025-04-04 6:58 ` Wolfgang Bumiller
2025-04-03 12:30 ` [pve-devel] [POC v8 storage 8/8] Borg example plugin Wolfgang Bumiller
2025-04-03 12:30 ` [pve-devel] [PATCH v8 qemu-server 01/11] backup: keep track of block-node size for fleecing Wolfgang Bumiller
2025-04-03 12:31 ` [pve-devel] [PATCH v8 qemu-server 02/11] backup: fleecing: use exact size when allocating non-raw fleecing images Wolfgang Bumiller
2025-04-03 12:31 ` [pve-devel] [PATCH v8 qemu-server 03/11] backup: allow adding fleecing images also for EFI and TPM Wolfgang Bumiller
2025-04-03 12:31 ` [pve-devel] [PATCH v8 qemu-server 04/11] backup: implement backup for external providers Wolfgang Bumiller
2025-04-03 12:31 ` [pve-devel] [PATCH v8 qemu-server 05/11] test: qemu img convert: add test cases for snapshots Wolfgang Bumiller
2025-04-03 12:31 ` [pve-devel] [PATCH v8 qemu-server 06/11] image convert: collect options in hash argument Wolfgang Bumiller
2025-04-03 12:31 ` [pve-devel] [PATCH v8 qemu-server 07/11] image convert: allow caller to specify the format of the source path Wolfgang Bumiller
2025-04-03 12:31 ` [pve-devel] [PATCH v8 qemu-server 08/11] backup: implement restore for external providers Wolfgang Bumiller
2025-04-03 12:31 ` [pve-devel] [PATCH v8 qemu-server 09/11] backup: future-proof checks for QEMU feature support Wolfgang Bumiller
2025-04-03 12:31 ` [pve-devel] [PATCH v8 qemu-server 10/11] backup: support 'missing-recreated' bitmap action Wolfgang Bumiller
2025-04-03 12:31 ` [pve-devel] [PATCH v8 qemu-server 11/11] backup: bitmap action to human: lie about TPM state Wolfgang Bumiller
2025-04-03 12:31 ` [pve-devel] [PATCH v8 container 1/7] add LXC::Namespaces module Wolfgang Bumiller
2025-04-03 12:31 ` [pve-devel] [PATCH v8 container 2/7] backup: implement backup for external providers Wolfgang Bumiller
2025-04-03 12:31 ` [pve-devel] [PATCH v8 container 3/7] backup: implement restore " Wolfgang Bumiller
2025-04-03 12:31 ` [pve-devel] [PATCH v8 container 4/7] external restore: don't use 'one-file-system' tar flag when restoring from a directory Wolfgang Bumiller
2025-04-03 12:31 ` [pve-devel] [PATCH v8 container 5/7] create: factor out compression option helper Wolfgang Bumiller
2025-04-03 12:31 ` [pve-devel] [PATCH v8 container 6/7] restore tar archive: check potentially untrusted archive Wolfgang Bumiller
2025-04-03 12:31 ` [pve-devel] [PATCH v8 container 7/7] api: add early check against restoring privileged container from external source Wolfgang Bumiller
2025-04-03 12:31 ` [pve-devel] [PATCH v8 manager 1/2] ui: backup: also check for backup subtype to classify archive Wolfgang Bumiller
2025-04-03 12:31 ` [pve-devel] [PATCH v8 manager 2/2] backup: implement backup for external providers Wolfgang Bumiller
2025-04-03 16:10 ` [pve-devel] partially-applied-series: [PATCH v8 storage 0/9] backup provider API Thomas Lamprecht
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=20250403123118.264974-16-w.bumiller@proxmox.com \
--to=w.bumiller@proxmox.com \
--cc=pve-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