Merge pull request #301 from TheGrandWazoo/chore/release-4.0.2

chore: release housekeeping for v4.0.2
This commit is contained in:
Kevin Scott Adams
2026-10-13 12:04:44 -04:00
committed by GitHub
6 changed files with 135 additions and 1 deletions
@@ -36,6 +36,12 @@ checklist, not infrastructure.
section exists yet (a smaller release that wasn't tracked incrementally),
write one now covering what actually shipped.
2a. **Debian changelogs**: prepend an `X.Y.Z-1` entry to `packaging/changelog.Debian`
and `packaging/DEBIAN-multipath/changelog.Debian`. These are what
`apt changelog` shows. They fell behind during v4.0.0/4.0.1, still topped
at 3.2.4/3.2.2, and were caught up at v4.0.2. Check with
`dpkg-parsechangelog -l <file> -S Version`.
3. **ROADMAP.md**: move the entry from "Upcoming" to "Released", following the
exact pattern already established for v3.0.0/v3.1.0/v3.2.0/v4.0.0 — Released
date, branch, GitHub Release link, "Confirmed tested" table (real versions
+66
View File
@@ -8,6 +8,72 @@ See each [GitHub Release](https://github.com/TheGrandWazoo/truenas-proxmox/relea
---
## [4.0.2] — 2026-10-13
Volume lifecycle fixes. Every change is backward compatible and `storage.cfg` is unchanged.
Milestone: *v4.0.2 — Volume lifecycle fixes*.
### Added
- **Disk resize** (`volume_resize`) for `truenas` and `truenas-multipath` (#294).
Before this, the base `Plugin.pm` died with `can't resize this image format`.
That blocked `qm disk resize`, the GUI, and Terraform cloud-image provisioning.
- The zvol is grown through the pool/dataset update API, aligned to 1 MiB and
sent as an integer `volsize` (required by SCALE's validation).
- The WebSocket transport gains the `PUT` → `pool.dataset.update` mapping.
- Multipath also rescans the target's kernel iSCSI sessions and runs
`multipathd resize map` when the device is active, so the QMP
`block_resize` on a running VM can grow past the old dm size.
- First Perl unit-test harness (`t/`, a mock TrueNAS API plus a PVE plugin stub),
run by `prove` in the CI lint job (#292).
### Fixed
- **Cloud-init drives**: `parse_volname` now accepts `vm-N-cloudinit` and
`base-N-cloudinit` (#294). `alloc_image` already created them, but every later
operation, including `qm destroy`, died with
`unable to parse TrueNAS volume name`.
- **`volume_size_info` in list context** now returns `(size, format, used, parent)`,
like ZFSPoolPlugin (#294). Before this, the content API, and the `bpg/proxmox`
Terraform provider that calls it, died with `no format`. A missing zvol now
dies instead of reporting a size of 0.
- **Orphan zvols couldn't be deleted** (#292). `path()` died on a zvol with no
iSCSI extent, so `pvesm free`, the GUI Remove and `qm destroy` couldn't clean up
failed allocations or v2-era leftovers. `path()` now returns a placeholder,
`iscsi://<portal>/unmapped/<vol>` (multipath:
`/dev/mapper/truenas-unmapped-<vol>`), together with the real owner and vtype.
`activate_volume` still refuses it, so no VM can open it.
- **`qm destroy` silently left multipath disks on TrueNAS** (#291). The
multipath `path()` returned the LUN id as the owner VMID and the storeid as the
vtype, so PVE skipped every disk while the task still reported `OK`.
`_naa_to_wwid(undef)` also returned a truthy `"3"`, which pointed at
`/dev/mapper/3`. It now returns undef.
### Changed
- **`truenas-proxmox-multipath` now depends on the exact same `truenas-proxmox`
version**, `(= X.Y.Z-1)` instead of `(>= 3.1.0)` (#299). The multipath plugin
calls the base plugin's private helpers and `SUPER::volume_resize`, so a
mismatched pair failed at runtime. CI fails the build if the dependency drifts.
### Documentation
- `docs/upgrade-paths.md` now has the real **v3.x → v4.x** in-place procedure
(pre-checks, track switch, verification, rollback) and the **v2.x → v4.x**
ordering. The README, getting-started and migrating-from-v2 now install from
`v4` on PVE 9 (#293).
- PVE 8 guidance corrected: v3.1+ already requires PVE 9 (ADR-009), so on PVE 8
only `3.0.0-1` loads and it must be pinned with `apt-mark hold`.
- README troubleshooting entries for #291, #292 and #294, with workarounds
for ≤ 4.0.1.
### Verified (live, PVE 9.2.21, pve01)
- Full cycle on every transport and storage type: create with a cloud-init
drive, content API `format: raw`, resize +1G while stopped, start, resize
+1G while running (QEMU sees the new size), `qm cloudinit update`, then
`qm destroy --purge` with no orphan volumes and no iSCSI sessions left.
- TrueNAS CORE 13.0-U6.8, REST transport
- TrueNAS SCALE 25.04.2.6, WebSocket transport
- TrueNAS SCALE 25.10.6, WebSocket transport
- `truenas-multipath` on SCALE 25.04.2.6, two portals
- `prove t/` passes, and perlcritic is clean.
## [4.0.1] — 2026-09-01
### Fixed
+36
View File
@@ -201,6 +201,42 @@ Also verified as part of this release: a full `alloc_image`/`free_image`/snapsho
---
## Released — v4.0.2 (Volume lifecycle fixes)
**Released:** 2026-10-13
**Branch:** `main`
**GitHub Release:** https://github.com/TheGrandWazoo/freenas-proxmox/releases/tag/v4.0.2
**Backport:** v3.2.6 on `release/3.x` (REST only, multipath included)
Closes the volume-lifecycle gaps found while running real workloads (Terraform cloud-image provisioning, orphan cleanup after the cluster's PVE 9 upgrade): disk resize, cloud-init drives, content-API sizing, deletable orphans, and multipath `qm destroy`. Also adds the first unit-test harness (`t/` + `prove` in CI).
### Confirmed tested
| Component | Versions |
|-----------|---------|
| Proxmox VE | 9.2.21 |
| TrueNAS CORE | 13.0-U6.8 (REST transport) |
| TrueNAS SCALE | 25.04.2.6, 25.10.6 (WebSocket transport); multipath on 25.04.2.6 with two portals |
### What shipped
| # | Title | Commit |
|---|-------|--------|
| [#292](https://github.com/TheGrandWazoo/freenas-proxmox/issues/292) | `path()` placeholder for extent-less zvols — orphans deletable via PVE | f5e625a |
| [#291](https://github.com/TheGrandWazoo/freenas-proxmox/issues/291) | Multipath `path()` returns owner VMID — `qm destroy` no longer orphans disks | 8c919d1 |
| [#294](https://github.com/TheGrandWazoo/freenas-proxmox/issues/294) | `volume_resize`, cloud-init volnames, list-context `volume_size_info` | 83bda13 |
| [#293](https://github.com/TheGrandWazoo/freenas-proxmox/issues/293) | Docs: real v3→v4 upgrade path; PVE 8 pin to 3.0.0-1 | 615d779 |
| [#299](https://github.com/TheGrandWazoo/freenas-proxmox/issues/299) | Multipath depends on the exact base package version | e40d6d8 |
### Ideas under consideration (not committed)
| # | Title | Notes |
|---|-------|-------|
| — | Multipath: degrade instead of fail when one of N portals is down | Seen in the #294 lab test (2026-10-12): one unreachable portal made `activate_volume` fail outright. Should it log in on the remaining paths and warn? |
| — | Multipath: quieter `deactivate_volume` | `qm stop` prints `iscsiadm: No matching sessions found` / `No records found`. Harmless, but noisy. |
---
## Process Rules
- Every business decision (defer, hold, change scope) is recorded here **and** as a comment on the relevant GitHub issue — not only in conversation or AI memory.
@@ -1,3 +1,14 @@
truenas-proxmox-multipath (4.0.2-1) trixie; urgency=medium
* volume_resize: rescan kernel iSCSI sessions and multipathd resize map
so running VMs see the grown disk (#294)
* path() returns the owner VMID and vtype; qm destroy no longer silently
orphans multipath disks (#291)
* _naa_to_wwid(undef) returns undef instead of "3" (#291)
* Depend on the exact same truenas-proxmox version (#299)
-- KSA Technologies, LLC <theprofessor@ksatechnologies.com> Tue, 13 Oct 2026 00:00:00 +0000
truenas-proxmox-multipath (3.2.2-1) bookworm; urgency=low
* Version bump to match truenas-proxmox 3.2.2; api() fix inherited from TrueNAS.pm
+15
View File
@@ -1,3 +1,18 @@
truenas-proxmox (4.0.2-1) trixie; urgency=medium
* Add volume_resize (zvol grow via pool/dataset update; WebSocket PUT
mapping) so qm disk resize works, including on running VMs (#294)
* parse_volname accepts vm-N-cloudinit / base-N-cloudinit (#294)
* volume_size_info returns (size, format, used, parent) in list context;
fixes content API "no format" (#294)
* path() returns a placeholder for extent-less zvols so orphans can be
freed through PVE (#292)
* Multipath path() returns the owner VMID and vtype so qm destroy no
longer leaves multipath disks behind (#291)
* v4.0.0/4.0.1 (WebSocket transport for SCALE 25.04+) — see CHANGELOG.md
-- KSA Technologies, LLC <theprofessor@ksatechnologies.com> Tue, 13 Oct 2026 00:00:00 +0000
truenas-proxmox (3.2.4-1) bookworm; urgency=medium
* Fix postinst/postrm to also restart pvestatd, pve-ha-lrm, pve-ha-crm on
+1 -1
View File
@@ -58,7 +58,7 @@ use PVE::Storage::Plugin;
use base qw(PVE::Storage::Plugin);
our $VERSION = '4.0.1';
our $VERSION = '4.0.2';
# Per-host runtime state cache
my $state = {};