Skip to content

Commit

Permalink
added facts code
Browse files Browse the repository at this point in the history
  • Loading branch information
AAYUSH2091 committed Nov 11, 2024
1 parent eb0c29e commit b2ba305
Showing 1 changed file with 46 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,39 +8,43 @@
__metaclass__ = type

"""
The ios vrf_interfaces fact class
It is in this file the configuration is collected from the device
The cisco.ios vrf_interfaces facts class
It is in this file that the configuration is collected from the device
for a given resource, parsed, and the facts tree is populated
based on the configuration.
"""

from copy import deepcopy
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common import utils

from ansible.module_utils.six import iteritems
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common import (
utils,
from ansible_collections.cisco.ios.plugins.module_utils.network.ios.argspec.vrf_interfaces.vrf_interfaces import (
Vrf_interfacesArgs,
)
from ansible_collections.cisco.ios.plugins.module_utils.network.ios.rm_templates.vrf_interfaces import (
Vrf_interfacesTemplate,
)
from ansible_collections.cisco.ios.plugins.module_utils.network.ios.argspec.vrf_interfaces.vrf_interfaces import (
Vrf_interfacesArgs,
)


class Vrf_interfacesFacts(object):
""" The ios vrf_interfaces facts class
"""
"""The cisco.ios vrf_interfaces facts class"""

def __init__(self, module, subspec='config', options='options'):
def __init__(self, module, subspec="config", options="options"):
self._module = module
self.argument_spec = Vrf_interfacesArgs.argument_spec

def get_vrf_interfaces_data(self, connection):
"""Fetch the configuration data for VRF interfaces.
:param connection: The device connection object
:returns: The raw configuration data from the device
"""
return connection.get("show running-config | section ^interface")

def populate_facts(self, connection, ansible_facts, data=None):
""" Populate the facts for Vrf_interfaces network resource
"""Populate the facts for Vrf_interfaces network resource
:param connection: the device connection
:param ansible_facts: Facts dictionary
:param data: previously collected conf
:param data: previously collected config (optional)
:rtype: dictionary
:returns: facts
Expand All @@ -49,19 +53,39 @@ def populate_facts(self, connection, ansible_facts, data=None):
objs = []

if not data:
data = connection.get()
data = self.get_vrf_interfaces_data(connection)

# Parse native config using the Vrf_interfaces template
vrf_interfaces_parser = Vrf_interfacesTemplate(
lines=data.splitlines(),
module=self._module,
)

objs = vrf_interfaces_parser.parse()
final_objs = []

for key, value in objs.items():
# Adjust VRF data if necessary, similar to how address families were handled
if "vrf" in value:
value["vrf"] = value["vrf"] # Could be expanded if more processing is needed

# parse native config using the Vrf_interfaces template
vrf_interfaces_parser = Vrf_interfacesTemplate(lines=data.splitlines(), module=self._module)
objs = list(vrf_interfaces_parser.parse().values())
if value:
value = utils.remove_empties(value)
final_objs.append(value)

ansible_facts['ansible_network_resources'].pop('vrf_interfaces', None)
# Ensure previous facts are removed to avoid duplication
ansible_facts["ansible_network_resources"].pop("vrf_interfaces", None)

params = utils.remove_empties(
vrf_interfaces_parser.validate_config(self.argument_spec, {"config": objs}, redact=True)
vrf_interfaces_parser.validate_config(
self.argument_spec,
{"config": final_objs},
redact=True,
),
)

facts['vrf_interfaces'] = params['config']
ansible_facts['ansible_network_resources'].update(facts)
# Update the ansible_facts dictionary with the VRF interface facts
facts["vrf_interfaces"] = params.get("config", [])
ansible_facts["ansible_network_resources"].update(facts)

return ansible_facts

0 comments on commit b2ba305

Please sign in to comment.