Flag Deprecation
K3s is a fast-moving project, and as such, we need a way to deprecate flags and configuration options. This page outlines the process for deprecating flags and configuration options. In order to ensure that users are not surprised by the removal of flags, the process is similar to the Kubernetes Deprecation Policy.
Process
- Flags can be declared as "To Be Deprecated" at any time.
- Flags that are "To Be Deprecated" must be labeled as such on the next patch of all currently supported releases. Additionally, the flag will begin to warn users that it is going to be deprecated in the next minor release.
- On the next minor release, a flag will be marked as deprecated in the documentation and converted to a hidden flag in code. The flag will continue to operate and give warnings to users.
- In the following minor release branch, deprecated flags will become "nonoperational", causing a fatal error if used. This error must explain to the user any new flags or configuration that replace this flag.
- In the next minor release, the nonoperational flags will be removed from documentation and code.
Example
An example of the process:
--foo
exists in v1.22.14, v1.23.10, and v1.24.2.- After the v1.24.2 release, it is decided to deprecate
--foo
in favor of--new-foo
. - In v1.22.15, v1.23.11, and v1.24.3,
--foo
continues to exist, but will warn users:[Warning] --foo will be deprecated in v1.25.0, use `--new-foo` instead
--foo
will continue to exist as an operational flag for the life of v1.22, v1.23 and v1.24. - In v1.25.0,
--foo
is marked as deprecated in documentation and will be hidden in code. It will continue to work and warn users to move to--new-foo
. - In v1.26.0,
--foo
will cause a fatal error if used. The error message will say:[Fatal] exit 1: --foo is no longer supported, use --new-foo instead
- In v1.27.0,
--foo
will be removed completely from all code and documentation.