routeros_facts: fix for error when there's more than 10 interfaces (#61376)
* fix: proper regex for preprocessing routeros output * test: regression test * test: fix nondeterministic unit test
This commit is contained in:
parent
c5a4086ed7
commit
fa03f438e7
4 changed files with 37 additions and 10 deletions
|
@ -246,6 +246,7 @@ class Interfaces(FactsBase):
|
||||||
]
|
]
|
||||||
|
|
||||||
DETAIL_RE = re.compile(r'([\w\d\-]+)=\"?(\w{3}/\d{2}/\d{4}\s\d{2}:\d{2}:\d{2}|[\w\d\-\.:/]+)')
|
DETAIL_RE = re.compile(r'([\w\d\-]+)=\"?(\w{3}/\d{2}/\d{4}\s\d{2}:\d{2}:\d{2}|[\w\d\-\.:/]+)')
|
||||||
|
WRAPPED_LINE_RE = re.compile(r'^\s+(?!\d)')
|
||||||
|
|
||||||
def populate(self):
|
def populate(self):
|
||||||
super(Interfaces, self).populate()
|
super(Interfaces, self).populate()
|
||||||
|
@ -307,8 +308,8 @@ class Interfaces(FactsBase):
|
||||||
for line in data.split('\n'):
|
for line in data.split('\n'):
|
||||||
if len(line) == 0 or line[:5] == 'Flags':
|
if len(line) == 0 or line[:5] == 'Flags':
|
||||||
continue
|
continue
|
||||||
elif re.match(r'\s\d', line[:2]):
|
elif not re.match(self.WRAPPED_LINE_RE, line):
|
||||||
preprocessed.append(line[2:])
|
preprocessed.append(line)
|
||||||
else:
|
else:
|
||||||
preprocessed[-1] += line
|
preprocessed[-1] += line
|
||||||
return preprocessed
|
return preprocessed
|
||||||
|
|
|
@ -3,5 +3,32 @@ Flags: D - dynamic, X - disabled, R - running, S - slave
|
||||||
mac-address=00:1C:42:36:52:90 last-link-up-time=sep/25/2018 06:30:04
|
mac-address=00:1C:42:36:52:90 last-link-up-time=sep/25/2018 06:30:04
|
||||||
link-downs=0
|
link-downs=0
|
||||||
1 R name="ether2" default-name="ether2" type="ether" mtu=1500 actual-mtu=1500
|
1 R name="ether2" default-name="ether2" type="ether" mtu=1500 actual-mtu=1500
|
||||||
mac-address=00:1C:42:36:52:90 last-link-up-time=sep/25/2018 06:30:04
|
mac-address=00:1C:42:36:52:91 last-link-up-time=sep/25/2018 06:30:04
|
||||||
|
link-downs=0
|
||||||
|
2 R name="ether3" default-name="ether3" type="ether" mtu=1500 actual-mtu=1500
|
||||||
|
mac-address=00:1C:42:36:52:92 last-link-up-time=sep/25/2018 06:30:04
|
||||||
|
link-downs=0
|
||||||
|
3 R name="ether4" default-name="ether4" type="ether" mtu=1500 actual-mtu=1500
|
||||||
|
mac-address=00:1C:42:36:52:93 last-link-up-time=sep/25/2018 06:30:04
|
||||||
|
link-downs=0
|
||||||
|
4 R name="ether5" default-name="ether5" type="ether" mtu=1500 actual-mtu=1500
|
||||||
|
mac-address=00:1C:42:36:52:94 last-link-up-time=sep/25/2018 06:30:04
|
||||||
|
link-downs=0
|
||||||
|
5 R name="ether6" default-name="ether6" type="ether" mtu=1500 actual-mtu=1500
|
||||||
|
mac-address=00:1C:42:36:52:95 last-link-up-time=sep/25/2018 06:30:04
|
||||||
|
link-downs=0
|
||||||
|
6 R name="ether7" default-name="ether7" type="ether" mtu=1500 actual-mtu=1500
|
||||||
|
mac-address=00:1C:42:36:52:96 last-link-up-time=sep/25/2018 06:30:04
|
||||||
|
link-downs=0
|
||||||
|
7 R name="ether8" default-name="ether8" type="ether" mtu=1500 actual-mtu=1500
|
||||||
|
mac-address=00:1C:42:36:52:97 last-link-up-time=sep/25/2018 06:30:04
|
||||||
|
link-downs=0
|
||||||
|
8 R name="ether9" default-name="ether9" type="ether" mtu=1500 actual-mtu=1500
|
||||||
|
mac-address=00:1C:42:36:52:98 last-link-up-time=sep/25/2018 06:30:04
|
||||||
|
link-downs=0
|
||||||
|
9 R name="ether10" default-name="ether10" type="ether" mtu=1500 actual-mtu=1500
|
||||||
|
mac-address=00:1C:42:36:52:99 last-link-up-time=sep/25/2018 06:30:04
|
||||||
|
link-downs=0
|
||||||
|
10 R name="pppoe" default-name="pppoe" type="ppp" mtu=1500 actual-mtu=1500
|
||||||
|
mac-address=00:1C:42:36:52:00 last-link-up-time=sep/25/2018 06:30:04
|
||||||
link-downs=0
|
link-downs=0
|
||||||
|
|
|
@ -5,3 +5,6 @@ Flags: X - disabled, I - invalid, D - dynamic
|
||||||
|
|
||||||
1 D address=10.37.129.3/24 network=10.37.129.0 interface=ether1
|
1 D address=10.37.129.3/24 network=10.37.129.0 interface=ether1
|
||||||
actual-interface=ether1
|
actual-interface=ether1
|
||||||
|
|
||||||
|
2 D address=10.37.0.0/24 network=10.37.0.1 interface=pppoe
|
||||||
|
actual-interface=pppoe
|
||||||
|
|
|
@ -91,12 +91,8 @@ class TestRouterosFactsModule(TestRouterosModule):
|
||||||
def test_routeros_facts_interfaces(self):
|
def test_routeros_facts_interfaces(self):
|
||||||
set_module_args(dict(gather_subset='interfaces'))
|
set_module_args(dict(gather_subset='interfaces'))
|
||||||
result = self.execute_module()
|
result = self.execute_module()
|
||||||
self.assertEqual(
|
self.assertIn(
|
||||||
result['ansible_facts']['ansible_net_all_ipv4_addresses'][0], '10.37.129.3'
|
result['ansible_facts']['ansible_net_all_ipv4_addresses'][0], ['10.37.129.3', '10.37.0.0']
|
||||||
)
|
|
||||||
self.assertEqual(
|
|
||||||
result['ansible_facts']['ansible_net_all_ipv4_addresses'][0],
|
|
||||||
result['ansible_facts']['ansible_net_interfaces']['ether1']['ipv4'][0]['address']
|
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
result['ansible_facts']['ansible_net_all_ipv6_addresses'], ['fe80::21c:42ff:fe36:5290']
|
result['ansible_facts']['ansible_net_all_ipv6_addresses'], ['fe80::21c:42ff:fe36:5290']
|
||||||
|
@ -106,7 +102,7 @@ class TestRouterosFactsModule(TestRouterosModule):
|
||||||
result['ansible_facts']['ansible_net_interfaces']['ether1']['ipv6'][0]['address']
|
result['ansible_facts']['ansible_net_interfaces']['ether1']['ipv6'][0]['address']
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
len(result['ansible_facts']['ansible_net_interfaces'].keys()), 2
|
len(result['ansible_facts']['ansible_net_interfaces'].keys()), 11
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
len(result['ansible_facts']['ansible_net_neighbors'].keys()), 4
|
len(result['ansible_facts']['ansible_net_neighbors'].keys()), 4
|
||||||
|
|
Loading…
Reference in a new issue