summaryrefslogtreecommitdiff
path: root/lib/ansible/module_utils/network/ios/facts
diff options
context:
space:
mode:
authorSumit Jaiswal <sjaiswal@redhat.com>2019-08-22 10:02:25 +0530
committerGitHub <noreply@github.com>2019-08-22 10:02:25 +0530
commita5a1f01d1e4800b1cd036d5b227e36ee250d7ab4 (patch)
treefd51c5b01104107e5ebb25b6a965cd4340a62e05 /lib/ansible/module_utils/network/ios/facts
parent62feb1821083d4959d65e815ee7306b41766a1c1 (diff)
downloadansible-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')
-rw-r--r--lib/ansible/module_utils/network/ios/facts/facts.py4
-rw-r--r--lib/ansible/module_utils/network/ios/facts/lldp_interfaces/__init__.py0
-rw-r--r--lib/ansible/module_utils/network/ios/facts/lldp_interfaces/lldp_interfaces.py106
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)