diff options
author | Ansible Core Team <info@ansible.com> | 2020-03-09 09:40:36 +0000 |
---|---|---|
committer | Ansible Core Team <info@ansible.com> | 2020-03-09 09:40:36 +0000 |
commit | 1915feadd5aede002d5036a52fd7f77c90bd91c2 (patch) | |
tree | ec6e1d474d77a6e16bc38f4583223e9cfd60bab5 /lib/ansible/module_utils/network/junos/config/interfaces/interfaces.py | |
parent | e1b850b0712dceb781e63e3bae2ba0276bb8c004 (diff) | |
download | ansible-1915feadd5aede002d5036a52fd7f77c90bd91c2.tar.gz |
Migrated to junipernetworks.junos
Diffstat (limited to 'lib/ansible/module_utils/network/junos/config/interfaces/interfaces.py')
-rw-r--r-- | lib/ansible/module_utils/network/junos/config/interfaces/interfaces.py | 238 |
1 files changed, 0 insertions, 238 deletions
diff --git a/lib/ansible/module_utils/network/junos/config/interfaces/interfaces.py b/lib/ansible/module_utils/network/junos/config/interfaces/interfaces.py deleted file mode 100644 index ea0441041b..0000000000 --- a/lib/ansible/module_utils/network/junos/config/interfaces/interfaces.py +++ /dev/null @@ -1,238 +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 junos_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.utils import to_list - -from ansible.module_utils.network.common.cfg.base import ConfigBase -from ansible.module_utils.network.junos.junos import locked_config, load_config, commit_configuration, discard_changes, tostring -from ansible.module_utils.network.junos.facts.facts import Facts -from ansible.module_utils.network.common.netconf import build_root_xml_node, build_child_xml_node - - -class Interfaces(ConfigBase): - """ - The junos_interfaces class - """ - - gather_subset = [ - '!all', - '!min', - ] - - gather_network_resources = [ - 'interfaces', - ] - - def __init__(self, module): - super(Interfaces, self).__init__(module) - - def get_interfaces_facts(self): - """ 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) - interfaces_facts = facts['ansible_network_resources'].get('interfaces') - if not interfaces_facts: - return [] - return interfaces_facts - - def execute_module(self): - """ Execute the module - - :rtype: A dictionary - :returns: The result from module execution - """ - result = {'changed': False} - - existing_interfaces_facts = self.get_interfaces_facts() - - config_xmls = self.set_config(existing_interfaces_facts) - with locked_config(self._module): - for config_xml in to_list(config_xmls): - diff = load_config(self._module, config_xml, []) - - commit = not self._module.check_mode - if diff: - if commit: - commit_configuration(self._module) - else: - discard_changes(self._module) - result['changed'] = True - - if self._module._diff: - result['diff'] = {'prepared': diff} - - result['commands'] = config_xmls - - changed_interfaces_facts = self.get_interfaces_facts() - - result['before'] = existing_interfaces_facts - if result['changed']: - result['after'] = changed_interfaces_facts - - return result - - def set_config(self, existing_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 - """ - want = self._module.params['config'] - have = existing_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 list xml configuration necessary to migrate the current configuration - to the desired configuration - """ - root = build_root_xml_node('interfaces') - state = self._module.params['state'] - if state == 'overridden': - config_xmls = self._state_overridden(want, have) - elif state == 'deleted': - config_xmls = self._state_deleted(want, have) - elif state == 'merged': - config_xmls = self._state_merged(want, have) - elif state == 'replaced': - config_xmls = self._state_replaced(want, have) - - for xml in config_xmls: - root.append(xml) - - return tostring(root) - - def _state_replaced(self, want, have): - """ The xml configuration generator when state is replaced - - :rtype: A list - :returns: the xml configuration necessary to migrate the current configuration - to the desired configuration - """ - intf_xml = [] - intf_xml.extend(self._state_deleted(want, have)) - intf_xml.extend(self._state_merged(want, have)) - - return intf_xml - - def _state_overridden(self, want, have): - """ The xml configuration generator when state is overridden - - :rtype: A list - :returns: the xml configuration necessary to migrate the current configuration - to the desired configuration - """ - interface_xmls_obj = [] - # replace interface config with data in want - interface_xmls_obj.extend(self._state_replaced(want, have)) - - # delete interface config if interface in have not present in want - delete_obj = [] - for have_obj in have: - for want_obj in want: - if have_obj['name'] == want_obj['name']: - break - else: - delete_obj.append(have_obj) - - if delete_obj: - interface_xmls_obj.extend(self._state_deleted(delete_obj, have)) - return interface_xmls_obj - - def _state_merged(self, want, have): - """ The xml configuration generator when state is merged - - :rtype: A list - :returns: the xml configuration necessary to merge the provided into - the current configuration - """ - intf_xml = [] - - for config in want: - intf = build_root_xml_node('interface') - build_child_xml_node(intf, 'name', config['name']) - - intf_fields = ['description', 'speed'] - if not config['name'].startswith('fxp'): - intf_fields.append('mtu') - for field in intf_fields: - if config.get(field): - build_child_xml_node(intf, field, config[field]) - - if config.get('duplex'): - build_child_xml_node(intf, 'link-mode', config['duplex']) - - if config.get('enabled') is False: - build_child_xml_node(intf, 'disable') - - holdtime = config.get('hold_time') - if holdtime: - holdtime_ele = build_child_xml_node(intf, 'hold-time') - - for holdtime_field in ['up', 'down']: - build_child_xml_node(holdtime_ele, holdtime_field, holdtime.get(holdtime_field, '')) - intf_xml.append(intf) - - return intf_xml - - def _state_deleted(self, want, have): - """ The xml configuration generator when state is deleted - - :rtype: A list - :returns: the xml configuration necessary to remove the current configuration - of the provided objects - """ - intf_xml = [] - intf_obj = want - - if not intf_obj: - # delete base interfaces attribute from all the existing interface - intf_obj = have - - for config in intf_obj: - intf = build_root_xml_node('interface') - build_child_xml_node(intf, 'name', config['name']) - - intf_fields = ['description'] - if not config['name'].startswith('lo'): - intf_fields.append('speed') - - if not any([config['name'].startswith('fxp'), config['name'].startswith('lo')]): - intf_fields.append('mtu') - - for field in intf_fields: - build_child_xml_node(intf, field, None, {'delete': 'delete'}) - - if not config['name'].startswith('lo'): - build_child_xml_node(intf, 'link-mode', None, {'delete': 'delete'}) - - build_child_xml_node(intf, 'disable', None, {'delete': 'delete'}) - - holdtime_ele = build_child_xml_node(intf, 'hold-time') - for holdtime_field in ['up', 'down']: - build_child_xml_node(holdtime_ele, holdtime_field, None, {'delete': 'delete'}) - intf_xml.append(intf) - - return intf_xml |