Skip to content

Commit 0d3c3da

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Cast numeric Netmiko kwargs to native types."
2 parents 92b7a48 + d26adb8 commit 0d3c3da

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
@@ -144,6 +144,31 @@ def __init__(self, device_cfg, *args, **kwargs):
144144
self.config['session_log_record_writes'] = True
145145
self.config['session_log_file_mode'] = 'append'
146146

147+
_NUMERIC_CAST = {
148+
"port": int,
149+
"global_delay_factor": float,
150+
"conn_timeout": float,
151+
"auth_timeout": float,
152+
"banner_timeout": float,
153+
"blocking_timeout": float,
154+
"timeout": float,
155+
"session_timeout": float,
156+
"read_timeout_override": float,
157+
"keepalive": int,
158+
}
159+
160+
for key, expected_type in _NUMERIC_CAST.items():
161+
value = self.config.get(key)
162+
if isinstance(value, str):
163+
try:
164+
self.config[key] = expected_type(value)
165+
except ValueError:
166+
LOG.error(
167+
"Invalid value %s for %s; expected %s",
168+
value, key, expected_type.__name__,
169+
)
170+
raise exc.GenericSwitchNetmikoConfigError()
171+
147172
self.lock_kwargs = {
148173
'locks_pool_size': int(self.ngs_config['ngs_max_connections']),
149174
'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
@@ -267,3 +267,24 @@ def test__get_ssh_disabled_algorithms(self):
267267
"ciphers": ["blowfish-cbc", "3des-cbc"],
268268
}
269269
self.assertEqual(expected, algos)
270+
271+
def test_float_params_cast(self):
272+
config = {
273+
"device_type": 'netmiko_ovs_linux',
274+
"ip": "10.1.2.3",
275+
"username": "u",
276+
"password": "p",
277+
"conn_timeout": "20.0",
278+
"global_delay_factor": "2.5",
279+
"port": "2222",
280+
}
281+
device = devices.device_manager(config)
282+
283+
self.assertIsInstance(device.config["conn_timeout"], float)
284+
self.assertEqual(device.config["conn_timeout"], 20.0)
285+
286+
self.assertIsInstance(device.config["global_delay_factor"], float)
287+
self.assertEqual(device.config["global_delay_factor"], 2.5)
288+
289+
self.assertIsInstance(device.config["port"], int)
290+
self.assertEqual(device.config["port"], 2222)

0 commit comments

Comments
 (0)