FreeNAS/freenas a0a6655src/middlewared/middlewared/plugins/pool_ pool_operations.py

Fix configure resilver priority
DeltaFile
+1-1src/middlewared/middlewared/plugins/pool_/pool_operations.py
+1-11 files

FreeNAS/freenas d6af206src/middlewared/middlewared/pytest/unit/plugins/pool test_resilver.py

Format tests file
DeltaFile
+14-14src/middlewared/middlewared/pytest/unit/plugins/pool/test_resilver.py
+14-141 files

FreeNAS/freenas d63eb58src/middlewared/middlewared/plugins/pool_ pool_operations.py

Organize imports
DeltaFile
+7-2src/middlewared/middlewared/plugins/pool_/pool_operations.py
+7-21 files

FreeNAS/freenas 238b691src/middlewared/middlewared/plugins/pool_ pool_operations.py, src/middlewared/middlewared/pytest/unit/plugins/pool test_resilver.py

Fix the actual bug
DeltaFile
+0-9src/middlewared/middlewared/pytest/unit/plugins/pool/test_resilver.py
+1-1src/middlewared/middlewared/plugins/pool_/pool_operations.py
+1-102 files

FreeNAS/freenas a8ee6b7src/middlewared/middlewared/plugins/pool_ pool_operations.py, src/middlewared/middlewared/pytest/unit/plugins/pool test_resilver.py

Extract `calculate_resilver_priority` method
DeltaFile
+170-0src/middlewared/middlewared/pytest/unit/plugins/pool/test_resilver.py
+58-33src/middlewared/middlewared/plugins/pool_/pool_operations.py
+228-332 files

FreeNAS/freenas b1f5621src/middlewared/middlewared/test/integration/runner ssh.py context.py, src/middlewared/middlewared/test/integration/utils legacy_functions.py

Cleanup SSH tests code
DeltaFile
+1-44src/middlewared/middlewared/test/integration/runner/ssh.py
+3-5src/middlewared/middlewared/test/integration/runner/context.py
+2-5tests/api2/test_001_ssh.py
+5-1src/middlewared/middlewared/test/integration/utils/legacy_functions.py
+1-1src/middlewared/middlewared/test/integration/runner/config.py
+12-565 files

FreeNAS/freenas 36049dcsrc/middlewared/middlewared/plugins/disk_ disk_info.py

Fix `list_partitions` crash
DeltaFile
+1-1src/middlewared/middlewared/plugins/disk_/disk_info.py
+1-11 files

FreeNAS/freenas 8d18e99src/middlewared/middlewared/test/integration/runner ssh.py context.py, src/middlewared/middlewared/test/integration/utils legacy_functions.py

Cleanup SSH tests code
DeltaFile
+1-44src/middlewared/middlewared/test/integration/runner/ssh.py
+2-5tests/api2/test_001_ssh.py
+2-4src/middlewared/middlewared/test/integration/runner/context.py
+5-1src/middlewared/middlewared/test/integration/utils/legacy_functions.py
+1-1src/middlewared/middlewared/test/integration/runner/config.py
+11-555 files

FreeNAS/freenas 4bbdf64src/middlewared/middlewared/alembic/versions/26.0 2025-11-05_13-37-00_container_fields_cleanup.py 2025-11-06_21-48-00_disk_raw_container_cleanup.py

Fix container/VM migrations crash when ran without pwenc secret
DeltaFile
+4-1src/middlewared/middlewared/alembic/versions/26.0/2025-11-05_13-37-00_container_fields_cleanup.py
+4-1src/middlewared/middlewared/alembic/versions/26.0/2025-11-06_21-48-00_disk_raw_container_cleanup.py
+4-1src/middlewared/middlewared/alembic/versions/26.0/2025-10-13_12-00_add_mac_to_vm_nics.py
+12-33 files

FreeNAS/freenas 1d0320fsrc/middlewared/middlewared/alembic/versions/25.10 2025-08-29_15-41_second_syslog_server.py 2025-03-06_01-25_remove_syslog_tls_certificate_authority.py

Handle absent system.advanced foreign key constraints in migrations
DeltaFile
+13-1src/middlewared/middlewared/alembic/versions/25.10/2025-08-29_15-41_second_syslog_server.py
+13-1src/middlewared/middlewared/alembic/versions/25.10/2025-03-06_01-25_remove_syslog_tls_certificate_authority.py
+26-22 files

FreeNAS/freenas 026cc7btests runtest.py

Support `--ha-license-path`
DeltaFile
+4-0tests/runtest.py
+4-01 files

FreeNAS/freenas 10eacf1src/middlewared/middlewared/api/base/types json_schema.py, src/middlewared/middlewared/api/v25_10_0 common.py

Remove shared pydantic `Field()` from API type aliases
DeltaFile
+30-0src/middlewared/middlewared/api/base/types/json_schema.py
+9-6src/middlewared/middlewared/api/v25_10_1/common.py
+9-6src/middlewared/middlewared/api/v25_10_3/common.py
+9-6src/middlewared/middlewared/api/v25_10_4/common.py
+9-6src/middlewared/middlewared/api/v25_10_0/common.py
+9-6src/middlewared/middlewared/api/v25_10_2/common.py
+75-3074 files not shown
+286-19380 files

FreeNAS/freenas 8faad14src/middlewared/middlewared/pytest/unit/api/handler/version test_adapt_alias.py

Fix handling field aliases in `APIVersionsAdapter`

(cherry picked from commit 7ec52e77ceb64b180a2aa110d0a35720e27bbc37)
DeltaFile
+28-0src/middlewared/middlewared/pytest/unit/api/handler/version/test_adapt_alias.py
+28-01 files

FreeNAS/freenas 6218630

Empty commit to create PR on github.

You should reset it
DeltaFile
+0-00 files

FreeNAS/freenas 5cd3891

Empty commit to create PR on github.

You should reset it
DeltaFile
+0-00 files

FreeNAS/freenas 90df43asrc/middlewared/middlewared/api/base/handler version.py, src/middlewared/middlewared/pytest/unit/api/handler/version test_adapt_alias.py

NAS-141362 / 25.10.4.1 / Fix handling field aliases in `APIVersionsAdapter` (#19108)

Not handling field aliases properly results in a series of tests
failing:

```
test_query_method[legacy_api_client=v25.10.3-query_method=audit.query] api2.test_legacy_api

middlewared.service_exception.ValidationErrors: [EINVAL] data.query_filters: Extra inputs are not permitted
[EINVAL] data.query_options: Extra inputs are not permitted
```
DeltaFile
+28-0src/middlewared/middlewared/pytest/unit/api/handler/version/test_adapt_alias.py
+8-5src/middlewared/middlewared/api/base/handler/version.py
+36-52 files

FreeNAS/freenas 59633b9tests/api2 test_audit_rest.py test_cloud_sync_custom_s3.py

NAS-141363 / 25.10.4.1 / Fix some integration tests (#19110)
DeltaFile
+5-5tests/api2/test_audit_rest.py
+1-2tests/api2/test_cloud_sync_custom_s3.py
+0-1tests/api2/test_alert_classes.py
+6-83 files

FreeNAS/freenas 87b223esrc/middlewared/middlewared/etc_files scst.conf.mako

NAS-140265 / 26.0.0-RC.1 / Always render security_group ACG for FC targets (by bmeagherix) (#19112)

When an FC target's middleware initiator setting resolves to no WWPNs,
the mako previously dropped the GROUP security_group block entirely.
pyscstadmin's diff then has to issue del_group against the running
kernel, which SCST rejects with -EBUSY while FC sessions remain
attached. The result is /etc/scst.conf and the running configuration
silently diverging until a stop/start of the iscsi service.

Default the rendered initiator set to {'*'} when no WWPN restriction is
configured so the ACG is always present. Initiator updates then become
in-place INITIATOR add/remove operations rather than del_group; SCST
applies those cleanly.

----
Tested manually with FC.

Original PR: https://github.com/truenas/middleware/pull/19111

Co-authored-by: Brian M <brian.meagher at ixsystems.com>
DeltaFile
+5-1src/middlewared/middlewared/etc_files/scst.conf.mako
+5-11 files

FreeNAS/freenas 3136475src/middlewared/middlewared/etc_files scst.conf.mako

Always render security_group ACG for FC targets

When an FC target's middleware initiator setting resolves to no WWPNs,
the mako previously dropped the GROUP security_group block entirely.
pyscstadmin's diff then has to issue del_group against the running
kernel, which SCST rejects with -EBUSY while FC sessions remain
attached. The result is /etc/scst.conf and the running configuration
silently diverging until a stop/start of the iscsi service.

Default the rendered initiator set to {'*'} when no WWPN restriction
is configured so the ACG is always present. Initiator updates then
become in-place INITIATOR add/remove operations rather than del_group;
SCST applies those cleanly.

(cherry picked from commit 879c8b0bd25be998c5c37e0ea9624bcf2b1d4451)
DeltaFile
+5-1src/middlewared/middlewared/etc_files/scst.conf.mako
+5-11 files

FreeNAS/freenas 1ed7772src/middlewared/middlewared/etc_files scst.conf.mako

NAS-140265 / 27.0.0-BETA.1 / Always render security_group ACG for FC targets (#19111)

When an FC target's middleware initiator setting resolves to no WWPNs,
the mako previously dropped the GROUP security_group block entirely.
pyscstadmin's diff then has to issue del_group against the running
kernel, which SCST rejects with -EBUSY while FC sessions remain
attached. The result is /etc/scst.conf and the running configuration
silently diverging until a stop/start of the iscsi service.

Default the rendered initiator set to {'*'} when no WWPN restriction is
configured so the ACG is always present. Initiator updates then become
in-place INITIATOR add/remove operations rather than del_group; SCST
applies those cleanly.
DeltaFile
+5-1src/middlewared/middlewared/etc_files/scst.conf.mako
+5-11 files

FreeNAS/freenas 879c8b0src/middlewared/middlewared/etc_files scst.conf.mako

Always render security_group ACG for FC targets

When an FC target's middleware initiator setting resolves to no WWPNs,
the mako previously dropped the GROUP security_group block entirely.
pyscstadmin's diff then has to issue del_group against the running
kernel, which SCST rejects with -EBUSY while FC sessions remain
attached. The result is /etc/scst.conf and the running configuration
silently diverging until a stop/start of the iscsi service.

Default the rendered initiator set to {'*'} when no WWPN restriction
is configured so the ACG is always present. Initiator updates then
become in-place INITIATOR add/remove operations rather than del_group;
SCST applies those cleanly.
DeltaFile
+5-1src/middlewared/middlewared/etc_files/scst.conf.mako
+5-11 files

FreeNAS/freenas cd79bfasrc/middlewared/middlewared/alembic/versions/26.0 2026-06-08_12-30_vm_suspend_on_snapshot_default.py, src/middlewared/middlewared/alembic/versions/27.0 2026-06-11_15-08_merge.py

NAS-141321 / 27.0.0-BETA.1 / Suspend VMs on snapshot by default (by creatorcary) (#19109)

## Summary

Change the default value of the per-VM `suspend_on_snapshot` setting
from `false` to `true`, so that newly created VMs — and existing ones
that never explicitly set it — are quiesced while a periodic snapshot of
their disk dataset is taken. This produces crash-consistent disk images
instead of snapshotting a running VM's storage live.

This restores the effective behavior that existed before #19053. Prior
to that PR, `vm.suspend_vms` suspended every running VM on its dataset's
snapshot regardless of the per-VM `suspend_on_snapshot` value — so in
practice running VMs were *always* suspended. #19053 fixed the flag so
it is actually honored. But because the field defaulted to `false`,
honoring it meant most VMs would no longer be suspended on snapshot — a
regression from the long-standing behavior. Flipping the default to
`true` keeps suspend-on-snapshot as the out-of-the-box behavior while
still letting users opt out per VM.

    [12 lines not shown]
DeltaFile
+28-0src/middlewared/middlewared/alembic/versions/26.0/2026-06-08_12-30_vm_suspend_on_snapshot_default.py
+24-0src/middlewared/middlewared/alembic/versions/27.0/2026-06-11_15-08_merge.py
+1-1src/middlewared/middlewared/api/v25_04_2/vm.py
+1-1src/middlewared/middlewared/api/v25_10_0/vm.py
+1-1src/middlewared/middlewared/api/v25_10_1/vm.py
+1-1src/middlewared/middlewared/api/v25_10_2/vm.py
+56-43 files not shown
+59-79 files

FreeNAS/freenas 48c497fsrc/middlewared/middlewared/alembic/versions/27.0 2026-06-11_15-08_merge.py

merge migration
DeltaFile
+24-0src/middlewared/middlewared/alembic/versions/27.0/2026-06-11_15-08_merge.py
+24-01 files

FreeNAS/freenas 9fd6a79src/middlewared/middlewared/alembic/versions/26.0 2026-06-08_12-30_vm_suspend_on_snapshot_default.py, src/middlewared/middlewared/api/v25_04_2 vm.py

NAS-141321 / 26.0.0-RC.1 / Suspend VMs on snapshot by default (#19091)

Change the default value of the per-VM `suspend_on_snapshot` setting
from `false` to `true`, so that newly created VMs — and existing ones
that never explicitly set it — are quiesced while a periodic snapshot of
their disk dataset is taken. This produces crash-consistent disk images
instead of snapshotting a running VM's storage live.

This restores the effective behavior that existed before #19053. Prior
to that PR, `vm.suspend_vms` suspended every running VM on its dataset's
snapshot regardless of the per-VM `suspend_on_snapshot` value — so in
practice running VMs were *always* suspended. #19053 fixed the flag so
it is actually honored. But because the field defaulted to `false`,
honoring it meant most VMs would no longer be suspended on snapshot — a
regression from the long-standing behavior. Flipping the default to
`true` keeps suspend-on-snapshot as the out-of-the-box behavior while
still letting users opt out per VM.

On upgrade, every existing VM has `suspend_on_snapshot` set to `true`,

    [5 lines not shown]
DeltaFile
+28-0src/middlewared/middlewared/alembic/versions/26.0/2026-06-08_12-30_vm_suspend_on_snapshot_default.py
+1-1src/middlewared/middlewared/api/v25_04_2/vm.py
+1-1src/middlewared/middlewared/api/v25_10_0/vm.py
+1-1src/middlewared/middlewared/api/v25_10_1/vm.py
+1-1src/middlewared/middlewared/api/v25_10_2/vm.py
+1-1src/middlewared/middlewared/api/v26_0_0/vm.py
+33-52 files not shown
+35-78 files

FreeNAS/freenas 5492d84tests/api2 test_audit_rest.py test_cloud_sync_custom_s3.py

Fix some integration tests
DeltaFile
+5-5tests/api2/test_audit_rest.py
+1-2tests/api2/test_cloud_sync_custom_s3.py
+0-1tests/api2/test_alert_classes.py
+6-83 files

FreeNAS/freenas be5f185

Empty commit to create PR on github.

You should reset it
DeltaFile
+0-00 files

FreeNAS/freenas 3901163src/middlewared/middlewared/alembic/versions/26.0 2026-06-08_12-30_vm_suspend_on_snapshot_default.py, src/middlewared/middlewared/api/v25_04_2 vm.py

NAS-141321 / 26.0.0-RC.1 / Suspend VMs on snapshot by default (#19091)

## Summary

Change the default value of the per-VM `suspend_on_snapshot` setting
from `false` to `true`, so that newly created VMs — and existing ones
that never explicitly set it — are quiesced while a periodic snapshot of
their disk dataset is taken. This produces crash-consistent disk images
instead of snapshotting a running VM's storage live.

This restores the effective behavior that existed before #19053. Prior
to that PR, `vm.suspend_vms` suspended every running VM on its dataset's
snapshot regardless of the per-VM `suspend_on_snapshot` value — so in
practice running VMs were *always* suspended. #19053 fixed the flag so
it is actually honored. But because the field defaulted to `false`,
honoring it meant most VMs would no longer be suspended on snapshot — a
regression from the long-standing behavior. Flipping the default to
`true` keeps suspend-on-snapshot as the out-of-the-box behavior while
still letting users opt out per VM.

    [6 lines not shown]
DeltaFile
+28-0src/middlewared/middlewared/alembic/versions/26.0/2026-06-08_12-30_vm_suspend_on_snapshot_default.py
+1-1src/middlewared/middlewared/api/v25_04_2/vm.py
+1-1src/middlewared/middlewared/api/v25_10_0/vm.py
+1-1src/middlewared/middlewared/api/v25_10_1/vm.py
+1-1src/middlewared/middlewared/api/v25_10_2/vm.py
+1-1src/middlewared/middlewared/api/v25_10_3/vm.py
+33-53 files not shown
+36-89 files

FreeNAS/freenas 7ec52e7src/middlewared/middlewared/api/base/handler version.py, src/middlewared/middlewared/pytest/unit/api/handler/version test_adapt_alias.py

Fix handling field aliases in `APIVersionsAdapter`
DeltaFile
+28-0src/middlewared/middlewared/pytest/unit/api/handler/version/test_adapt_alias.py
+8-5src/middlewared/middlewared/api/base/handler/version.py
+36-52 files

FreeNAS/freenas a21a390src/middlewared/middlewared/api/v26_0_0 reporting.py, src/middlewared/middlewared/plugins/reporting graphs.py

NAS-141166 / 26.0.0-RC.1 / Remove stale ARC graph names from reporting API (by Qubad786) (#19107)

## Problem

`reporting.get_data` accepted three graph names — `arcrate`,
`arcactualrate`, `arcresult` — whose backing plugin classes were deleted
during the ZFS netdata plugin rewrite. The Pydantic `Literal` and the
in-memory `__graphs` dict drifted out of sync, so passing any of them
crashed `netdata_get_data` with an uncaught `KeyError`.

## Solution

Removed the dead names from `GraphIdentifier.name`'s `Literal` and
docstring in both `v26_0_0/reporting.py` and `v27_0_0/reporting.py`.
Added a `ReportingNetdataGetDataArgs.from_previous` on each so legacy WS
clients walking the adapter chain get the dead entries silently filtered
instead of a hard rejection at the final v27 boundary. Hardened the
dispatch site in `plugins/reporting/graphs.py` to raise
`CallError(ENOENT)` for any unknown name — mirroring what

    [5 lines not shown]
DeltaFile
+96-0src/middlewared/middlewared/pytest/unit/api/handler/version/test_reporting_graph_filter.py
+10-5src/middlewared/middlewared/api/v26_0_0/reporting.py
+4-1src/middlewared/middlewared/plugins/reporting/graphs.py
+110-63 files

FreeNAS/freenas 31da5d5

Empty commit to create PR on github.

You should reset it
DeltaFile
+0-00 files