summaryrefslogtreecommitdiff
path: root/lib/ansible/module_utils/network/nxos/config/lldp_interfaces/lldp_interfaces.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ansible/module_utils/network/nxos/config/lldp_interfaces/lldp_interfaces.py')
-rw-r--r--lib/ansible/module_utils/network/nxos/config/lldp_interfaces/lldp_interfaces.py304
1 files changed, 0 insertions, 304 deletions
diff --git a/lib/ansible/module_utils/network/nxos/config/lldp_interfaces/lldp_interfaces.py b/lib/ansible/module_utils/network/nxos/config/lldp_interfaces/lldp_interfaces.py
deleted file mode 100644
index 37e29ae5c6..0000000000
--- a/lib/ansible/module_utils/network/nxos/config/lldp_interfaces/lldp_interfaces.py
+++ /dev/null
@@ -1,304 +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)
-"""
-The nxos_lldp_interfaces class
-It is in this file where the current configuration (as dict)
-is compared to the provided configuration (as dict) and the command set
-necessary to bring the current configuration to it's desired end-state is
-created
-"""
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-from ansible.module_utils.network.common.cfg.base import ConfigBase
-from ansible.module_utils.network.common.utils import to_list, remove_empties, dict_diff
-from ansible.module_utils.network.nxos.facts.facts import Facts
-from ansible.module_utils.network.nxos.utils.utils import flatten_dict, search_obj_in_list, get_interface_type, normalize_interface
-
-
-class Lldp_interfaces(ConfigBase):
- """
- The nxos_lldp_interfaces class
- """
-
- gather_subset = [
- '!all',
- '!min',
- ]
-
- gather_network_resources = [
- 'lldp_interfaces',
- ]
-
- def __init__(self, module):
- super(Lldp_interfaces, self).__init__(module)
-
- def get_lldp_interfaces_facts(self, data=None):
- """ Get the 'facts' (the current configuration)
-
- :rtype: A dictionary
- :returns: The current configuration as a dictionary
- """
- facts, _warnings = Facts(self._module).get_facts(
- self.gather_subset, self.gather_network_resources, data=data)
- lldp_interfaces_facts = facts['ansible_network_resources'].get(
- 'lldp_interfaces')
- if not lldp_interfaces_facts:
- return []
- return lldp_interfaces_facts
-
- def edit_config(self, commands):
- """Wrapper method for `_connection.edit_config()`
- This exists solely to allow the unit test framework to mock device connection calls.
- """
- return self._connection.edit_config(commands)
-
- def execute_module(self):
- """ Execute the module
-
- :rtype: A dictionary
- :returns: The result from module execution
- """
- result = {'changed': False}
- commands = list()
- warnings = list()
- state = self._module.params['state']
- action_states = ['merged', 'replaced', 'deleted', 'overridden']
-
- if state == 'gathered':
- result['gathered'] = self.get_lldp_interfaces_facts()
- elif state == 'rendered':
- result['rendered'] = self.set_config({})
- elif state == 'parsed':
- result['parsed'] = self.set_config({})
- else:
- existing_lldp_interfaces_facts = self.get_lldp_interfaces_facts()
- commands.extend(self.set_config(existing_lldp_interfaces_facts))
- if commands and state in action_states:
- if not self._module.check_mode:
- self._connection.edit_config(commands)
- result['changed'] = True
- result['before'] = existing_lldp_interfaces_facts
- result['commands'] = commands
- result['commands'] = commands
-
- changed_lldp_interfaces_facts = self.get_lldp_interfaces_facts()
-
- if result['changed']:
- result['after'] = changed_lldp_interfaces_facts
-
- result['warnings'] = warnings
- return result
-
- def set_config(self, existing_lldp_interfaces_facts):
- """ Collect the configuration from the args passed to the module,
- collect the current configuration (as a dict from facts)
-
- :rtype: A list
- :returns: the commands necessary to migrate the current configuration
- to the desired configuration
- """
- config = self._module.params['config']
- want = []
- if config:
- for w in config:
- if get_interface_type(w['name']) not in ('management',
- 'ethernet'):
- self._module.fail_json(
- msg='This module works with either management or ethernet')
- w.update({'name': normalize_interface(w['name'])})
- want.append(remove_empties(w))
- have = existing_lldp_interfaces_facts
- resp = self.set_state(want, have)
- return to_list(resp)
-
- def set_state(self, want, have):
- """ Select the appropriate function based on the state provided
-
- :param want: the desired configuration as a dictionary
- :param have: the current configuration as a dictionary
- :rtype: A list
- :returns: the commands necessary to migrate the current configuration
- to the desired configuration
- """
- commands = []
- state = self._module.params['state']
- if state == 'overridden':
- commands = self._state_overridden(want, have)
- elif state == 'deleted':
- commands = self._state_deleted(want, have)
- elif state == 'rendered':
- commands = self._state_rendered(want)
- elif state == 'parsed':
- want = self._module.params['running_config']
- commands = self._state_parsed(want)
- else:
- for w in want:
- if state == 'merged':
- commands.extend(self._state_merged(flatten_dict(w), have))
- elif state == 'replaced':
- commands.extend(self._state_replaced(
- flatten_dict(w), have))
- return commands
-
- def _state_parsed(self, want):
- return self.get_lldp_interfaces_facts(want)
-
- def _state_rendered(self, want):
- commands = []
- for w in want:
- commands.extend(self.set_commands(w, {}))
- return commands
-
- def _state_gathered(self, have):
- """ The command generator when state is gathered
-
- :rtype: A list
- :returns: the commands necessary to reproduce the current configuration
- """
- commands = []
- want = {}
- commands.append(self.set_commands(want, have))
- return commands
-
- def _state_replaced(self, want, have):
- """ The command generator when state is replaced
-
- :rtype: A list
- :returns: the commands necessary to migrate the current configuration
- to the desired configuration
- """
- commands = []
- del_commands = []
- delete_dict = {}
- obj_in_have = flatten_dict(
- search_obj_in_list(want['name'], have, 'name'))
- for k1 in obj_in_have.keys():
- if k1 not in want.keys():
- delete_dict.update({k1: obj_in_have[k1]})
-
- if delete_dict:
- delete_dict.update({'name': want['name']})
- del_commands = self.del_commands(delete_dict)
- merged_commands = self.set_commands(want, have)
-
- if merged_commands:
- cmds = set(del_commands).intersection(set(merged_commands))
- for cmd in cmds:
- merged_commands.remove(cmd)
-
- commands.extend(del_commands)
- commands.extend(merged_commands)
- return commands
-
- def _state_overridden(self, want, have):
- """ The command generator when state is overridden
-
- :rtype: A list
- :returns: the commands necessary to migrate the current configuration
- to the desired configuration
- """
- commands = []
- want_intfs = [w['name'] for w in want]
- for h in have:
- h = flatten_dict(h)
- delete_dict = {}
- if h['name'] in want_intfs:
- for w in want:
- if w['name'] == h['name']:
- delete_keys = list(set(h) - set(flatten_dict(w)))
- for k in delete_keys:
- delete_dict.update({k: h[k]})
- delete_dict.update({'name': h['name']})
- break
- else:
- delete_dict.update(h)
- commands.extend(self.del_commands(delete_dict))
- for w in want:
- commands.extend(self.set_commands(flatten_dict(w), have))
- return commands
-
- def _state_merged(self, want, have):
- """ The command generator when state is merged
-
- :rtype: A list
- :returns: the commands necessary to merge the provided into
- the current configuration
- """
- return self.set_commands(want, have)
-
- def _state_deleted(self, want, have):
- """ The command generator when state is deleted
-
- :rtype: A list
- :returns: the commands necessary to remove the current configuration
- of the provided objects
- """
- commands = []
- if want:
- for w in want:
- obj_in_have = flatten_dict(
- search_obj_in_list(w['name'], have, 'name'))
- commands.extend(self.del_commands(obj_in_have))
- else:
- if not have:
- return commands
- for h in have:
- commands.extend(self.del_commands(flatten_dict(h)))
- return commands
-
- def set_commands(self, want, have):
- commands = []
- obj_in_have = flatten_dict(
- search_obj_in_list(want['name'], have, 'name'))
- if not obj_in_have:
- commands = self.add_commands(flatten_dict(want))
- else:
- diff = dict_diff(obj_in_have, want)
- if diff:
- diff.update({'name': want['name']})
- commands = self.add_commands(diff)
- return commands
-
- def add_commands(self, d):
- commands = []
- if not d:
- return commands
- commands.append('interface ' + d['name'])
- if 'transmit' in d:
- if (d['transmit']):
- commands.append('lldp transmit')
- else:
- commands.append('no lldp transmit')
- if 'receive' in d:
- if (d['receive']):
- commands.append('lldp receive')
- else:
- commands.append('no lldp receive')
- if 'management_address' in d:
- commands.append('lldp tlv-set management-address ' +
- d['management_address'])
- if 'vlan' in d:
- commands.append('lldp tlv-set vlan ' + str(d['vlan']))
-
- return commands
-
- def del_commands(self, obj):
- commands = []
- if not obj or len(obj.keys()) == 1:
- return commands
- commands.append('interface ' + obj['name'])
- if 'transmit' in obj:
- commands.append('lldp transmit')
- if 'receive' in obj:
- commands.append('lldp receive')
- if 'management_address' in obj:
- commands.append('no lldp tlv-set management-address ' +
- obj['management_address'])
- if 'vlan' in obj:
- commands.append('no lldp tlv-set vlan ' + str(obj['vlan']))
-
- return commands