diff options
author | Sumit Jaiswal <sjaiswal@redhat.com> | 2019-08-22 10:02:25 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-22 10:02:25 +0530 |
commit | a5a1f01d1e4800b1cd036d5b227e36ee250d7ab4 (patch) | |
tree | fd51c5b01104107e5ebb25b6a965cd4340a62e05 /lib/ansible/module_utils/network/ios/facts | |
parent | 62feb1821083d4959d65e815ee7306b41766a1c1 (diff) | |
download | ansible-a5a1f01d1e4800b1cd036d5b227e36ee250d7ab4.tar.gz |
Resource module for ios_lldp_interfaces (#61012)
* ios_lldp_interfaces resource
* fix shippable n reviews
* fix shippable
Signed-off-by: Sumit Jaiswal <sjaiswal@redhat.com>
* add enable lldp tc
Diffstat (limited to 'lib/ansible/module_utils/network/ios/facts')
3 files changed, 109 insertions, 1 deletions
diff --git a/lib/ansible/module_utils/network/ios/facts/facts.py b/lib/ansible/module_utils/network/ios/facts/facts.py index 664174e883..f514daf590 100644 --- a/lib/ansible/module_utils/network/ios/facts/facts.py +++ b/lib/ansible/module_utils/network/ios/facts/facts.py @@ -22,6 +22,7 @@ from ansible.module_utils.network.ios.facts.lag_interfaces.lag_interfaces import from ansible.module_utils.network.ios.facts.lacp.lacp import LacpFacts from ansible.module_utils.network.ios.facts.lacp_interfaces.lacp_interfaces import Lacp_InterfacesFacts from ansible.module_utils.network.ios.facts.lldp_global.lldp_global import Lldp_globalFacts +from ansible.module_utils.network.ios.facts.lldp_interfaces.lldp_interfaces import Lldp_InterfacesFacts from ansible.module_utils.network.ios.facts.legacy.base import Default, Hardware, Interfaces, Config @@ -39,7 +40,8 @@ FACT_RESOURCE_SUBSETS = dict( lag_interfaces=Lag_interfacesFacts, lacp=LacpFacts, lacp_interfaces=Lacp_InterfacesFacts, - lldp_global=Lldp_globalFacts + lldp_global=Lldp_globalFacts, + lldp_interfaces=Lldp_InterfacesFacts, ) diff --git a/lib/ansible/module_utils/network/ios/facts/lldp_interfaces/__init__.py b/lib/ansible/module_utils/network/ios/facts/lldp_interfaces/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/lib/ansible/module_utils/network/ios/facts/lldp_interfaces/__init__.py diff --git a/lib/ansible/module_utils/network/ios/facts/lldp_interfaces/lldp_interfaces.py b/lib/ansible/module_utils/network/ios/facts/lldp_interfaces/lldp_interfaces.py new file mode 100644 index 0000000000..b592eebf0b --- /dev/null +++ b/lib/ansible/module_utils/network/ios/facts/lldp_interfaces/lldp_interfaces.py @@ -0,0 +1,106 @@ +# +# -*- 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 ios_lldp_interfaces fact class +It is in this file the configuration is collected from the device +for a given resource, parsed, and the facts tree is populated +based on the configuration. +""" + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +import re +from copy import deepcopy +from ansible.module_utils.network.common import utils +from ansible.module_utils.network.ios.utils.utils import get_interface_type, normalize_interface +from ansible.module_utils.network.ios.argspec.lldp_interfaces.lldp_interfaces import Lldp_InterfacesArgs + + +class Lldp_InterfacesFacts(object): + """ The ios_lldp_interfaces fact class + """ + + def __init__(self, module, subspec='config', options='options'): + + self._module = module + self.argument_spec = Lldp_InterfacesArgs.argument_spec + spec = deepcopy(self.argument_spec) + if subspec: + if options: + facts_argument_spec = spec[subspec][options] + else: + facts_argument_spec = spec[subspec] + else: + facts_argument_spec = spec + + self.generated_spec = utils.generate_dict(facts_argument_spec) + + def populate_facts(self, connection, ansible_facts, data=None): + """ Populate the facts for lldp_interfaces + :param connection: the device connection + :param ansible_facts: Facts dictionary + :param data: previously collected conf + :rtype: dictionary + :returns: facts + """ + if connection: + pass + + objs = [] + if not data: + data = connection.get('show lldp interface') + # operate on a collection of resource x + config = data.split('\n\n') + + for conf in config: + if conf: + obj = self.render_config(self.generated_spec, conf) + if obj: + objs.append(obj) + facts = {} + + if objs: + facts['lldp_interfaces'] = [] + params = utils.validate_config(self.argument_spec, {'config': objs}) + for cfg in params['config']: + facts['lldp_interfaces'].append(utils.remove_empties(cfg)) + ansible_facts['ansible_network_resources'].update(facts) + + return ansible_facts + + def render_config(self, spec, conf): + """ + Render config as dictionary structure and delete keys + from spec for null values + + :param spec: The facts tree, generated from the argspec + :param conf: The configuration + :rtype: dictionary + :returns: The generated config + """ + config = deepcopy(spec) + match = re.search(r'^(\S+)(:)', conf) + intf = match.group(1) + + if get_interface_type(intf) == 'unknown': + return {} + if intf.lower().startswith('gi'): + config['name'] = normalize_interface(intf) + receive = utils.parse_conf_arg(conf, 'Rx:') + transmit = utils.parse_conf_arg(conf, 'Tx:') + + if receive == 'enabled': + config['receive'] = True + elif receive == 'disabled': + config['receive'] = False + if transmit == 'enabled': + config['transmit'] = True + elif transmit == 'disabled': + config['transmit'] = False + + return utils.remove_empties(config) |