FreeNAS/freenas 07b725dsrc/middlewared/middlewared/plugins/container migrate.py container.py

Move container namespace to be typesafe
DeltaFile
+252-252src/middlewared/middlewared/plugins/container/migrate.py
+0-374src/middlewared/middlewared/plugins/container/container.py
+292-0src/middlewared/middlewared/plugins/container/crud.py
+106-136src/middlewared/middlewared/plugins/container/lifecycle.py
+173-0src/middlewared/middlewared/plugins/container/__init__.py
+28-128src/middlewared/middlewared/plugins/container/image.py
+851-89032 files not shown
+1,622-1,32538 files

FreeNAS/freenas 336fd30src/middlewared/middlewared/plugins/docker backup.py state_management.py

NAS-140191 / 27.0.0-BETA.1 / Move docker plugin to typesafe implementation (#18399)
DeltaFile
+136-163src/middlewared/middlewared/plugins/docker/backup.py
+131-159src/middlewared/middlewared/plugins/docker/state_management.py
+0-281src/middlewared/middlewared/plugins/docker/update.py
+260-0src/middlewared/middlewared/plugins/docker/config.py
+237-0src/middlewared/middlewared/plugins/docker/__init__.py
+114-104src/middlewared/middlewared/plugins/docker/fs_manage.py
+878-70741 files not shown
+1,729-1,42447 files

FreeNAS/freenas 51388d6src/middlewared/middlewared/plugins/pool_ pool.py

misery
DeltaFile
+1-1src/middlewared/middlewared/plugins/pool_/pool.py
+1-11 files

FreeNAS/freenas 7d5ac17src/middlewared/middlewared/api/v27_0_0 docker.py

Minor fix
DeltaFile
+5-1src/middlewared/middlewared/api/v27_0_0/docker.py
+5-11 files

FreeNAS/freenas 3b415d8src/middlewared/middlewared/api/v26_0_0 zfs_tier.py

Add subscription
DeltaFile
+6-0src/middlewared/middlewared/api/v26_0_0/zfs_tier.py
+6-01 files

FreeNAS/freenas 0f7a5b2src/middlewared/middlewared/api/v26_0_0 zfs_tier.py common.py

Address API feedback from other teams
DeltaFile
+9-1src/middlewared/middlewared/api/v26_0_0/zfs_tier.py
+6-2src/middlewared/middlewared/api/v26_0_0/common.py
+2-2src/middlewared/middlewared/api/v26_0_0/pool_dataset.py
+2-1src/middlewared/middlewared/api/v26_0_0/nfs.py
+2-1src/middlewared/middlewared/api/v26_0_0/smb.py
+21-75 files

FreeNAS/freenas ff59e2esrc/middlewared/middlewared/api/v26_0_0 zfs_tier.py pool_dataset.py

Address changes
DeltaFile
+4-4src/middlewared/middlewared/api/v26_0_0/zfs_tier.py
+3-2src/middlewared/middlewared/api/v26_0_0/pool_dataset.py
+2-2src/middlewared/middlewared/api/v26_0_0/nfs.py
+2-2src/middlewared/middlewared/api/v26_0_0/common.py
+2-2src/middlewared/middlewared/api/v26_0_0/smb.py
+13-125 files

FreeNAS/freenas d5b7488src/middlewared/middlewared/api/v26_0_0 zfs_tier.py common.py

Fix
DeltaFile
+32-6src/middlewared/middlewared/api/v26_0_0/zfs_tier.py
+2-2src/middlewared/middlewared/api/v26_0_0/common.py
+34-82 files

FreeNAS/freenas 3d4ac2asrc/middlewared/middlewared/api/v26_0_0 zfs_tier.py smb.py

Add tiering API

This commit modifies the truenas API to wrap around tiering design
in the following ways:

A new namespace zfs.tier. will be added. This contains global
configuration for systemwide tiering settings. Parameters include

- enabled: whether to enable tiering. This feature requries changes
  to global ZFS behavior and we will have various internal checks
  that check this value in datastore extend context methods.

- max_concurrent_jobs: the maximum number of concurrent rewrite
  jobs (tier migrations for existing data).

- min_available_space: point in available space for a dataset where
  tier migrations will error out.

The namespace will also support APIs for managing and querying

    [9 lines not shown]
DeltaFile
+160-0src/middlewared/middlewared/api/v26_0_0/zfs_tier.py
+6-0src/middlewared/middlewared/api/v26_0_0/smb.py
+6-0src/middlewared/middlewared/api/v26_0_0/nfs.py
+2-0src/middlewared/middlewared/api/v26_0_0/pool_dataset.py
+1-0src/middlewared/middlewared/api/v26_0_0/__init__.py
+175-05 files

FreeNAS/freenas 318f2cbsrc/middlewared/middlewared/pytest/unit/alert/source test_jbof.py

Fix tests
DeltaFile
+1-1src/middlewared/middlewared/pytest/unit/alert/source/test_jbof.py
+1-11 files

FreeNAS/freenas 3329d44src/middlewared/middlewared/alert/source license_status.py discovery_auth.py, src/middlewared/middlewared/plugins nfs.py alert.py

Lint
DeltaFile
+22-8src/middlewared/middlewared/plugins/iscsi_/auth.py
+12-8src/middlewared/middlewared/pytest/unit/alert/source/test_jbof.py
+12-7src/middlewared/middlewared/plugins/nfs.py
+11-4src/middlewared/middlewared/plugins/alert.py
+9-6src/middlewared/middlewared/alert/source/license_status.py
+9-3src/middlewared/middlewared/alert/source/discovery_auth.py
+75-3656 files not shown
+197-10862 files

FreeNAS/freenas e0a7b83src/middlewared/middlewared/alert/service __init__.py

mypy
DeltaFile
+0-6src/middlewared/middlewared/alert/service/__init__.py
+0-61 files

FreeNAS/freenas d491f27src/middlewared/middlewared/pytest/unit/alert/source test_enclosure_status.py

Fix tests
DeltaFile
+9-9src/middlewared/middlewared/pytest/unit/alert/source/test_enclosure_status.py
+9-91 files

FreeNAS/freenas 56de6aftests/protocols iscsi_proto.py

Make running non-iscsi tests possible on the same TrueNAS machine

(cherry picked from commit 68c669b89643575070770dba150f109449f719b0)
DeltaFile
+7-3tests/protocols/iscsi_proto.py
+7-31 files

FreeNAS/freenas 08d2d4btests/protocols iscsi_proto.py

Make running non-iscsi tests possible on the same TrueNAS machine

(cherry picked from commit 68c669b89643575070770dba150f109449f719b0)
DeltaFile
+7-3tests/protocols/iscsi_proto.py
+7-31 files

FreeNAS/freenas c2c3a15tests/protocols iscsi_proto.py

NAS-140202 / 27.0.0-BETA.1 / Make running non-iscsi tests possible on the same TrueNAS machine (#18407)

iscsi modules are not easy to install automatically. They also make
runtest.py crash with no reason.
DeltaFile
+7-3tests/protocols/iscsi_proto.py
+7-31 files

FreeNAS/freenas 35c84ccsrc/middlewared/middlewared/api/v26_0_0 zpool_query.py, src/middlewared/middlewared/api/v27_0_0 zpool_query.py

remove zfs.pool.query (replace w/ zpool.query)
DeltaFile
+296-0src/middlewared/middlewared/plugins/zpool/query_impl.py
+173-0src/middlewared/middlewared/api/v26_0_0/zpool_query.py
+173-0src/middlewared/middlewared/api/v27_0_0/zpool_query.py
+70-27src/middlewared/middlewared/plugins/pool_/pool.py
+82-0src/middlewared/middlewared/plugins/zpool/crud.py
+66-3src/middlewared/middlewared/plugins/pool_/topology.py
+860-3015 files not shown
+963-12121 files

FreeNAS/freenas 1b1317csrc/middlewared/middlewared/alert/source jbof.py iscsi.py

`AlertClassConfig` on top of everything
DeltaFile
+17-17src/middlewared/middlewared/alert/source/jbof.py
+9-9src/middlewared/middlewared/alert/source/iscsi.py
+8-8src/middlewared/middlewared/alert/source/ipmi_sel.py
+7-7src/middlewared/middlewared/alert/source/kmip.py
+5-5src/middlewared/middlewared/alert/source/disk_temp.py
+4-4src/middlewared/middlewared/alert/source/failover_nics.py
+50-5010 files not shown
+79-7916 files

FreeNAS/freenas a43f185src/middlewared/middlewared/alert base.py, src/middlewared/middlewared/alert/source ups.py

Fixes
DeltaFile
+2-2src/middlewared/middlewared/service/decorators.py
+2-1src/middlewared/middlewared/plugins/ups/utils.py
+1-1src/middlewared/middlewared/alert/base.py
+1-1src/middlewared/middlewared/alert/source/ups.py
+6-54 files

FreeNAS/freenas 3390c41src/freenas/usr/bin install-dev-tools, src/middlewared/middlewared/alert base.py

Fixes
DeltaFile
+15-6src/middlewared/middlewared/plugins/alert.py
+2-2src/middlewared/middlewared/api/v26_0_0/alert.py
+2-2src/middlewared/middlewared/alert/base.py
+1-1src/freenas/usr/bin/install-dev-tools
+1-0src/middlewared/middlewared/alert/source/sensors.py
+21-115 files

FreeNAS/freenas 1f42694src/middlewared/middlewared/alert/source smb.py ipmi_sel.py

Alerts mypy
DeltaFile
+18-17src/middlewared/middlewared/alert/source/smb.py
+16-14src/middlewared/middlewared/alert/source/ipmi_sel.py
+14-12src/middlewared/middlewared/alert/source/smart.py
+13-7src/middlewared/middlewared/alert/source/directory_services.py
+12-8src/middlewared/middlewared/alert/source/sensors.py
+11-8src/middlewared/middlewared/alert/source/enclosure_status.py
+84-6647 files not shown
+298-20153 files

FreeNAS/freenas 89c08b0src/middlewared/middlewared/etc_files exports.mako shadow.mako, src/middlewared/middlewared/etc_files/local/nginx nginx.conf.mako

Fixes
DeltaFile
+9-17src/middlewared/middlewared/plugins/alert.py
+5-4src/middlewared/middlewared/etc_files/exports.mako
+2-1src/middlewared/middlewared/etc_files/shadow.mako
+2-1src/middlewared/middlewared/etc_files/local/nginx/nginx.conf.mako
+18-234 files

FreeNAS/freenas efd1d9bsrc/middlewared/middlewared/alert base.py, src/middlewared/middlewared/alert/service snmp_trap.py opsgenie.py

Alert services mypy
DeltaFile
+11-4src/middlewared/middlewared/alert/service/snmp_trap.py
+7-6src/middlewared/middlewared/alert/base.py
+7-3src/middlewared/middlewared/alert/service/opsgenie.py
+7-3src/middlewared/middlewared/alert/service/victorops.py
+6-3src/middlewared/middlewared/alert/service/pagerduty.py
+6-2src/middlewared/middlewared/alert/service/aws_sns.py
+44-215 files not shown
+71-3111 files

FreeNAS/freenas 13299ddsrc/freenas/usr/bin install-dev-tools, src/middlewared pyproject.toml

Alert sources mypy
DeltaFile
+6-6src/middlewared/middlewared/alert/schedule.py
+6-1src/freenas/usr/bin/install-dev-tools
+2-2src/middlewared/pyproject.toml
+0-1src/middlewared/middlewared/alert/service/mail.py
+14-104 files

FreeNAS/freenas 908a6a5src/middlewared/middlewared/alert base.py, src/middlewared/middlewared/alert/service mattermost.py slack.py

base.py mypy
DeltaFile
+105-59src/middlewared/middlewared/alert/base.py
+6-6src/middlewared/middlewared/alert/source/ups.py
+4-4src/middlewared/middlewared/alert/source/truecommand.py
+4-4src/middlewared/middlewared/alert/service/mattermost.py
+1-7src/middlewared/middlewared/alert/service/slack.py
+4-4src/middlewared/middlewared/alert/source/kmip.py
+124-8436 files not shown
+178-13842 files

FreeNAS/freenas 97b0e7bsrc/middlewared/middlewared/alert base.py, src/middlewared/middlewared/alert/source smart.py replication.py

Alert.instance
DeltaFile
+64-61src/middlewared/middlewared/plugins/alert.py
+66-42src/middlewared/middlewared/alert/base.py
+40-29src/middlewared/middlewared/alert/source/smart.py
+48-17src/middlewared/middlewared/alert/source/replication.py
+34-23src/middlewared/middlewared/alert/source/sensors.py
+40-15src/middlewared/middlewared/alert/source/mseries_nvdimm_and_bios.py
+292-187100 files not shown
+1,236-533106 files

FreeNAS/freenas bcb4f90src/middlewared/middlewared/alert base.py, src/middlewared/middlewared/alert/service snmp_trap.py

Move alert class name to AlertClassConfig
DeltaFile
+8-8src/middlewared/middlewared/plugins/alert.py
+8-4src/middlewared/middlewared/alert/base.py
+1-1src/middlewared/middlewared/alert/service/snmp_trap.py
+17-133 files

FreeNAS/freenas 7b2ffe7src/middlewared/middlewared/alert/source mseries_nvdimm_and_bios.py license_status.py, src/middlewared/middlewared/pytest/unit/alert/source test_jbof.py

XXXAlertClass -> XXXAlert
DeltaFile
+18-18src/middlewared/middlewared/alert/source/mseries_nvdimm_and_bios.py
+12-12src/middlewared/middlewared/alert/source/license_status.py
+10-10src/middlewared/middlewared/alert/source/jbof.py
+10-10src/middlewared/middlewared/alert/source/failover.py
+8-8src/middlewared/middlewared/alert/source/certificates.py
+7-7src/middlewared/middlewared/pytest/unit/alert/source/test_jbof.py
+65-6570 files not shown
+276-27676 files

FreeNAS/freenas 0bebfd1src/middlewared/middlewared/alert base.py, src/middlewared/middlewared/alert/source mseries_nvdimm_and_bios.py ups.py

Move all alert class configuration to AlertClassConfig
DeltaFile
+57-53src/middlewared/middlewared/plugins/alert.py
+62-46src/middlewared/middlewared/alert/source/mseries_nvdimm_and_bios.py
+49-43src/middlewared/middlewared/alert/source/ups.py
+52-39src/middlewared/middlewared/alert/base.py
+34-30src/middlewared/middlewared/alert/source/truecommand.py
+36-26src/middlewared/middlewared/alert/source/jbof.py
+290-23769 files not shown
+1,314-1,01275 files

FreeNAS/freenas d836987src/middlewared/middlewared/alembic/versions/27.0 2026-03-09_19-16_ScrubNotStarted.py, src/middlewared/middlewared/alert base.py

NAS-140081 / 27.0.0-BETA.1 / Simplify alerts (#18332)

As a part of mypy refactoring, I want to make `AlertClass` dataclasses
and store alert args there as typed attributes. In order to do that, we
need to liberate these classes of some of their responsibilities.

Now, oneshot create/delete methods are classmethods, and middleware
instance is not stored in the `AlertClass` object anymore.

All `OneShotAlertClass` are `SimpleOneShotAlertClass`, complex creation
logic was shifted to the caller.

---------

Co-authored-by: Logan Cary <logan.cary at ixsystems.com>
DeltaFile
+43-53src/middlewared/middlewared/alert/base.py
+93-0tests/api2/test_rsync_locked_alert.py
+28-27src/middlewared/middlewared/plugins/zfs_/zfs_events.py
+4-40src/middlewared/middlewared/alert/source/applications.py
+5-25src/middlewared/middlewared/alert/source/truecommand.py
+30-0src/middlewared/middlewared/alembic/versions/27.0/2026-03-09_19-16_ScrubNotStarted.py
+203-14540 files not shown
+356-45746 files