Skip to content

SNMP

ANTA catalog for SNMP tests

Test functions related to the EOS various SNMP settings

VerifySnmpContact

Bases: AntaTest

This class verifies the SNMP contact of a device.

Expected results
  • success: The test will pass if the SNMP contact matches the provided input.
  • failure: The test will fail if the SNMP contact does not match the provided input.
Source code in anta/tests/snmp.py
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
class VerifySnmpContact(AntaTest):
    """
    This class verifies the SNMP contact of a device.

    Expected results:
        * success: The test will pass if the SNMP contact matches the provided input.
        * failure: The test will fail if the SNMP contact does not match the provided input.
    """

    name = "VerifySnmpContact"
    description = "Verifies the SNMP contact of a device."
    categories = ["snmp"]
    commands = [AntaCommand(command="show snmp")]

    class Input(AntaTest.Input):
        """Defines the input parameters for this test case."""

        contact: str
        """Expected SNMP contact details of the device."""

    @AntaTest.anta_test
    def test(self) -> None:
        contact = self.instance_commands[0].json_output["contact"]["contact"]

        if contact != self.inputs.contact:
            self.result.is_failure(f"Expected `{self.inputs.contact}` as the contact, but found `{contact}` instead.")
        else:
            self.result.is_success()

Input

Bases: Input

Defines the input parameters for this test case.

Source code in anta/tests/snmp.py
163
164
165
166
167
class Input(AntaTest.Input):
    """Defines the input parameters for this test case."""

    contact: str
    """Expected SNMP contact details of the device."""

contact instance-attribute

contact: str

Expected SNMP contact details of the device.

VerifySnmpIPv4Acl

Bases: AntaTest

Verifies if the SNMP agent has the right number IPv4 ACL(s) configured for a specified VRF.

Expected results
  • success: The test will pass if the SNMP agent has the provided number of IPv4 ACL(s) in the specified VRF.
  • failure: The test will fail if the SNMP agent has not the right number of IPv4 ACL(s) in the specified VRF.
Source code in anta/tests/snmp.py
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
class VerifySnmpIPv4Acl(AntaTest):
    """
    Verifies if the SNMP agent has the right number IPv4 ACL(s) configured for a specified VRF.

    Expected results:
        * success: The test will pass if the SNMP agent has the provided number of IPv4 ACL(s) in the specified VRF.
        * failure: The test will fail if the SNMP agent has not the right number of IPv4 ACL(s) in the specified VRF.
    """

    name = "VerifySnmpIPv4Acl"
    description = "Verifies if the SNMP agent has IPv4 ACL(s) configured."
    categories = ["snmp"]
    commands = [AntaCommand(command="show snmp ipv4 access-list summary")]

    class Input(AntaTest.Input):  # pylint: disable=missing-class-docstring
        number: conint(ge=0)  # type:ignore
        """The number of expected IPv4 ACL(s)"""
        vrf: str = "default"
        """The name of the VRF in which to check for the SNMP agent"""

    @AntaTest.anta_test
    def test(self) -> None:
        command_output = self.instance_commands[0].json_output
        ipv4_acl_list = command_output["ipAclList"]["aclList"]
        ipv4_acl_number = len(ipv4_acl_list)
        not_configured_acl_list = []
        if ipv4_acl_number != self.inputs.number:
            self.result.is_failure(f"Expected {self.inputs.number} SNMP IPv4 ACL(s) in vrf {self.inputs.vrf} but got {ipv4_acl_number}")
            return
        for ipv4_acl in ipv4_acl_list:
            if self.inputs.vrf not in ipv4_acl["configuredVrfs"] or self.inputs.vrf not in ipv4_acl["activeVrfs"]:
                not_configured_acl_list.append(ipv4_acl["name"])
        if not_configured_acl_list:
            self.result.is_failure(f"SNMP IPv4 ACL(s) not configured or active in vrf {self.inputs.vrf}: {not_configured_acl_list}")
        else:
            self.result.is_success()

Input

Bases: Input

Source code in anta/tests/snmp.py
57
58
59
60
61
class Input(AntaTest.Input):  # pylint: disable=missing-class-docstring
    number: conint(ge=0)  # type:ignore
    """The number of expected IPv4 ACL(s)"""
    vrf: str = "default"
    """The name of the VRF in which to check for the SNMP agent"""

number instance-attribute

number: conint(ge=0)

The number of expected IPv4 ACL(s)

vrf class-attribute instance-attribute

vrf: str = 'default'

The name of the VRF in which to check for the SNMP agent

VerifySnmpIPv6Acl

Bases: AntaTest

Verifies if the SNMP agent has the right number IPv6 ACL(s) configured for a specified VRF.

Expected results
  • success: The test will pass if the SNMP agent has the provided number of IPv6 ACL(s) in the specified VRF.
  • failure: The test will fail if the SNMP agent has not the right number of IPv6 ACL(s) in the specified VRF.
Source code in anta/tests/snmp.py
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
class VerifySnmpIPv6Acl(AntaTest):
    """
    Verifies if the SNMP agent has the right number IPv6 ACL(s) configured for a specified VRF.

    Expected results:
        * success: The test will pass if the SNMP agent has the provided number of IPv6 ACL(s) in the specified VRF.
        * failure: The test will fail if the SNMP agent has not the right number of IPv6 ACL(s) in the specified VRF.
    """

    name = "VerifySnmpIPv6Acl"
    description = "Verifies if the SNMP agent has IPv6 ACL(s) configured."
    categories = ["snmp"]
    commands = [AntaCommand(command="show snmp ipv6 access-list summary")]

    class Input(AntaTest.Input):  # pylint: disable=missing-class-docstring
        number: conint(ge=0)  # type:ignore
        """The number of expected IPv6 ACL(s)"""
        vrf: str = "default"
        """The name of the VRF in which to check for the SNMP agent"""

    @AntaTest.anta_test
    def test(self) -> None:
        command_output = self.instance_commands[0].json_output
        ipv6_acl_list = command_output["ipv6AclList"]["aclList"]
        ipv6_acl_number = len(ipv6_acl_list)
        not_configured_acl_list = []
        if ipv6_acl_number != self.inputs.number:
            self.result.is_failure(f"Expected {self.inputs.number} SNMP IPv6 ACL(s) in vrf {self.inputs.vrf} but got {ipv6_acl_number}")
            return
        for ipv6_acl in ipv6_acl_list:
            if self.inputs.vrf not in ipv6_acl["configuredVrfs"] or self.inputs.vrf not in ipv6_acl["activeVrfs"]:
                not_configured_acl_list.append(ipv6_acl["name"])
        if not_configured_acl_list:
            self.result.is_failure(f"SNMP IPv6 ACL(s) not configured or active in vrf {self.inputs.vrf}: {not_configured_acl_list}")
        else:
            self.result.is_success()

Input

Bases: Input

Source code in anta/tests/snmp.py
95
96
97
98
99
class Input(AntaTest.Input):  # pylint: disable=missing-class-docstring
    number: conint(ge=0)  # type:ignore
    """The number of expected IPv6 ACL(s)"""
    vrf: str = "default"
    """The name of the VRF in which to check for the SNMP agent"""

number instance-attribute

number: conint(ge=0)

The number of expected IPv6 ACL(s)

vrf class-attribute instance-attribute

vrf: str = 'default'

The name of the VRF in which to check for the SNMP agent

VerifySnmpLocation

Bases: AntaTest

This class verifies the SNMP location of a device.

Expected results
  • success: The test will pass if the SNMP location matches the provided input.
  • failure: The test will fail if the SNMP location does not match the provided input.
Source code in anta/tests/snmp.py
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
class VerifySnmpLocation(AntaTest):
    """
    This class verifies the SNMP location of a device.

    Expected results:
        * success: The test will pass if the SNMP location matches the provided input.
        * failure: The test will fail if the SNMP location does not match the provided input.
    """

    name = "VerifySnmpLocation"
    description = "Verifies the SNMP location of a device."
    categories = ["snmp"]
    commands = [AntaCommand(command="show snmp")]

    class Input(AntaTest.Input):
        """Defines the input parameters for this test case."""

        location: str
        """Expected SNMP location of the device."""

    @AntaTest.anta_test
    def test(self) -> None:
        location = self.instance_commands[0].json_output["location"]["location"]

        if location != self.inputs.location:
            self.result.is_failure(f"Expected `{self.inputs.location}` as the location, but found `{location}` instead.")
        else:
            self.result.is_success()

Input

Bases: Input

Defines the input parameters for this test case.

Source code in anta/tests/snmp.py
133
134
135
136
137
class Input(AntaTest.Input):
    """Defines the input parameters for this test case."""

    location: str
    """Expected SNMP location of the device."""

location instance-attribute

location: str

Expected SNMP location of the device.

VerifySnmpStatus

Bases: AntaTest

Verifies whether the SNMP agent is enabled in a specified VRF.

Expected Results
  • success: The test will pass if the SNMP agent is enabled in the specified VRF.
  • failure: The test will fail if the SNMP agent is disabled in the specified VRF.
Source code in anta/tests/snmp.py
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
class VerifySnmpStatus(AntaTest):
    """
    Verifies whether the SNMP agent is enabled in a specified VRF.

    Expected Results:
        * success: The test will pass if the SNMP agent is enabled in the specified VRF.
        * failure: The test will fail if the SNMP agent is disabled in the specified VRF.
    """

    name = "VerifySnmpStatus"
    description = "Verifies if the SNMP agent is enabled."
    categories = ["snmp"]
    commands = [AntaCommand(command="show snmp")]

    class Input(AntaTest.Input):  # pylint: disable=missing-class-docstring
        vrf: str = "default"
        """The name of the VRF in which to check for the SNMP agent"""

    @AntaTest.anta_test
    def test(self) -> None:
        command_output = self.instance_commands[0].json_output
        if command_output["enabled"] and self.inputs.vrf in command_output["vrfs"]["snmpVrfs"]:
            self.result.is_success()
        else:
            self.result.is_failure(f"SNMP agent disabled in vrf {self.inputs.vrf}")

Input

Bases: Input

Source code in anta/tests/snmp.py
30
31
32
class Input(AntaTest.Input):  # pylint: disable=missing-class-docstring
    vrf: str = "default"
    """The name of the VRF in which to check for the SNMP agent"""

vrf class-attribute instance-attribute

vrf: str = 'default'

The name of the VRF in which to check for the SNMP agent