Skip to content

Support matrix

Package on Debian and Fedora, and Service on Debian, are the supported entries. Each has been through the checks below against a real image of that distribution. The three filesystem types reconcile end to end without having been through those checks, so they are recorded as working rather than supported.

An entry appears here when the behaviour exists, is tested against that distribution, and matches the resource type documentation. Intent, partial work and work-in-progress branches do not qualify.

Resource types

The rows are grouped by domain, in the order that section uses.

Domain Type Provider Status
Core Package apt Supported on Debian
Core Package dnf Supported on Fedora
Core Package apk Not implemented
Core Package pacman Not implemented
Core Repository apt Supported on Debian, except priority
Core Repository dnf Supported on Fedora, except suite and components
Core Repository apk Not implemented
Core File posix-file Reads and writes on Linux, reads elsewhere
Core Directory posix-file Reads and writes on Linux, reads elsewhere
Core Symlink posix-file Reads and writes on Linux, reads elsewhere
Identity User linux-user Working, not yet through the checks
Identity Group linux-user Working, not yet through the checks
Runtime Service systemd Supported on Debian
Kernel Sysctl proc-sys Working, not yet through the checks

linux-user and proc-sys claim no distribution, since the account database and the kernel parameter namespace are interfaces shared by every target. They still have per-distribution requirements. linux-user needs the shadow utilities, which are absent from minimal images and replaced by BusyBox equivalents on Alpine, and default id ranges differ. Both are selected where their requirements are met and skipped with that reason where they are not.

The three entries marked working reconcile and verify but have not been through the checks below against a named distribution image. Their integration tests run against the real account database and the real /proc/sys, so what is outstanding is the per-distribution matrix work.

The two Repository exceptions are fields the underlying tool has no equivalent for, and each is refused rather than dropped. suite and components describe an apt archive, which has no rpm equivalent. priority on an apt source corresponds to a pin in apt_preferences, a separate file with its own matching rules, and the provider writes no pin.

Distributions

Distribution Identifier Status
Debian debian Package and Service supported, File, Directory and Symlink working
Ubuntu ubuntu, via ID_LIKE=debian Untested, and expected to behave as Debian does
Fedora fedora Package supported, File, Directory and Symlink working
RHEL rhel Untested, and served by the same provider as Fedora
Rocky Linux rocky, via ID_LIKE Untested, and expected to behave as RHEL does
AlmaLinux almalinux, via ID_LIKE Untested, and expected to behave as RHEL does
Alpine Linux alpine Not implemented
Arch Linux arch Not implemented

What a supported entry will have to mean

The criteria for a supported entry are as follows.

The provider observes every field of the resource type, or declares the fields it cannot observe with the consequence recorded in the type documentation. It applies every action the type defines. A second pass over a converged resource produces no change, which is tested rather than assumed. Verification detects a discrepancy introduced by the test. Failures are reported as errors, without partially applied resources.

Each of those is tested against a real image of the distribution, since command output formats and failure modes are where distributions differ. For apt and systemd the tests sit behind a build tag, as they install packages and start services on the machine that runs them. make test-apt, make test-dnf, make test-sysctl, make test-user and make test-systemd run them in throwaway containers. The systemd suite boots systemd as PID 1, since systemctl is present in images where systemd is not running. The sysctl suite is privileged and runs against procfs, whose files have fixed sizes, cannot be created or removed, and reject values the kernel will not take.

File, Directory and Symlink reconcile and verify on Linux and are not recorded as supported, since their tests run against a temporary directory rather than a named distribution. They contain no distribution-specific behaviour, which has not been confirmed by testing.

Likely order

Planned

The order below is intent, not commitment, and no part of it is scheduled.

File and Directory came first, as they need no package manager and most other work depends on writing a file correctly. Package with apt and Service with systemd followed, which together reconcile a service on one distribution end to end. dnf came next as a second provider for one type, which tests whether apt assumptions had leaked above the provider boundary. Two had. rpm reports an absent package on stdout where dpkg-query uses stderr, and dnf5 rejects the -- end-of-options separator that apt-get accepts. Both were found by testing against a real image.

User, Group and Sysctl are simpler and are not on the critical path for the remaining design work.