20
20
from django .conf import settings
21
21
from napalm import get_network_driver
22
22
from napalm .base .exceptions import ConnectionException , CommandErrorException
23
+ from napalm .base .netmiko_helpers import netmiko_args
23
24
from netaddr .core import AddrFormatError
24
25
from netmiko .ssh_autodetect import SSHDetect
25
26
from netmiko .ssh_exception import NetMikoAuthenticationException
@@ -64,7 +65,15 @@ class NetdevKeeper:
64
65
"""Used to maintain information about the network device during the onboarding process."""
65
66
66
67
def __init__ ( # pylint: disable=R0913
67
- self , hostname , port = None , timeout = None , username = None , password = None , secret = None , napalm_driver = None
68
+ self ,
69
+ hostname ,
70
+ port = None ,
71
+ timeout = None ,
72
+ username = None ,
73
+ password = None ,
74
+ secret = None ,
75
+ napalm_driver = None ,
76
+ optional_args = None ,
68
77
):
69
78
"""Initialize the network device keeper instance and ensure the required configuration parameters are provided.
70
79
@@ -85,10 +94,11 @@ def __init__( # pylint: disable=R0913
85
94
self .hostname = hostname
86
95
self .port = port
87
96
self .timeout = timeout
88
- self .username = username or settings . NAPALM_USERNAME
89
- self .password = password or settings . NAPALM_PASSWORD
90
- self .secret = secret or settings . NAPALM_ARGS . get ( "secret" , None )
97
+ self .username = username
98
+ self .password = password
99
+ self .secret = secret
91
100
self .napalm_driver = napalm_driver
101
+ self .optional_args = optional_args
92
102
93
103
self .facts = None
94
104
self .ip_ifs = None
@@ -162,14 +172,25 @@ def guess_netmiko_device_type(self):
162
172
"""Guess the device type of host, based on Netmiko."""
163
173
guessed_device_type = None
164
174
175
+ netmiko_optional_args = netmiko_args (self .optional_args )
176
+
165
177
remote_device = {
166
178
"device_type" : "autodetect" ,
167
179
"host" : self .hostname ,
168
180
"username" : self .username ,
169
181
"password" : self .password ,
170
- "secret" : self . secret ,
182
+ ** netmiko_optional_args ,
171
183
}
172
184
185
+ if self .secret :
186
+ remote_device ["secret" ] = self .secret
187
+
188
+ if self .port :
189
+ remote_device ["port" ] = self .port
190
+
191
+ if self .timeout :
192
+ remote_device ["timeout" ] = self .timeout
193
+
173
194
try :
174
195
logger .info ("INFO guessing device type: %s" , self .hostname )
175
196
guesser = SSHDetect (** remote_device )
@@ -246,8 +267,13 @@ def get_onboarding_facts(self):
246
267
self .check_napalm_driver_name ()
247
268
248
269
driver = get_network_driver (self .napalm_driver )
249
- optional_args = settings .NAPALM_ARGS .copy ()
250
- optional_args ["secret" ] = self .secret
270
+
271
+ optional_args = self .optional_args
272
+ if self .port :
273
+ optional_args ["port" ] = self .port
274
+
275
+ if self .secret :
276
+ optional_args ["secret" ] = self .secret
251
277
252
278
napalm_device = driver (
253
279
hostname = self .hostname ,
0 commit comments