Skip to content

Result Manager module

ANTA ResultManager module

Helper to manage Test Results and generate reports.

Examples:

Create Inventory:

inventory_anta = AntaInventory(
    inventory_file='examples/inventory.yml',
    username='ansible',
    password='ansible',
    timeout=0.5,
    auto_connect=True
)

Create Result Manager:

manager = ResultManager()

Run tests for all connected devices:

for device in inventory_anta.get_inventory():
    manager.add_test_result(
        verify_eos_version(
            device=device, versions=['4.28.0F']
        )
    )
    manager.add_test_result(
        verify_uptime(
            device=device, minimum=1
        )
    )

Print result in native format:

manager.get_results()
[
    TestResult(
        host=IPv4Address('192.168.0.10'),
        test='verify_eos_version',
        result='failure',
        message="device is running version 4.27.3F-26379303.4273F (engineering build) and test expect ['4.28.0F']"
    ),
    TestResult(
        host=IPv4Address('192.168.0.10'),
        test='verify_eos_version',
        result='success',
        message=None
    ),
]
Source code in anta/result_manager/__init__.py
 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
 79
 80
 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
117
118
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
159
160
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
194
195
196
197
198
199
200
class ResultManager:
    """
    Helper to manage Test Results and generate reports.

    Examples:

        Create Inventory:

            inventory_anta = AntaInventory(
                inventory_file='examples/inventory.yml',
                username='ansible',
                password='ansible',
                timeout=0.5,
                auto_connect=True
            )

        Create Result Manager:

            manager = ResultManager()

        Run tests for all connected devices:

            for device in inventory_anta.get_inventory():
                manager.add_test_result(
                    verify_eos_version(
                        device=device, versions=['4.28.0F']
                    )
                )
                manager.add_test_result(
                    verify_uptime(
                        device=device, minimum=1
                    )
                )

        Print result in native format:

            manager.get_results()
            [
                TestResult(
                    host=IPv4Address('192.168.0.10'),
                    test='verify_eos_version',
                    result='failure',
                    message="device is running version 4.27.3F-26379303.4273F (engineering build) and test expect ['4.28.0F']"
                ),
                TestResult(
                    host=IPv4Address('192.168.0.10'),
                    test='verify_eos_version',
                    result='success',
                    message=None
                ),
            ]
    """

    def __init__(self) -> None:
        """ Class constructor."""
        logger.debug('Instantiate result-manager')
        self._result_entries = ListResult()

    def __len__(self) -> int:
        """
        Implement __len__ method to count number of results.
        """
        return len(self._result_entries)

    def add_test_result(self, entry: TestResult) -> None:
        """Add a result to the list

        Args:
            entry (TestResult): TestResult data to add to the report
        """
        logger.info(f'add new test result to manager: {entry}')
        self._result_entries.append(entry)

    def add_test_results(self, entries: List[TestResult]) -> None:
        """Add a list of results to the list

        Args:
            entries (List[TestResult]): list of TestResult data to add to the report
        """
        logger.info(f'add new list of results to manager: {[str(r) for r in entries]}')
        self._result_entries.extend(entries)

    def get_results(self, output_format: str = "native") -> Any:
        """
        Expose list of all test results in different format

        Support multiple format:
          - native: ListResults format
          - list: a list of TestResult
          - json: a native JSON format

        Args:
            output_format (str, optional): format selector. Can be either native/list/json. Defaults to 'native'.

        Returns:
            any: List of results.
        """
        logger.info(f'retrieve list of result using output_format {output_format}')
        if output_format == 'list':
            return list(self._result_entries)

        if output_format == "json":
            return json.dumps(pydantic_to_dict(self._result_entries), indent=4)

        # Default return for native format.
        return self._result_entries

    def get_result_by_test(self, test_name: str, output_format: str = "native") -> Any:
        """
        Get list of test result for a given test.

        Args:
            test_name (str): Test name to use to filter results
            output_format (str, optional): format selector. Can be either native/list. Defaults to 'native'.

        Returns:
            list[TestResult]: List of results related to the test.
        """
        logger.info(
            f'retrieve list of result using output_format {output_format} for test {test_name}')
        if output_format == "list":
            return [
                result
                for result in self._result_entries
                if str(result.test) == test_name
            ]

        result_manager_filtered = ListResult()
        for result in self._result_entries:
            if result.test == test_name:
                result_manager_filtered.append(result)
        return result_manager_filtered

    def get_result_by_host(self, host_ip: str, output_format: str = "native") -> Any:
        """
        Get list of test result for a given host.

        Args:
            host_ip (str): IP Address of the host to use to filter results.
            output_format (str, optional): format selector. Can be either native/list. Defaults to 'native'.

        Returns:
            Any: List of results related to the host.
        """
        logger.info(
            f'retrieve list of result using output_format {output_format} for host {host_ip}')
        if output_format == "list":
            return [
                result for result in self._result_entries if str(result.name) == host_ip
            ]

        result_manager_filtered = ListResult()
        for result in self._result_entries:
            if str(result.name) == host_ip:
                result_manager_filtered.append(result)
        return result_manager_filtered

    def get_testcases(self) -> List[str]:
        """
        Get list of name of all test cases in current manager.

        Returns:
            List[str]: List of names for all tests.
        """
        logger.info('build list of testcases registered in result-manager')
        result_list = []
        for testcase in self._result_entries:
            if str(testcase.test) not in result_list:
                result_list.append(str(testcase.test))
        logger.debug(f'list of tests name: {result_list}')
        return result_list

    def get_hosts(self) -> List[str]:
        """
        Get list of IP addresses in current manager.

        Returns:
            List[str]: List of IP addresses.
        """
        logger.info('build list of host ip registered in result-manager')
        result_list = []
        for testcase in self._result_entries:
            if str(testcase.name) not in result_list:
                result_list.append(str(testcase.name))
        logger.debug(f'list of tests name: {result_list}')
        return result_list

__init__()

Class constructor.

Source code in anta/result_manager/__init__.py
68
69
70
71
def __init__(self) -> None:
    """ Class constructor."""
    logger.debug('Instantiate result-manager')
    self._result_entries = ListResult()

__len__()

Implement len method to count number of results.

Source code in anta/result_manager/__init__.py
73
74
75
76
77
def __len__(self) -> int:
    """
    Implement __len__ method to count number of results.
    """
    return len(self._result_entries)

add_test_result(entry)

Add a result to the list

Parameters:

Name Type Description Default
entry TestResult

TestResult data to add to the report

required
Source code in anta/result_manager/__init__.py
79
80
81
82
83
84
85
86
def add_test_result(self, entry: TestResult) -> None:
    """Add a result to the list

    Args:
        entry (TestResult): TestResult data to add to the report
    """
    logger.info(f'add new test result to manager: {entry}')
    self._result_entries.append(entry)

add_test_results(entries)

Add a list of results to the list

Parameters:

Name Type Description Default
entries List[TestResult]

list of TestResult data to add to the report

required
Source code in anta/result_manager/__init__.py
88
89
90
91
92
93
94
95
def add_test_results(self, entries: List[TestResult]) -> None:
    """Add a list of results to the list

    Args:
        entries (List[TestResult]): list of TestResult data to add to the report
    """
    logger.info(f'add new list of results to manager: {[str(r) for r in entries]}')
    self._result_entries.extend(entries)

get_hosts()

Get list of IP addresses in current manager.

Returns:

Type Description
List[str]

List[str]: List of IP addresses.

Source code in anta/result_manager/__init__.py
187
188
189
190
191
192
193
194
195
196
197
198
199
200
def get_hosts(self) -> List[str]:
    """
    Get list of IP addresses in current manager.

    Returns:
        List[str]: List of IP addresses.
    """
    logger.info('build list of host ip registered in result-manager')
    result_list = []
    for testcase in self._result_entries:
        if str(testcase.name) not in result_list:
            result_list.append(str(testcase.name))
    logger.debug(f'list of tests name: {result_list}')
    return result_list

get_result_by_host(host_ip, output_format='native')

Get list of test result for a given host.

Parameters:

Name Type Description Default
host_ip str

IP Address of the host to use to filter results.

required
output_format str

format selector. Can be either native/list. Defaults to ‘native’.

'native'

Returns:

Name Type Description
Any Any

List of results related to the host.

Source code in anta/result_manager/__init__.py
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
def get_result_by_host(self, host_ip: str, output_format: str = "native") -> Any:
    """
    Get list of test result for a given host.

    Args:
        host_ip (str): IP Address of the host to use to filter results.
        output_format (str, optional): format selector. Can be either native/list. Defaults to 'native'.

    Returns:
        Any: List of results related to the host.
    """
    logger.info(
        f'retrieve list of result using output_format {output_format} for host {host_ip}')
    if output_format == "list":
        return [
            result for result in self._result_entries if str(result.name) == host_ip
        ]

    result_manager_filtered = ListResult()
    for result in self._result_entries:
        if str(result.name) == host_ip:
            result_manager_filtered.append(result)
    return result_manager_filtered

get_result_by_test(test_name, output_format='native')

Get list of test result for a given test.

Parameters:

Name Type Description Default
test_name str

Test name to use to filter results

required
output_format str

format selector. Can be either native/list. Defaults to ‘native’.

'native'

Returns:

Type Description
Any

list[TestResult]: List of results related to the test.

Source code in anta/result_manager/__init__.py
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
def get_result_by_test(self, test_name: str, output_format: str = "native") -> Any:
    """
    Get list of test result for a given test.

    Args:
        test_name (str): Test name to use to filter results
        output_format (str, optional): format selector. Can be either native/list. Defaults to 'native'.

    Returns:
        list[TestResult]: List of results related to the test.
    """
    logger.info(
        f'retrieve list of result using output_format {output_format} for test {test_name}')
    if output_format == "list":
        return [
            result
            for result in self._result_entries
            if str(result.test) == test_name
        ]

    result_manager_filtered = ListResult()
    for result in self._result_entries:
        if result.test == test_name:
            result_manager_filtered.append(result)
    return result_manager_filtered

get_results(output_format='native')

Expose list of all test results in different format

Support multiple format
  • native: ListResults format
  • list: a list of TestResult
  • json: a native JSON format

Parameters:

Name Type Description Default
output_format str

format selector. Can be either native/list/json. Defaults to ‘native’.

'native'

Returns:

Name Type Description
any Any

List of results.

Source code in anta/result_manager/__init__.py
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
def get_results(self, output_format: str = "native") -> Any:
    """
    Expose list of all test results in different format

    Support multiple format:
      - native: ListResults format
      - list: a list of TestResult
      - json: a native JSON format

    Args:
        output_format (str, optional): format selector. Can be either native/list/json. Defaults to 'native'.

    Returns:
        any: List of results.
    """
    logger.info(f'retrieve list of result using output_format {output_format}')
    if output_format == 'list':
        return list(self._result_entries)

    if output_format == "json":
        return json.dumps(pydantic_to_dict(self._result_entries), indent=4)

    # Default return for native format.
    return self._result_entries

get_testcases()

Get list of name of all test cases in current manager.

Returns:

Type Description
List[str]

List[str]: List of names for all tests.

Source code in anta/result_manager/__init__.py
172
173
174
175
176
177
178
179
180
181
182
183
184
185
def get_testcases(self) -> List[str]:
    """
    Get list of name of all test cases in current manager.

    Returns:
        List[str]: List of names for all tests.
    """
    logger.info('build list of testcases registered in result-manager')
    result_list = []
    for testcase in self._result_entries:
        if str(testcase.test) not in result_list:
            result_list.append(str(testcase.test))
    logger.debug(f'list of tests name: {result_list}')
    return result_list

Last update: September 5, 2022