From c0971ff4c2cdba482876da51c673d87e5c104c40 Mon Sep 17 00:00:00 2001 From: Alan Sandoval Date: Tue, 6 Jan 2026 22:13:31 -0600 Subject: [PATCH] fix(freenas-api): Cast capacity values to Number for TrueNAS 25.x compatibility TrueNAS 25.x introduced stricter Pydantic validation for API inputs. The refquota, refreservation, and volsize properties now require strict integer types. This wraps capacity_bytes in Number() to ensure proper type conversion before sending to the TrueNAS API. Fixes provisioning failures with error: {"data.refquota.constrained-int":[{"message":"Input should be a valid integer"}]} --- src/driver/freenas/api.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/driver/freenas/api.js b/src/driver/freenas/api.js index c5df0a0..2bb0f3e 100644 --- a/src/driver/freenas/api.js +++ b/src/driver/freenas/api.js @@ -2809,15 +2809,16 @@ class FreeNASApiDriver extends CsiBaseDriver { switch (driverZfsResourceType) { case "filesystem": // set quota + // Note: TrueNAS 25.x requires strict integer types for refquota/refreservation if (this.options.zfs.datasetEnableQuotas) { setProps = true; - properties.refquota = capacity_bytes; + properties.refquota = Number(capacity_bytes); } // set reserve if (this.options.zfs.datasetEnableReservation) { setProps = true; - properties.refreservation = capacity_bytes; + properties.refreservation = Number(capacity_bytes); } // quota for dataset and all children @@ -3211,19 +3212,20 @@ class FreeNASApiDriver extends CsiBaseDriver { switch (driverZfsResourceType) { case "filesystem": // set quota + // Note: TrueNAS 25.x requires strict integer types for refquota/refreservation if (this.options.zfs.datasetEnableQuotas) { setProps = true; - properties.refquota = capacity_bytes; + properties.refquota = Number(capacity_bytes); } // set reserve if (this.options.zfs.datasetEnableReservation) { setProps = true; - properties.refreservation = capacity_bytes; + properties.refreservation = Number(capacity_bytes); } break; case "volume": - properties.volsize = capacity_bytes; + properties.volsize = Number(capacity_bytes); setProps = true; // managed automatically for zvols