summaryrefslogtreecommitdiffstats
path: root/src/ansiblelint/rules/deprecated_module.py
blob: 00a4523e3bd74466afbca4d43fbf0077f77f0dda (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
"""Implementation of deprecated-module rule."""
# Copyright (c) 2018, Ansible Project

from __future__ import annotations

from typing import TYPE_CHECKING, Any

from ansiblelint.rules import AnsibleLintRule

if TYPE_CHECKING:
    from ansiblelint.file_utils import Lintable


class DeprecatedModuleRule(AnsibleLintRule):
    """Deprecated module."""

    id = "deprecated-module"
    description = (
        "These are deprecated modules, some modules are kept "
        "temporarily for backwards compatibility but usage is discouraged."
    )
    link = "https://docs.ansible.com/ansible/latest/collections/index_module.html"
    severity = "HIGH"
    tags = ["deprecations"]
    version_added = "v4.0.0"

    _modules = [
        # spell-checker:disable
        "accelerate",
        "aos_asn_pool",
        "aos_blueprint",
        "aos_blueprint_param",
        "aos_blueprint_virtnet",
        "aos_device",
        "aos_external_router",
        "aos_ip_pool",
        "aos_logical_device",
        "aos_logical_device_map",
        "aos_login",
        "aos_rack_type",
        "aos_template",
        "azure",
        "cl_bond",
        "cl_bridge",
        "cl_img_install",
        "cl_interface",
        "cl_interface_policy",
        "cl_license",
        "cl_ports",
        "cs_nic",
        "docker",
        "ec2_ami_find",
        "ec2_ami_search",
        "ec2_remote_facts",
        "ec2_vpc",
        "kubernetes",
        "netscaler",
        "nxos_ip_interface",
        "nxos_mtu",
        "nxos_portchannel",
        "nxos_switchport",
        "oc",
        "panos_nat_policy",
        "panos_security_policy",
        "vsphere_guest",
        "win_msi",
        "include",
        # spell-checker:enable
    ]

    def matchtask(
        self, task: dict[str, Any], file: Lintable | None = None
    ) -> bool | str:
        module = task["action"]["__ansible_module__"]
        if module in self._modules:
            message = "{0} {1}"
            return message.format(self.shortdesc, module)
        return False