summaryrefslogtreecommitdiff
path: root/lib/ansible/modules/network/cnos/cnos_portchannel.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ansible/modules/network/cnos/cnos_portchannel.py')
-rw-r--r--lib/ansible/modules/network/cnos/cnos_portchannel.py450
1 files changed, 0 insertions, 450 deletions
diff --git a/lib/ansible/modules/network/cnos/cnos_portchannel.py b/lib/ansible/modules/network/cnos/cnos_portchannel.py
deleted file mode 100644
index c6554081a7..0000000000
--- a/lib/ansible/modules/network/cnos/cnos_portchannel.py
+++ /dev/null
@@ -1,450 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-#
-# Copyright (C) 2017 Lenovo, 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 <http://www.gnu.org/licenses/>.
-#
-# Module to send Port channel commands to Lenovo Switches
-# Lenovo Networking
-#
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'community'}
-
-
-DOCUMENTATION = '''
----
-module: cnos_portchannel
-author: "Anil Kumar Muraleedharan (@amuraleedhar)"
-short_description: Manage portchannel (port channel) configuration on devices
- running Lenovo CNOS
-description:
- - This module allows you to work with port channel related configurations.
- The operators used are overloaded to ensure control over switch port
- channel configurations. Apart from the regular device connection related
- attributes, there are five LAG arguments which are overloaded variables
- that will perform further configurations. They are interfaceArg1,
- interfaceArg2, interfaceArg3, interfaceArg4, and interfaceArg5.
- For more details on how to use these arguments, see[Overloaded Variables].
- This module uses SSH to manage network device configuration.
- The results of the operation will be placed in a directory named 'results'
- that must be created by the user in their local directory to where the
- playbook is run.
-version_added: "2.3"
-extends_documentation_fragment: cnos
-options:
- interfaceRange:
- description:
- - This specifies the interface range in which the port channel is
- envisaged
- required: Yes
- default: Null
- interfaceArg1:
- description:
- - This is an overloaded Port Channel first argument. Usage of this
- argument can be found is the User Guide referenced above.
- required: Yes
- default: Null
- choices: [channel-group, bfd, bridgeport, description, duplex,
- flowcontrol, ip, ipv6, lacp, lldp,load-interval, mac,
- mac-address, mac-learn, microburst-detection, mtu, service,
- service-policy, shutdown, snmp, spanning-tree, speed,
- storm-control, vlan, vrrp, port-channel]
- interfaceArg2:
- description:
- - This is an overloaded Port Channel second argument. Usage of this
- argument can be found is the User Guide referenced above.
- required: No
- default: Null
- choices: [channel-group number, access or mode or trunk, description,
- auto or full or half, receive or send, port-priority,
- suspend-individual, timeout,
- receive or transmit or trap-notification, tlv-select,
- Load interval delay in seconds, counter,
- Name for the MAC Access List,
- mac-address in HHHH.HHHH.HHHH format,
- THRESHOLD Value in unit of buffer cell,
- <64-9216> MTU in bytes-<64-9216> for L2 packet,
- <576-9216> for L3 IPv4 packet, <1280-9216> L3 IPv6 packet,
- enter the instance id, input or output, copp-system-policy,
- type, 1000 or 10000 or 40000 or auto, broadcast or
- multicast or unicast, disable or enable or egress-only,
- Virtual router identifier,
- destination-ip or destination-mac or destination-port or
- source-dest-ip or source-dest-mac or source-dest-port or
- source-interface or source-ip or source-mac or source-port]
- interfaceArg3:
- description:
- - This is an overloaded Port Channel third argument. Usage of this
- argument can be found is the User Guide referenced above.
- required: No
- default: Null
- choices: [active or on or passive, on or off, LACP port priority,
- long or short, link-aggregation or mac-phy-status or management-address
- or max-frame-size or port-description or port-protocol-vlan or
- port-vlan or power-mdi or protocol-identity or system-capabilities or
- system-description or system-name or vid-management or vlan-name,
- counter for load interval, policy input name,
- all or Copp class name to attach, qos, queueing,
- Enter the allowed traffic level, ipv6]
- interfaceArg4:
- description:
- - This is an overloaded Port Channel fourth argument. Usage of this
- argument can be found is the User Guide referenced above.
- required: No
- default: Null
- choices: [key-chain, key-id, keyed-md5 or keyed-sha1 or
- meticulous-keyed-md5 or meticulous-keyed-sha1 or simple,
- Interval value in milliseconds,
- Destination IP (Both IPV4 and IPV6),in or out, MAC address,
- Time-out value in seconds, class-id, request,
- Specify the IPv4 address, OSPF area ID as a decimal value,
- OSPF area ID in IP address format, anycast or secondary,
- ethernet, vlan,
- MAC (hardware) address in HHHH.HHHH.HHHH format,
- Load interval delay in seconds, Specify policy input name,
- input or output, cost, port-priority,
- BFD minimum receive interval,source-interface]
- interfaceArg5:
- description:
- - This is an overloaded Port Channel fifth argument. Usage of this
- argument can be found is the User Guide referenced above.
- required: No
- default: Null
- choices: [name of key-chain, key-Id Value, key-chain , key-id,
- BFD minimum receive interval, Value of Hello Multiplier,
- admin-down or multihop or non-persistent,
- Vendor class-identifier name,
- bootfile-name or host-name or log-server or ntp-server or
- tftp-server-name, Slot/chassis number, Vlan interface,
- Specify policy input name, Port path cost or auto,
- Port priority increments of 32]
- interfaceArg6:
- description:
- - This is an overloaded Port Channel sixth argument. Usage of this
- argument can be found is the User Guide referenced above.
- required: No
- default: Null
- choices: [Authentication key string, name of key-chain, key-Id Value,
- Value of Hello Multiplier, admin-down or non-persistent]
- interfaceArg7:
- description:
- - This is an overloaded Port Channel seventh argument. Usage of
- this argument can be found is the User Guide referenced above.
- required: No
- default: Null
- choices: [Authentication key string, admin-down]
-'''
-EXAMPLES = '''
-Tasks : The following are examples of using the module cnos_portchannel. These
- are written in the main.yml file of the tasks directory.
----
-- name: Test Port Channel - channel-group
- cnos_portchannel:
- deviceType: "{{ hostvars[inventory_hostname]['deviceType'] }}"
- outputfile: "./results/test_portchannel_{{inventory_hostname}}_output.txt"
- interfaceRange: 33
- interfaceArg1: "channel-group"
- interfaceArg2: 33
- interfaceArg3: "on"
-
-- name: Test Port Channel - channel-group - Interface Range
- cnos_portchannel:
- deviceType: "{{ hostvars[inventory_hostname]['deviceType'] }}"
- outputfile: "./results/test_portchannel_{{ inventory_hostname }}_output.txt"
- interfaceRange: "1/1-2"
- interfaceArg1: "channel-group"
- interfaceArg2: 33
- interfaceArg3: "on"
-
-- name: Test Port Channel - bridge-port
- cnos_portchannel:
- deviceType: "{{ hostvars[inventory_hostname]['deviceType'] }}"
- outputfile: "./results/test_portchannel_{{ inventory_hostname }}_output.txt"
- interfaceRange: 33
- interfaceArg1: "bridge-port"
- interfaceArg2: "access"
- interfaceArg3: 33
-
-- name: Test Port Channel - bridgeport mode
- cnos_portchannel:
- deviceType: "{{ hostvars[inventory_hostname]['deviceType'] }}"
- outputfile: "./results/test_portchannel_{{ inventory_hostname }}_output.txt"
- interfaceRange: 33
- interfaceArg1: "bridge-port"
- interfaceArg2: "mode"
- interfaceArg3: "access"
-
-- name: Test Port Channel - Description
- cnos_portchannel:
- deviceType: "{{ hostvars[inventory_hostname]['deviceType'] }}"
- outputfile: "./results/test_portchannel_{{ inventory_hostname }}_output.txt"
- interfaceRange: 33
- interfaceArg1: "description"
- interfaceArg2: "Hentammoo "
-
-- name: Test Port Channel - Duplex
- cnos_portchannel:
- deviceType: "{{ hostvars[inventory_hostname]['deviceType'] }}"
- outputfile: "./results/test_portchannel_{{ inventory_hostname }}_output.txt"
- interfaceRange: 33
- interfaceArg1: "duplex"
- interfaceArg2: "auto"
-
-- name: Test Port Channel - flowcontrol
- cnos_portchannel:
- deviceType: "{{ hostvars[inventory_hostname]['deviceType'] }}"
- outputfile: "./results/test_portchannel_{{ inventory_hostname }}_output.txt"
- interfaceRange: 33
- interfaceArg1: "flowcontrol"
- interfaceArg2: "send"
- interfaceArg3: "off"
-
-- name: Test Port Channel - lacp
- cnos_portchannel:
- deviceType: "{{ hostvars[inventory_hostname]['deviceType'] }}"
- outputfile: "./results/test_portchannel_{{ inventory_hostname }}_output.txt"
- interfaceRange: 33
- interfaceArg1: "lacp"
- interfaceArg2: "port-priority"
- interfaceArg3: 33
-
-- name: Test Port Channel - lldp
- cnos_portchannel:
- deviceType: "{{ hostvars[inventory_hostname]['deviceType'] }}"
- outputfile: "./results/test_portchannel_{{ inventory_hostname }}_output.txt"
- interfaceRange: 33
- interfaceArg1: "lldp"
- interfaceArg2: "tlv-select"
- interfaceArg3: "max-frame-size"
-
-- name: Test Port Channel - load-interval
- cnos_portchannel:
- deviceType: "{{ hostvars[inventory_hostname]['deviceType'] }}"
- outputfile: "./results/test_portchannel_{{ inventory_hostname }}_output.txt"
- interfaceRange: 33
- interfaceArg1: "load-interval"
- interfaceArg2: "counter"
- interfaceArg3: 2
- interfaceArg4: 33
-
-- name: Test Port Channel - microburst-detection
- cnos_portchannel:
- deviceType: "{{ hostvars[inventory_hostname]['deviceType'] }}"
- outputfile: "./results/test_portchannel_{{ inventory_hostname }}_output.txt"
- interfaceRange: 33
- interfaceArg1: "microburst-detection"
- interfaceArg2: 25
-
-- name: Test Port Channel - mtu
- cnos_portchannel:
- deviceType: "{{ hostvars[inventory_hostname]['deviceType'] }}"
- outputfile: "./results/test_portchannel_{{ inventory_hostname }}_output.txt"
- interfaceRange: 33
- interfaceArg1: "mtu"
- interfaceArg2: 66
-
-- name: Test Port Channel - service-policy
- cnos_portchannel:
- deviceType: "{{ hostvars[inventory_hostname]['deviceType'] }}"
- outputfile: "./results/test_portchannel_{{ inventory_hostname }}_output.txt"
- interfaceRange: 33
- interfaceArg1: "service-policy"
- interfaceArg2: "input"
- interfaceArg3: "Anil"
-
-- name: Test Port Channel - speed
- cnos_portchannel:
- deviceType: "{{ hostvars[inventory_hostname]['deviceType'] }}"
- outputfile: "./results/test_portchannel_{{ inventory_hostname }}_output.txt"
- interfaceRange: 33
- interfaceArg1: "speed"
- interfaceArg2: "auto"
-
-- name: Test Port Channel - storm
- cnos_portchannel:
- deviceType: "{{ hostvars[inventory_hostname]['deviceType'] }}"
- outputfile: "./results/test_portchannel_{{ inventory_hostname }}_output.txt"
- interfaceRange: 33
- interfaceArg1: "storm-control"
- interfaceArg2: "broadcast"
- interfaceArg3: 12.5
-
-- name: Test Port Channel - vlan
- cnos_portchannel:
- deviceType: "{{ hostvars[inventory_hostname]['deviceType'] }}"
- outputfile: "./results/test_portchannel_{{ inventory_hostname }}_output.txt"
- interfaceRange: 33
- interfaceArg1: "vlan"
- interfaceArg2: "disable"
-
-- name: Test Port Channel - vrrp
- cnos_portchannel:
- deviceType: "{{ hostvars[inventory_hostname]['deviceType'] }}"
- outputfile: "./results/test_portchannel_{{ inventory_hostname }}_output.txt"
- interfaceRange: 33
- interfaceArg1: "vrrp"
- interfaceArg2: 33
-
-- name: Test Port Channel - spanning tree1
- cnos_portchannel:
- deviceType: "{{ hostvars[inventory_hostname]['deviceType'] }}"
- outputfile: "./results/test_portchannel_{{ inventory_hostname }}_output.txt"
- interfaceRange: 33
- interfaceArg1: "spanning-tree"
- interfaceArg2: "bpduguard"
- interfaceArg3: "enable"
-
-- name: Test Port Channel - spanning tree 2
- cnos_portchannel:
- deviceType: "{{ hostvars[inventory_hostname]['deviceType'] }}"
- outputfile: "./results/test_portchannel_{{ inventory_hostname }}_output.txt"
- interfaceRange: 33
- interfaceArg1: "spanning-tree"
- interfaceArg2: "mst"
- interfaceArg3: "33-35"
- interfaceArg4: "cost"
- interfaceArg5: 33
-
-- name: Test Port Channel - ip1
- cnos_portchannel:
- deviceType: "{{ hostvars[inventory_hostname]['deviceType'] }}"
- outputfile: "./results/test_portchannel_{{ inventory_hostname }}_output.txt"
- interfaceRange: 33
- interfaceArg1: "ip"
- interfaceArg2: "access-group"
- interfaceArg3: "anil"
- interfaceArg4: "in"
-
-- name: Test Port Channel - ip2
- cnos_portchannel:
- deviceType: "{{ hostvars[inventory_hostname]['deviceType'] }}"
- outputfile: "./results/test_portchannel_{{ inventory_hostname }}_output.txt"
- interfaceRange: 33
- interfaceArg1: "ip"
- interfaceArg2: "port"
- interfaceArg3: "anil"
-
-'''
-RETURN = '''
-msg:
- description: Success or failure message
- returned: always
- type: string
- sample: "Port Channel configurations accomplished"
-'''
-
-import sys
-import time
-import socket
-import array
-import json
-import time
-import re
-import os
-try:
- from ansible.module_utils.network.cnos import cnos
- HAS_LIB = True
-except:
- HAS_LIB = False
-
-from ansible.module_utils.basic import AnsibleModule
-from collections import defaultdict
-
-
-def portChannelConfig(module, prompt, answer):
- retVal = ''
- command = ''
- portChArg1 = module.params['interfaceArg1']
- portChArg2 = module.params['interfaceArg2']
- portChArg3 = module.params['interfaceArg3']
- if(portChArg1 == "port-channel" and prompt == "(config)#"):
- command = command + portChArg1 + " load-balance ethernet "
- if(portChArg2 == "destination-ip" or
- portChArg2 == "destination-mac" or
- portChArg2 == "destination-port" or
- portChArg2 == "source-dest-ip" or
- portChArg2 == "source-dest-mac" or
- portChArg2 == "source-dest-port" or
- portChArg2 == "source-interface" or
- portChArg2 == "source-ip" or
- portChArg2 == "source-mac" or
- portChArg2 == "source-port"):
-
- # debugOutput(portChArg2)
- command = command + portChArg2 + " "
- if(portChArg3 is None):
- command = command + ""
- elif(portChArg3 == "source-interface"):
- command = command + portChArg3
- cmd = [{'command': command, 'prompt': None, 'answer': None}]
- retVal = retVal + str(cnos.run_cnos_commands(module, cmd))
- else:
- retVal = "Error-231"
- return retVal
- else:
- retVal = "Error-232"
- return retVal
-# EOM
-
-
-def main():
- module = AnsibleModule(
- argument_spec=dict(
- outputfile=dict(required=True),
- host=dict(required=False),
- username=dict(required=False),
- password=dict(required=False, no_log=True),
- enablePassword=dict(required=False, no_log=True),
- deviceType=dict(required=True),
- interfaceRange=dict(required=False),
- interfaceArg1=dict(required=True),
- interfaceArg2=dict(required=False),
- interfaceArg3=dict(required=False),
- interfaceArg4=dict(required=False),
- interfaceArg5=dict(required=False),
- interfaceArg6=dict(required=False),
- interfaceArg7=dict(required=False),),
- supports_check_mode=False)
-
- outputfile = module.params['outputfile']
- output = ''
- # Send the CLi command
- if(module.params['interfaceArg1'] == "port-channel"):
- output = output + portChannelConfig(module, "(config)#", None)
- else:
- output = output + cnos.interfaceConfig(module, "(config)#",
- "port-channel", None)
-
- # Save it into the file
- file = open(outputfile, "a")
- file.write(output)
- file.close()
-
- # Logic to check when changes occur or not
- errorMsg = cnos.checkOutputForError(output)
- if(errorMsg is None):
- module.exit_json(changed=True,
- msg="Port Channel Configuration is done")
- else:
- module.fail_json(msg=errorMsg)
-
-
-if __name__ == '__main__':
- main()