FreeNAS/freenas 83ee228src/middlewared/middlewared/plugins/disk_ availability.py

NAS-138709 / 26.04 / Add SED details in disk.details endpoint (#17725)

This commit adds changes so that we also get sed details in disk.details
endpoint. Basically this endpoint is being used by UI on zpool creation
screens for showing disks. In the current changes, we get SED info from
DB and sed status (if it's SED disk) in realtime from disk.query
endpoint as that already currently efficiently handles this.
DeltaFile
+9-0src/middlewared/middlewared/plugins/disk_/availability.py
+9-01 files

FreeNAS/freenas ad09fc0src/middlewared/middlewared/plugins/disk_ availability.py

Add SED details in disk.details endpoint

This commit adds changes so that we also get sed details in disk.details endpoint. Basically this endpoint is being used by UI on zpool creation screens for showing disks. In the current changes, we get SED info from DB and sed status (if it's SED disk) in realtime from disk.query endpoint as that already currently efficiently handles this.
DeltaFile
+9-0src/middlewared/middlewared/plugins/disk_/availability.py
+9-01 files

FreeNAS/freenas 4ebcc78tests/sharing_protocols/nvmet test_nvmet_ha_failover.py

Fix NVMe-oF failover test reliability and add diagnostics

- Fix flush method: send_flush() -> flush_namespace()
- Add read retry loop for namespaces not ready after failover
- Increase teardown sleep from 5s to 15s for cleanup
- Add fixture lifecycle logging to diagnose teardown issues
- Verify service state and port release after stop
DeltaFile
+51-7tests/sharing_protocols/nvmet/test_nvmet_ha_failover.py
+51-71 files

FreeNAS/freenas 4bf25betests/sharing_protocols/nvmet test_nvmet_ha_failover.py

Fix NVMe-oF crash failover tests for gradual namespace availability

- Add flush before crash failover to reach stable storage
- Increase namespace verification retries from 5 to 60
- Handles namespaces initializing gradually after crash
DeltaFile
+7-1tests/sharing_protocols/nvmet/test_nvmet_ha_failover.py
+7-11 files

FreeNAS/freenas 321039dtests requirements.txt

Add nvmeof-client to requirements.txt for tests
DeltaFile
+1-0tests/requirements.txt
+1-01 files

FreeNAS/freenas 9e08b37tests/sharing_protocols/nvmet test_nvmet_ha_failover.py

Add TestFailback and fix test isolation

- Add TestFailback crash->orderly failback cycle tests (4 tests)
- Change TestFailover fixtures to class scope to fix backend switching
- Add restore_original_master fixture to restore HA state after tests
- Add MAX_FAILOVER_TIME checks for both failover and failback operations
DeltaFile
+361-5tests/sharing_protocols/nvmet/test_nvmet_ha_failover.py
+361-51 files

FreeNAS/freenas 46982adtests/sharing_protocols/nvmet test_nvmet_ha_failover.py

Add large-scale HA failover test (51 subsystems/70 namespaces)

- Add TestFailoverScale class with 8 parametric variations
- Use ThreadPoolExecutor for parallel connection/verification
- Add MAX_FAILOVER_TIME check (60s limit)
- Set 15-minute timeout for test (ZVOL overhead)
- Update docstring to document both test suites
DeltaFile
+412-4tests/sharing_protocols/nvmet/test_nvmet_ha_failover.py
+412-41 files

FreeNAS/freenas b822c0etests/sharing_protocols/nvmet test_nvmet_ha_failover.py

By default only run a subset of test_failover
DeltaFile
+14-0tests/sharing_protocols/nvmet/test_nvmet_ha_failover.py
+14-01 files

FreeNAS/freenas 4a14a5ftests/sharing_protocols/nvmet test_nvmet_ha_failover.py

Add test_failover for NVMe-oF
DeltaFile
+918-0tests/sharing_protocols/nvmet/test_nvmet_ha_failover.py
+918-01 files

FreeNAS/freenas d9b3469src/middlewared/middlewared/plugins/nfs_ validators.py, tests/api2 test_300_nfs.py

NAS-138706 / 26.04 / Fix typo in NFS bindip validator. (#17724)

The validator had a typo. The intent is to convert `None` to the string
`'None'`
Fix associated CI test.
DeltaFile
+3-7tests/api2/test_300_nfs.py
+2-2src/middlewared/middlewared/plugins/nfs_/validators.py
+5-92 files

FreeNAS/freenas 7976492src/middlewared/middlewared/plugins/container devices.py

NAS-138701 / 26.04 / Only expose available GPUs as valid choices for container device (#17723)

## Context

We only want those GPUs to be exposed as valid choices for a container
GPU device if the GPU in question is also available to host (has not
been isolated from the host).
DeltaFile
+1-1src/middlewared/middlewared/plugins/container/devices.py
+1-11 files

FreeNAS/freenas bf1bc29src/middlewared/middlewared/api/base/handler remove_secrets.py inspect.py, src/middlewared/middlewared/plugins/test init.py

Make API result validation errors non-fatal
DeltaFile
+258-3src/middlewared/middlewared/pytest/unit/api/handler/result/test_secret.py
+130-0src/middlewared/middlewared/api/base/handler/remove_secrets.py
+33-4src/middlewared/middlewared/api/base/handler/inspect.py
+25-6src/middlewared/middlewared/api/base/handler/result.py
+2-26src/middlewared/middlewared/api/base/handler/dump_params.py
+10-0src/middlewared/middlewared/plugins/test/init.py
+458-396 files not shown
+471-4512 files

FreeNAS/freenas 2da7224src/middlewared/middlewared/plugins/container devices.py

Only expose availble GPUs as valid choices for container device
DeltaFile
+1-1src/middlewared/middlewared/plugins/container/devices.py
+1-11 files

FreeNAS/freenas ffd2b91tests/sharing_protocols/iscsi test_261_iscsi_cmd.py

NAS-138699 / 26.04 / Increase timeout for test__target_extent_special_characters to 600 (#17721)

DeltaFile
+1-0tests/sharing_protocols/iscsi/test_261_iscsi_cmd.py
+1-01 files

FreeNAS/freenas 2b47c82src/middlewared/middlewared/plugins/vm/supervisor utils.py domain_xml.py

Properly match appropriate OVMF VAR file against CODE file
DeltaFile
+60-0src/middlewared/middlewared/plugins/vm/supervisor/utils.py
+6-2src/middlewared/middlewared/plugins/vm/supervisor/domain_xml.py
+66-22 files

FreeNAS/freenas b777f6asrc/middlewared/middlewared/api/base/handler secrets.py inspect.py, src/middlewared/middlewared/pytest/unit/api/handler/result test_secret_edge_cases.py test_secret.py

Make API result validation errors non-fatal
DeltaFile
+230-0src/middlewared/middlewared/pytest/unit/api/handler/result/test_secret_edge_cases.py
+130-0src/middlewared/middlewared/api/base/handler/secrets.py
+40-3src/middlewared/middlewared/pytest/unit/api/handler/result/test_secret.py
+33-4src/middlewared/middlewared/api/base/handler/inspect.py
+25-6src/middlewared/middlewared/api/base/handler/result.py
+2-26src/middlewared/middlewared/api/base/handler/dump_params.py
+460-397 files not shown
+483-4513 files

FreeNAS/freenas fa98ddatests/sharing_protocols/iscsi test_261_iscsi_cmd.py

Increase timeout for test__target_extent_special_characters to 600
DeltaFile
+1-0tests/sharing_protocols/iscsi/test_261_iscsi_cmd.py
+1-01 files

FreeNAS/freenas a072da8src/middlewared/middlewared main.py, src/middlewared/middlewared/api/base/handler result.py dump_params.py

Make API result validation errors non-fatal
DeltaFile
+40-3src/middlewared/middlewared/pytest/unit/api/handler/result/test_secret.py
+25-6src/middlewared/middlewared/api/base/handler/result.py
+2-26src/middlewared/middlewared/api/base/handler/dump_params.py
+10-0src/middlewared/middlewared/plugins/test/init.py
+6-0tests/conftest.py
+3-2src/middlewared/middlewared/main.py
+86-374 files not shown
+90-4110 files

FreeNAS/freenas edd6235tests/api2 test_005_interface.py

NAS-138692 / 26.04 / Fix ipv6 interface autoconf CI check (#17719)

Moving from `dhclient` to `dhcpcd` introduced a change in that the
`sysctl` `autoconf` setting is updated to reflect the current status of
the interface.

By default the IPv6 `autoconf` setting is `1` (enabled). The `dhcpcd`
daemon dynamically updates this based on what routing capability it
senses from the interface. We don't currently route IPv6 in our CI
environment, so the `IPv6` `autoconf` setting is disabled, i.e. set to
`0`.

This PR updates the test to be reactive to the current `IPv6` routing
capability.
This has been tested in a CI run.

NOTE: The VMs under test start as DHCP and get configured with static IP
in `test_005_interface.test_002_configure_interface.`
DeltaFile
+27-3tests/api2/test_005_interface.py
+27-31 files

FreeNAS/freenas c46ce49src/middlewared/middlewared/alembic/versions/26.04 2025-11-22_09-54_nvidia_sys_adv.py, src/middlewared/middlewared/api/v26_04_0 docker.py

NAS-138569 / 26.04 / NVIDIA support for LXC containers (#17691)

## Context

It was requested to add nvidia support for lxc containers which has been
added. However lxc containers for nvidia also require nvidia drivers to
be available on the host, earlier this implementation lived in docker
plugin which has now been changed and moved to system advanced service
so it can be configured from there and used for both containers and
docker plugin.
DeltaFile
+20-44src/middlewared/middlewared/plugins/docker/update.py
+63-0src/middlewared/middlewared/plugins/system_advanced/nvidia.py
+35-0src/middlewared/middlewared/alembic/versions/26.04/2025-11-22_09-54_nvidia_sys_adv.py
+24-0src/middlewared/middlewared/plugins/system_advanced/config.py
+6-0src/middlewared/middlewared/utils/libvirt/gpu.py
+2-1src/middlewared/middlewared/api/v26_04_0/docker.py
+150-453 files not shown
+154-479 files

FreeNAS/freenas 4fc5c4esrc/middlewared/middlewared/plugins/pool_ import_pool.py, tests/api2 test_ix_apps_mountpoint.py

NAS-137899 / 26.04 / Fix edge case where ix-apps dataset can have invalid mountpoint (#17695)

This commit fixes an issue where if a pool was exported and then
imported, we set the mountpoint for ix-apps ds to where we expect
ix-apps to be mounted but if apps are already configured with a
different pool - this obviously causes problems. This step is not
required here because when we start/configure apps - we ensure that
ix-apps dataset has correct mountpoint set (for the actual pool which is
really configured to be used for apps).
DeltaFile
+30-0tests/api2/test_ix_apps_mountpoint.py
+0-6src/middlewared/middlewared/plugins/pool_/import_pool.py
+30-62 files

FreeNAS/freenas c5c79a0src/middlewared/middlewared/alembic/versions/26.04 2025-11-22_09-54_nvidia_sys_adv.py, src/middlewared/middlewared/api/v26_04_0 docker.py

NVIDIA support for LXC containers
DeltaFile
+20-44src/middlewared/middlewared/plugins/docker/update.py
+63-0src/middlewared/middlewared/plugins/system_advanced/nvidia.py
+35-0src/middlewared/middlewared/alembic/versions/26.04/2025-11-22_09-54_nvidia_sys_adv.py
+24-0src/middlewared/middlewared/plugins/system_advanced/config.py
+6-0src/middlewared/middlewared/utils/libvirt/gpu.py
+2-1src/middlewared/middlewared/api/v26_04_0/docker.py
+150-453 files not shown
+154-479 files

FreeNAS/freenas 3ef7a6csrc/middlewared/middlewared/alembic/versions/26.04 2025-11-22_09-54_nvidia_sys_adv.py, src/middlewared/middlewared/api/v26_04_0 docker.py

NVIDIA support for LXC containers
DeltaFile
+20-44src/middlewared/middlewared/plugins/docker/update.py
+55-0src/middlewared/middlewared/plugins/system_advanced/nvidia.py
+42-0src/middlewared/middlewared/alembic/versions/26.04/2025-11-22_09-54_nvidia_sys_adv.py
+24-0src/middlewared/middlewared/plugins/system_advanced/config.py
+6-0src/middlewared/middlewared/utils/libvirt/gpu.py
+2-1src/middlewared/middlewared/api/v26_04_0/docker.py
+149-453 files not shown
+153-479 files

FreeNAS/freenas d67f43ctests/api2 test_005_interface.py

Remove debug.
DeltaFile
+1-5tests/api2/test_005_interface.py
+1-51 files

FreeNAS/freenas 72da078tests/api2 test_005_interface.py

Update more debug.
DeltaFile
+3-3tests/api2/test_005_interface.py
+3-31 files

FreeNAS/freenas 8ec9f0etests/api2 test_005_interface.py

Update debug.
DeltaFile
+1-1tests/api2/test_005_interface.py
+1-11 files

FreeNAS/freenas a971384tests/api2 test_005_interface.py

Debug.
DeltaFile
+5-0tests/api2/test_005_interface.py
+5-01 files

FreeNAS/freenas 4fe7231tests/api2 test_005_interface.py

Fix up IPv6 autoconf test.
DeltaFile
+26-3tests/api2/test_005_interface.py
+26-31 files

FreeNAS/freenas 85c0767src/middlewared/middlewared/plugins/directoryservices_ activedirectory_health_mixin.py

NAS-138691 / 25.10.1 / Add more handling for transient ENOENT on cred check (by anodos325) (#17717)

During health checks for machine account password, the third-party
python-gssapi library may fail to create a ccache object after
successful kinit. In this situation a CallError with errno set to ENOENT
will be raised. This commit converts the error to be non-fatal since by
this point we've validated that the credential is correct. This prevents
the activedirectory service from becoming FAULTED for spurious reasons.

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

Co-authored-by: Andrew Walker <andrew.walker at truenas.com>
DeltaFile
+21-2src/middlewared/middlewared/plugins/directoryservices_/activedirectory_health_mixin.py
+21-21 files

FreeNAS/freenas 6bc908dsrc/middlewared/middlewared/plugins/directoryservices_ activedirectory_health_mixin.py

NAS-138691 / 25.10.2 / Add more handling for transient ENOENT on cred check (by anodos325) (#17718)

During health checks for machine account password, the third-party
python-gssapi library may fail to create a ccache object after
successful kinit. In this situation a CallError with errno set to ENOENT
will be raised. This commit converts the error to be non-fatal since by
this point we've validated that the credential is correct. This prevents
the activedirectory service from becoming FAULTED for spurious reasons.

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

Co-authored-by: Andrew Walker <andrew.walker at truenas.com>
DeltaFile
+21-2src/middlewared/middlewared/plugins/directoryservices_/activedirectory_health_mixin.py
+21-21 files