[pdm-devel] applied-series: [PATCH proxmox-api-types 1/2] fix PVE8 node status API call
Wolfgang Bumiller
w.bumiller at proxmox.com
Mon Sep 1 14:26:24 CEST 2025
Applied this for now.
Will need to think about how to best do this in general.
One way or another it would probably be good to have the API as a json
input. Ideally we could also drop the *use* of `PVE::API2` in the
generator then, but then we also need to store the named schemas from
registered into `PVE::JSONSchema` from PVE (which does make sense,
though, given that this is part of the API...)
On Fri, Aug 29, 2025 at 12:06:51PM +0200, Dominik Csapak wrote:
> PVE9 added a new non-optional field that does not exist in 8, so for now
> overwrite that specific struct with a custom one where 'available' is
> optional. This makes the deserialization work again for PVE8 too
>
> In the future we need to think about how to handle different APIs
> between version in a better way.
>
> Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
> ---
> pve-api-types/generate.pl | 29 +++++++++++++++++++++++++++++
> 1 file changed, 29 insertions(+)
>
> diff --git a/pve-api-types/generate.pl b/pve-api-types/generate.pl
> index b761a88..966c4d0 100644
> --- a/pve-api-types/generate.pl
> +++ b/pve-api-types/generate.pl
> @@ -264,6 +264,35 @@ Schema2Rust::derive('NetworkInterface' => 'Clone', 'PartialEq');
> api(GET => '/nodes/{node}/storage', 'list_storages', 'return-name' => 'StorageInfo');
> Schema2Rust::derive('StorageInfo' => 'Clone', 'PartialEq');
>
> +# FIXME: PVE9 introduced a new non optional property, but that does not
> +# exist in PVE8, so make it optional here for older PVEs to work
> +Schema2Rust::generate_struct(
> + 'NodeStatusMemory',
> + {
> + type => 'object',
> + properties => {
> + 'available' => {
> + type => 'integer',
> + description => 'The available memory in bytes.',
> + optional => 1,
> + },
> + 'free' => {
> + type => 'integer',
> + description => 'The free memory in bytes.',
> + },
> + 'total' => {
> + type => 'integer',
> + description => 'The total memory in bytes.',
> + },
> + 'used' => {
> + type => 'integer',
> + description => 'The used memory in bytes.',
> + },
> + },
> + },
> + {},
> + {},
> +);
> api(GET => '/nodes/{node}/status', 'node_status', 'return-name' => 'NodeStatus');
>
> Schema2Rust::register_api_override('ClusterMetrics', '/properties/data/items', { type => "ClusterMetricsData"});
> --
> 2.47.2
More information about the pdm-devel
mailing list