1
0
Fork 0
telegraf/docs/specs/tsd-001-deprecation.md
Daniel Baumann 4978089aab
Adding upstream version 1.34.4.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-05-24 07:26:29 +02:00

7 KiB

Plugin and Plugin Option Deprecation

Objective

Specifies the process of deprecating and removing plugins, plugin settings including values of those settings or features.

Keywords

procedure, removal, all plugins

Overview

Over time the number of plugins, plugin options and plugin features grow and some of those plugins or options are either not relevant anymore, have been superseded or subsumed by other plugins or options. To be able to remove those, this specification defines a process to deprecate plugins, plugin options and plugin features including a timeline and minimal time-frames. Additionally, the specification defines a framework to annotate deprecations in the code and inform users about such deprecations.

User experience

In the deprecation phase a warning will be shown at Telegraf startup with the following content

Plugin "inputs.logparser" deprecated since version 1.15.0 and will be removed in 1.40.0: use 'inputs.tail' with 'grok' data format instead

Similar warnings will be shown when removing plugin options or option values. This provides users with time to replace the deprecated plugin in their configuration file.

After the shown release (v1.40.0 in this case) the warning will be promoted to an error preventing Telegraf from starting. The user now has to adapt the configuration file to start Telegraf.

Time frames and considerations

When deprecating parts of Telegraf, it is important to provide users with enough time to migrate to alternative solutions before actually removing those parts.

In general, plugins, plugin options or option values should only be deprecated if a suitable alternative exists! In those cases, the deprecations should predate the removal by at least one and a half years. In current release terms this corresponds to six minor-versions. However, there might be circumstances requiring a prolonged time between deprecation and removal to ensure a smooth transition for users.

Versions between deprecation and removal of plugins, plugin options or option values, Telegraf must log a warning on startup including information about the version introducing the deprecation, the version of removal and an user-facing hint on suitable replacements. In this phase Telegraf should operate normally even with deprecated plugins, plugin options or option values being set in the configuration files.

Starting from the removal version, Telegraf must show an error message for deprecated plugins present in the configuration including all information listed above. Removed plugin options and option values should be handled as invalid settings in the configuration files and must lead to an error. In this phase, Telegraf should stop running until all deprecated plugins, plugin options and option values are removed from the configuration files.

Deprecation Process

The deprecation process comprises the following the steps below.

File issue

In the filed issue you should outline which plugin, plugin option or feature you want to deprecate and why! Determine in which version the plugin should be removed.

Try to reach an agreement in the issue before continuing and get a sign off from the maintainers!

Submit deprecation pull-request

Send a pull request adding deprecation information to the code and update the plugin's README.md file. Depending on what you want to deprecate this comprises different locations and steps as detailed below.

Once the deprecation pull-request is merged and Telegraf is released, we have to wait for the targeted Telegraf version for actually removing the code.

Deprecating a plugin

When deprecating a plugin you need to add an entry to the deprecation.go file in the respective plugin category with the following format

    "<plugin name>": {
        Since:     "<x.y.z format version of the next minor release>",
        RemovalIn: "<x.y.z format version of the plugin removal>",
        Notice:    "<user-facing hint e.g. on replacements>",
    },

If you for example want to remove the inputs.logparser plugin you should add

    "logparser": {
        Since:     "1.15.0",
        RemovalIn: "1.40.0"
        Notice:    "use 'inputs.tail' with 'grok' data format instead",
    },

to plugins/inputs/deprecations.go. By doing this, Telegraf will show a deprecation warning to the user starting from version 1.15.0 including the Notice you provided. The plugin can then be remove in version 1.40.0.

Additionally, you should update the plugin's README.md adding a paragraph mentioning since when the plugin is deprecated, when it will be removed and a hint to alternatives or replacements. The paragraph should look like this

**Deprecated in version v1.15.0 and scheduled for removal in v1.40.0**:
Please use the [tail][] plugin with the [`grok` data format][grok parser]
instead!

Deprecating an option

To deprecate a plugin option, remove the option from the sample.conf file and add the deprecation information to the structure field in the code. If you for for example want to deprecate the ssl_enabled option in inputs.example you should add

type Example struct {
    ...
    SSLEnabled bool `toml:"ssl_enabled" deprecated:"1.3.0;1.40.0;use 'tls_*' options instead"`
}

to schedule the setting for removal in version 1.40.0. The last element of the deprecated tag is a user-facing notice similar to plugin deprecation.

Deprecating an option-value

Sometimes, certain option values become deprecated or superseded by other options or values. To deprecate those option values, remove them from sample.conf and add the deprecation info in the code if the deprecated value is actually used via

func (e *Example) Init() error {
    ...
    if e.Mode == "old" {
        models.PrintOptionDeprecationNotice(telegraf.Warn, "inputs.example", "mode", telegraf.DeprecationInfo{
            Since:     "1.23.1",
            RemovalIn: "1.40.0",
            Notice:    "use 'v1' instead",
        })
    }
    ...
    return nil
}

This will show a warning if the deprecated v1 value is used for the mode setting in inputs.example with a user-facing notice.

Submit pull-request for removing code

Once the plugin, plugin option or option-value is deprecated, we have to wait for the RemovedIn release to remove the code. In the examples above, this would be version 1.40.0. After all scheduled bugfix-releases are done, with 1.40.0 being the next release, you can create a pull-request to actually remove the deprecated code.

Please make sure, you remove the plugin, plugin option or option value and the code referencing those. This might also comprise the all files of your plugin category, test-cases including those of other plugins, README files or other documentation. For removed plugins, please keep the deprecation info in deprecations.go so users can find a reference when switching from a really old version.

Make sure you add an Important Changes sections to the CHANGELOG.md file describing the removal with a reference to your PR.