Skip to content

Hardware

ANTA catalog for hardware tests

Test functions related to the hardware or environement

VerifyAdverseDrops

Bases: AntaTest

Verifies there is no adverse drops on DCS7280E and DCS7500E.

Source code in anta/tests/hardware.py
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
class VerifyAdverseDrops(AntaTest):
    """
    Verifies there is no adverse drops on DCS7280E and DCS7500E.
    """

    name = "VerifyAdverseDrops"
    description = "Verifies there is no adverse drops on DCS7280E and DCS7500E"
    categories = ["hardware"]
    commands = [AntaCommand(command="show hardware counter drop", ofmt="json")]

    @skip_on_platforms(["cEOSLab", "vEOS-lab"])
    @AntaTest.anta_test
    def test(self) -> None:
        """Run VerifyAdverseDrops validation"""
        command_output = self.instance_commands[0].json_output
        total_adverse_drop = command_output["totalAdverseDrops"] if "totalAdverseDrops" in command_output.keys() else ""
        if total_adverse_drop == 0:
            self.result.is_success()
        else:
            self.result.is_failure(f"Device TotalAdverseDrops counter is {total_adverse_drop}")

test

test() -> None

Run VerifyAdverseDrops validation

Source code in anta/tests/hardware.py
206
207
208
209
210
211
212
213
214
215
@skip_on_platforms(["cEOSLab", "vEOS-lab"])
@AntaTest.anta_test
def test(self) -> None:
    """Run VerifyAdverseDrops validation"""
    command_output = self.instance_commands[0].json_output
    total_adverse_drop = command_output["totalAdverseDrops"] if "totalAdverseDrops" in command_output.keys() else ""
    if total_adverse_drop == 0:
        self.result.is_success()
    else:
        self.result.is_failure(f"Device TotalAdverseDrops counter is {total_adverse_drop}")

VerifyEnvironmentCooling

Bases: AntaTest

Verifies the fans status is in the accepted states list.

Default accepted states list is [‘ok’]

Source code in anta/tests/hardware.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
147
148
149
150
151
152
153
154
155
156
157
158
class VerifyEnvironmentCooling(AntaTest):
    """
    Verifies the fans status is in the accepted states list.

    Default accepted states list is ['ok']
    """

    name = "VerifyEnvironmentCooling"
    description = "Verifies the fans status is OK for fans"
    categories = ["hardware"]
    commands = [AntaCommand(command="show system environment cooling", ofmt="json")]

    @skip_on_platforms(["cEOSLab", "vEOS-lab"])
    @AntaTest.anta_test
    def test(self, accepted_states: Optional[List[str]] = None) -> None:
        """
        Run VerifyEnvironmentCooling validation

        Args:
            accepted_states: Accepted states list for fan status
        """
        if accepted_states is None:
            accepted_states = ["ok"]

        command_output = self.instance_commands[0].json_output
        self.result.is_success()
        # First go through power supplies fans
        for power_supply in command_output.get("powerSupplySlots", []):
            for fan in power_supply.get("fans", []):
                if (state := fan["status"]) not in accepted_states:
                    if self.result.result == "success":
                        self.result.is_failure(f"Some fans state are not in the accepted list: {accepted_states}.")
                    self.result.is_failure(f"Fan {fan['label']} on PowerSupply {power_supply['label']} has state '{state}'.")
        # Then go through Fan Trays
        for fan_tray in command_output.get("fanTraySlots", []):
            for fan in fan_tray.get("fans", []):
                if (state := fan["status"]) not in accepted_states:
                    if self.result.result == "success":
                        self.result.is_failure(f"Some fans state are not in the accepted list: {accepted_states}.")
                    self.result.is_failure(f"Fan {fan['label']} on Fan Tray {fan_tray['label']} has state '{state}'.")

test

test(accepted_states: Optional[List[str]] = None) -> None

Run VerifyEnvironmentCooling validation

Parameters:

Name Type Description Default
accepted_states Optional[List[str]]

Accepted states list for fan status

None
Source code in anta/tests/hardware.py
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
@skip_on_platforms(["cEOSLab", "vEOS-lab"])
@AntaTest.anta_test
def test(self, accepted_states: Optional[List[str]] = None) -> None:
    """
    Run VerifyEnvironmentCooling validation

    Args:
        accepted_states: Accepted states list for fan status
    """
    if accepted_states is None:
        accepted_states = ["ok"]

    command_output = self.instance_commands[0].json_output
    self.result.is_success()
    # First go through power supplies fans
    for power_supply in command_output.get("powerSupplySlots", []):
        for fan in power_supply.get("fans", []):
            if (state := fan["status"]) not in accepted_states:
                if self.result.result == "success":
                    self.result.is_failure(f"Some fans state are not in the accepted list: {accepted_states}.")
                self.result.is_failure(f"Fan {fan['label']} on PowerSupply {power_supply['label']} has state '{state}'.")
    # Then go through Fan Trays
    for fan_tray in command_output.get("fanTraySlots", []):
        for fan in fan_tray.get("fans", []):
            if (state := fan["status"]) not in accepted_states:
                if self.result.result == "success":
                    self.result.is_failure(f"Some fans state are not in the accepted list: {accepted_states}.")
                self.result.is_failure(f"Fan {fan['label']} on Fan Tray {fan_tray['label']} has state '{state}'.")

VerifyEnvironmentPower

Bases: AntaTest

Verifies the power supplies status is in the accepted states list

The default accepted states list is [‘ok’]

Source code in anta/tests/hardware.py
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
class VerifyEnvironmentPower(AntaTest):
    """
    Verifies the power supplies status is in the accepted states list

    The default accepted states list is ['ok']
    """

    name = "VerifyEnvironmentPower"
    description = "Verifies the power supplies status is OK"
    categories = ["hardware"]
    commands = [AntaCommand(command="show system environment power", ofmt="json")]

    @skip_on_platforms(["cEOSLab", "vEOS-lab"])
    @AntaTest.anta_test
    def test(self, accepted_states: Optional[List[str]] = None) -> None:
        """
        Run VerifyEnvironmentPower validation

        Args:
            accepted_states: Accepted states list for power supplies
        """
        if accepted_states is None:
            accepted_states = ["ok"]
        command_output = self.instance_commands[0].json_output
        power_supplies = command_output["powerSupplies"] if "powerSupplies" in command_output.keys() else "{}"
        wrong_power_supplies = {
            powersupply: {"state": value["state"]} for powersupply, value in dict(power_supplies).items() if value["state"] not in accepted_states
        }
        if not wrong_power_supplies:
            self.result.is_success()
        else:
            self.result.is_failure(f"The following power supplies states are not in the accepted_states list {accepted_states}")
            self.result.messages.append(str(wrong_power_supplies))

test

test(accepted_states: Optional[List[str]] = None) -> None

Run VerifyEnvironmentPower validation

Parameters:

Name Type Description Default
accepted_states Optional[List[str]]

Accepted states list for power supplies

None
Source code in anta/tests/hardware.py
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
@skip_on_platforms(["cEOSLab", "vEOS-lab"])
@AntaTest.anta_test
def test(self, accepted_states: Optional[List[str]] = None) -> None:
    """
    Run VerifyEnvironmentPower validation

    Args:
        accepted_states: Accepted states list for power supplies
    """
    if accepted_states is None:
        accepted_states = ["ok"]
    command_output = self.instance_commands[0].json_output
    power_supplies = command_output["powerSupplies"] if "powerSupplies" in command_output.keys() else "{}"
    wrong_power_supplies = {
        powersupply: {"state": value["state"]} for powersupply, value in dict(power_supplies).items() if value["state"] not in accepted_states
    }
    if not wrong_power_supplies:
        self.result.is_success()
    else:
        self.result.is_failure(f"The following power supplies states are not in the accepted_states list {accepted_states}")
        self.result.messages.append(str(wrong_power_supplies))

VerifyEnvironmentSystemCooling

Bases: AntaTest

Verifies the System Cooling is ok.

Source code in anta/tests/hardware.py
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
class VerifyEnvironmentSystemCooling(AntaTest):
    """
    Verifies the System Cooling is ok.
    """

    name = "VerifyEnvironmentSystemCooling"
    description = "Verifies the fans status is OK for fans"
    categories = ["hardware"]
    commands = [AntaCommand(command="show system environment cooling", ofmt="json")]

    @skip_on_platforms(["cEOSLab", "vEOS-lab"])
    @AntaTest.anta_test
    def test(self) -> None:
        """Run VerifyEnvironmentCooling validation"""

        command_output = self.instance_commands[0].json_output
        sys_status = command_output["systemStatus"] if "systemStatus" in command_output.keys() else ""

        self.result.is_success()
        if sys_status != "coolingOk":
            self.result.is_failure(f"Device System cooling is not OK: {sys_status}")

test

test() -> None

Run VerifyEnvironmentCooling validation

Source code in anta/tests/hardware.py
106
107
108
109
110
111
112
113
114
115
116
@skip_on_platforms(["cEOSLab", "vEOS-lab"])
@AntaTest.anta_test
def test(self) -> None:
    """Run VerifyEnvironmentCooling validation"""

    command_output = self.instance_commands[0].json_output
    sys_status = command_output["systemStatus"] if "systemStatus" in command_output.keys() else ""

    self.result.is_success()
    if sys_status != "coolingOk":
        self.result.is_failure(f"Device System cooling is not OK: {sys_status}")

VerifyTemperature

Bases: AntaTest

Verifies device temparture is currently OK (temperatureOK).

Source code in anta/tests/hardware.py
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
class VerifyTemperature(AntaTest):
    """
    Verifies device temparture is currently OK (temperatureOK).
    """

    name = "VerifyTemperature"
    description = "Verifies device temparture is currently OK (temperatureOK)"
    categories = ["hardware"]
    commands = [AntaCommand(command="show system environment temperature", ofmt="json")]

    @skip_on_platforms(["cEOSLab", "vEOS-lab"])
    @AntaTest.anta_test
    def test(self) -> None:
        """Run VerifyTemperature validation"""
        command_output = self.instance_commands[0].json_output
        temperature_status = command_output["systemStatus"] if "systemStatus" in command_output.keys() else ""
        if temperature_status == "temperatureOk":
            self.result.is_success()
        else:
            self.result.is_failure(f"Device temperature is not OK, systemStatus: {temperature_status }")

test

test() -> None

Run VerifyTemperature validation

Source code in anta/tests/hardware.py
53
54
55
56
57
58
59
60
61
62
@skip_on_platforms(["cEOSLab", "vEOS-lab"])
@AntaTest.anta_test
def test(self) -> None:
    """Run VerifyTemperature validation"""
    command_output = self.instance_commands[0].json_output
    temperature_status = command_output["systemStatus"] if "systemStatus" in command_output.keys() else ""
    if temperature_status == "temperatureOk":
        self.result.is_success()
    else:
        self.result.is_failure(f"Device temperature is not OK, systemStatus: {temperature_status }")

VerifyTransceiversManufacturers

Bases: AntaTest

Verifies Manufacturers of all Transceivers.

Source code in anta/tests/hardware.py
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
class VerifyTransceiversManufacturers(AntaTest):
    """
    Verifies Manufacturers of all Transceivers.
    """

    name = "VerifyTransceiversManufacturers"
    description = ""
    categories = ["hardware"]
    commands = [AntaCommand(command="show inventory", ofmt="json")]

    @skip_on_platforms(["cEOSLab", "vEOS-lab"])
    @AntaTest.anta_test
    def test(self, manufacturers: Optional[List[str]] = None) -> None:
        """
        Run VerifyTransceiversManufacturers validation

        Args:
            manufacturers: List of allowed transceivers manufacturers.
        """
        if not manufacturers:
            self.result.is_skipped(f"{self.__class__.name} was not run as no manufacturers were given")
        else:
            command_output = self.instance_commands[0].json_output
            wrong_manufacturers = {interface: value["mfgName"] for interface, value in command_output["xcvrSlots"].items() if value["mfgName"] not in manufacturers}
            if not wrong_manufacturers:
                self.result.is_success()
            else:
                self.result.is_failure("The following interfaces have transceivers from unauthorized manufacturers")
                self.result.messages.append(str(wrong_manufacturers))

test

test(manufacturers: Optional[List[str]] = None) -> None

Run VerifyTransceiversManufacturers validation

Parameters:

Name Type Description Default
manufacturers Optional[List[str]]

List of allowed transceivers manufacturers.

None
Source code in anta/tests/hardware.py
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
@skip_on_platforms(["cEOSLab", "vEOS-lab"])
@AntaTest.anta_test
def test(self, manufacturers: Optional[List[str]] = None) -> None:
    """
    Run VerifyTransceiversManufacturers validation

    Args:
        manufacturers: List of allowed transceivers manufacturers.
    """
    if not manufacturers:
        self.result.is_skipped(f"{self.__class__.name} was not run as no manufacturers were given")
    else:
        command_output = self.instance_commands[0].json_output
        wrong_manufacturers = {interface: value["mfgName"] for interface, value in command_output["xcvrSlots"].items() if value["mfgName"] not in manufacturers}
        if not wrong_manufacturers:
            self.result.is_success()
        else:
            self.result.is_failure("The following interfaces have transceivers from unauthorized manufacturers")
            self.result.messages.append(str(wrong_manufacturers))

VerifyTransceiversTemperature

Bases: AntaTest

Verifies Transceivers temperature is currently OK.

Source code in anta/tests/hardware.py
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
class VerifyTransceiversTemperature(AntaTest):
    """
    Verifies Transceivers temperature is currently OK.
    """

    name = "VerifyTransceiversTemperature"
    description = "Verifies Transceivers temperature is currently OK"
    categories = ["hardware"]
    commands = [AntaCommand(command="show system environment temperature transceiver", ofmt="json")]

    @skip_on_platforms(["cEOSLab", "vEOS-lab"])
    @AntaTest.anta_test
    def test(self) -> None:
        """Run VerifyTransceiversTemperature validation"""
        command_output = self.instance_commands[0].json_output
        sensors = command_output["tempSensors"] if "tempSensors" in command_output.keys() else ""
        wrong_sensors = {
            sensor["name"]: {
                "hwStatus": sensor["hwStatus"],
                "alertCount": sensor["alertCount"],
            }
            for sensor in sensors
            if sensor["hwStatus"] != "ok" or sensor["alertCount"] != 0
        }
        if not wrong_sensors:
            self.result.is_success()
        else:
            self.result.is_failure("The following sensors do not have the correct temperature or had alarms in the past:")
            self.result.messages.append(str(wrong_sensors))

test

test() -> None

Run VerifyTransceiversTemperature validation

Source code in anta/tests/hardware.py
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
@skip_on_platforms(["cEOSLab", "vEOS-lab"])
@AntaTest.anta_test
def test(self) -> None:
    """Run VerifyTransceiversTemperature validation"""
    command_output = self.instance_commands[0].json_output
    sensors = command_output["tempSensors"] if "tempSensors" in command_output.keys() else ""
    wrong_sensors = {
        sensor["name"]: {
            "hwStatus": sensor["hwStatus"],
            "alertCount": sensor["alertCount"],
        }
        for sensor in sensors
        if sensor["hwStatus"] != "ok" or sensor["alertCount"] != 0
    }
    if not wrong_sensors:
        self.result.is_success()
    else:
        self.result.is_failure("The following sensors do not have the correct temperature or had alarms in the past:")
        self.result.messages.append(str(wrong_sensors))

Last update: July 19, 2023