Skip to content

Commit dc142ec

Browse files
Afonne-CIDmnaser
authored andcommitted
Cast numeric Netmiko kwargs to native types.
Convert port/timeout options from str to int/float, fixing type errors raised by ConnectHandler. Closes-Bug: #2110111 Change-Id: I9a4a1f857d2ace7c87cfbd6ed56356c1ed227caf Signed-off-by: Afonne-CID <afonnepaulc@gmail.com> (cherry picked from commit d26adb8)
1 parent b6bb46a commit dc142ec

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

networking_generic_switch/devices/netmiko_devices/__init__.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,31 @@ def __init__(self, device_cfg, *args, **kwargs):
119119
self.config['session_log_record_writes'] = True
120120
self.config['session_log_file_mode'] = 'append'
121121

122+
_NUMERIC_CAST = {
123+
"port": int,
124+
"global_delay_factor": float,
125+
"conn_timeout": float,
126+
"auth_timeout": float,
127+
"banner_timeout": float,
128+
"blocking_timeout": float,
129+
"timeout": float,
130+
"session_timeout": float,
131+
"read_timeout_override": float,
132+
"keepalive": int,
133+
}
134+
135+
for key, expected_type in _NUMERIC_CAST.items():
136+
value = self.config.get(key)
137+
if isinstance(value, str):
138+
try:
139+
self.config[key] = expected_type(value)
140+
except ValueError:
141+
LOG.error(
142+
"Invalid value %s for %s; expected %s",
143+
value, key, expected_type.__name__,
144+
)
145+
raise exc.GenericSwitchNetmikoConfigError()
146+
122147
self.lock_kwargs = {
123148
'locks_pool_size': int(self.ngs_config['ngs_max_connections']),
124149
'locks_prefix': self.config.get(

networking_generic_switch/tests/unit/test_devices.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,3 +218,24 @@ def test__get_ssh_disabled_algorithms(self):
218218
"ciphers": ["blowfish-cbc", "3des-cbc"],
219219
}
220220
self.assertEqual(expected, algos)
221+
222+
def test_float_params_cast(self):
223+
config = {
224+
"device_type": 'netmiko_ovs_linux',
225+
"ip": "10.1.2.3",
226+
"username": "u",
227+
"password": "p",
228+
"conn_timeout": "20.0",
229+
"global_delay_factor": "2.5",
230+
"port": "2222",
231+
}
232+
device = devices.device_manager(config)
233+
234+
self.assertIsInstance(device.config["conn_timeout"], float)
235+
self.assertEqual(device.config["conn_timeout"], 20.0)
236+
237+
self.assertIsInstance(device.config["global_delay_factor"], float)
238+
self.assertEqual(device.config["global_delay_factor"], 2.5)
239+
240+
self.assertIsInstance(device.config["port"], int)
241+
self.assertEqual(device.config["port"], 2222)

0 commit comments

Comments
 (0)