summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDennis Israelsson <dennis.israelsson@gmail.com>2018-08-27 14:51:33 +0200
committerNathaniel Case <this.is@nathanielca.se>2018-08-27 08:51:33 -0400
commit49f692b08f2a5d8ef3588be0e9931683a342f9bd (patch)
treec647ef33e0525628fe573f892f4c22abb349e505
parent1fac494d8c5d661f7a49cb6ab5acb8c069f3307c (diff)
downloadansible-49f692b08f2a5d8ef3588be0e9931683a342f9bd.tar.gz
ios_vrf speed fix (#43765)
-rw-r--r--lib/ansible/modules/network/ios/ios_vrf.py21
1 files changed, 14 insertions, 7 deletions
diff --git a/lib/ansible/modules/network/ios/ios_vrf.py b/lib/ansible/modules/network/ios/ios_vrf.py
index 9d01ff4de0..e7173237d4 100644
--- a/lib/ansible/modules/network/ios/ios_vrf.py
+++ b/lib/ansible/modules/network/ios/ios_vrf.py
@@ -405,12 +405,16 @@ def parse_rd(configobj, name):
return match.group(1)
-def parse_interfaces(configobj, name):
- vrf_cfg = 'vrf forwarding %s' % name
- interfaces = list()
- for intf in re.findall('^interface .+', str(configobj), re.M):
- if vrf_cfg in '\n'.join(configobj[intf].children):
- interfaces.append(intf.split(' ')[1])
+def parse_interfaces(configobj):
+ vrf_cfg = 'vrf forwarding'
+ interfaces = dict()
+ for intf in set(re.findall('^interface .+', str(configobj), re.M)):
+ for line in configobj[intf].children:
+ if vrf_cfg in line:
+ try:
+ interfaces[line.split()[-1]].append(intf.split(' ')[1])
+ except KeyError:
+ interfaces[line.split()[-1]] = [intf.split(' ')[1]]
return interfaces
@@ -507,13 +511,16 @@ def map_config_to_obj(module):
return list()
instances = list()
+
+ interfaces = parse_interfaces(configobj)
+
for item in set(match):
obj = {
'name': item,
'state': 'present',
'description': parse_description(configobj, item),
'rd': parse_rd(configobj, item),
- 'interfaces': parse_interfaces(configobj, item),
+ 'interfaces': interfaces.get(item),
'route_import': parse_import(configobj, item),
'route_export': parse_export(configobj, item),
'route_both': parse_both(configobj, item),