summaryrefslogtreecommitdiff
path: root/lib/ansible/module_utils/network/ios/utils/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ansible/module_utils/network/ios/utils/utils.py')
-rw-r--r--lib/ansible/module_utils/network/ios/utils/utils.py328
1 files changed, 0 insertions, 328 deletions
diff --git a/lib/ansible/module_utils/network/ios/utils/utils.py b/lib/ansible/module_utils/network/ios/utils/utils.py
deleted file mode 100644
index cfcfe82dbc..0000000000
--- a/lib/ansible/module_utils/network/ios/utils/utils.py
+++ /dev/null
@@ -1,328 +0,0 @@
-#
-# -*- coding: utf-8 -*-
-# Copyright 2019 Red Hat
-# GNU General Public License v3.0+
-# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-# utils
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-import socket
-from ansible.module_utils.six import iteritems
-from ansible.module_utils.network.common.utils import is_masklen, to_netmask
-
-
-def remove_command_from_config_list(interface, cmd, commands):
- # To delete the passed config
- if interface not in commands:
- commands.insert(0, interface)
- commands.append('no %s' % cmd)
- return commands
-
-
-def add_command_to_config_list(interface, cmd, commands):
- # To set the passed config
- if interface not in commands:
- commands.insert(0, interface)
- commands.append(cmd)
-
-
-def check_n_return_valid_ipv6_addr(module, input_list, filtered_ipv6_list):
- # To verify the valid ipv6 address
- try:
- for each in input_list:
- if '::' in each:
- if '/' in each:
- each = each.split('/')[0]
- if socket.inet_pton(socket.AF_INET6, each):
- filtered_ipv6_list.append(each)
- return filtered_ipv6_list
- except socket.error:
- module.fail_json(msg='Incorrect IPV6 address!')
-
-
-def new_dict_to_set(input_dict, temp_list, test_set, count=0):
- # recursive function to convert input dict to set for comparision
- test_dict = dict()
- if isinstance(input_dict, dict):
- input_dict_len = len(input_dict)
- for k, v in sorted(iteritems(input_dict)):
- count += 1
- if isinstance(v, list):
- temp_list.append(k)
- for each in v:
- if isinstance(each, dict):
- if [True for i in each.values() if type(i) == list]:
- new_dict_to_set(each, temp_list, test_set, count)
- else:
- new_dict_to_set(each, temp_list, test_set, 0)
- else:
- if v is not None:
- test_dict.update({k: v})
- try:
- if tuple(iteritems(test_dict)) not in test_set and count == input_dict_len:
- test_set.add(tuple(iteritems(test_dict)))
- count = 0
- except TypeError:
- temp_dict = {}
-
- def expand_dict(dict_to_expand):
- temp = dict()
- for k, v in iteritems(dict_to_expand):
- if isinstance(v, dict):
- expand_dict(v)
- else:
- if v is not None:
- temp.update({k: v})
- temp_dict.update(tuple(iteritems(temp)))
- new_dict = {k: v}
- expand_dict(new_dict)
- if tuple(iteritems(temp_dict)) not in test_set:
- test_set.add(tuple(iteritems(temp_dict)))
-
-
-def dict_to_set(sample_dict):
- # Generate a set with passed dictionary for comparison
- test_dict = dict()
- if isinstance(sample_dict, dict):
- for k, v in iteritems(sample_dict):
- if v is not None:
- if isinstance(v, list):
- if isinstance(v[0], dict):
- li = []
- for each in v:
- for key, value in iteritems(each):
- if isinstance(value, list):
- each[key] = tuple(value)
- li.append(tuple(iteritems(each)))
- v = tuple(li)
- else:
- v = tuple(v)
- elif isinstance(v, dict):
- li = []
- for key, value in iteritems(v):
- if isinstance(value, list):
- v[key] = tuple(value)
- li.extend(tuple(iteritems(v)))
- v = tuple(li)
- test_dict.update({k: v})
- return_set = set(tuple(iteritems(test_dict)))
- else:
- return_set = set(sample_dict)
- return return_set
-
-
-def filter_dict_having_none_value(want, have):
- # Generate dict with have dict value which is None in want dict
- test_dict = dict()
- name = want.get('name')
- if name:
- test_dict['name'] = name
- diff_ip = False
- for k, v in iteritems(want):
- if isinstance(v, dict):
- for key, value in iteritems(v):
- test_key_dict = dict()
- if value is None:
- dict_val = have.get(k).get(key)
- test_key_dict.update({key: dict_val})
- elif k == 'ipv6' and value.lower() != have.get(k)[0].get(key).lower():
- # as multiple IPV6 address can be configured on same
- # interface, for replace state in place update will
- # actually create new entry, which isn't as expected
- # for replace state, so in case of IPV6 address
- # every time 1st delete the existing IPV6 config and
- # then apply the new change
- dict_val = have.get(k)[0].get(key)
- test_key_dict.update({key: dict_val})
- if test_key_dict:
- test_dict.update({k: test_key_dict})
- if isinstance(v, list):
- for key, value in iteritems(v[0]):
- test_key_dict = dict()
- if value is None:
- dict_val = have.get(k).get(key)
- test_key_dict.update({key: dict_val})
- elif k == 'ipv6' and value.lower() != have.get(k)[0].get(key).lower():
- dict_val = have.get(k)[0].get(key)
- test_key_dict.update({key: dict_val})
- if test_key_dict:
- test_dict.update({k: test_key_dict})
- # below conditions checks are added to check if
- # secondary IP is configured, if yes then delete
- # the already configured IP if want and have IP
- # is different else if it's same no need to delete
- for each in v:
- if each.get('secondary'):
- want_ip = each.get('address').split('/')
- have_ip = have.get('ipv4')
- if len(want_ip) > 1 and have_ip and have_ip[0].get('secondary'):
- have_ip = have_ip[0]['address'].split(' ')[0]
- if have_ip != want_ip[0]:
- diff_ip = True
- if each.get('secondary') and diff_ip is True:
- test_key_dict.update({'secondary': True})
- test_dict.update({'ipv4': test_key_dict})
- if v is None:
- val = have.get(k)
- test_dict.update({k: val})
- return test_dict
-
-
-def remove_duplicate_interface(commands):
- # Remove duplicate interface from commands
- set_cmd = []
- for each in commands:
- if 'interface' in each:
- if each not in set_cmd:
- set_cmd.append(each)
- else:
- set_cmd.append(each)
-
- return set_cmd
-
-
-def validate_ipv4(value, module):
- if value:
- address = value.split('/')
- if len(address) != 2:
- module.fail_json(msg='address format is <ipv4 address>/<mask>, got invalid format {0}'.format(value))
-
- if not is_masklen(address[1]):
- module.fail_json(msg='invalid value for mask: {0}, mask should be in range 0-32'.format(address[1]))
-
-
-def validate_ipv6(value, module):
- if value:
- address = value.split('/')
- if len(address) != 2:
- module.fail_json(msg='address format is <ipv6 address>/<mask>, got invalid format {0}'.format(value))
- else:
- if not 0 <= int(address[1]) <= 128:
- module.fail_json(msg='invalid value for mask: {0}, mask should be in range 0-128'.format(address[1]))
-
-
-def validate_n_expand_ipv4(module, want):
- # Check if input IPV4 is valid IP and expand IPV4 with its subnet mask
- ip_addr_want = want.get('address')
- if len(ip_addr_want.split(' ')) > 1:
- return ip_addr_want
- validate_ipv4(ip_addr_want, module)
- ip = ip_addr_want.split('/')
- if len(ip) == 2:
- ip_addr_want = '{0} {1}'.format(ip[0], to_netmask(ip[1]))
-
- return ip_addr_want
-
-
-def netmask_to_cidr(netmask):
- bit_range = [128, 64, 32, 16, 8, 4, 2, 1]
- count = 0
- cidr = 0
- netmask_list = netmask.split('.')
- netmask_calc = [i for i in netmask_list if int(i) != 255 and int(i) != 0]
- if netmask_calc:
- netmask_calc_index = netmask_list.index(netmask_calc[0])
- elif sum(list(map(int, netmask_list))) == 0:
- return '32'
- else:
- return '24'
- for each in bit_range:
- if cidr == int(netmask.split('.')[2]):
- if netmask_calc_index == 1:
- return str(8 + count)
- elif netmask_calc_index == 2:
- return str(8 * 2 + count)
- elif netmask_calc_index == 3:
- return str(8 * 3 + count)
- break
- cidr += each
- count += 1
-
-
-def normalize_interface(name):
- """Return the normalized interface name
- """
- if not name:
- return
-
- def _get_number(name):
- digits = ''
- for char in name:
- if char.isdigit() or char in '/.':
- digits += char
- return digits
-
- if name.lower().startswith('gi'):
- if_type = 'GigabitEthernet'
- elif name.lower().startswith('te'):
- if_type = 'TenGigabitEthernet'
- elif name.lower().startswith('fa'):
- if_type = 'FastEthernet'
- elif name.lower().startswith('fo'):
- if_type = 'FortyGigabitEthernet'
- elif name.lower().startswith('long'):
- if_type = 'LongReachEthernet'
- elif name.lower().startswith('et'):
- if_type = 'Ethernet'
- elif name.lower().startswith('vl'):
- if_type = 'Vlan'
- elif name.lower().startswith('lo'):
- if_type = 'loopback'
- elif name.lower().startswith('po'):
- if_type = 'Port-channel'
- elif name.lower().startswith('nv'):
- if_type = 'nve'
- elif name.lower().startswith('twe'):
- if_type = 'TwentyFiveGigE'
- elif name.lower().startswith('hu'):
- if_type = 'HundredGigE'
- else:
- if_type = None
-
- number_list = name.split(' ')
- if len(number_list) == 2:
- number = number_list[-1].strip()
- else:
- number = _get_number(name)
-
- if if_type:
- proper_interface = if_type + number
- else:
- proper_interface = name
-
- return proper_interface
-
-
-def get_interface_type(interface):
- """Gets the type of interface
- """
-
- if interface.upper().startswith('GI'):
- return 'GigabitEthernet'
- elif interface.upper().startswith('TE'):
- return 'TenGigabitEthernet'
- elif interface.upper().startswith('FA'):
- return 'FastEthernet'
- elif interface.upper().startswith('FO'):
- return 'FortyGigabitEthernet'
- elif interface.upper().startswith('LON'):
- return 'LongReachEthernet'
- elif interface.upper().startswith('ET'):
- return 'Ethernet'
- elif interface.upper().startswith('VL'):
- return 'Vlan'
- elif interface.upper().startswith('LO'):
- return 'loopback'
- elif interface.upper().startswith('PO'):
- return 'Port-channel'
- elif interface.upper().startswith('NV'):
- return 'nve'
- elif interface.upper().startswith('TWE'):
- return 'TwentyFiveGigE'
- elif interface.upper().startswith('HU'):
- return 'HundredGigE'
- else:
- return 'unknown'