From 91e8679f56be4d8fd78bb3e1b2d5da53f874f753 Mon Sep 17 00:00:00 2001 From: Ansible Core Team Date: Mon, 9 Mar 2020 09:40:36 +0000 Subject: Migrated to dellemc_networking.os9 --- .../module_utils/network/dellos9/dellos9.py | 166 --- .../modules/network/dellos9/dellos9_command.py | 240 ---- .../modules/network/dellos9/dellos9_config.py | 346 ------ .../modules/network/dellos9/dellos9_facts.py | 574 --------- lib/ansible/plugins/action/dellos9.py | 81 -- lib/ansible/plugins/cliconf/dellos9.py | 123 -- lib/ansible/plugins/doc_fragments/dellos9.py | 58 - lib/ansible/plugins/terminal/dellos9.py | 83 -- .../targets/dellos9_command/defaults/main.yaml | 2 - .../targets/dellos9_command/tasks/cli.yaml | 16 - .../targets/dellos9_command/tasks/main.yaml | 2 - .../dellos9_command/tests/cli/bad_operator.yaml | 20 - .../dellos9_command/tests/cli/contains.yaml | 20 - .../targets/dellos9_command/tests/cli/invalid.yaml | 28 - .../targets/dellos9_command/tests/cli/output.yaml | 29 - .../targets/dellos9_command/tests/cli/timeout.yaml | 19 - .../targets/dellos9_config/defaults/main.yaml | 2 - .../targets/dellos9_config/tasks/cli.yaml | 15 - .../targets/dellos9_config/tasks/main.yaml | 2 - .../targets/dellos9_config/tests/cli/sublevel.yaml | 43 - .../dellos9_config/tests/cli/sublevel_block.yaml | 62 - .../dellos9_config/tests/cli/sublevel_exact.yaml | 66 - .../dellos9_config/tests/cli/sublevel_strict.yaml | 63 - .../targets/dellos9_config/tests/cli/toplevel.yaml | 37 - .../dellos9_config/tests/cli/toplevel_after.yaml | 44 - .../dellos9_config/tests/cli/toplevel_before.yaml | 44 - .../tests/cli/toplevel_nonidempotent.yaml | 39 - .../targets/dellos9_facts/defaults/main.yaml | 2 - .../targets/dellos9_facts/tasks/cli.yaml | 16 - .../targets/dellos9_facts/tasks/main.yaml | 2 - .../targets/dellos9_facts/tests/cli/facts.yaml | 42 - test/sanity/ignore.txt | 23 - .../modules/network/dellos9/dellos9_module.py | 90 -- .../dellos9/fixtures/dellos9_config_config.cfg | 13 - .../dellos9/fixtures/dellos9_config_src.cfg | 12 - .../network/dellos9/fixtures/show_file-systems | 10 - .../network/dellos9/fixtures/show_interfaces | 1259 -------------------- .../network/dellos9/fixtures/show_inventory | 19 - .../network/dellos9/fixtures/show_ipv6_interface | 26 - .../dellos9/fixtures/show_lldp_neighbors_detail | 35 - .../dellos9/fixtures/show_memory__except_Processor | 4 - .../network/dellos9/fixtures/show_running-config | 238 ---- .../fixtures/show_running-config__grep_hostname | 1 - .../modules/network/dellos9/fixtures/show_version | 18 - .../network/dellos9/test_dellos9_command.py | 110 -- .../modules/network/dellos9/test_dellos9_config.py | 150 --- .../modules/network/dellos9/test_dellos9_facts.py | 106 -- 47 files changed, 4400 deletions(-) delete mode 100644 lib/ansible/module_utils/network/dellos9/dellos9.py delete mode 100644 lib/ansible/modules/network/dellos9/dellos9_command.py delete mode 100644 lib/ansible/modules/network/dellos9/dellos9_config.py delete mode 100644 lib/ansible/modules/network/dellos9/dellos9_facts.py delete mode 100644 lib/ansible/plugins/action/dellos9.py delete mode 100644 lib/ansible/plugins/cliconf/dellos9.py delete mode 100644 lib/ansible/plugins/doc_fragments/dellos9.py delete mode 100644 lib/ansible/plugins/terminal/dellos9.py delete mode 100644 test/integration/targets/dellos9_command/defaults/main.yaml delete mode 100644 test/integration/targets/dellos9_command/tasks/cli.yaml delete mode 100644 test/integration/targets/dellos9_command/tasks/main.yaml delete mode 100644 test/integration/targets/dellos9_command/tests/cli/bad_operator.yaml delete mode 100644 test/integration/targets/dellos9_command/tests/cli/contains.yaml delete mode 100644 test/integration/targets/dellos9_command/tests/cli/invalid.yaml delete mode 100644 test/integration/targets/dellos9_command/tests/cli/output.yaml delete mode 100644 test/integration/targets/dellos9_command/tests/cli/timeout.yaml delete mode 100644 test/integration/targets/dellos9_config/defaults/main.yaml delete mode 100644 test/integration/targets/dellos9_config/tasks/cli.yaml delete mode 100644 test/integration/targets/dellos9_config/tasks/main.yaml delete mode 100644 test/integration/targets/dellos9_config/tests/cli/sublevel.yaml delete mode 100644 test/integration/targets/dellos9_config/tests/cli/sublevel_block.yaml delete mode 100644 test/integration/targets/dellos9_config/tests/cli/sublevel_exact.yaml delete mode 100644 test/integration/targets/dellos9_config/tests/cli/sublevel_strict.yaml delete mode 100644 test/integration/targets/dellos9_config/tests/cli/toplevel.yaml delete mode 100644 test/integration/targets/dellos9_config/tests/cli/toplevel_after.yaml delete mode 100644 test/integration/targets/dellos9_config/tests/cli/toplevel_before.yaml delete mode 100644 test/integration/targets/dellos9_config/tests/cli/toplevel_nonidempotent.yaml delete mode 100644 test/integration/targets/dellos9_facts/defaults/main.yaml delete mode 100644 test/integration/targets/dellos9_facts/tasks/cli.yaml delete mode 100644 test/integration/targets/dellos9_facts/tasks/main.yaml delete mode 100644 test/integration/targets/dellos9_facts/tests/cli/facts.yaml delete mode 100644 test/units/modules/network/dellos9/dellos9_module.py delete mode 100644 test/units/modules/network/dellos9/fixtures/dellos9_config_config.cfg delete mode 100644 test/units/modules/network/dellos9/fixtures/dellos9_config_src.cfg delete mode 100644 test/units/modules/network/dellos9/fixtures/show_file-systems delete mode 100644 test/units/modules/network/dellos9/fixtures/show_interfaces delete mode 100644 test/units/modules/network/dellos9/fixtures/show_inventory delete mode 100644 test/units/modules/network/dellos9/fixtures/show_ipv6_interface delete mode 100644 test/units/modules/network/dellos9/fixtures/show_lldp_neighbors_detail delete mode 100644 test/units/modules/network/dellos9/fixtures/show_memory__except_Processor delete mode 100644 test/units/modules/network/dellos9/fixtures/show_running-config delete mode 100644 test/units/modules/network/dellos9/fixtures/show_running-config__grep_hostname delete mode 100644 test/units/modules/network/dellos9/fixtures/show_version delete mode 100644 test/units/modules/network/dellos9/test_dellos9_command.py delete mode 100644 test/units/modules/network/dellos9/test_dellos9_config.py delete mode 100644 test/units/modules/network/dellos9/test_dellos9_facts.py diff --git a/lib/ansible/module_utils/network/dellos9/dellos9.py b/lib/ansible/module_utils/network/dellos9/dellos9.py deleted file mode 100644 index 764c881b10..0000000000 --- a/lib/ansible/module_utils/network/dellos9/dellos9.py +++ /dev/null @@ -1,166 +0,0 @@ -# -# (c) 2015 Peter Sprygada, -# (c) 2017 Red Hat, Inc -# -# Copyright (c) 2016 Dell Inc. -# -# This code is part of Ansible, but is an independent component. -# This particular file snippet, and this file snippet only, is BSD licensed. -# Modules you write using this snippet, which is embedded dynamically by Ansible -# still belong to the author of the module, and may assign their own license -# to the complete work. -# -# Redistribution and use in source and binary forms, with or without modification, -# are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE -# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -import json - -from ansible.module_utils._text import to_text -from ansible.module_utils.basic import env_fallback -from ansible.module_utils.network.common.utils import to_list, ComplexList -from ansible.module_utils.connection import Connection, ConnectionError, exec_command -from ansible.module_utils.network.common.config import NetworkConfig, ConfigLine - -_DEVICE_CONFIGS = {} - -WARNING_PROMPTS_RE = [ - r"[\r\n]?\[confirm yes/no\]:\s?$", - r"[\r\n]?\[y/n\]:\s?$", - r"[\r\n]?\[yes/no\]:\s?$" -] - -dellos9_provider_spec = { - 'host': dict(), - 'port': dict(type='int'), - 'username': dict(fallback=(env_fallback, ['ANSIBLE_NET_USERNAME'])), - 'password': dict(fallback=(env_fallback, ['ANSIBLE_NET_PASSWORD']), no_log=True), - 'ssh_keyfile': dict(fallback=(env_fallback, ['ANSIBLE_NET_SSH_KEYFILE']), type='path'), - 'authorize': dict(fallback=(env_fallback, ['ANSIBLE_NET_AUTHORIZE']), type='bool'), - 'auth_pass': dict(fallback=(env_fallback, ['ANSIBLE_NET_AUTH_PASS']), no_log=True), - 'timeout': dict(type='int'), -} -dellos9_argument_spec = { - 'provider': dict(type='dict', options=dellos9_provider_spec), -} -dellos9_top_spec = { - 'host': dict(removed_in_version=2.9), - 'port': dict(removed_in_version=2.9, type='int'), - 'username': dict(removed_in_version=2.9), - 'password': dict(removed_in_version=2.9, no_log=True), - 'ssh_keyfile': dict(removed_in_version=2.9, type='path'), - 'authorize': dict(removed_in_version=2.9, type='bool'), - 'auth_pass': dict(removed_in_version=2.9, no_log=True), - 'timeout': dict(removed_in_version=2.9, type='int'), -} -dellos9_argument_spec.update(dellos9_top_spec) - - -def get_provider_argspec(): - return dellos9_provider_spec - - -def get_connection(module): - if hasattr(module, '_dellos9_connection'): - return module._dellos9_connection - - capabilities = get_capabilities(module) - network_api = capabilities.get('network_api') - if network_api == 'cliconf': - module._dellos9_connection = Connection(module._socket_path) - else: - module.fail_json(msg='Invalid connection type %s' % network_api) - - return module._dellos9_connection - - -def get_capabilities(module): - if hasattr(module, '_dellos9_capabilities'): - return module._dellos9_capabilities - try: - capabilities = Connection(module._socket_path).get_capabilities() - except ConnectionError as exc: - module.fail_json(msg=to_text(exc, errors='surrogate_then_replace')) - module._dellos9_capabilities = json.loads(capabilities) - return module._dellos9_capabilities - - -def check_args(module, warnings): - pass - - -def get_config(module, flags=None): - flags = [] if flags is None else flags - - cmd = 'show running-config ' - cmd += ' '.join(flags) - cmd = cmd.strip() - - try: - return _DEVICE_CONFIGS[cmd] - except KeyError: - rc, out, err = exec_command(module, cmd) - if rc != 0: - module.fail_json(msg='unable to retrieve current config', stderr=to_text(err, errors='surrogate_or_strict')) - cfg = to_text(out, errors='surrogate_or_strict').strip() - _DEVICE_CONFIGS[cmd] = cfg - return cfg - - -def run_commands(module, commands, check_rc=True): - connection = get_connection(module) - try: - return connection.run_commands(commands=commands, check_rc=check_rc) - except ConnectionError as exc: - module.fail_json(msg=to_text(exc)) - - -def load_config(module, commands): - rc, out, err = exec_command(module, 'configure terminal') - if rc != 0: - module.fail_json(msg='unable to enter configuration mode', err=to_text(err, errors='surrogate_or_strict')) - - for command in to_list(commands): - if command == 'end': - continue - rc, out, err = exec_command(module, command) - if rc != 0: - module.fail_json(msg=to_text(err, errors='surrogate_or_strict'), command=command, rc=rc) - - exec_command(module, 'end') - - -def get_sublevel_config(running_config, module): - contents = list() - current_config_contents = list() - running_config = NetworkConfig(contents=running_config, indent=1) - obj = running_config.get_object(module.params['parents']) - if obj: - contents = obj.children - contents[:0] = module.params['parents'] - - indent = 0 - for c in contents: - if isinstance(c, str): - current_config_contents.append(c.rjust(len(c) + indent, ' ')) - if isinstance(c, ConfigLine): - current_config_contents.append(c.raw) - indent = 1 - sublevel_config = '\n'.join(current_config_contents) - - return sublevel_config diff --git a/lib/ansible/modules/network/dellos9/dellos9_command.py b/lib/ansible/modules/network/dellos9/dellos9_command.py deleted file mode 100644 index 37c1e7a470..0000000000 --- a/lib/ansible/modules/network/dellos9/dellos9_command.py +++ /dev/null @@ -1,240 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -# Copyright: (c) 2015, Peter Sprygada -# Copyright: (c) 2016, Dell Inc. -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - - -from __future__ import absolute_import, division, print_function -__metaclass__ = type - - -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'community'} - -DOCUMENTATION = """ ---- -module: dellos9_command -version_added: "2.2" -author: "Dhivya P (@dhivyap)" -short_description: Run commands on remote devices running Dell OS9 -description: - - Sends arbitrary commands to a Dell OS9 node and returns the results - read from the device. This module includes an - argument that will cause the module to wait for a specific condition - before returning or timing out if the condition is not met. - - This module does not support running commands in configuration mode. - Please use M(dellos9_config) to configure Dell OS9 devices. -extends_documentation_fragment: dellos9 -options: - commands: - description: - - List of commands to send to the remote dellos9 device over the - configured provider. The resulting output from the command - is returned. If the I(wait_for) argument is provided, the - module is not returned until the condition is satisfied or - the number of retries has expired. If a command sent to the - device requires answering a prompt, it is possible to pass - a dict containing I(command), I(answer) and I(prompt). - Common answers are 'yes' or "\\r" (carriage return, must be - double quotes). See examples. - type: list - required: true - wait_for: - description: - - List of conditions to evaluate against the output of the - command. The task will wait for each condition to be true - before moving forward. If the conditional is not true - within the configured number of retries, the task fails. - See examples. - type: list - version_added: "2.2" - match: - description: - - The I(match) argument is used in conjunction with the - I(wait_for) argument to specify the match policy. Valid - values are C(all) or C(any). If the value is set to C(all) - then all conditionals in the wait_for must be satisfied. If - the value is set to C(any) then only one of the values must be - satisfied. - type: str - default: all - choices: [ 'all', 'any' ] - version_added: "2.5" - retries: - description: - - Specifies the number of retries a command should be tried - before it is considered failed. The command is run on the - target device every retry and evaluated against the - I(wait_for) conditions. - type: int - default: 10 - interval: - description: - - Configures the interval in seconds to wait between retries - of the command. If the command does not pass the specified - conditions, the interval indicates how long to wait before - trying the command again. - type: int - default: 1 - -notes: - - This module requires Dell OS9 version 9.10.0.1P13 or above. - - - This module requires to increase the ssh connection rate limit. - Use the following command I(ip ssh connection-rate-limit 60) - to configure the same. This can be done via M(dellos9_config) module - as well. - -""" - -EXAMPLES = """ -tasks: - - name: run show version on remote devices - dellos9_command: - commands: show version - - - name: run show version and check to see if output contains OS9 - dellos9_command: - commands: show version - wait_for: result[0] contains OS9 - - - name: run multiple commands on remote nodes - dellos9_command: - commands: - - show version - - show interfaces - - - name: run multiple commands and evaluate the output - dellos9_command: - commands: - - show version - - show interfaces - wait_for: - - result[0] contains OS9 - - result[1] contains Loopback - - - name: run commands that require answering a prompt - dellos9_command: - commands: - - command: 'copy running-config startup-config' - prompt: '[confirm yes/no]: ?$' - answer: 'yes' -""" - -RETURN = """ -stdout: - description: The set of responses from the commands - returned: always apart from low level errors (such as action plugin) - type: list - sample: ['...', '...'] -stdout_lines: - description: The value of stdout split into a list - returned: always apart from low level errors (such as action plugin) - type: list - sample: [['...', '...'], ['...'], ['...']] -failed_conditions: - description: The list of conditionals that have failed - returned: failed - type: list - sample: ['...', '...'] -warnings: - description: The list of warnings (if any) generated by module based on arguments - returned: always - type: list - sample: ['...', '...'] -""" -import time - -from ansible.module_utils._text import to_text -from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.network.common.parsing import Conditional -from ansible.module_utils.network.common.utils import transform_commands, to_lines -from ansible.module_utils.network.dellos9.dellos9 import run_commands -from ansible.module_utils.network.dellos9.dellos9 import dellos9_argument_spec, check_args - - -def parse_commands(module, warnings): - commands = transform_commands(module) - - if module.check_mode: - for item in list(commands): - if not item['command'].startswith('show'): - warnings.append( - 'Only show commands are supported when using check mode, not ' - 'executing %s' % item['command'] - ) - commands.remove(item) - - return commands - - -def main(): - """main entry point for module execution - """ - argument_spec = dict( - # { command: , prompt: , response: } - commands=dict(type='list', required=True), - - wait_for=dict(type='list'), - match=dict(default='all', choices=['all', 'any']), - - retries=dict(default=10, type='int'), - interval=dict(default=1, type='int') - ) - - argument_spec.update(dellos9_argument_spec) - - module = AnsibleModule(argument_spec=argument_spec, - supports_check_mode=True) - - result = {'changed': False} - - warnings = list() - check_args(module, warnings) - commands = parse_commands(module, warnings) - result['warnings'] = warnings - - wait_for = module.params['wait_for'] or list() - - try: - conditionals = [Conditional(c) for c in wait_for] - except AttributeError as exc: - module.fail_json(msg=to_text(exc)) - retries = module.params['retries'] - interval = module.params['interval'] - match = module.params['match'] - - while retries > 0: - responses = run_commands(module, commands) - - for item in list(conditionals): - if item(responses): - if match == 'any': - conditionals = list() - break - conditionals.remove(item) - - if not conditionals: - break - - time.sleep(interval) - retries -= 1 - - if conditionals: - failed_conditions = [item.raw for item in conditionals] - msg = 'One or more conditional statements have not been satisfied' - module.fail_json(msg=msg, failed_conditions=failed_conditions) - - result.update({ - 'stdout': responses, - 'stdout_lines': list(to_lines(responses)) - }) - - module.exit_json(**result) - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/network/dellos9/dellos9_config.py b/lib/ansible/modules/network/dellos9/dellos9_config.py deleted file mode 100644 index 3ddc1d07ce..0000000000 --- a/lib/ansible/modules/network/dellos9/dellos9_config.py +++ /dev/null @@ -1,346 +0,0 @@ -#!/usr/bin/python -# -# (c) 2015 Peter Sprygada, -# Copyright (c) 2016 Dell Inc. -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import absolute_import, division, print_function -__metaclass__ = type - - -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'community'} - - -DOCUMENTATION = """ ---- -module: dellos9_config -version_added: "2.2" -author: "Dhivya P (@dhivyap)" -short_description: Manage Dell EMC Networking OS9 configuration sections -description: - - OS9 configurations use a simple block indent file syntax - for segmenting configuration into sections. This module provides - an implementation for working with OS9 configuration sections in - a deterministic way. -extends_documentation_fragment: dellos9 -options: - lines: - description: - - The ordered set of commands that should be configured in the - section. The commands must be the exact same commands as found - in the device running-config. Be sure to note the configuration - command syntax as some commands are automatically modified by the - device config parser. This argument is mutually exclusive with I(src). - aliases: ['commands'] - parents: - description: - - The ordered set of parents that uniquely identify the section or hierarchy - the commands should be checked against. If the parents argument - is omitted, the commands are checked against the set of top - level or global commands. - src: - description: - - Specifies the source path to the file that contains the configuration - or configuration template to load. The path to the source file can - either be the full path on the Ansible control host or a relative - path from the playbook or role root directory. This argument is - mutually exclusive with I(lines). - before: - description: - - The ordered set of commands to push on to the command stack if - a change needs to be made. This allows the playbook designer - the opportunity to perform configuration commands prior to pushing - any changes without affecting how the set of commands are matched - against the system. - after: - description: - - The ordered set of commands to append to the end of the command - stack if a change needs to be made. Just like with I(before) this - allows the playbook designer to append a set of commands to be - executed after the command set. - match: - description: - - Instructs the module on the way to perform the matching of - the set of commands against the current device config. If - match is set to I(line), commands are matched line by line. If - match is set to I(strict), command lines are matched with respect - to position. If match is set to I(exact), command lines - must be an equal match. Finally, if match is set to I(none), the - module will not attempt to compare the source configuration with - the running configuration on the remote device. - default: line - choices: ['line', 'strict', 'exact', 'none'] - replace: - description: - - Instructs the module on the way to perform the configuration - on the device. If the replace argument is set to I(line) then - the modified lines are pushed to the device in configuration - mode. If the replace argument is set to I(block) then the entire - command block is pushed to the device in configuration mode if any - line is not correct. - default: line - choices: ['line', 'block'] - update: - description: - - The I(update) argument controls how the configuration statements - are processed on the remote device. Valid choices for the I(update) - argument are I(merge) and I(check). When you set this argument to - I(merge), the configuration changes merge with the current - device running configuration. When you set this argument to I(check) - the configuration updates are determined but not actually configured - on the remote device. - default: merge - choices: ['merge', 'check'] - save: - description: - - The C(save) argument instructs the module to save the running- - config to the startup-config at the conclusion of the module - running. If check mode is specified, this argument is ignored. - type: bool - default: no - config: - description: - - The module, by default, will connect to the remote device and - retrieve the current running-config to use as a base for comparing - against the contents of source. There are times when it is not - desirable to have the task get the current running-config for - every task in a playbook. The I(config) argument allows the - implementer to pass in the configuration to use as the base - config for comparison. - backup: - description: - - This argument will cause the module to create a full backup of - the current C(running-config) from the remote device before any - changes are made. If the C(backup_options) value is not given, - the backup file is written to the C(backup) folder in the playbook - root directory. If the directory does not exist, it is created. - type: bool - default: 'no' - backup_options: - description: - - This is a dict object containing configurable options related to backup file path. - The value of this option is read only when C(backup) is set to I(yes), if C(backup) is set - to I(no) this option will be silently ignored. - suboptions: - filename: - description: - - The filename to be used to store the backup configuration. If the filename - is not given it will be generated based on the hostname, current time and date - in format defined by _config.@ - dir_path: - description: - - This option provides the path ending with directory name in which the backup - configuration file will be stored. If the directory does not exist it will be first - created and the filename is either the value of C(filename) or default filename - as described in C(filename) options description. If the path value is not given - in that case a I(backup) directory will be created in the current working directory - and backup configuration will be copied in C(filename) within I(backup) directory. - type: path - type: dict - version_added: "2.8" -notes: - - This module requires Dell OS9 version 9.10.0.1P13 or above. - - - This module requires to increase the ssh connection rate limit. - Use the following command I(ip ssh connection-rate-limit 60) - to configure the same. This can also be done with the - M(dellos9_config) module. -""" - -EXAMPLES = """ -- dellos9_config: - lines: ['hostname {{ inventory_hostname }}'] - provider: "{{ cli }}" - -- dellos9_config: - lines: - - 10 permit ip host 1.1.1.1 any log - - 20 permit ip host 2.2.2.2 any log - - 30 permit ip host 3.3.3.3 any log - - 40 permit ip host 4.4.4.4 any log - - 50 permit ip host 5.5.5.5 any log - parents: ['ip access-list extended test'] - before: ['no ip access-list extended test'] - match: exact - -- dellos9_config: - lines: - - 10 permit ip host 1.1.1.1 any log - - 20 permit ip host 2.2.2.2 any log - - 30 permit ip host 3.3.3.3 any log - - 40 permit ip host 4.4.4.4 any log - parents: ['ip access-list extended test'] - before: ['no ip access-list extended test'] - replace: block - -- dellos9_config: - lines: ['hostname {{ inventory_hostname }}'] - provider: "{{ cli }}" - backup: yes - backup_options: - filename: backup.cfg - dir_path: /home/user -""" - -RETURN = """ -updates: - description: The set of commands that will be pushed to the remote device. - returned: always - type: list - sample: ['hostname foo', 'router bgp 1', 'bgp router-id 1.1.1.1'] -commands: - description: The set of commands that will be pushed to the remote device - returned: always - type: list - sample: ['hostname foo', 'router bgp 1', 'bgp router-id 1.1.1.1'] -saved: - description: Returns whether the configuration is saved to the startup - configuration or not. - returned: When not check_mode. - type: bool - sample: True -backup_path: - description: The full path to the backup file - returned: when backup is yes - type: str - sample: /playbooks/ansible/backup/dellos9_config.2016-07-16@22:28:34 -""" -from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.network.dellos9.dellos9 import get_config, get_sublevel_config -from ansible.module_utils.network.dellos9.dellos9 import dellos9_argument_spec, check_args -from ansible.module_utils.network.dellos9.dellos9 import load_config, run_commands -from ansible.module_utils.network.dellos9.dellos9 import WARNING_PROMPTS_RE -from ansible.module_utils.network.common.config import NetworkConfig, dumps - - -def get_candidate(module): - candidate = NetworkConfig(indent=1) - if module.params['src']: - candidate.load(module.params['src']) - elif module.params['lines']: - parents = module.params['parents'] or list() - commands = module.params['lines'][0] - if (isinstance(commands, dict)) and (isinstance(commands['command'], list)): - candidate.add(commands['command'], parents=parents) - elif (isinstance(commands, dict)) and (isinstance(commands['command'], str)): - candidate.add([commands['command']], parents=parents) - else: - candidate.add(module.params['lines'], parents=parents) - return candidate - - -def get_running_config(module): - contents = module.params['config'] - if not contents: - contents = get_config(module) - return contents - - -def main(): - - backup_spec = dict( - filename=dict(), - dir_path=dict(type='path') - ) - argument_spec = dict( - lines=dict(aliases=['commands'], type='list'), - parents=dict(type='list'), - - src=dict(type='path'), - - before=dict(type='list'), - after=dict(type='list'), - - match=dict(default='line', - choices=['line', 'strict', 'exact', 'none']), - replace=dict(default='line', choices=['line', 'block']), - - update=dict(choices=['merge', 'check'], default='merge'), - save=dict(type='bool', default=False), - config=dict(), - backup=dict(type='bool', default=False), - backup_options=dict(type='dict', options=backup_spec) - ) - - argument_spec.update(dellos9_argument_spec) - - mutually_exclusive = [('lines', 'src'), - ('parents', 'src')] - module = AnsibleModule(argument_spec=argument_spec, - mutually_exclusive=mutually_exclusive, - supports_check_mode=True) - - parents = module.params['parents'] or list() - - match = module.params['match'] - replace = module.params['replace'] - - warnings = list() - check_args(module, warnings) - - result = dict(changed=False, saved=False, warnings=warnings) - - candidate = get_candidate(module) - - if module.params['backup']: - if not module.check_mode: - result['__backup__'] = get_config(module) - commands = list() - - if any((module.params['lines'], module.params['src'])): - if match != 'none': - config = get_running_config(module) - if parents: - contents = get_sublevel_config(config, module) - config = NetworkConfig(contents=contents, indent=1) - else: - config = NetworkConfig(contents=config, indent=1) - configobjs = candidate.difference(config, match=match, replace=replace) - else: - configobjs = candidate.items - - if configobjs: - commands = dumps(configobjs, 'commands') - if ((isinstance(module.params['lines'], list)) and - (isinstance(module.params['lines'][0], dict)) and - set(['prompt', 'answer']).issubset(module.params['lines'][0])): - - cmd = {'command': commands, - 'prompt': module.params['lines'][0]['prompt'], - 'answer': module.params['lines'][0]['answer']} - commands = [module.jsonify(cmd)] - else: - commands = commands.split('\n') - - if module.params['before']: - commands[:0] = module.params['before'] - - if module.params['after']: - commands.extend(module.params['after']) - - if not module.check_mode and module.params['update'] == 'merge': - load_config(module, commands) - - result['changed'] = True - result['commands'] = commands - result['updates'] = commands - - if module.params['save']: - result['changed'] = True - if not module.check_mode: - cmd = {'command': 'copy running-config startup-config', - 'prompt': r'\[confirm yes/no\]:\s?$', 'answer': 'yes'} - run_commands(module, [cmd]) - result['saved'] = True - else: - module.warn('Skipping command `copy running-config startup-config`' - 'due to check_mode. Configuration not copied to ' - 'non-volatile storage') - - module.exit_json(**result) - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/network/dellos9/dellos9_facts.py b/lib/ansible/modules/network/dellos9/dellos9_facts.py deleted file mode 100644 index 5818644430..0000000000 --- a/lib/ansible/modules/network/dellos9/dellos9_facts.py +++ /dev/null @@ -1,574 +0,0 @@ -#!/usr/bin/python -# -# (c) 2015 Peter Sprygada, -# Copyright (c) 2016 Dell Inc. -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import absolute_import, division, print_function -__metaclass__ = type - - -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'community'} - - -DOCUMENTATION = """ ---- -module: dellos9_facts -version_added: "2.2" -author: "Dhivya P (@dhivyap)" -short_description: Collect facts from remote devices running Dell EMC Networking OS9 -description: - - Collects a base set of device facts from a remote device that - is running OS9. This module prepends all of the - base network fact keys with C(ansible_net_). The facts - module will always collect a base set of facts from the device - and can enable or disable collection of additional facts. -extends_documentation_fragment: dellos9 -options: - gather_subset: - description: - - When supplied, this argument will restrict the facts collected - to a given subset. Possible values for this argument include - all, hardware, config, and interfaces. Can specify a list of - values to include a larger subset. Values can also be used - with an initial C(M(!)) to specify that a specific subset should - not be collected. - default: [ '!config' ] -notes: - - This module requires OS9 version 9.10.0.1P13 or above. - - - This module requires an increase of the SSH connection rate limit. - Use the following command I(ip ssh connection-rate-limit 60) - to configure the same. This can be also be done with the M(dellos9_config) module. -""" - -EXAMPLES = """ -# Collect all facts from the device -- dellos9_facts: - gather_subset: all - -# Collect only the config and default facts -- dellos9_facts: - gather_subset: - - config - -# Do not collect hardware facts -- dellos9_facts: - gather_subset: - - "!hardware" -""" - -RETURN = """ -ansible_net_gather_subset: - description: The list of fact subsets collected from the device - returned: always - type: list - -# default -ansible_net_model: - description: The model name returned from the device - returned: always - type: str -ansible_net_serialnum: - description: The serial number of the remote device - returned: always - type: str -ansible_net_version: - description: The operating system version running on the remote device - returned: always - type: str -ansible_net_hostname: - description: The configured hostname of the device - returned: always - type: str -ansible_net_image: - description: The image file the device is running - returned: always - type: str - -# hardware -ansible_net_filesystems: - description: All file system names available on the device - returned: when hardware is configured - type: list -ansible_net_memfree_mb: - description: The available free memory on the remote device in Mb - returned: when hardware is configured - type: int -ansible_net_memtotal_mb: - description: The total memory on the remote device in Mb - returned: when hardware is configured - type: int - -# config -ansible_net_config: - description: The current active config from the device - returned: when config is configured - type: str - -# interfaces -ansible_net_all_ipv4_addresses: - description: All IPv4 addresses configured on the device - returned: when interfaces is configured - type: list -ansible_net_all_ipv6_addresses: - description: All IPv6 addresses configured on the device - returned: when interfaces is configured - type: list -ansible_net_interfaces: - description: A hash of all interfaces running on the system - returned: when interfaces is configured - type: dict -ansible_net_neighbors: - description: The list of LLDP neighbors from the remote device - returned: when interfaces is configured - type: dict -""" -import re -try: - from itertools import izip -except ImportError: - izip = zip - -from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.network.dellos9.dellos9 import run_commands -from ansible.module_utils.network.dellos9.dellos9 import dellos9_argument_spec, check_args -from ansible.module_utils.six import iteritems - - -class FactsBase(object): - - COMMANDS = list() - - def __init__(self, module): - self.module = module - self.facts = dict() - self.responses = None - - def populate(self): - self.responses = run_commands(self.module, self.COMMANDS, check_rc=False) - - def run(self, cmd): - return run_commands(self.module, cmd, check_rc=False) - - -class Default(FactsBase): - - COMMANDS = [ - 'show version', - 'show inventory', - 'show running-config | grep hostname' - ] - - def populate(self): - super(Default, self).populate() - data = self.responses[0] - self.facts['version'] = self.parse_version(data) - self.facts['model'] = self.parse_model(data) - self.facts['image'] = self.parse_image(data) - - data = self.responses[1] - self.facts['serialnum'] = self.parse_serialnum(data) - - data = self.responses[2] - self.facts['hostname'] = self.parse_hostname(data) - - def parse_version(self, data): - match = re.search(r'Software Version:\s*(.+)', data) - if match: - return match.group(1) - - def parse_hostname(self, data): - match = re.search(r'^hostname (.+)', data, re.M) - if match: - return match.group(1) - - def parse_model(self, data): - match = re.search(r'^System Type:\s*(.+)', data, re.M) - if match: - return match.group(1) - - def parse_image(self, data): - match = re.search(r'image file is "(.+)"', data) - if match: - return match.group(1) - - def parse_serialnum(self, data): - for line in data.split('\n'): - if line.startswith('*'): - match = re.search( - r'\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)', line, re.M) - if match: - return match.group(3) - - -class Hardware(FactsBase): - - COMMANDS = [ - 'show file-systems', - 'show memory | except Processor' - ] - - def populate(self): - super(Hardware, self).populate() - data = self.responses[0] - self.facts['filesystems'] = self.parse_filesystems(data) - - data = self.responses[1] - match = re.findall(r'\s(\d+)\s', data) - if match: - self.facts['memtotal_mb'] = int(match[0]) // 1024 - self.facts['memfree_mb'] = int(match[2]) // 1024 - - def parse_filesystems(self, data): - return re.findall(r'\s(\S+):$', data, re.M) - - -class Config(FactsBase): - - COMMANDS = ['show running-config'] - - def populate(self): - super(Config, self).populate() - self.facts['config'] = self.responses[0] - - -class Interfaces(FactsBase): - - COMMANDS = [ - 'show interfaces', - 'show ipv6 interface', - 'show lldp neighbors detail', - 'show inventory' - ] - - def populate(self): - super(Interfaces, self).populate() - self.facts['all_ipv4_addresses'] = list() - self.facts['all_ipv6_addresses'] = list() - - data = self.responses[0] - interfaces = self.parse_interfaces(data) - - for key in list(interfaces.keys()): - if "ManagementEthernet" in key: - temp_parsed = interfaces[key] - del interfaces[key] - interfaces.update(self.parse_mgmt_interfaces(temp_parsed)) - - for key in list(interfaces.keys()): - if "Vlan" in key: - temp_parsed = interfaces[key] - del interfaces[key] - interfaces.update(self.parse_vlan_interfaces(temp_parsed)) - - self.facts['interfaces'] = self.populate_interfaces(interfaces) - - data = self.responses[1] - if len(data) > 0: - data = self.parse_ipv6_interfaces(data) - self.populate_ipv6_interfaces(data) - - data = self.responses[3] - if 'LLDP' in self.get_protocol_list(data): - neighbors = self.responses[2] - self.facts['neighbors'] = self.parse_neighbors(neighbors) - - def get_protocol_list(self, data): - start = False - protocol_list = list() - for line in data.split('\n'): - match = re.search(r'Software Protocol Configured\s*', line) - if match: - start = True - continue - if start: - line = line.strip() - if line.isalnum(): - protocol_list.append(line) - return protocol_list - - def populate_interfaces(self, interfaces): - facts = dict() - for key, value in interfaces.items(): - intf = dict() - intf['description'] = self.parse_description(value) - intf['macaddress'] = self.parse_macaddress(value) - ipv4 = self.parse_ipv4(value) - intf['ipv4'] = self.parse_ipv4(value) - if ipv4: - self.add_ip_address(ipv4['address'], 'ipv4') - - intf['mtu'] = self.parse_mtu(value) - intf['bandwidth'] = self.parse_bandwidth(value) - intf['mediatype'] = self.parse_mediatype(value) - intf['duplex'] = self.parse_duplex(value) - intf['lineprotocol'] = self.parse_lineprotocol(value) - intf['operstatus'] = self.parse_operstatus(value) - intf['type'] = self.parse_type(value) - - facts[key] = intf - return facts - - def populate_ipv6_interfaces(self, data): - for key, value in data.items(): - if key in self.facts['interfaces']: - self.facts['interfaces'][key]['ipv6'] = list() - addresses = re.findall(r'\s+(.+), subnet', value, re.M) - subnets = re.findall(r', subnet is (\S+)', value, re.M) - for addr, subnet in izip(addresses, subnets): - ipv6 = dict(address=addr.strip(), subnet=subnet.strip()) - self.add_ip_address(addr.strip(), 'ipv6') - self.facts['interfaces'][key]['ipv6'].append(ipv6) - - def add_ip_address(self, address, family): - if family == 'ipv4': - self.facts['all_ipv4_addresses'].append(address) - else: - self.facts['all_ipv6_addresses'].append(address) - - def parse_neighbors(self, neighbors): - facts = dict() - - for entry in neighbors.split( - '========================================================================'): - if entry == '': - continue - - intf = self.parse_lldp_intf(entry) - if intf not in facts: - facts[intf] = list() - fact = dict() - fact['host'] = self.parse_lldp_host(entry) - fact['port'] = self.parse_lldp_port(entry) - facts[intf].append(fact) - return facts - - def parse_interfaces(self, data): - parsed = dict() - newline_count = 0 - interface_start = True - - for line in data.split('\n'): - if interface_start: - newline_count = 0 - if len(line) == 0: - newline_count += 1 - if newline_count == 2: - interface_start = True - continue - else: - match = re.match(r'^(\S+) (\S+)', line) - if match and interface_start: - interface_start = False - key = match.group(0) - parsed[key] = line - else: - parsed[key] += '\n%s' % line - return parsed - - def parse_mgmt_interfaces(self, data): - parsed = dict() - interface_start = True - for line in data.split('\n'): - match = re.match(r'^(\S+) (\S+)', line) - if "Time since" in line: - interface_start = True - parsed[key] += '\n%s' % line - continue - elif match and interface_start: - interface_start = False - key = match.group(0) - parsed[key] = line - else: - parsed[key] += '\n%s' % line - return parsed - - def parse_vlan_interfaces(self, data): - parsed = dict() - interface_start = True - line_before_end = False - for line in data.split('\n'): - match = re.match(r'^(\S+) (\S+)', line) - match_endline = re.match(r'^\s*\d+ packets, \d+ bytes$', line) - - if "Output Statistics" in line: - line_before_end = True - parsed[key] += '\n%s' % line - elif match_endline and line_before_end: - line_before_end = False - interface_start = True - parsed[key] += '\n%s' % line - elif match and interface_start: - interface_start = False - key = match.group(0) - parsed[key] = line - else: - parsed[key] += '\n%s' % line - return parsed - - def parse_ipv6_interfaces(self, data): - parsed = dict() - for line in data.split('\n'): - if len(line) == 0: - continue - elif line[0] == ' ': - parsed[key] += '\n%s' % line - else: - match = re.match(r'^(\S+) (\S+)', line) - if match: - key = match.group(0) - parsed[key] = line - return parsed - - def parse_description(self, data): - match = re.search(r'Description: (.+)$', data, re.M) - if match: - return match.group(1) - - def parse_macaddress(self, data): - match = re.search(r'address is (\S+)', data) - if match: - if match.group(1) != "not": - return match.group(1) - - def parse_ipv4(self, data): - match = re.search(r'Internet address is (\S+)', data) - if match: - if match.group(1) != "not": - addr, masklen = match.group(1).split('/') - return dict(address=addr, masklen=int(masklen)) - - def parse_mtu(self, data): - match = re.search(r'MTU (\d+)', data) - if match: - return int(match.group(1)) - - def parse_bandwidth(self, data): - match = re.search(r'LineSpeed (\d+)', data) - if match: - return int(match.group(1)) - - def parse_duplex(self, data): - match = re.search(r'(\w+) duplex', data, re.M) - if match: - return match.group(1) - - def parse_mediatype(self, data): - media = re.search(r'(.+) media present, (.+)', data, re.M) - if media: - match = re.search(r'type is (.+)$', media.group(0), re.M) - return match.group(1) - - def parse_type(self, data): - match = re.search(r'Hardware is (.+),', data, re.M) - if match: - return match.group(1) - - def parse_lineprotocol(self, data): - match = re.search(r'line protocol is (\w+[ ]?\w*)\(?.*\)?$', data, re.M) - if match: - return match.group(1) - - def parse_operstatus(self, data): - match = re.search(r'^(?:.+) is (.+),', data, re.M) - if match: - return match.group(1) - - def parse_lldp_intf(self, data): - match = re.search(r'^\sLocal Interface (\S+\s\S+)', data, re.M) - if match: - return match.group(1) - - def parse_lldp_host(self, data): - match = re.search(r'Remote System Name: (.+)$', data, re.M) - if match: - return match.group(1) - - def parse_lldp_port(self, data): - match = re.search(r'Remote Port ID: (.+)$', data, re.M) - if match: - return match.group(1) - - -FACT_SUBSETS = dict( - default=Default, - hardware=Hardware, - interfaces=Interfaces, - config=Config, -) - -VALID_SUBSETS = frozenset(FACT_SUBSETS.keys()) - - -def main(): - """main entry point for module execution - """ - argument_spec = dict( - gather_subset=dict(default=['!config'], type='list') - ) - - argument_spec.update(dellos9_argument_spec) - - module = AnsibleModule(argument_spec=argument_spec, - supports_check_mode=True) - - gather_subset = module.params['gather_subset'] - - runable_subsets = set() - exclude_subsets = set() - - for subset in gather_subset: - if subset == 'all': - runable_subsets.update(VALID_SUBSETS) - continue - - if subset.startswith('!'): - subset = subset[1:] - if subset == 'all': - exclude_subsets.update(VALID_SUBSETS) - continue - exclude = True - else: - exclude = False - - if subset not in VALID_SUBSETS: - module.fail_json(msg='Bad subset') - - if exclude: - exclude_subsets.add(subset) - else: - runable_subsets.add(subset) - - if not runable_subsets: - runable_subsets.update(VALID_SUBSETS) - - runable_subsets.difference_update(exclude_subsets) - runable_subsets.add('default') - - facts = dict() - facts['gather_subset'] = list(runable_subsets) - - instances = list() - for key in runable_subsets: - instances.append(FACT_SUBSETS[key](module)) - - for inst in instances: - inst.populate() - facts.update(inst.facts) - - ansible_facts = dict() - for key, value in iteritems(facts): - key = 'ansible_net_%s' % key - ansible_facts[key] = value - - warnings = list() - check_args(module, warnings) - - module.exit_json(ansible_facts=ansible_facts, warnings=warnings) - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/plugins/action/dellos9.py b/lib/ansible/plugins/action/dellos9.py deleted file mode 100644 index 6500e165c6..0000000000 --- a/lib/ansible/plugins/action/dellos9.py +++ /dev/null @@ -1,81 +0,0 @@ -# -# (c) 2016 Red Hat Inc. -# -# Copyright (c) 2017 Dell Inc. -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import sys -import copy - -from ansible import constants as C -from ansible.plugins.action.network import ActionModule as ActionNetworkModule -from ansible.module_utils.network.common.utils import load_provider -from ansible.module_utils.network.dellos9.dellos9 import dellos9_provider_spec -from ansible.utils.display import Display - -display = Display() - - -class ActionModule(ActionNetworkModule): - - def run(self, tmp=None, task_vars=None): - del tmp # tmp no longer has any effect - - module_name = self._task.action.split('.')[-1] - self._config_module = True if module_name == 'dellos9_config' else False - socket_path = None - persistent_connection = self._play_context.connection.split('.')[-1] - - if persistent_connection == 'network_cli': - provider = self._task.args.get('provider', {}) - if any(provider.values()): - display.warning('provider is unnecessary when using network_cli and will be ignored') - del self._task.args['provider'] - elif self._play_context.connection == 'local': - provider = load_provider(dellos9_provider_spec, self._task.args) - pc = copy.deepcopy(self._play_context) - pc.connection = 'network_cli' - pc.network_os = 'dellos9' - pc.remote_addr = provider['host'] or self._play_context.remote_addr - pc.port = int(provider['port'] or self._play_context.port or 22) - pc.remote_user = provider['username'] or self._play_context.connection_user - pc.password = provider['password'] or self._play_context.password - pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file - command_timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT) - pc.become = provider['authorize'] or False - if pc.become: - pc.become_method = 'enable' - pc.become_pass = provider['auth_pass'] - - display.vvv('using connection plugin %s' % pc.connection, pc.remote_addr) - connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin, task_uuid=self._task._uuid) - connection.set_options(direct={'persistent_command_timeout': command_timeout}) - - socket_path = connection.run() - display.vvvv('socket_path: %s' % socket_path, pc.remote_addr) - if not socket_path: - return {'failed': True, - 'msg': 'unable to open shell. Please see: ' + - 'https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell'} - - task_vars['ansible_socket'] = socket_path - - result = super(ActionModule, self).run(task_vars=task_vars) - return result diff --git a/lib/ansible/plugins/cliconf/dellos9.py b/lib/ansible/plugins/cliconf/dellos9.py deleted file mode 100644 index 1d758d0784..0000000000 --- a/lib/ansible/plugins/cliconf/dellos9.py +++ /dev/null @@ -1,123 +0,0 @@ -# -# (c) 2017 Red Hat Inc. -# -# (c) 2017 Dell EMC. -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -DOCUMENTATION = """ ---- -cliconf: dellos9 -short_description: Use dellos9 cliconf to run command on Dell OS9 platform -description: - - This dellos9 plugin provides low level abstraction apis for - sending and receiving CLI commands from Dell OS9 network devices. -version_added: 2.5 -""" - -import re -import json - -from itertools import chain - -from ansible.errors import AnsibleConnectionFailure -from ansible.module_utils._text import to_bytes, to_text -from ansible.module_utils.common._collections_compat import Mapping -from ansible.module_utils.network.common.utils import to_list -from ansible.plugins.cliconf import CliconfBase, enable_mode - - -class Cliconf(CliconfBase): - - def get_device_info(self): - device_info = {} - - device_info['network_os'] = 'dellos9' - reply = self.get('show version') - data = to_text(reply, errors='surrogate_or_strict').strip() - - match = re.search(r'Software Version (\S+)', data) - if match: - device_info['network_os_version'] = match.group(1) - - match = re.search(r'System Type (\S+)', data, re.M) - if match: - device_info['network_os_model'] = match.group(1) - - reply = self.get('show running-config | grep hostname') - data = to_text(reply, errors='surrogate_or_strict').strip() - match = re.search(r'^hostname (.+)', data, re.M) - if match: - device_info['network_os_hostname'] = match.group(1) - - return device_info - - @enable_mode - def get_config(self, source='running', format='text', flags=None): - if source not in ('running', 'startup'): - return self.invalid_params("fetching configuration from %s is not supported" % source) -# if source == 'running': -# cmd = 'show running-config all' - else: - cmd = 'show startup-config' - return self.send_command(cmd) - - @enable_mode - def edit_config(self, command): - for cmd in chain(['configure terminal'], to_list(command), ['end']): - self.send_command(cmd) - - def get(self, command, prompt=None, answer=None, sendonly=False, newline=True, check_all=False): - return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=sendonly, newline=newline, check_all=check_all) - - def get_capabilities(self): - result = super(Cliconf, self).get_capabilities() - return json.dumps(result) - - def run_commands(self, commands=None, check_rc=True): - if commands is None: - raise ValueError("'commands' value is required") - - responses = list() - for cmd in to_list(commands): - if not isinstance(cmd, Mapping): - cmd = {'command': cmd} - - output = cmd.pop('output', None) - if output: - raise ValueError("'output' value %s is not supported for run_commands" % output) - - try: - out = self.send_command(**cmd) - except AnsibleConnectionFailure as e: - if check_rc: - raise - out = getattr(e, 'err', to_text(e)) - - responses.append(out) - - return responses - - def set_cli_prompt_context(self): - """ - Make sure we are in the operational cli mode - :return: None - """ - if self._connection.connected: - self._update_cli_prompt_context(config_context=')#') diff --git a/lib/ansible/plugins/doc_fragments/dellos9.py b/lib/ansible/plugins/doc_fragments/dellos9.py deleted file mode 100644 index e65e53cdc3..0000000000 --- a/lib/ansible/plugins/doc_fragments/dellos9.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright: (c) 2015, Peter Sprygada -# Copyright: (c) 2016, Dell Inc. -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - - -class ModuleDocFragment(object): - - # Standard files documentation fragment - DOCUMENTATION = r''' -options: - provider: - description: - - A dict object containing connection details. - type: dict - suboptions: - host: - description: - - Specifies the DNS host name or address for connecting to the remote - device over the specified transport. The value of host is used as - the destination address for the transport. - type: str - required: true - port: - description: - - Specifies the port to use when building the connection to the remote - device. - type: int - default: 22 - username: - description: - - User to authenticate the SSH session to the remote device. If the - value is not specified in the task, the value of environment variable - C(ANSIBLE_NET_USERNAME) will be used instead. - type: str - password: - description: - - Password to authenticate the SSH session to the remote device. If the - value is not specified in the task, the value of environment variable - C(ANSIBLE_NET_PASSWORD) will be used instead. - type: str - ssh_keyfile: - description: - - Path to an ssh key used to authenticate the SSH session to the remote - device. If the value is not specified in the task, the value of - environment variable C(ANSIBLE_NET_SSH_KEYFILE) will be used instead. - type: path - timeout: - description: - - Specifies idle timeout (in seconds) for the connection. Useful if the - console freezes before continuing. For example when saving - configurations. - type: int - default: 10 -notes: - - For more information on using Ansible to manage Dell EMC Network devices see U(https://www.ansible.com/ansible-dell-networking). -''' diff --git a/lib/ansible/plugins/terminal/dellos9.py b/lib/ansible/plugins/terminal/dellos9.py deleted file mode 100644 index ceb20f85b2..0000000000 --- a/lib/ansible/plugins/terminal/dellos9.py +++ /dev/null @@ -1,83 +0,0 @@ -# -# (c) 2016 Red Hat Inc. -# -# Copyright (c) 2017 Dell Inc. -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import re -import json - -from ansible.module_utils._text import to_text, to_bytes -from ansible.plugins.terminal import TerminalBase -from ansible.errors import AnsibleConnectionFailure - - -class TerminalModule(TerminalBase): - - terminal_stdout_re = [ - re.compile(br"[\r\n]?[\w+\-\.:\/\[\]]+(?:\([^\)]+\)){,3}(?:>|#) ?$"), - re.compile(br"\[\w+\@[\w\-\.]+(?: [^\]])\] ?[>#\$] ?$") - ] - - terminal_stderr_re = [ - re.compile(br"% ?Error: (?:(?!\bdoes not exist\b)(?!\balready exists\b)(?!\bHost not found\b)(?!\bnot active\b).)*\n"), - re.compile(br"% ?Bad secret"), - re.compile(br"invalid input", re.I), - re.compile(br"(?:incomplete|ambiguous) command", re.I), - re.compile(br"connection timed out", re.I), - re.compile(br"'[^']' +returned error code: ?\d+"), - ] - - terminal_initial_prompt = br"\[y/n\]:" - - terminal_initial_answer = b"y" - - def on_open_shell(self): - try: - self._exec_cli_command(b'terminal length 0') - except AnsibleConnectionFailure: - raise AnsibleConnectionFailure('unable to set terminal parameters') - - def on_become(self, passwd=None): - if self._get_prompt().endswith(b'#'): - return - - cmd = {u'command': u'enable'} - if passwd: - cmd[u'prompt'] = to_text(r"[\r\n]?password: $", errors='surrogate_or_strict') - cmd[u'answer'] = passwd - - try: - self._exec_cli_command(to_bytes(json.dumps(cmd), errors='surrogate_or_strict')) - except AnsibleConnectionFailure: - raise AnsibleConnectionFailure('unable to elevate privilege to enable mode') - - def on_unbecome(self): - prompt = self._get_prompt() - if prompt is None: - # if prompt is None most likely the terminal is hung up at a prompt - return - - if prompt.strip().endswith(b')#'): - self._exec_cli_command(b'end') - self._exec_cli_command(b'disable') - - elif prompt.endswith(b'#'): - self._exec_cli_command(b'disable') diff --git a/test/integration/targets/dellos9_command/defaults/main.yaml b/test/integration/targets/dellos9_command/defaults/main.yaml deleted file mode 100644 index 5f709c5aac..0000000000 --- a/test/integration/targets/dellos9_command/defaults/main.yaml +++ /dev/null @@ -1,2 +0,0 @@ ---- -testcase: "*" diff --git a/test/integration/targets/dellos9_command/tasks/cli.yaml b/test/integration/targets/dellos9_command/tasks/cli.yaml deleted file mode 100644 index 8c11e106f2..0000000000 --- a/test/integration/targets/dellos9_command/tasks/cli.yaml +++ /dev/null @@ -1,16 +0,0 @@ ---- -- name: collect all cli test cases - find: - paths: "{{ role_path }}/tests/cli" - patterns: "{{ testcase }}.yaml" - register: test_cases - -- name: set test_items - set_fact: - test_items: "{{ test_cases.files | map(attribute='path') | list }}" - -- name: run test case - include: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run diff --git a/test/integration/targets/dellos9_command/tasks/main.yaml b/test/integration/targets/dellos9_command/tasks/main.yaml deleted file mode 100644 index 415c99d8b1..0000000000 --- a/test/integration/targets/dellos9_command/tasks/main.yaml +++ /dev/null @@ -1,2 +0,0 @@ ---- -- { include: cli.yaml, tags: ['cli'] } diff --git a/test/integration/targets/dellos9_command/tests/cli/bad_operator.yaml b/test/integration/targets/dellos9_command/tests/cli/bad_operator.yaml deleted file mode 100644 index 0ec627f55b..0000000000 --- a/test/integration/targets/dellos9_command/tests/cli/bad_operator.yaml +++ /dev/null @@ -1,20 +0,0 @@ ---- -- debug: msg="START cli/bad_operator.yaml" - -- name: test bad operator - dellos9_command: - commands: - - show version - - show interfaces TenGigabitEthernet 0/0 - wait_for: - - "result[0] contains 'Description : blah'" - provider: "{{ cli }}" - register: result - ignore_errors: yes - -- assert: - that: - - "result.failed == true" - - "result.msg is defined" - -- debug: msg="END cli/bad_operator.yaml" diff --git a/test/integration/targets/dellos9_command/tests/cli/contains.yaml b/test/integration/targets/dellos9_command/tests/cli/contains.yaml deleted file mode 100644 index 4082cddf60..0000000000 --- a/test/integration/targets/dellos9_command/tests/cli/contains.yaml +++ /dev/null @@ -1,20 +0,0 @@ ---- -- debug: msg="START cli/contains.yaml" - -- name: test contains operator - dellos9_command: - commands: - - show version - - show interface TenGigabitEthernet 0/0 - wait_for: - - "result[0] contains 2.0" - - "result[1] contains TenGigabitEthernet " - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == false" - - "result.stdout is defined" - -- debug: msg="END cli/contains.yaml" diff --git a/test/integration/targets/dellos9_command/tests/cli/invalid.yaml b/test/integration/targets/dellos9_command/tests/cli/invalid.yaml deleted file mode 100644 index 6e9e8e3c93..0000000000 --- a/test/integration/targets/dellos9_command/tests/cli/invalid.yaml +++ /dev/null @@ -1,28 +0,0 @@ ---- -- debug: msg="START cli/invalid.yaml" - -- name: run invalid command - dellos9_command: - commands: ['show foo'] - provider: "{{ cli }}" - register: result - ignore_errors: yes - -- assert: - that: - - "result.failed" - -- name: run commands that include invalid command - dellos9_command: - commands: - - show version - - show foo - provider: "{{ cli }}" - register: result - ignore_errors: yes - -- assert: - that: - - "result.failed" - -- debug: msg="END cli/invalid.yaml" diff --git a/test/integration/targets/dellos9_command/tests/cli/output.yaml b/test/integration/targets/dellos9_command/tests/cli/output.yaml deleted file mode 100644 index 151c1b8805..0000000000 --- a/test/integration/targets/dellos9_command/tests/cli/output.yaml +++ /dev/null @@ -1,29 +0,0 @@ ---- -- debug: msg="START cli/output.yaml" - -- name: get output for single command - dellos9_command: - commands: ['show version'] - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == false" - - "result.stdout is defined" - -- name: get output for multiple commands - dellos9_command: - commands: - - show version - - show interfaces - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == false" - - "result.stdout is defined" - - "result.stdout | length == 2" - -- debug: msg="END cli/output.yaml" diff --git a/test/integration/targets/dellos9_command/tests/cli/timeout.yaml b/test/integration/targets/dellos9_command/tests/cli/timeout.yaml deleted file mode 100644 index 530ca6789b..0000000000 --- a/test/integration/targets/dellos9_command/tests/cli/timeout.yaml +++ /dev/null @@ -1,19 +0,0 @@ ---- -- debug: msg="START cli/timeout.yaml" - -- name: test bad condition - dellos9_command: - commands: - - show version - wait_for: - - "result[0] contains bad_value_string" - provider: "{{ cli }}" - register: result - ignore_errors: yes - -- assert: - that: - - "result.failed == true" - - "result.msg is defined" - -- debug: msg="END cli/timeout.yaml" diff --git a/test/integration/targets/dellos9_config/defaults/main.yaml b/test/integration/targets/dellos9_config/defaults/main.yaml deleted file mode 100644 index 5f709c5aac..0000000000 --- a/test/integration/targets/dellos9_config/defaults/main.yaml +++ /dev/null @@ -1,2 +0,0 @@ ---- -testcase: "*" diff --git a/test/integration/targets/dellos9_config/tasks/cli.yaml b/test/integration/targets/dellos9_config/tasks/cli.yaml deleted file mode 100644 index d675462dd0..0000000000 --- a/test/integration/targets/dellos9_config/tasks/cli.yaml +++ /dev/null @@ -1,15 +0,0 @@ ---- -- name: collect all cli test cases - find: - paths: "{{ role_path }}/tests/cli" - patterns: "{{ testcase }}.yaml" - register: test_cases - -- name: set test_items - set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}" - -- name: run test case - include: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run diff --git a/test/integration/targets/dellos9_config/tasks/main.yaml b/test/integration/targets/dellos9_config/tasks/main.yaml deleted file mode 100644 index 415c99d8b1..0000000000 --- a/test/integration/targets/dellos9_config/tasks/main.yaml +++ /dev/null @@ -1,2 +0,0 @@ ---- -- { include: cli.yaml, tags: ['cli'] } diff --git a/test/integration/targets/dellos9_config/tests/cli/sublevel.yaml b/test/integration/targets/dellos9_config/tests/cli/sublevel.yaml deleted file mode 100644 index b8e95d3b5e..0000000000 --- a/test/integration/targets/dellos9_config/tests/cli/sublevel.yaml +++ /dev/null @@ -1,43 +0,0 @@ ---- -- debug: msg="START cli/sublevel.yaml" - -- name: setup test - dellos9_config: - lines: - - 'no ip access-list extended test' - - 'no ip access-list standard test' - provider: "{{ cli }}" - match: none - -- name: configure sub level command - dellos9_config: - lines: ['seq 5 permit ip any any log threshold-in-msgs 10 interval 5'] - parents: ['ip access-list extended test'] - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == true" - - "'ip access-list extended test' in result.updates" - - "'seq 5 permit ip any any log threshold-in-msgs 10 interval 5' in result.updates" - -- name: configure sub level command idempotent check - dellos9_config: - lines: ['seq 5 permit ip any any log threshold-in-msgs 10 interval 5'] - parents: ['ip access-list extended test'] - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == false" - -- name: teardown - dellos9_config: - lines: - - 'no ip access-list extended test' - provider: "{{ cli }}" - match: none - -- debug: msg="END cli/sublevel.yaml" diff --git a/test/integration/targets/dellos9_config/tests/cli/sublevel_block.yaml b/test/integration/targets/dellos9_config/tests/cli/sublevel_block.yaml deleted file mode 100644 index f7b2983712..0000000000 --- a/test/integration/targets/dellos9_config/tests/cli/sublevel_block.yaml +++ /dev/null @@ -1,62 +0,0 @@ ---- -- debug: msg="START cli/sublevel_block.yaml" - -- name: setup - dellos9_config: - lines: - - seq 5 permit ip host 192.0.2.1 any log threshold-in-msgs 10 interval 5 - - seq 10 permit ip host 192.0.2.2 any log threshold-in-msgs 10 interval 5 - - seq 15 permit ip host 192.0.2.3 any log threshold-in-msgs 10 interval 5 - parents: ['ip access-list extended test'] - before: ['no ip access-list extended test'] - after: ['exit'] - provider: "{{ cli }}" - match: none - -- name: configure sub level command using block replace - dellos9_config: - lines: - - seq 5 permit ip host 192.0.2.1 any log threshold-in-msgs 10 interval 5 - - seq 10 permit ip host 192.0.2.2 any log threshold-in-msgs 10 interval 5 - - seq 15 permit ip host 192.0.2.3 any log threshold-in-msgs 10 interval 5 - - seq 20 permit ip host 192.0.2.4 any log threshold-in-msgs 10 interval 5 - parents: ['ip access-list extended test'] - replace: block - after: ['exit'] - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == true" - - "'ip access-list extended test' in result.updates" - - "'seq 5 permit ip host 192.0.2.1 any log threshold-in-msgs 10 interval 5' in result.updates" - - "'seq 10 permit ip host 192.0.2.2 any log threshold-in-msgs 10 interval 5' in result.updates" - - "'seq 15 permit ip host 192.0.2.3 any log threshold-in-msgs 10 interval 5' in result.updates" - - "'seq 20 permit ip host 192.0.2.4 any log threshold-in-msgs 10 interval 5' in result.updates" - -- name: check sub level command using block replace - dellos9_config: - lines: - - seq 5 permit ip host 192.0.2.1 any log threshold-in-msgs 10 interval 5 - - seq 10 permit ip host 192.0.2.2 any log threshold-in-msgs 10 interval 5 - - seq 15 permit ip host 192.0.2.3 any log threshold-in-msgs 10 interval 5 - - seq 20 permit ip host 192.0.2.4 any log threshold-in-msgs 10 interval 5 - parents: ['ip access-list extended test'] - replace: block - after: ['exit'] - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == false" - -- name: teardown - dellos9_config: - lines: - - no ip access-list extended test - match: none - provider: "{{ cli }}" - -- debug: msg="END cli/sublevel_block.yaml" diff --git a/test/integration/targets/dellos9_config/tests/cli/sublevel_exact.yaml b/test/integration/targets/dellos9_config/tests/cli/sublevel_exact.yaml deleted file mode 100644 index 9c80d3f499..0000000000 --- a/test/integration/targets/dellos9_config/tests/cli/sublevel_exact.yaml +++ /dev/null @@ -1,66 +0,0 @@ ---- -- debug: msg="START cli/sublevel_exact.yaml" - -- name: setup - dellos9_config: - lines: - - seq 5 permit ip host 192.0.2.1 any log threshold-in-msgs 10 interval 5 - - seq 10 permit ip host 192.0.2.2 any log threshold-in-msgs 10 interval 5 - - seq 15 permit ip host 192.0.2.3 any log threshold-in-msgs 10 interval 5 - - seq 20 permit ip host 192.0.2.4 any log threshold-in-msgs 10 interval 5 - - seq 25 permit ip host 192.0.2.5 any log threshold-in-msgs 10 interval 5 - parents: ['ip access-list extended test'] - before: ['no ip access-list extended test'] - after: ['exit'] - provider: "{{ cli }}" - match: none - -- name: configure sub level command using exact match - dellos9_config: - lines: - - seq 5 permit ip host 192.0.2.1 any log threshold-in-msgs 10 interval 5 - - seq 10 permit ip host 192.0.2.2 any log threshold-in-msgs 10 interval 5 - - seq 15 permit ip host 192.0.2.3 any log threshold-in-msgs 10 interval 5 - - seq 20 permit ip host 192.0.2.4 any log threshold-in-msgs 10 interval 5 - parents: ['ip access-list extended test'] - after: ['exit'] - match: exact - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == true" - - "'ip access-list extended test' in result.updates" - - "'seq 5 permit ip host 192.0.2.1 any log threshold-in-msgs 10 interval 5' in result.updates" - - "'seq 10 permit ip host 192.0.2.2 any log threshold-in-msgs 10 interval 5' in result.updates" - - "'seq 15 permit ip host 192.0.2.3 any log threshold-in-msgs 10 interval 5' in result.updates" - - "'seq 20 permit ip host 192.0.2.4 any log threshold-in-msgs 10 interval 5' in result.updates" - - "'seq 25 permit ip host 192.0.2.5 any log threshold-in-msgs 10 interval 5' not in result.updates" - -- name: check sub level command using exact match - dellos9_config: - lines: - - seq 5 permit ip host 192.0.2.1 any log threshold-in-msgs 10 interval 5 - - seq 10 permit ip host 192.0.2.2 any log threshold-in-msgs 10 interval 5 - - seq 15 permit ip host 192.0.2.3 any log threshold-in-msgs 10 interval 5 - - seq 20 permit ip host 192.0.2.4 any log threshold-in-msgs 10 interval 5 - - seq 25 permit ip host 192.0.2.5 any log threshold-in-msgs 10 interval 5 - parents: ['ip access-list extended test'] - after: ['exit'] - match: exact - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == false" - -- name: teardown - dellos9_config: - lines: - - no ip access-list extended test - provider: "{{ cli }}" - match: none - -- debug: msg="END cli/sublevel_exact.yaml" diff --git a/test/integration/targets/dellos9_config/tests/cli/sublevel_strict.yaml b/test/integration/targets/dellos9_config/tests/cli/sublevel_strict.yaml deleted file mode 100644 index 3cca5ef875..0000000000 --- a/test/integration/targets/dellos9_config/tests/cli/sublevel_strict.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -- debug: msg="START cli/sublevel_strict.yaml" - -- name: setup - dellos9_config: - lines: - - seq 5 permit ip host 192.0.2.1 any log threshold-in-msgs 10 interval 5 - - seq 10 permit ip host 192.0.2.2 any log threshold-in-msgs 10 interval 5 - - seq 15 permit ip host 192.0.2.3 any log threshold-in-msgs 10 interval 5 - - seq 20 permit ip host 192.0.2.4 any log threshold-in-msgs 10 interval 5 - - seq 25 permit ip host 192.0.2.5 any log threshold-in-msgs 10 interval 5 - parents: ['ip access-list extended test'] - before: ['no ip access-list extended test'] - after: ['exit'] - provider: "{{ cli }}" - match: none - -- name: configure sub level command using strict match - dellos9_config: - lines: - - seq 5 permit ip host 192.0.2.1 any log threshold-in-msgs 10 interval 5 - - seq 10 permit ip host 192.0.2.2 any log threshold-in-msgs 10 interval 5 - - seq 15 permit ip host 192.0.2.3 any log threshold-in-msgs 10 interval 5 - - seq 20 permit ip host 192.0.2.4 any log threshold-in-msgs 10 interval 5 - parents: ['ip access-list extended test'] - match: strict - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == false" - -- name: check sub level command using strict match - dellos9_config: - lines: - - seq 5 permit ip host 192.0.2.1 any log threshold-in-msgs 10 interval 5 - - seq 10 permit ip host 192.0.2.3 any log threshold-in-msgs 10 interval 5 - - seq 15 permit ip host 192.0.2.2 any log threshold-in-msgs 10 interval 5 - parents: ['ip access-list extended test'] - after: ['exit'] - match: strict - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == true" - - "'ip access-list extended test' in result.updates" - - "'seq 5 permit ip host 192.0.2.1 any log threshold-in-msgs 10 interval 5' not in result.updates" - - "'seq 15 permit ip host 192.0.2.2 any log threshold-in-msgs 10 interval 5' in result.updates" - - "'seq 10 permit ip host 192.0.2.3 any log threshold-in-msgs 10 interval 5' in result.updates" - - "'seq 20 permit ip host 192.0.2.4 any log threshold-in-msgs 10 interval 5' not in result.updates" - - "'seq 25 permit ip host 192.0.2.5 any log threshold-in-msgs 10 interval 5' not in result.updates" - -- name: teardown - dellos9_config: - lines: - - no ip access-list extended test - provider: "{{ cli }}" - match: none - -- debug: msg="END cli/sublevel_strict.yaml" diff --git a/test/integration/targets/dellos9_config/tests/cli/toplevel.yaml b/test/integration/targets/dellos9_config/tests/cli/toplevel.yaml deleted file mode 100644 index 22669a4d8f..0000000000 --- a/test/integration/targets/dellos9_config/tests/cli/toplevel.yaml +++ /dev/null @@ -1,37 +0,0 @@ ---- -- debug: msg="START cli/toplevel.yaml" - -- name: setup - dellos9_config: - lines: ['hostname {{ inventory_hostname_short }}'] - provider: "{{ cli }}" - match: none - -- name: configure top level command - dellos9_config: - lines: ['hostname foo'] - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == true" - - "'hostname foo' in result.updates" - -- name: configure top level command idempotent check - dellos9_config: - lines: ['hostname foo'] - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == false" - -- name: teardown - dellos9_config: - lines: ['hostname {{ inventory_hostname_short }}'] - provider: "{{ cli }}" - match: none - -- debug: msg="END cli/toplevel.yaml" diff --git a/test/integration/targets/dellos9_config/tests/cli/toplevel_after.yaml b/test/integration/targets/dellos9_config/tests/cli/toplevel_after.yaml deleted file mode 100644 index 6b5ee8e2c9..0000000000 --- a/test/integration/targets/dellos9_config/tests/cli/toplevel_after.yaml +++ /dev/null @@ -1,44 +0,0 @@ ---- -- debug: msg="START cli/toplevel_after.yaml" - -- name: setup - dellos9_config: - lines: - - "snmp-server contact ansible" - - "hostname {{ inventory_hostname_short }}" - provider: "{{ cli }}" - match: none - -- name: configure top level command with after - dellos9_config: - lines: ['hostname foo'] - after: ['snmp-server contact bar'] - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == true" - - "'hostname foo' in result.updates" - - "'snmp-server contact bar' in result.updates" - -- name: configure top level command with after idempotent check - dellos9_config: - lines: ['hostname foo'] - after: ['snmp-server contact bar'] - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == false" - -- name: teardown - dellos9_config: - lines: - - "no snmp-server contact" - - "hostname {{ inventory_hostname_short }}" - provider: "{{ cli }}" - match: none - -- debug: msg="END cli/toplevel_after.yaml" diff --git a/test/integration/targets/dellos9_config/tests/cli/toplevel_before.yaml b/test/integration/targets/dellos9_config/tests/cli/toplevel_before.yaml deleted file mode 100644 index 79b01e47c1..0000000000 --- a/test/integration/targets/dellos9_config/tests/cli/toplevel_before.yaml +++ /dev/null @@ -1,44 +0,0 @@ ---- -- debug: msg="START cli/toplevel_before.yaml" - -- name: setup - dellos9_config: - lines: - - "snmp-server contact ansible" - - "hostname {{ inventory_hostname_short }}" - provider: "{{ cli }}" - match: none - -- name: configure top level command with before - dellos9_config: - lines: ['hostname foo'] - before: ['snmp-server contact bar'] - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == true" - - "'hostname foo' in result.updates" - - "'snmp-server contact bar' in result.updates" - -- name: configure top level command with before idempotent check - dellos9_config: - lines: ['hostname foo'] - before: ['snmp-server contact bar'] - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == false" - -- name: teardown - dellos9_config: - lines: - - "no snmp-server contact" - - "hostname {{ inventory_hostname_short }}" - provider: "{{ cli }}" - match: none - -- debug: msg="END cli/toplevel_before.yaml" diff --git a/test/integration/targets/dellos9_config/tests/cli/toplevel_nonidempotent.yaml b/test/integration/targets/dellos9_config/tests/cli/toplevel_nonidempotent.yaml deleted file mode 100644 index 142d5d7dee..0000000000 --- a/test/integration/targets/dellos9_config/tests/cli/toplevel_nonidempotent.yaml +++ /dev/null @@ -1,39 +0,0 @@ ---- -- debug: msg="START cli/toplevel_nonidempotent.yaml" - -- name: setup - dellos9_config: - lines: ['hostname {{ inventory_hostname_short }}'] - provider: "{{ cli }}" - match: none - -- name: configure top level command - dellos9_config: - lines: ['hostname foo'] - provider: "{{ cli }}" - match: strict - register: result - -- assert: - that: - - "result.changed == true" - - "'hostname foo' in result.updates" - -- name: configure top level command idempotent check - dellos9_config: - lines: ['hostname foo'] - provider: "{{ cli }}" - match: strict - register: result - -- assert: - that: - - "result.changed == true" - -- name: teardown - dellos9_config: - lines: ['hostname {{ inventory_hostname_short }}'] - provider: "{{ cli }}" - match: none - -- debug: msg="END cli/toplevel_nonidempotent.yaml" diff --git a/test/integration/targets/dellos9_facts/defaults/main.yaml b/test/integration/targets/dellos9_facts/defaults/main.yaml deleted file mode 100644 index 5f709c5aac..0000000000 --- a/test/integration/targets/dellos9_facts/defaults/main.yaml +++ /dev/null @@ -1,2 +0,0 @@ ---- -testcase: "*" diff --git a/test/integration/targets/dellos9_facts/tasks/cli.yaml b/test/integration/targets/dellos9_facts/tasks/cli.yaml deleted file mode 100644 index 8c11e106f2..0000000000 --- a/test/integration/targets/dellos9_facts/tasks/cli.yaml +++ /dev/null @@ -1,16 +0,0 @@ ---- -- name: collect all cli test cases - find: - paths: "{{ role_path }}/tests/cli" - patterns: "{{ testcase }}.yaml" - register: test_cases - -- name: set test_items - set_fact: - test_items: "{{ test_cases.files | map(attribute='path') | list }}" - -- name: run test case - include: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run diff --git a/test/integration/targets/dellos9_facts/tasks/main.yaml b/test/integration/targets/dellos9_facts/tasks/main.yaml deleted file mode 100644 index 415c99d8b1..0000000000 --- a/test/integration/targets/dellos9_facts/tasks/main.yaml +++ /dev/null @@ -1,2 +0,0 @@ ---- -- { include: cli.yaml, tags: ['cli'] } diff --git a/test/integration/targets/dellos9_facts/tests/cli/facts.yaml b/test/integration/targets/dellos9_facts/tests/cli/facts.yaml deleted file mode 100644 index acea51ced6..0000000000 --- a/test/integration/targets/dellos9_facts/tests/cli/facts.yaml +++ /dev/null @@ -1,42 +0,0 @@ ---- -- debug: msg="START cli/facts.yaml" - -- name: test all facts - dellos9_facts: - gather_subset: - - all - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == false" - - "result.ansible_facts is defined" - -- name: test all facts except hardware - dellos9_facts: - gather_subset: - - "!hardware" - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == false" - - "result.ansible_facts.ansible_net_filesystems is not defined" - -- name: test interface facts - dellos9_facts: - gather_subset: - - interfaces - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == false" - - "result.ansible_facts.ansible_net_interfaces is defined" - - "result.ansible_facts.ansible_net_filesystems is not defined" - - -- debug: msg="END cli/facts.yaml" diff --git a/test/sanity/ignore.txt b/test/sanity/ignore.txt index ff61b9443f..65eb06513b 100644 --- a/test/sanity/ignore.txt +++ b/test/sanity/ignore.txt @@ -86,8 +86,6 @@ lib/ansible/module_utils/json_utils.py future-import-boilerplate lib/ansible/module_utils/json_utils.py metaclass-boilerplate lib/ansible/module_utils/network/dellos6/dellos6.py future-import-boilerplate lib/ansible/module_utils/network/dellos6/dellos6.py metaclass-boilerplate -lib/ansible/module_utils/network/dellos9/dellos9.py future-import-boilerplate -lib/ansible/module_utils/network/dellos9/dellos9.py metaclass-boilerplate lib/ansible/module_utils/network/skydive/api.py future-import-boilerplate lib/ansible/module_utils/network/skydive/api.py metaclass-boilerplate lib/ansible/module_utils/network/vyos/vyos.py future-import-boilerplate @@ -1064,24 +1062,6 @@ lib/ansible/modules/network/dellos6/dellos6_facts.py validate-modules:doc-requir lib/ansible/modules/network/dellos6/dellos6_facts.py validate-modules:parameter-list-no-elements lib/ansible/modules/network/dellos6/dellos6_facts.py validate-modules:parameter-type-not-in-doc lib/ansible/modules/network/dellos6/dellos6_facts.py validate-modules:undocumented-parameter -lib/ansible/modules/network/dellos9/dellos9_command.py validate-modules:doc-default-does-not-match-spec -lib/ansible/modules/network/dellos9/dellos9_command.py validate-modules:doc-missing-type -lib/ansible/modules/network/dellos9/dellos9_command.py validate-modules:doc-required-mismatch -lib/ansible/modules/network/dellos9/dellos9_command.py validate-modules:parameter-list-no-elements -lib/ansible/modules/network/dellos9/dellos9_command.py validate-modules:parameter-type-not-in-doc -lib/ansible/modules/network/dellos9/dellos9_command.py validate-modules:undocumented-parameter -lib/ansible/modules/network/dellos9/dellos9_config.py validate-modules:doc-default-does-not-match-spec -lib/ansible/modules/network/dellos9/dellos9_config.py validate-modules:doc-missing-type -lib/ansible/modules/network/dellos9/dellos9_config.py validate-modules:doc-required-mismatch -lib/ansible/modules/network/dellos9/dellos9_config.py validate-modules:parameter-list-no-elements -lib/ansible/modules/network/dellos9/dellos9_config.py validate-modules:parameter-type-not-in-doc -lib/ansible/modules/network/dellos9/dellos9_config.py validate-modules:undocumented-parameter -lib/ansible/modules/network/dellos9/dellos9_facts.py validate-modules:doc-default-does-not-match-spec -lib/ansible/modules/network/dellos9/dellos9_facts.py validate-modules:doc-missing-type -lib/ansible/modules/network/dellos9/dellos9_facts.py validate-modules:doc-required-mismatch -lib/ansible/modules/network/dellos9/dellos9_facts.py validate-modules:parameter-list-no-elements -lib/ansible/modules/network/dellos9/dellos9_facts.py validate-modules:parameter-type-not-in-doc -lib/ansible/modules/network/dellos9/dellos9_facts.py validate-modules:undocumented-parameter lib/ansible/modules/network/ovs/openvswitch_bridge.py validate-modules:doc-choices-do-not-match-spec lib/ansible/modules/network/ovs/openvswitch_bridge.py validate-modules:doc-missing-type lib/ansible/modules/network/ovs/openvswitch_bridge.py validate-modules:parameter-type-not-in-doc @@ -1366,7 +1346,6 @@ lib/ansible/playbook/collectionsearch.py required-and-default-attributes # http lib/ansible/playbook/helpers.py pylint:blacklisted-name lib/ansible/playbook/role/__init__.py pylint:blacklisted-name lib/ansible/plugins/action/dellos6.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` -lib/ansible/plugins/action/dellos9.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` lib/ansible/plugins/action/normal.py action-plugin-docs # default action plugin for modules without a dedicated action plugin lib/ansible/plugins/action/vyos.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` lib/ansible/plugins/cache/base.py ansible-doc!skip # not a plugin, but a stub for backwards compatibility @@ -1384,8 +1363,6 @@ lib/ansible/plugins/doc_fragments/default_callback.py future-import-boilerplate lib/ansible/plugins/doc_fragments/default_callback.py metaclass-boilerplate lib/ansible/plugins/doc_fragments/dellos6.py future-import-boilerplate lib/ansible/plugins/doc_fragments/dellos6.py metaclass-boilerplate -lib/ansible/plugins/doc_fragments/dellos9.py future-import-boilerplate -lib/ansible/plugins/doc_fragments/dellos9.py metaclass-boilerplate lib/ansible/plugins/doc_fragments/files.py future-import-boilerplate lib/ansible/plugins/doc_fragments/files.py metaclass-boilerplate lib/ansible/plugins/doc_fragments/hcloud.py future-import-boilerplate diff --git a/test/units/modules/network/dellos9/dellos9_module.py b/test/units/modules/network/dellos9/dellos9_module.py deleted file mode 100644 index 2dfa9d7eb6..0000000000 --- a/test/units/modules/network/dellos9/dellos9_module.py +++ /dev/null @@ -1,90 +0,0 @@ -# (c) 2016 Red Hat Inc. -# -# (c) 2017 Dell EMC. -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . - -# Make coding more python3-ish -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json - -from units.modules.utils import AnsibleExitJson, AnsibleFailJson, ModuleTestCase - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestDellos9Module(ModuleTestCase): - - def execute_module(self, failed=False, changed=False, commands=None, sort=True, defaults=False): - - self.load_fixtures(commands) - - if failed: - result = self.failed() - self.assertTrue(result['failed'], result) - else: - result = self.changed(changed) - self.assertEqual(result['changed'], changed, result) - - if commands is not None: - if sort: - self.assertEqual(sorted(commands), sorted(result['updates']), result['updates']) - else: - self.assertEqual(commands, result['updates'], result['updates']) - - return result - - def failed(self): - with self.assertRaises(AnsibleFailJson) as exc: - self.module.main() - - result = exc.exception.args[0] - self.assertTrue(result['failed'], result) - return result - - def changed(self, changed=False): - with self.assertRaises(AnsibleExitJson) as exc: - self.module.main() - - result = exc.exception.args[0] - self.assertEqual(result['changed'], changed, result) - return result - - def load_fixtures(self, commands=None): - pass diff --git a/test/units/modules/network/dellos9/fixtures/dellos9_config_config.cfg b/test/units/modules/network/dellos9/fixtures/dellos9_config_config.cfg deleted file mode 100644 index b8f62da5e0..0000000000 --- a/test/units/modules/network/dellos9/fixtures/dellos9_config_config.cfg +++ /dev/null @@ -1,13 +0,0 @@ -! -hostname router -! -interface fortyGigE 1/6 - ip address 1.2.3.4/24 - description test string -! -interface fortyGigE 1/7 - ip address 6.7.8.9/24 - description test string - shutdown -! - diff --git a/test/units/modules/network/dellos9/fixtures/dellos9_config_src.cfg b/test/units/modules/network/dellos9/fixtures/dellos9_config_src.cfg deleted file mode 100644 index 7ab3338753..0000000000 --- a/test/units/modules/network/dellos9/fixtures/dellos9_config_src.cfg +++ /dev/null @@ -1,12 +0,0 @@ -! -hostname foo -! -interface fortyGigE 1/6 - no ip address -! -interface fortyGigE 1/7 - ip address 6.7.8.9/24 - description test string - shutdown -! - diff --git a/test/units/modules/network/dellos9/fixtures/show_file-systems b/test/units/modules/network/dellos9/fixtures/show_file-systems deleted file mode 100644 index 1c02bb6a98..0000000000 --- a/test/units/modules/network/dellos9/fixtures/show_file-systems +++ /dev/null @@ -1,10 +0,0 @@ - Size(b) Free(b) Feature Type Flags Prefixes - 6429872128 5582319616 FAT32 USERFLASH rw flash: - - - unformatted USERFLASH rw fcmfs: - 241172480 91893760 Unknown NFSMOUNT rw nfsmount: - - - - network rw ftp: - - - - network rw tftp: - - - - network rw scp: - - - - network rw http: - - - - network rw https: - diff --git a/test/units/modules/network/dellos9/fixtures/show_interfaces b/test/units/modules/network/dellos9/fixtures/show_interfaces deleted file mode 100644 index 5f19f38bdd..0000000000 --- a/test/units/modules/network/dellos9/fixtures/show_interfaces +++ /dev/null @@ -1,1259 +0,0 @@ -TenGigabitEthernet 0/0 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1048580 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 10000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:13:21 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:16:47 - - -TenGigabitEthernet 0/1 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1048708 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 10000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:17:48 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:16:49 - - -TenGigabitEthernet 0/2 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1048836 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 10000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:18:30 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:17:31 - - -TenGigabitEthernet 0/3 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1048964 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 10000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:18:33 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:17:35 - - -fortyGigE 0/4 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1049093 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:38:08 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:37:09 - - -fortyGigE 0/8 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1049605 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:38:08 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:40:18 - - -fortyGigE 0/12 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1050117 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:41:18 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:40:20 - - -fortyGigE 0/16 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1050629 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:42:41 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:41:43 - - -fortyGigE 0/20 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1051141 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:43:10 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:42:12 - - -fortyGigE 0/24 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1051653 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:43:45 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:42:47 - - -fortyGigE 0/28 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1052165 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:44:35 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:43:37 - - -fortyGigE 0/32 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1052677 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:44:53 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:43:54 - - -fortyGigE 0/36 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1053189 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:46:20 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:45:21 - - -fortyGigE 0/40 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1053701 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:46:32 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:45:33 - - -fortyGigE 0/44 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1054213 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:46:56 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:45:58 - - -fortyGigE 0/48 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1054725 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:47:10 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:46:11 - - -fortyGigE 0/52 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1055237 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:47:22 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:46:24 - - -fortyGigE 0/56 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1055749 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:47:47 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:46:48 - - -fortyGigE 0/60 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1056261 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:47:58 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:47:00 - - -fortyGigE 0/64 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1056773 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:48:26 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:47:28 - - -fortyGigE 0/68 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1057285 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:48:38 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:47:40 - - -fortyGigE 0/72 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1057797 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:49:05 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:48:07 - - -fortyGigE 0/76 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1058309 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:49:17 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:48:18 - - -fortyGigE 0/80 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1058821 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:49:36 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:48:37 - - -fortyGigE 0/84 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1059333 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:49:58 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:49:00 - - -fortyGigE 0/88 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1059845 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:50:12 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:49:14 - - -fortyGigE 0/92 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1060357 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:50:36 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:49:37 - - -fortyGigE 0/96 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1060869 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:50:50 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:49:52 - - -fortyGigE 0/100 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1061381 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:51:16 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:50:17 - - -fortyGigE 0/104 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1061893 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:51:26 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:50:28 - - -fortyGigE 0/108 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1062405 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:51:50 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:50:52 - - -fortyGigE 0/112 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1062917 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:52:02 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:51:04 - - -fortyGigE 0/116 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1063429 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:52:14 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:51:15 - - -fortyGigE 0/120 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1063941 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:52:44 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:51:45 - - -fortyGigE 0/124 is down, line protocol is down -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 1064453 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 40000 Mbit -Flowcontrol rx off tx off -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:52:55 -Queueing strategy: fifo -Input Statistics: - 0 packets, 0 bytes - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 runts, 0 giants, 0 throttles - 0 CRC, 0 overrun, 0 discarded -Output Statistics: - 0 packets, 0 bytes, 0 underruns - 0 64-byte pkts, 0 over 64-byte pkts, 0 over 127-byte pkts - 0 over 255-byte pkts, 0 over 511-byte pkts, 0 over 1023-byte pkts - 0 Multicasts, 0 Broadcasts, 0 Unicasts - 0 throttles, 0 discarded, 0 collisions, 0 wreddrops -Rate info (interval 299 seconds): - Input 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate - Output 00.00 Mbits/sec, 0 packets/sec, 0.00% of line-rate -Time since last interface status change: 13:51:56 - - -ManagementEthernet 0/0 is up, line protocol is up -Hardware is DellEth, address is 90:b1:1c:f4:a2:8f - Current address is 90:b1:1c:f4:a2:8f -Pluggable media not present -Interface index is 7340033 -Internet address is 10.16.148.71/16 -Mode of IPv4 Address Assignment : MANUAL -DHCP Client-ID(61): 90b11cf4a28f -Virtual-IP is not set -Virtual-IP IPv6 address is not set -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed 1000 Mbit, Mode full duplex -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:52:17 -Queueing strategy: fifo - Input 111338 packets, 7239813 bytes, 96163 multicast - Received 0 errors, 0 discarded - Output 8316 packets, 1491845 bytes, 0 multicast - Output 0 errors, 0 invalid protocol -Time since last interface status change: 13:52:13 - - -ManagementEthernet 1/0 is up, line protocol is not present -Hardware is DellEth, address is not set -Interface index is 8388609 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed auto, Mode full duplex -ARP type: ARPA, ARP Timeout 04:00:00 -Queueing strategy: fifo -Time since last interface status change: 13:52:33 - - -ManagementEthernet 2/0 is up, line protocol is not present -Hardware is DellEth, address is not set -Interface index is 9437185 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed auto, Mode full duplex -ARP type: ARPA, ARP Timeout 04:00:00 -Queueing strategy: fifo -Time since last interface status change: 13:52:33 - - -ManagementEthernet 3/0 is up, line protocol is not present -Hardware is DellEth, address is not set -Interface index is 10485761 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed auto, Mode full duplex -ARP type: ARPA, ARP Timeout 04:00:00 -Queueing strategy: fifo -Time since last interface status change: 13:52:43 - - -ManagementEthernet 4/0 is up, line protocol is not present -Hardware is DellEth, address is not set -Interface index is 11534337 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed auto, Mode full duplex -ARP type: ARPA, ARP Timeout 04:00:00 -Queueing strategy: fifo -Time since last interface status change: 13:52:43 - - -ManagementEthernet 5/0 is up, line protocol is not present -Hardware is DellEth, address is not set -Interface index is 12582913 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed auto, Mode full duplex -ARP type: ARPA, ARP Timeout 04:00:00 -Queueing strategy: fifo -Time since last interface status change: 13:52:53 - - -Vlan 1 is down, line protocol is down -Address is 90:b1:1c:f4:a2:8f, Current address is 90:b1:1c:f4:a2:8f -Interface index is 1275068928 -Internet address is not set -Mode of IPv4 Address Assignment : NONE -DHCP Client-ID :90b11cf4a28f -MTU 1554 bytes, IP MTU 1500 bytes -LineSpeed auto -ARP type: ARPA, ARP Timeout 04:00:00 -Last clearing of "show interface" counters 13:53:06 -Queueing strategy: fifo -Time since last interface status change: 13:53:06 -Input Statistics: - 0 packets, 0 bytes -Output Statistics: - 0 packets, 0 bytes - diff --git a/test/units/modules/network/dellos9/fixtures/show_inventory b/test/units/modules/network/dellos9/fixtures/show_inventory deleted file mode 100644 index 90c0295e56..0000000000 --- a/test/units/modules/network/dellos9/fixtures/show_inventory +++ /dev/null @@ -1,19 +0,0 @@ -System Type : S6000 -System Mode : 1.0 -Software Version : 9.12(0.0) - -Unit Type Serial Number Part Number Rev Piece Part ID Rev Svc Tag Exprs Svc Code --------------------------------------------------------------------------------------------------------------- -* 0 S6000-01-FE-32T NA 08YWFG A00 CN-08YWFG-28298-3AG-0031 A00 6BJ8VS1 137 581 490 89 - 0 S6000-PWR-AC NA 0T9FNW A00 CN-0T9FNW-28298-3AG-0119 A00 NA NA - 0 S6000-FAN NA 0MGDH8 A00 CN-0MGDH8-28298-3AG-0094 A00 NA NA - 0 S6000-FAN NA 0MGDH8 A00 CN-0MGDH8-28298-3AG-0096 A00 NA NA - 0 S6000-FAN NA 0MGDH8 A00 CN-0MGDH8-28298-3AG-0095 A00 NA NA - - * - Management Unit - - -Software Protocol Configured --------------------------------------------------------------- - LLDP - diff --git a/test/units/modules/network/dellos9/fixtures/show_ipv6_interface b/test/units/modules/network/dellos9/fixtures/show_ipv6_interface deleted file mode 100644 index 0cc43da94f..0000000000 --- a/test/units/modules/network/dellos9/fixtures/show_ipv6_interface +++ /dev/null @@ -1,26 +0,0 @@ -fortyGigE 0/16 is down, line protocol is down - IPV6 is enabled - Link Local address: fe80::92b1:1cff:fef4:a28f - Global Unicast address(es): - 2001:4898:5808:ffa2::5, subnet is 2001:4898:5808:ffa2::4/126 (MANUAL) - Remaining lifetime: infinite - Global Anycast address(es): - Joined Group address(es): - ff02::1 - ff02::2 - ff02::1:ff00:5 - ff02::1:fff4:a28f - IP MTU is 1500 bytes - ND MTU is 0 - ICMP redirects are not sent - DAD is enabled, number of DAD attempts: 3 - ND reachable time is 35780 milliseconds - ND base reachable time is 30000 milliseconds - ND advertised reachable time is 0 milliseconds - ND advertised retransmit interval is 0 milliseconds - ND router advertisements are sent every 198 to 600 seconds - ND router advertisements live for 1800 seconds - ND advertised hop limit is 64 - IPv6 hop limit for originated packets is 64 - IPv6 unicast RPF check is not supported - diff --git a/test/units/modules/network/dellos9/fixtures/show_lldp_neighbors_detail b/test/units/modules/network/dellos9/fixtures/show_lldp_neighbors_detail deleted file mode 100644 index a868571ce0..0000000000 --- a/test/units/modules/network/dellos9/fixtures/show_lldp_neighbors_detail +++ /dev/null @@ -1,35 +0,0 @@ -======================================================================== - Local Interface Ma 0/0 has 1 neighbor - Total Frames Out: 1747 - Total Frames In: 10333 - Total Neighbor information Age outs: 0 - Total Multiple Neighbors Detected: 0 - Total Frames Discarded: 0 - Total In Error Frames: 0 - Total Unrecognized TLVs: 0 - Total TLVs Discarded: 0 - Next packet will be sent after 17 seconds - The neighbors are given below: - ----------------------------------------------------------------------- - - Remote Chassis ID Subtype: Mac address (4) - Remote Chassis ID: 90:b1:1c:f4:2f:6d - Remote Port Subtype: Interface name (5) - Remote Port ID: TenGigabitEthernet 0/33 - Remote Port Description: TenGigabitEthernet 0/33 - Local Port ID: ManagementEthernet 0/0 - Locally assigned remote Neighbor Index: 1 - Remote TTL: 20 - Information valid for next 17 seconds - Time since last information change of this neighbor: 14:54:48 - Remote System Name: swlab1-maa-tor-A2 - Remote System Desc: Dell Real Time Operating System Software. Dell - Operating System Version: 2.0. Dell Application Software Version: - 9.11(2.0) Copyright (c) 1999-2017Dell Inc. All Rights Reserved.Build - Time: Tue Apr 25 21:22:59 2017 - Existing System Capabilities: Repeater Bridge Router - Enabled System Capabilities: Repeater Bridge Router - Remote Port Vlan ID: 148 - Port and Protocol Vlan ID: 148, Capability: Supported, Status: Enabled - --------------------------------------------------------------------------- - diff --git a/test/units/modules/network/dellos9/fixtures/show_memory__except_Processor b/test/units/modules/network/dellos9/fixtures/show_memory__except_Processor deleted file mode 100644 index c2f65415ee..0000000000 --- a/test/units/modules/network/dellos9/fixtures/show_memory__except_Processor +++ /dev/null @@ -1,4 +0,0 @@ - =========================== - Total(b) Used(b) Free(b) Lowest(b) Largest(b) - 3203911680 3172120 3200739560 3200673304 3200739560 - diff --git a/test/units/modules/network/dellos9/fixtures/show_running-config b/test/units/modules/network/dellos9/fixtures/show_running-config deleted file mode 100644 index 4804ebba64..0000000000 --- a/test/units/modules/network/dellos9/fixtures/show_running-config +++ /dev/null @@ -1,238 +0,0 @@ -Current Configuration ... -! Version 9.12(0.0) -! Last configuration change at Thu Jan 11 06:53:29 2018 by admin -! -! -logging coredump stack-unit 0 -logging coredump stack-unit 1 -logging coredump stack-unit 2 -logging coredump stack-unit 3 -logging coredump stack-unit 4 -logging coredump stack-unit 5 -! -hostname Dell -! -protocol lldp -! -redundancy auto-synchronize full -! -enable password 7 b125455cf679b208e79b910e85789edf -! -username admin password 7 1d28e9f33f99cf5c -! -stack-unit 0 quad-port-profile 0,8,16,24,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,100,108,116,124 -! -stack-unit 0 provision S6000 -! -stack-unit 0 port 0 portmode quad -! -interface TenGigabitEthernet 0/0 - no ip address - shutdown -! -interface TenGigabitEthernet 0/1 - no ip address - shutdown -! -interface TenGigabitEthernet 0/2 - no ip address - shutdown -! -interface TenGigabitEthernet 0/3 - no ip address - shutdown -! -interface fortyGigE 0/4 - no ip address - shutdown -! -interface fortyGigE 0/8 - no ip address - shutdown -! -interface fortyGigE 0/12 - no ip address - shutdown -! -interface fortyGigE 0/16 - no ip address - ipv6 address 2001:4898:5808:ffa2::5/126 - shutdown -! -interface fortyGigE 0/20 - no ip address - switchport - ip access-group ipv6-ssh-only in - shutdown -! -interface fortyGigE 0/24 - no ip address - switchport - mac access-group ssh-only-mac in - mac access-group ssh-only-mac out - shutdown -! -interface fortyGigE 0/28 - no ip address - switchport - mac access-group ssh-only-mac in - mac access-group ssh-only-mac out - shutdown -! -interface fortyGigE 0/32 - no ip address - switchport - ip access-group ipv6-ssh-only out - shutdown -! -interface fortyGigE 0/36 - no ip address - shutdown -! -interface fortyGigE 0/40 - no ip address - shutdown -! -interface fortyGigE 0/44 - no ip address - shutdown -! -interface fortyGigE 0/48 - no ip address - shutdown -! -interface fortyGigE 0/52 - no ip address - shutdown -! -interface fortyGigE 0/56 - no ip address - shutdown -! -interface fortyGigE 0/60 - no ip address - shutdown -! -interface fortyGigE 0/64 - no ip address - shutdown -! -interface fortyGigE 0/68 - no ip address - shutdown -! -interface fortyGigE 0/72 - no ip address - shutdown -! -interface fortyGigE 0/76 - no ip address - shutdown -! -interface fortyGigE 0/80 - no ip address - shutdown -! -interface fortyGigE 0/84 - no ip address - shutdown -! -interface fortyGigE 0/88 - no ip address - shutdown -! -interface fortyGigE 0/92 - no ip address - shutdown -! -interface fortyGigE 0/96 - no ip address - shutdown -! -interface fortyGigE 0/100 - no ip address - shutdown -! -interface fortyGigE 0/104 - no ip address - shutdown -! -interface fortyGigE 0/108 - no ip address - shutdown -! -interface fortyGigE 0/112 - no ip address - shutdown -! -interface fortyGigE 0/116 - no ip address - shutdown -! -interface fortyGigE 0/120 - no ip address - shutdown -! -interface fortyGigE 0/124 - no ip address - shutdown -! -interface ManagementEthernet 0/0 - ip address 10.16.148.71/16 - no shutdown -! -interface ManagementEthernet 1/0 - no shutdown -! -interface ManagementEthernet 2/0 - no shutdown -! -interface ManagementEthernet 3/0 - no shutdown -! -interface ManagementEthernet 4/0 - no shutdown -! -interface ManagementEthernet 5/0 - no shutdown -! -interface Vlan 1 -!untagged fortyGigE 0/20-32 -! -ipv6 access-list ipv6-ssh-only - description ipv6acl - remark 1 ipv6 - seq 10 permit ipv6 2001:4898::/32 any - seq 20 permit tcp any eq 2 2404:f801::/32 - seq 30 permit tcp any 2a01:110::/31 ack - seq 40 permit tcp any any -! -mac access-list extended ssh-only-mac - description macacl - remark 1 mac - seq 5 permit any any count - seq 6 deny any any -! -ip ssh server enable -! -line console 0 -line vty 0 -line vty 1 - access-class ipv6-ssh-only ipv6 -line vty 2 - access-class ipv6-ssh-only ipv6 -line vty 3 - access-class ipv6-ssh-only ipv6 -line vty 4 -line vty 5 -line vty 6 -line vty 7 -line vty 8 -line vty 9 -! -reload-type - boot-type normal-reload - config-scr-download enable -! -end - diff --git a/test/units/modules/network/dellos9/fixtures/show_running-config__grep_hostname b/test/units/modules/network/dellos9/fixtures/show_running-config__grep_hostname deleted file mode 100644 index 7c4137c6ab..0000000000 --- a/test/units/modules/network/dellos9/fixtures/show_running-config__grep_hostname +++ /dev/null @@ -1 +0,0 @@ -hostname dellos9_sw1 diff --git a/test/units/modules/network/dellos9/fixtures/show_version b/test/units/modules/network/dellos9/fixtures/show_version deleted file mode 100644 index e385cf3ef6..0000000000 --- a/test/units/modules/network/dellos9/fixtures/show_version +++ /dev/null @@ -1,18 +0,0 @@ -Dell Real Time Operating System Software -Dell Operating System Version: 2.0 -Dell Application Software Version: 9.10(0.1P13) -Copyright (c) 1999-2016 by Dell Inc. All Rights Reserved. -Build Time: Wed Sep 7 23:48:35 2016 -Build Path: /sites/eqx/work/swbuild01_1/build01/E9-10-0/SW/SRC -Dell Networking OS uptime is 12 week(s), 6 day(s), 9 hour(s), 20 minute(s) - -System image file is "system://A" - -System Type: S6000-ON -Control Processor: Intel Centerton with 3 Gbytes (3203911680 bytes) of memory, core(s) 2. - -16G bytes of boot flash memory. - - 1 32-port TE/FG (SI-ON) - 32 Forty GigabitEthernet/IEEE 802.3 interface(s) - diff --git a/test/units/modules/network/dellos9/test_dellos9_command.py b/test/units/modules/network/dellos9/test_dellos9_command.py deleted file mode 100644 index 06b11eb6ff..0000000000 --- a/test/units/modules/network/dellos9/test_dellos9_command.py +++ /dev/null @@ -1,110 +0,0 @@ -# (c) 2016 Red Hat Inc. -# -# (c) 2017 Dell EMC. -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . - -# Make coding more python3-ish -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import json - -from units.compat.mock import patch -from ansible.modules.network.dellos9 import dellos9_command -from units.modules.utils import set_module_args -from .dellos9_module import TestDellos9Module, load_fixture - - -class TestDellos9CommandModule(TestDellos9Module): - - module = dellos9_command - - def setUp(self): - super(TestDellos9CommandModule, self).setUp() - - self.mock_run_commands = patch('ansible.modules.network.dellos9.dellos9_command.run_commands') - self.run_commands = self.mock_run_commands.start() - - def tearDown(self): - super(TestDellos9CommandModule, self).tearDown() - self.mock_run_commands.stop() - - def load_fixtures(self, commands=None): - - def load_from_file(*args, **kwargs): - module, commands = args - output = list() - - for item in commands: - try: - obj = json.loads(item['command']) - command = obj['command'] - except ValueError: - command = item['command'] - filename = str(command).replace(' ', '_') - output.append(load_fixture(filename)) - return output - - self.run_commands.side_effect = load_from_file - - def test_dellos9_command_simple(self): - set_module_args(dict(commands=['show version'])) - result = self.execute_module() - self.assertEqual(len(result['stdout']), 1) - self.assertTrue(result['stdout'][0].startswith('Dell Real Time')) - - def test_dellos9_command_multiple(self): - set_module_args(dict(commands=['show version', 'show version'])) - result = self.execute_module() - self.assertEqual(len(result['stdout']), 2) - self.assertTrue(result['stdout'][0].startswith('Dell Real Time')) - - def test_dellos9_command_wait_for(self): - wait_for = 'result[0] contains "Dell Real"' - set_module_args(dict(commands=['show version'], wait_for=wait_for)) - self.execute_module() - - def test_dellos9_command_wait_for_fails(self): - wait_for = 'result[0] contains "test string"' - set_module_args(dict(commands=['show version'], wait_for=wait_for)) - self.execute_module(failed=True) - self.assertEqual(self.run_commands.call_count, 10) - - def test_dellos9_command_retries(self): - wait_for = 'result[0] contains "test string"' - set_module_args(dict(commands=['show version'], wait_for=wait_for, retries=2)) - self.execute_module(failed=True) - self.assertEqual(self.run_commands.call_count, 2) - - def test_dellos9_command_match_any(self): - wait_for = ['result[0] contains "Dell Real"', - 'result[0] contains "test string"'] - set_module_args(dict(commands=['show version'], wait_for=wait_for, match='any')) - self.execute_module() - - def test_dellos9_command_match_all(self): - wait_for = ['result[0] contains "Dell Real"', - 'result[0] contains "Operating System"'] - set_module_args(dict(commands=['show version'], wait_for=wait_for, match='all')) - self.execute_module() - - def test_dellos9_command_match_all_failure(self): - wait_for = ['result[0] contains "Dell Real"', - 'result[0] contains "test string"'] - commands = ['show version', 'show version'] - set_module_args(dict(commands=commands, wait_for=wait_for, match='all')) - self.execute_module(failed=True) diff --git a/test/units/modules/network/dellos9/test_dellos9_config.py b/test/units/modules/network/dellos9/test_dellos9_config.py deleted file mode 100644 index 393d539041..0000000000 --- a/test/units/modules/network/dellos9/test_dellos9_config.py +++ /dev/null @@ -1,150 +0,0 @@ -# -# (c) 2016 Red Hat Inc. -# -# (c) 2017 Dell EMC. -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . - -# Make coding more python3-ish -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -from units.compat.mock import patch -from ansible.modules.network.dellos9 import dellos9_config -from units.modules.utils import set_module_args -from .dellos9_module import TestDellos9Module, load_fixture - - -class TestDellos9ConfigModule(TestDellos9Module): - - module = dellos9_config - - def setUp(self): - super(TestDellos9ConfigModule, self).setUp() - - self.mock_get_config = patch('ansible.modules.network.dellos9.dellos9_config.get_config') - self.get_config = self.mock_get_config.start() - - self.mock_load_config = patch('ansible.modules.network.dellos9.dellos9_config.load_config') - self.load_config = self.mock_load_config.start() - - self.mock_run_commands = patch('ansible.modules.network.dellos9.dellos9_config.run_commands') - self.run_commands = self.mock_run_commands.start() - - def tearDown(self): - super(TestDellos9ConfigModule, self).tearDown() - self.mock_get_config.stop() - self.mock_load_config.stop() - self.mock_run_commands.stop() - - def load_fixtures(self, commands=None): - config_file = 'dellos9_config_config.cfg' - self.get_config.return_value = load_fixture(config_file) - self.load_config.return_value = None - - def test_dellos9_config_unchanged(self): - src = load_fixture('dellos9_config_config.cfg') - set_module_args(dict(src=src)) - self.execute_module() - - def test_dellos9_config_src(self): - src = load_fixture('dellos9_config_src.cfg') - set_module_args(dict(src=src)) - commands = ['hostname foo', 'interface fortyGigE 1/6', - 'no ip address'] - self.execute_module(changed=True, commands=commands) - - def test_dellos9_config_backup(self): - set_module_args(dict(backup=True)) - result = self.execute_module() - self.assertIn('__backup__', result) - - def test_dellos9_config_save(self): - set_module_args(dict(save=True)) - self.execute_module(changed=True) - self.assertEqual(self.run_commands.call_count, 1) - self.assertEqual(self.get_config.call_count, 0) - self.assertEqual(self.load_config.call_count, 0) - args = self.run_commands.call_args[0][1] - self.assertDictContainsSubset({'command': 'copy running-config startup-config'}, args[0]) -# self.assertIn('copy running-config startup-config\r', args) - - def test_dellos9_config_lines_wo_parents(self): - set_module_args(dict(lines=['hostname foo'])) - commands = ['hostname foo'] - self.execute_module(changed=True, commands=commands) - - def test_dellos9_config_lines_w_parents(self): - set_module_args(dict(lines=['shutdown'], parents=['interface fortyGigE 1/6'])) - commands = ['interface fortyGigE 1/6', 'shutdown'] - self.execute_module(changed=True, commands=commands) - - def test_dellos9_config_before(self): - set_module_args(dict(lines=['hostname foo'], before=['snmp-server contact bar'])) - commands = ['snmp-server contact bar', 'hostname foo'] - self.execute_module(changed=True, commands=commands, sort=False) - - def test_dellos9_config_after(self): - set_module_args(dict(lines=['hostname foo'], after=['snmp-server contact bar'])) - commands = ['hostname foo', 'snmp-server contact bar'] - self.execute_module(changed=True, commands=commands, sort=False) - - def test_dellos9_config_before_after_no_change(self): - set_module_args(dict(lines=['hostname router'], - before=['snmp-server contact bar'], - after=['snmp-server location chennai'])) - self.execute_module() - - def test_dellos9_config_config(self): - config = 'hostname localhost' - set_module_args(dict(lines=['hostname router'], config=config)) - commands = ['hostname router'] - self.execute_module(changed=True, commands=commands) - - def test_dellos9_config_replace_block(self): - lines = ['description test string', 'test string'] - parents = ['interface fortyGigE 1/6'] - set_module_args(dict(lines=lines, replace='block', parents=parents)) - commands = parents + lines - self.execute_module(changed=True, commands=commands) - - def test_dellos9_config_match_none(self): - lines = ['hostname router'] - set_module_args(dict(lines=lines, match='none')) - self.execute_module(changed=True, commands=lines) - - def test_dellos9_config_match_none(self): - lines = ['ip address 1.2.3.4/24', 'description test string'] - parents = ['interface fortyGigE 1/6'] - set_module_args(dict(lines=lines, parents=parents, match='none')) - commands = parents + lines - self.execute_module(changed=True, commands=commands, sort=False) - - def test_dellos9_config_match_strict(self): - lines = ['ip address 1.2.3.4/24', 'description test string', - 'shutdown'] - parents = ['interface fortyGigE 1/6'] - set_module_args(dict(lines=lines, parents=parents, match='strict')) - commands = parents + ['shutdown'] - self.execute_module(changed=True, commands=commands, sort=False) - - def test_dellos9_config_match_exact(self): - lines = ['ip address 1.2.3.4/24', 'description test string', - 'shutdown'] - parents = ['interface fortyGigE 1/6'] - set_module_args(dict(lines=lines, parents=parents, match='exact')) - commands = parents + lines - self.execute_module(changed=True, commands=commands, sort=False) diff --git a/test/units/modules/network/dellos9/test_dellos9_facts.py b/test/units/modules/network/dellos9/test_dellos9_facts.py deleted file mode 100644 index 0fb261ed7b..0000000000 --- a/test/units/modules/network/dellos9/test_dellos9_facts.py +++ /dev/null @@ -1,106 +0,0 @@ -# (c) 2016 Red Hat Inc. -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . - -# Make coding more python3-ish -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import json - -from units.compat.mock import patch -from units.modules.utils import set_module_args -from .dellos9_module import TestDellos9Module, load_fixture -from ansible.modules.network.dellos9 import dellos9_facts - - -class TestDellos9Facts(TestDellos9Module): - - module = dellos9_facts - - def setUp(self): - super(TestDellos9Facts, self).setUp() - - self.mock_run_command = patch( - 'ansible.modules.network.dellos9.dellos9_facts.run_commands') - self.run_command = self.mock_run_command.start() - - def tearDown(self): - super(TestDellos9Facts, self).tearDown() - - self.mock_run_command.stop() - - def load_fixtures(self, commands=None): - - def load_from_file(*args, **kwargs): - module, commands = args - output = list() - - for item in commands: - try: - obj = json.loads(item) - command = obj['command'] - except ValueError: - command = item - if '|' in command: - command = str(command).replace('|', '') - filename = str(command).replace(' ', '_') - filename = filename.replace('/', '7') - output.append(load_fixture(filename)) - return output - - self.run_command.side_effect = load_from_file - - def test_dellos9_facts_gather_subset_default(self): - set_module_args(dict()) - result = self.execute_module() - ansible_facts = result['ansible_facts'] - self.assertIn('hardware', ansible_facts['ansible_net_gather_subset']) - self.assertIn('default', ansible_facts['ansible_net_gather_subset']) - self.assertIn('interfaces', ansible_facts['ansible_net_gather_subset']) - self.assertEqual('dellos9_sw1', ansible_facts['ansible_net_hostname']) - self.assertIn('fortyGigE 0/24', ansible_facts['ansible_net_interfaces'].keys()) - self.assertEqual(3128820, ansible_facts['ansible_net_memtotal_mb']) - self.assertEqual(3125722, ansible_facts['ansible_net_memfree_mb']) - - def test_dellos9_facts_gather_subset_config(self): - set_module_args({'gather_subset': 'config'}) - result = self.execute_module() - ansible_facts = result['ansible_facts'] - self.assertIn('default', ansible_facts['ansible_net_gather_subset']) - self.assertIn('config', ansible_facts['ansible_net_gather_subset']) - self.assertEqual('dellos9_sw1', ansible_facts['ansible_net_hostname']) - self.assertIn('ansible_net_config', ansible_facts) - - def test_dellos9_facts_gather_subset_hardware(self): - set_module_args({'gather_subset': 'hardware'}) - result = self.execute_module() - ansible_facts = result['ansible_facts'] - self.assertIn('default', ansible_facts['ansible_net_gather_subset']) - self.assertIn('hardware', ansible_facts['ansible_net_gather_subset']) - self.assertEqual(['flash', 'fcmfs', 'nfsmount', 'ftp', 'tftp', 'scp', 'http', 'https'], ansible_facts['ansible_net_filesystems']) - self.assertEqual(3128820, ansible_facts['ansible_net_memtotal_mb']) - self.assertEqual(3125722, ansible_facts['ansible_net_memfree_mb']) - - def test_dellos9_facts_gather_subset_interfaces(self): - set_module_args({'gather_subset': 'interfaces'}) - result = self.execute_module() - ansible_facts = result['ansible_facts'] - self.assertIn('default', ansible_facts['ansible_net_gather_subset']) - self.assertIn('interfaces', ansible_facts['ansible_net_gather_subset']) - self.assertIn('fortyGigE 0/24', ansible_facts['ansible_net_interfaces'].keys()) - self.assertEqual(['Ma 0/0'], list(ansible_facts['ansible_net_neighbors'].keys())) - self.assertIn('ansible_net_interfaces', ansible_facts) -- cgit v1.2.1