Skip to content

Commit 0c0d39e

Browse files
authored
Merge pull request #897 from AndryNick98/fix-inventory-set-device
bug fix on inventory set_device
2 parents c503d4f + ded9fa1 commit 0c0d39e

File tree

2 files changed

+101
-11
lines changed

2 files changed

+101
-11
lines changed

suzieq/poller/controller/source/base_source.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
from suzieq.poller.controller.utils.inventory_utils import read_inventory
1515
from suzieq.shared.exceptions import InventorySourceError
1616

17+
_DEFAULT_PORTS = {'http': 80, 'https': 443, 'ssh': 22}
18+
1719

1820
class SourceModel(InventoryPluginModel):
1921
"""Model for inventory source validation
@@ -233,14 +235,17 @@ def set_device(self, inventory: Dict[str, Dict]):
233235
devtype = self._device.get('devtype')
234236

235237
for node in inventory.values():
238+
transport_tmp = node.get('transport') or transport or 'ssh'
239+
ignore_known_hosts_tmp = node.get('ignore_known_hosts')
236240
node.update({
237241
'jump_host': node.get('jump_host') or jump_host,
238242
'jump_host_key_file': node.get('jump_host_key_file')
239243
or jump_host_key_file,
240-
'ignore_known_hosts': node.get('ignore_known_hosts')
241-
or ignore_known_hosts,
242-
'transport': node.get('transport') or transport or 'ssh',
243-
'port': node.get('port') or port or 22,
244+
'ignore_known_hosts': ignore_known_hosts_tmp if
245+
ignore_known_hosts_tmp is not None else ignore_known_hosts,
246+
'transport': transport_tmp,
247+
'port': node.get('port') or port or
248+
_DEFAULT_PORTS.get(transport_tmp),
244249
'devtype': node.get('devtype') or devtype,
245250
'slow_host': node.get('slow_host', '') or slow_host,
246251
'per_cmd_auth': ((node.get('per_cmd_auth', '') != '')

tests/unit/poller/controller/sources/test_devices.py

Lines changed: 92 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,63 @@
99
from suzieq.shared.utils import PollerTransport
1010

1111

12-
_INVENTORY = [{
12+
_INVENTORY = {
1313
'native-ns.192.168.123.123.443':
1414
{
1515
'address': '192.168.123.123',
1616
'hostname': None,
1717
'namespace': 'native-ns',
1818
'port': 443,
19+
'transport': 'https'
20+
},
21+
'native-ns.192.168.123.164.443':
22+
{
23+
'address': '192.168.123.164',
24+
'devtype': 'eos',
25+
'hostname': None,
26+
'namespace': 'native-ns',
27+
'port': 443,
28+
'ignore_known_hosts': False
29+
},
30+
'native-ns.192.168.123.111.443':
31+
{
32+
'address': '192.168.123.111',
33+
'hostname': None,
34+
'namespace': 'native-ns',
35+
'transport': 'https'
36+
},
37+
'native-ns.192.168.123.110.22':
38+
{
39+
'address': '192.168.123.110',
40+
'hostname': None,
41+
'namespace': 'native-ns',
42+
'transport': 'ssh'
43+
},
44+
'native-ns.192.168.123.143.443':
45+
{
46+
'address': '192.168.123.143',
47+
'hostname': None,
48+
'namespace': 'native-ns',
49+
'transport': 'http',
50+
'port': 443
51+
},
52+
'native-ns.192.168.123.171.22':
53+
{
54+
'address': '192.168.123.171',
55+
'hostname': None,
56+
'namespace': 'native-ns',
1957
'transport': 'http'
58+
}
59+
}
60+
61+
_RESULT_INVENTORY = {
62+
'native-ns.192.168.123.123.443':
63+
{
64+
'address': '192.168.123.123',
65+
'hostname': None,
66+
'namespace': 'native-ns',
67+
'port': 443,
68+
'transport': 'https'
2069
},
2170
'native-ns.192.168.123.164.443':
2271
{
@@ -25,9 +74,42 @@
2574
'hostname': None,
2675
'namespace': 'native-ns',
2776
'port': 443,
77+
'transport': 'ssh',
2878
'ignore_known_hosts': False
79+
},
80+
'native-ns.192.168.123.111.443':
81+
{
82+
'address': '192.168.123.111',
83+
'hostname': None,
84+
'namespace': 'native-ns',
85+
'transport': 'https',
86+
'port': 443
87+
},
88+
'native-ns.192.168.123.110.22':
89+
{
90+
'address': '192.168.123.110',
91+
'hostname': None,
92+
'namespace': 'native-ns',
93+
'transport': 'ssh',
94+
'port': 22
95+
},
96+
'native-ns.192.168.123.143.443':
97+
{
98+
'address': '192.168.123.143',
99+
'hostname': None,
100+
'namespace': 'native-ns',
101+
'transport': 'http',
102+
'port': 443
103+
},
104+
'native-ns.192.168.123.171.22':
105+
{
106+
'address': '192.168.123.171',
107+
'hostname': None,
108+
'namespace': 'native-ns',
109+
'transport': 'http',
110+
'port': 80
29111
}
30-
}]
112+
}
31113

32114

33115
def set_inventory_mock(self, inventory: Dict):
@@ -51,8 +133,9 @@ def set_inventory_mock(self, inventory: Dict):
51133
@pytest.mark.poller_unit_tests
52134
@pytest.mark.controller_unit_tests
53135
@pytest.mark.asyncio
54-
@pytest.mark.parametrize('inventory', _INVENTORY)
55-
async def test_devices_set(inventory: Dict):
136+
@pytest.mark.parametrize('inventory, result_inventory',
137+
[(_INVENTORY, _RESULT_INVENTORY)])
138+
async def test_devices_set(inventory: Dict, result_inventory: Dict):
56139
"""Test devices are correctly set
57140
58141
Args:
@@ -66,7 +149,9 @@ async def test_devices_set(inventory: Dict):
66149
'jump-host-key-file': None,
67150
'devtype': 'panos',
68151
'transport': PollerTransport.ssh,
69-
152+
'slow_host': False,
153+
'per_cmd_auth': True,
154+
'retries-on-auth-fail': 0
70155
}
71156
}
72157

@@ -80,14 +165,14 @@ async def test_devices_set(inventory: Dict):
80165

81166
# emulate what the function Source.set_device should do
82167
exp_inv = {}
83-
for key, node in inventory.items():
168+
for key, node in result_inventory.items():
84169
exp_inv[key] = node.copy()
85170
for k, v in config['device'].items():
86171
k = k.replace('-', '_')
87172
if k not in exp_inv[key]:
88173
exp_inv[key][k] = v
89174

90-
assert inv == exp_inv
175+
assert inv == exp_inv, 'inventory do not match'
91176

92177

93178
@pytest.mark.controller_device

0 commit comments

Comments
 (0)